Matlab FFT - 结果未被理解

时间:2015-04-05 22:41:22

标签: matlab fft ifft

我尝试理解我使用Matlab FFT得到的结果,尤其是函数fftshift

我首先计算一个简单信号的FFT(y = cos(2 * pi * f_signal * t))和逆变换以试图找到原始信号。

在执行FFT之前,我通过在起始信号上增加100个点来比较有和没有“零填充”的结果。

这是代码:

% Frequency input signal and time vector
f_signal=10;
nb_points = 100;
f_sampling=nb_points*f_signal;
step_time=1/f_sampling;
t=linspace(0,1/f_signal,nb_points);


%% Original signal with 100 points
y=cos(2*pi*f_signal*t);

%% Adding 100 more points for y
n_zero_padding=100;
y_f=padarray(y,[0 n_zero_padding],'post');

% Plot Input Signal
figure(1);
plot(y);
title('Input Signal');

% Perform Forward FFT
z=real(fft(y_f));

% Center FFT
z_centered=fftshift(z);
figure(2);
plot(z_centered);
title('FFT centrered with zero padding');

% Without centering
figure(3);
plot(z);
title('FFT with zero padding');

% Perform Inverse FFT
z_inv=ifft(z);  
figure(4);
plot(z_inv);
title('Inverse FFT with zero padding');

% Inverse FFT with centered spectrum
z_inv_centered=ifft(z_centered);  
figure(5);
plot(z_inv_centered);
title('Inverse FFT centered with zero padding');

我不理解图5中的结果(带有fftshift的移位光谱的逆变换)

这是获得的第一个光谱(未移位)(图(3)):

enter image description here

这是第一个带有fftshift的移位光谱(图(2)):

enter image description here

和上面的移位光谱的反FT(图(5)):

enter image description here

我不明白后一个数字。如果我采用这个理论,用fftshift移动频谱的事实导致获得两个以f_sampling / 2为中心的Dirac,更准确地说是f_sampling / 2-f_signal和f_sampling / 2 + f_signal。

所以我得到了这两个Dirac的总和,并且我对此总和进行逆FFT:所以我应该得到反向FFT 2余弦频率非常接近:看起来我得到图(5)两个乘积余弦信号,但我不知道我的误解在哪里......

如果有人能解释这个结果?

提前谢谢

1 个答案:

答案 0 :(得分:0)

由于真实信号的频谱关于原点是对称的,我们更喜欢看到这样的频谱,即中心的零频率。然而,当通过FFT计算频谱时,中心的是高频,因此,fftshift()用于将零频谱移位到中心。 由于fftshift()用于视觉事物,因此您无法直接在移位的光谱上执行ifft()。另一方面,移位的频谱是原始信号的调制版本,您可以在图5中获得调制信号。