问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/qq_38967414/article/details/133071302

在信号处理领域,FFT(快速傅里叶变换)是分析信号频谱特性的常用工具。本文将通过具体示例,介绍FFT频谱分辨率的概念及其影响因素,帮助读者理解如何通过调整采样参数来优化频谱分析效果。

频谱分辨率

频谱分辨率是衡量FFT分析中能够区分的最小频率间隔的能力。其计算公式为:

$$
\text{频谱分辨率} = \frac{f_s}{N}
$$

其中:

  • (f_s) 为采样频率
  • (N) 为采样点数

为了更好地理解频谱分辨率的影响,我们通过两个示例进行说明。假设我们有三个正弦信号,频率分别为 (f_1 = 1\text{Hz}),(f_2 = 10\text{Hz}),(f_3 = 40\text{Hz})。

示例1:采样时长1秒

当采样频率 (f_s = 1000\text{Hz}),采样时长为1秒时,采样点数为1000,采样间隔为0.001秒。代入公式计算得到频谱分辨率为1Hz。

下面是相应的Matlab代码实现:

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的信号都能够被清晰分辨。

示例2:采样时长0.05秒

当采样时长缩短为0.05秒时,采样点数变为50。此时,频谱分辨率为20Hz。

下面是相应的Matlab代码实现:

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的信号都无法被分辨,且出现了频谱泄露现象。这是因为对非周期信号进行截取时,总会引起频谱泄露。只有当截取的信号段为原信号周期的整数倍时,才不会产生频谱泄露。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号