项目说明
介绍 matlab 中 spectrogram 函数的用法,其功能为实现短时傅里叶变换并得到信号的频谱图。
语法:
[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)
短时傅里叶变换
短时傅里叶变换的基本原理如下:
使用一个窗函数在时域信号上(有重叠地)不断平移,如下图所示:
其中,window 指窗的长度,noverlap 指窗的上一个位置和下一个位置之间重叠的长度(实际上
n
o
v
e
r
l
a
p
>
w
i
n
d
o
w
/
2
noverlap>window/2
noverlap>window/2,此处图例仅为解释说明)。
每平移到一个新位置,窗函数内的信号会被计算一次频谱,假设频谱长度为
L
L
L,则每个时间点上对应的长度为
L
L
L,时间点的个数为
k
=
f
i
x
(
(
N
x
−
n
o
v
e
r
l
a
p
)
/
(
w
i
n
d
o
w
−
n
o
v
e
r
l
a
p
)
)
k = fix((Nx-noverlap)/(window-noverlap))
k=fix((Nx−noverlap)/(window−noverlap))
其中
N
x
Nx
Nx是信号长度。
频谱中包含的频率点数 L L L计算如下:
对于实信号x,如果nfft为偶数,则 L L L为(nfft/2+1),如果nfft为奇数,则 L L L为(nfft+1)/2。
关于nfft的含义,举例如下:
若采样频率为10000,则时频图上频率纵坐标显示到5001,共5001个点。设置nfft为30000,则相当于对频率点数的扩充,即linspace(0, 5001, 15001)。此时时频图上频率纵坐标仍然显示到5001,但却有15001个频率点数。