当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 160860提问 提问时间:2023-09-21 14:56:10阅读次数: 60

最佳答案 问答题库608位专家为你答疑解惑

频谱分辨率:

\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,采样点数1000f1 = 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能够被分辨。


示例2:

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

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

代码如下:

fs = 1000;
t = 0:1/fs:0.05-1/fs; % 采样时长0.05s,采样间隔0.001s,采样点数50f1 = 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 都不能被分辨,且出现频谱泄露。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Matlab信号处理:FFT频谱分辨率":http://eshow365.cn/6-10749-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!