手动计算逆fft

时间:2016-08-10 07:53:03

标签: matlab fft

我正在尝试手动计算fft输出的逆FFT。我使用以下脚本,它首先使用fft来计算数据集的FFT。然后我尝试手动找到逆FFT,但它并不像我从ifft获得的结果。

你能发现我的错误吗?我只是使用这里提出的FFT的标准逆公式https://en.wikipedia.org/wiki/Fast_Fourier_transform#Definition_and_speed

data = [
   -0.0005
   -0.0004
   -0.0003
   -0.0002
   -0.0001
   -0.0000
    0.0001
    0.0001
    0.0001
    0.0002
    0.0002
    0.0002
    0.0002
    0.0002
    0.0002
    0.0002
    0.0002
    0.0002
    0.0003
    0.0004
    0.0005
    0.0006
    0.0007
    0.0009
    0.0010
    0.0011
    0.0011
    0.0012
    0.0011
    0.0011
    0.0011
    0.0010
    0.0011];


delta = 0.0125;
fs    = 1/delta;
x     = (0:1:length(data)-1)/fs;

X=fft(data);

%find fft
N=length(data);
ws = 2*pi/N;
wnorm = -pi:ws:pi;
wnorm = wnorm(1:length(x));
w = wnorm*fs;
figure(2)
plot(w/(2*pi),abs(fftshift(X)))


%find inverse fft manually
for m=1:length(X)
    for k=1:length(data)
        X_real(m) = X(k)*exp(i*k*ws*(m-1));
    end
end

figure(3)
plot(1:length(data), abs(X_real), 1:length(data), ifft(X))

1 个答案:

答案 0 :(得分:2)

请改变你的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方程,here

你错过了两件事。

有一件事是正常化,另一件是总结。