我试图理解我使用 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)):
这是使用 fftshift 的第一个移位频谱(图(2)):
和上面移位频谱的逆傅立叶变换(图(5)):
我不明白后一个数字。如果我采用这个理论,使用 fftshift 移动频谱的事实导致获得以 f_sampling / 2 为中心的两个狄拉克,更准确地说是在 f_sampling / 2-f_signal 和 f_sampling / 2 + f_signal 上。
所以我有这两个狄拉克的总和,我做这个总和的反 FFT:所以我应该得到频率非常接近的反 FFT 2 余弦:看起来我在图 (5) 上得到两个余弦信号的乘积,但是我看不出我的误解在哪里......
如果有人可以解释这个结果?
先感谢您