-1

我试图理解我使用 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) 上得到两个余弦信号的乘积,但是我看不出我的误解在哪里......

如果有人可以解释这个结果?

先感谢您

4

1 回答 1

0

因为真实信号的频谱是关于原点对称的,所以我们更愿意看到这样的频谱,即中心的零频率。但是,在通过 FFT 计算频谱时,中心是高频,因此 fftshift() 用于将零频谱移至中心。由于 fftshift() 用于视觉问题,因此您不能直接在移位频谱上执行 ifft()。另一方面,移位后的频谱是原始信号的调制版本,您可以得到图 5 中的调制信号。

于 2015-04-18T13:26:16.643 回答