我的fft
和ifft
的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)
答案 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' )
这就是我最初看到的一切。 HTH!
答案 1 :(得分:1)
如果你取fft的绝对值,就会破坏重建原始信号所需的相位信息,即你计算的那一刻
X = abs(fft(x,N));
你不能通过ifft回去,因为现在你只有那么大。 此外,只有在NFFT> = length(x)时使用相同数量的FFT分档时,逆变换才有效。
y=ifft(fft(x));
应与x完全相同。