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))