fft/ifft:采样频率和信号长度

Tob*_*old 5 matlab signal-processing fft ifft

这部分来自Matlab fft文档:

Fs = 30;                    % Sampling frequency
T = 1/Fs;                   % Sample time
L = 130;                    % Length of signal
t = (0:L-1)*T;              % Time vector

x = sin(2*pi*1*t);          % 1 Hz sinus

plot(real(ifft(abs(fft(x))))); % fft then ifft

% Fs = 30, L = 60 / 90 / 120 ... : ok
% Fs = 20, L = 60 / 80 / 100 ... : ok
% Fs = 30, L = 50 / 70 / 80 ... : not ok
Run Code Online (Sandbox Code Playgroud)

在我看来,只要信号的长度是采样频率的倍数,正弦曲线就会被正确地重建(除了一些移位),例如Fs = 30, L = 60:

在此输入图像描述

但是,如果例如Fs = 30, L = 80(不是多个),结果看起来很奇怪:

在此输入图像描述

这种行为是否正确?为什么会发生这种情况,我该如何避免这种情况?只是扔掉信号的某些部分,使长度"适合"采样频率?

Ran*_*Ran 7

当你在ifft中使用abs(fft())时,你只使用信号的幅度并丢弃所需的相位信息.

使用整个信号(删除abs):

plot(real(ifft(fft(x)))); % fft then ifft
Run Code Online (Sandbox Code Playgroud)

  • 检查fft(或dft)定义.fft(X)的结果中的频率是(Fs/2)*(0 ...(N/2)+1)/(N/2 + 1).要获得1Hz的窦,你需要找到k,使得(Fs/2)*k /(N/2 + 1)= 1.当k是整数(圆数)时,不需要相位(延迟)来表示1Hz,当N/F(或你的情况下是L/F)是一个整数时会发生这种情况.如果不是,则FFT输出中没有1Hz,并且算法在接近1Hz的值k中"表示"1Hz加上将其延迟到1Hz的相位值.我希望我的解释是清楚的.:) (3认同)