MATLAB中的逆快速傅里叶变换

时间:2013-02-22 19:52:43

标签: matlab fft

我的fftifft的MATLAB代码存在反傅立叶信号y与输入信号x不匹配的问题。有没有解决方法可以解决这个问题?

N = 1000;
t0 = 1e-13;
tau = 2*1e-14;
n = [0:t0/40:2*1e-13-t0/40];
f0 = 3*1e8/(150*1e-9);

x = cos(2*pi*f0*n);
x = x.*exp((-(n-t0).^2)./(tau^2));
X = abs(fft(x,N));
F = [-N/2 : N/2 - 1]/N;
X = fftshift(X);
y=ifft(X,80);

figure(3)
plot(n,y)

2 个答案:

答案 0 :(得分:2)

我在这里看到了很多问题:

N = 1000;
t0 = 1e-13;
tau = 2*1e-14;
n = [0:t0/40:2*1e-13-t0/40];
f0 = 3*1e8/(150*1e-9);

x = cos(2*pi*f0*n);
x = x.*exp((-(n-t0).^2)./(tau^2));
%  X = abs(fft(x,N));  <-- Not seen this technique before, and why N=1000?
% try something more like:
X = fft(x);

F = [-N/2 : N/2 - 1]/N;
% this is fine to shift and plot the function
Xshifted = fftshift(X);
plot( abs( Xshifted ) )
% now you're taking the inverse of the shifted function, not what you want
% y=ifft(X,80);  also not sure about the 80
y = ifft(X);

figure(3)
plot(n,y)
figure(4)
plot( n, x ); hold on; plot( n, y, 'o' )

Script Output

这就是我最初看到的一切。 HTH!

答案 1 :(得分:1)

如果你取fft的绝对值,就会破坏重建原始信号所需的相位信息,即你​​计算的那一刻

X = abs(fft(x,N));

你不能通过ifft回去,因为现在你只有那么大。 此外,只有在NFFT> = length(x)时使用相同数量的FFT分档时,逆变换才有效。

y=ifft(fft(x)); 

应与x完全相同。