0

我的 MATLAB 代码fftifft以下代码存在逆傅立叶信号与输入信号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)
4

2 回答 2

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

脚本输出

这就是我最初所看到的。!

于 2013-02-22T20:23:35.607 回答
1

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

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

你不能通过 ifft 回去,因为现在你只有量级。此外,仅当您使用相同数量的 FFT bin 且 NFFT>=length(x) 时,逆变换才有效。

y=ifft(fft(x)); 

应该与 x 完全相同。

于 2015-11-17T20:44:50.147 回答