Matlab 手动计算逆fft

Matlab 手动计算逆fft,matlab,fft,Matlab,Fft,我试图手动计算FFT-输出的逆FFT。我使用下面的脚本,它首先使用fft计算数据集的fft。然后我尝试手动查找逆FFT,但它与我从ifft得到的结果不相似 你能发现我的错误吗?我只是使用这里给出的FFT的标准逆公式 请更改您的for循环,如下所示 for m=1:length(X) for k=1:length(data) temp(k) = X(k)*exp(i*(m-1)*ws*(k-1)); end X_real(m)=(1/N)*sum(temp)

我试图手动计算
FFT
-输出的逆FFT。我使用下面的脚本,它首先使用
fft
计算数据集的fft。然后我尝试手动查找逆FFT,但它与我从
ifft
得到的结果不相似

你能发现我的错误吗?我只是使用这里给出的FFT的标准逆公式


请更改您的for循环,如下所示

for m=1:length(X)
    for k=1:length(data)
        temp(k) = X(k)*exp(i*(m-1)*ws*(k-1));
    end
    X_real(m)=(1/N)*sum(temp);
end

figure(3)
plot(1:length(data), real(X_real))
你可以在matlab中找到ifft的方程

你错过了两件事


一件事是规范化,另一件事是求和。

首先,对于每一个
m
,你都缺少X_real(k)的
sum,其次,我不确定你的
exp
中的部分是否真的正确。每@GameOfThrows变化
X_real(m)=X(k)*exp I*k*ws*(m-1))
X_实(m)=X_实(m)+X(k)*exp(i*k*ws*(m-1))(您可能需要提前将
X_real
初始化为一个零数组)。第三个是
k-1
(不仅仅是
k
-您知道他们说的是什么,只差一个错误)。@AhmedFasih我将
k
1..length(data)
求和,但是
FFT
我使用
w/(2*pi)绘制
-0.5fs
0.5fs
运行。这两个频率之间的对应关系是什么?假设我只想包含与
@BillyJean对应的逆分量,我将频率向量设置为:
N=length(X_real);f=(0:N-1)/N*fs
具有每秒周期的单位(即,Hz,假设您的输入信号以每秒
fs
采样数进行采样)。然后
plot(f,abs(X_real))
将是正确的,您可以执行
xlim(0,0.25*fs)
来设置限制。@BillyJean注意:此
f
用于非移位FFT:
f
从0(包括)运行到
fs
(排除),0对应于DC(恒定非变化正弦曲线)。这有时令人困惑,因此MATLAB包含&
ifftshift
。如果您执行
X_real=fft移位(fft(数据));f=((0:N-1)/N-0.5)*fs;图(f,x-真),你会看到DC(0赫兹)在中间,这就是教科书通常显示光谱的方式。另一个
f
-fs/2
(包含)运行到
fs/2
(独占)。希望这会有帮助,不会让你进一步困惑。@BillyJean我不明白你想要什么。实际上,fft和ifft只是快速进行dft的数学算法。这些没有任何物理意义。但是,如果知道信号的采样率,可以在fft或ifft之后计算分辨率。在代码中,
k
只是序列的索引。
for m=1:length(X)
    for k=1:length(data)
        temp(k) = X(k)*exp(i*(m-1)*ws*(k-1));
    end
    X_real(m)=(1/N)*sum(temp);
end

figure(3)
plot(1:length(data), real(X_real))