信号傅里叶变换后频谱刻度设置问题-附Matlab代码
创始人
2024-03-25 10:07:38
0

一、概述

时域信号经FFT变换后得到了频谱,在绘制频谱图时还必须设置正确的频率刻度,这样才能从图中得到正确的结果。

二、实例分析

有一余弦信号,信号频率为30Hz,采样频率128Hz,信号长128,原始信号如下图所示:
Matlab代码如下:

fs=128;                         % 采样频率
N=128;                          % 信号长度
t=(0:N-1)/fs;                   % 时间序列
y=cos(2*pi*30*t);               % 余弦信号
figure,plot(y,'r'); xlabel('样点'); ylabel('幅值');

在这里插入图片描述

图1 原始信号

如果不对频谱刻度进行处理,而直接作图显示频谱,那么得到的频谱值会有所偏差,如下图所示:可知信号频谱为30Hz,而实际求出的频谱为31Hz,发生这种错误的原因是频率刻度的设置错误。

y=fft(y,N);                     % FFT
figure,stem(abs(y),'r');title('频谱')

在这里插入图片描述

图2 频谱图

三、频谱刻度设置方法

信号长为N,采样频率为fs,在DFT(FFT)以后信号的频率在-fs/2和fs/2之间,谱线之间的频率间隔为:

Δf=fsN=1NTs\Delta f=\frac{{{f}_{s}}}{N}=\frac{1}{N{{T}_{s}}}Δf=Nfs​​=NTs​1​

式中: Ts{{T}_{s}}Ts​是采样周期。频率刻度从0开始,最大频率为 fs2\frac{{{f}_{s}}}{2}2fs​​。因此,频谱刻度简单设置如下式所示:

freq=(0:N−1)×fsNfreq=(0:N-1)\times \frac{{{f}_{s}}}{N}freq=(0:N−1)×Nfs​​

给出的频率刻度为0,△f,···, fs2\frac{{{f}_{s}}}{2}2fs​​,fs-△f,但实际不存在大于 fs2\frac{{{f}_{s}}}{2}2fs​​的频率分量,大于 fs2\frac{{{f}_{s}}}{2}2fs​​的频率分量实际是负频率的分量。如图3所示。

为了给出从负频率到正频率的全部分量,频率刻度应为

freq=(0:N−1)×fsN−fs2freq=(0:N-1)\times \frac{{{f}_{s}}}{N}-\frac{{{f}_{s}}}{2}freq=(0:N−1)×Nfs​​−2fs​​

这样给出的频率刻度是: −fs2−fs2+Δf,⋅⋅⋅,0,Δf,⋅⋅⋅,fs2−Δf-\frac{{{f}_{s}}}{2}-\frac{{{f}_{s}}}{2}+\Delta f,\centerdot \centerdot \centerdot ,0,\Delta f,\centerdot \centerdot \centerdot ,\frac{{{f}_{s}}}{2}-\Delta f−2fs​​−2fs​​+Δf,⋅⋅⋅,0,Δf,⋅⋅⋅,2fs​​−Δf

在这里插入图片描述

图3 正负频率对比

3.1 正负频谱刻度设置

按照上述理论的设置,对应的matlab代码如下式所示:

%% 频谱显示1(正负频谱都显示)
freq0=(0:N-1)*fs/N;              % 频率间隔
figure,plot(freq0,abs(y),'r')    % 频谱

在这里插入图片描述

图4 频谱刻度设置(正负频率同时显示)

3.2 正频谱刻度设置

也可以通过上式只显示正频率:对应的Matlab代码如下:

%% 频谱显示2(正频谱)
freq=(0:N/2)*fs/N;              % 设置正频率刻度 
figure,plot(freq,abs(y(1:N/2+1)),'r');title('只有正频率刻度')
figure,stem(freq,abs(y(1:N/2+1)),'r');title(' 只有正频率刻度')

在这里插入图片描述

图5 频谱刻度设置(正频率)

3.3 通过linspace函数设置频率刻度(正、负频率都显示)

也可以通过linspace函数设置频率刻度,对应Matlab代码如下:

freq3=linspace(0,fs,N+1)-fs/2;     % linspace 函数设置正负频率
freq3=freq3(1:N);
figure,plot(freq3,abs(y),'r')    % 频谱

在这里插入图片描述

图6 频谱刻度设置(正负频率同时显示)

3.4 通过linspace函数设置频率刻度(正频率)

或者通过linspace函数设置频率刻度显示正频率

%% 通过linspace函数设置频率刻度(正频率)
freq4=linspace(0,fs/2,N/2+1);     % linspace 函数设置正负频率
figure,stem(freq4,abs(y(1:N/2+1)),'r');title('正频率刻度')

在这里插入图片描述

图7 频谱刻度设置(正频率)

四、Matlab程序获取与验证

代码也可从以下链接处获取:

频谱图中频率刻度设置

可开展针对性验证实验,请私信博主。

相关内容

热门资讯

福州4A景区“瓷天下”停业后续... 2024年6月,红星新闻曾报道福州市闽清县4A级景区“瓷天下”关门停业一事。(此前报道:)彼时,景区...
2026年我国将继续实施更加积... 12月27日至28日,全国财政工作会议在北京召开。2026年是我国连续第二年实施更加积极的财政政策。...
中国财长介绍“更加积极的财政政... 中新社北京12月28日电 (记者 赵建华)2026年中国继续实施更加积极的财政政策,保持必要的财政赤...
泽连斯基称基辅存在“红线”并拒... 【弗拉基米尔·泽连斯基表示,基辅在冲突解决方面仍有“红线”,并补充道,在任何情况下,乌方都不打算在法...
北京专业离婚律师服务分析(20... 随着社会经济结构的变化与个人权利意识的增强,婚姻家事法律服务需求日益呈现出专业化、精细化的趋势。在北...
海南自贸港封关超十日 多项政策... 本月18日,海南自由贸易港正式启动全岛封关运作,到今天(28日)已超过10天,多项从封关起实施的“升...
涉嫌恶意串通,伪造借条提起诉讼... 为逃避债务、规避法院执行 田某华串通亲友、伪造借条 向海南省海口市美兰区人民法院 提起诉讼 美兰法院...
原创 在... 在古代,被皇帝赐死其实是一种特殊的待遇,而不仅仅是死亡本身值得关注,更应看赐字所体现的意义。 首...
原创 2... 近日,拥有287万粉丝的抖音网红主播王某强(账号名:某某超市)因被曝多次犯下刑事罪行引发舆论哗然,相...
全球货币政策为何出现明显分化? 2025年岁末,全球金融市场出现“超级央行周”。 从12月10日开始,美国、日本、英国、欧盟、俄罗斯...