Matlab信号处理:FFT频谱分辨率

频谱分辨率:

\frac{1}{T}= \frac{1}{T_{s}\cdot N}      其中T_{s}为采样间隔,N为采样点数。

FFT分辨率:

f_{0} = \frac{f_{s}}{N_{FFT}}    其中f_{s}为采样频率,N_{FFT}为FFT点数。


有两正弦函数,频率分别为 f1 = 1Hz,f2 = 10Hz,f3 = 40Hz;

示例1:

采样频率 fs = 1000Hz,采样时长 1s,则采样点数 1000,采样间隔 0.001s.

代入公式,频谱分辨率为 1Hz.

代码如下:

fs = 1000;
t = 0:1/fs:1-1/fs; % 采样时长1s,采样间隔0.001s,采样点数1000

f1 = 1; f2 = 10; f3 = 40; 
y = sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t);

y_fft = fft(y);

len = length(y_fft);
P1 = abs(y_fft/len);
P2 = P1(1:len/2+1);
P2(2:end-1) = 2*P2(2:end-1);
f = fs*(0:len/2)/len;

stem(f,P2);

FFT频域图:

1Hz、10Hz 与 40Hz能够被分辨。

Matlab信号处理:FFT频谱分辨率_第1张图片


示例2:

将采样时长变为 0.05s,则采样点数变为 50,

代入公式,频谱分辨率为 20Hz.

代码如下:

fs = 1000;
t = 0:1/fs:0.05-1/fs; % 采样时长0.05s,采样间隔0.001s,采样点数50

f1 = 1; f2 = 10; f3 = 40; 
y = sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t);

y_fft = fft(y);

len = length(y_fft);
P1 = abs(y_fft/len);
P2 = P1(1:len/2+1);
P2(2:end-1) = 2*P2(2:end-1);
f = fs*(0:len/2)/len;

stem(f,P2);

FFT频域图:

此时 1Hz、10Hz 都不能被分辨,且出现频谱泄露。

Matlab信号处理:FFT频谱分辨率_第2张图片

你可能感兴趣的:(Matlab信号处理,matlab,信号处理,快速傅里叶变换,傅里叶分析)