MATLAB 2020信号处理从入门到精通
上QQ阅读APP看书,第一时间看更新

4.2 短时傅里叶变换

短时傅里叶变换(Short-Time Fourier Transform,STFT)常用于缓慢时变信号的频谱分析,可以观察沿时间变化的频谱信号。弥补了频谱分析中不能观察时间的缺点,也弥补了时域分析不能获取频率的缺点。

经STFT处理后的信号具有时域和频域的局部化特性,可以借助其分析信号的视频特性。设计思路如下。

1)窗函数选择hamming窗,最大DFT点数不大于256。

2)用户输入(传值)signal、window、overlap、N、fs等。根据窗的长度截取响应长度的信号序列,然后二者对应的点逐点相乘,得到的数即为加窗截取后的值。之所以需要乘以窗函数,是因为如果直接截取信号,会使得截取的信号出现突变(波形上表现为直角),经过变换后会出现无限谐波影响截取后FFT的效果。

3)根据窗的大小,将signal拆分,并与窗函数相乘。

4)对每个signal片段进行N点FFT,并求出能量谱密度。

5)调用绘图方法,把能量谱密度(功率谱密度)用不同的颜色表示出来绘图。

4.2.1 短时傅里叶变换与谱分析

STFT是和傅里叶变换相关的一种数学变换,用以确定时变信号其局部区域正弦波的频率与相位。利用短时傅里叶变换(STFT)分析非平稳信号的频率内容随时间的变化规律。

STFT基本原理可以理解为对一段长信号,截取每一段时间的短信号做FFT,将得到的频谱图时间沿时间轴排列,即可得到时频的云图。

STFT是一种基于窗函数的变换,一般来说,短窗能够提供较好的时域解析度,长窗能够提供较好的频域解析度。STFT就是将原来的傅里叶变换在时域截短为多段,分别进行傅里叶变换,每一段记为时刻ti,对应FFT求出频域特性,即可粗略估计出时刻ti时的频域特性(也就是同时知道了时域和频域的对应关系)。用于信号截短的工具叫作窗函数(宽度相当于时间长度),窗越小,时域特性越明显,但是此时由于点数过少导致FFT降低了精确度,导致频域特性不明显。

离散时间傅里叶变换(Discrete Time Fourier Transform,DTFT)的数学公式如下所示。

978-7-111-67965-3-Chapter04-62.jpg

式中,xn)为在采样数n处的信号幅度。ω的定义如下。

978-7-111-67965-3-Chapter04-63.jpg

STFT被计算为一系列加窗数据帧的快速傅里叶变换,其中窗口随时间“滑动”(slide)或“跳跃”(hop)。

在MATLAB中,stft命令用来对信号进行短时傅里叶变换,它的使用格式见表4-14。

表4-14 stft命令的使用格式

978-7-111-67965-3-Chapter04-64.jpg

(续)

978-7-111-67965-3-Chapter04-65.jpg

例4-10:创建信号STFT。

978-7-111-67965-3-Chapter04-66.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-67.jpg

运行结果如图4-10所示。

978-7-111-67965-3-Chapter04-68.jpg

图4-10 信号STFT运行显示结果

在MATLAB中,istft命令用来对信号进行短时傅里叶逆变换,它的使用格式见表4-15。

表4-15 istft命令的使用格式

978-7-111-67965-3-Chapter04-69.jpg

例4-11:创建信号STFT和ISTFT变换。

978-7-111-67965-3-Chapter04-70.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-71.jpg

运行结果如图4-11所示。

978-7-111-67965-3-Chapter04-72.jpg

图4-11 信号STFT和ISTFT变换的显示结果

4.2.2 短时傅里叶变换谱图

信号的STFT是最早提出的一种时频二维表示方法,简单易实现,许多联合时频分析的应用都是由它开始的。在各种实际应用中也常采用它的能谱分布表示方法,也就是基于短时傅里叶变换的谱图表示。

谱图具有非线性性质,对于多分量信号将产生类似于Wigner分布中的交叉项干扰,从而引入了模糊,影响信号分析结果。

1.频谱图

在MATLAB中,spectrogram命令用来进行短时傅里叶变换,得到信号的频谱图,它的使用格式见表4-16。

表4-16 spectrogram命令的使用格式

978-7-111-67965-3-Chapter04-73.jpg

例4-12:绘制信号的短时傅里叶变换谱图。

978-7-111-67965-3-Chapter04-74.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-75.jpg

运行结果如图4-12所示。

978-7-111-67965-3-Chapter04-76.jpg

图4-12 短时傅里叶变换谱图显示结果

例4-13:对比窗函数与长度对信号的短时傅里叶变换谱图。

978-7-111-67965-3-Chapter04-77.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-78.jpg

978-7-111-67965-3-Chapter04-79.jpg

运行结果如图4-13所示。

978-7-111-67965-3-Chapter04-80.jpg

图4-13 两种信号的短时傅里叶变换谱图对比

对于短时傅里叶变换,最重要的还是窗口长度的选取。当频域刻度和平移步长足够密时,增加的只是生成图像的大小,但是物理层面的分辨率却没有改变。改变物理层面分辨率的是窗口长度。

窗口长度较大(如2048),频率能够清晰地显示出来,但是时间上有些模糊。窗口长度比较小(如256),时间上的分界线能够清晰显示,但是频率的值却不能清晰读出。

例4-14:对比重叠样本数对的短时傅里叶变换谱图的影响。

978-7-111-67965-3-Chapter04-81.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-82.jpg

运行结果如图4-14所示。

978-7-111-67965-3-Chapter04-83.jpg

图4-1 重叠样本数对谱图的影响

例4-15:显示短时傅里叶变换单边与双边谱图。

978-7-111-67965-3-Chapter04-84.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-85.jpg

运行结果如图4-15所示。

978-7-111-67965-3-Chapter04-86.jpg

图4-15 信号傅里叶变换频谱图

2.交叉谱图

在MATLAB中,xspectrogram命令用来进行短时傅里叶变换,得到信号的交叉谱图,它的使用格式见表4-17。

表4-17 xspectrogram命令的使用格式

978-7-111-67965-3-Chapter04-87.jpg

例4-16:创建对称凸二次Chirp波形。

978-7-111-67965-3-Chapter04-88.jpg

解:MATLAB程序如下。

978-7-111-67965-3-Chapter04-89.jpg

978-7-111-67965-3-Chapter04-90.jpg

运行结果如图4-16所示。

978-7-111-67965-3-Chapter04-91.jpg

图4-16 对称凸二次chirp波形显示结果