前言
前面学习了傅里叶变换,以及离散傅里叶变换和快速傅里叶变换,可以将一个采集的声波时域图谱变换到频域图谱,从而更好的分析语音的特征、性质,为后续工作做好准备。然后,将声波信号由时域图谱变换到频域图谱,使得信号丢失了时间信息,而对于非平稳信号,时间是一个很重要的特性,为了解决这个问题,可以将一段语音信息进行分帧处理,对每一帧做快速傅里叶变换,这叫做短时傅里叶变换(STFT)。另外,人耳能听到的频率范围是20-20000HZ,但是人耳对HZ单位不是线性敏感,而是对低HZ敏感,对高HZ不敏感,将HZ频率转化为梅尔频率,则人耳对频率的感知度就变为线性。因此,本文将分别介绍短时傅里叶变换和梅尔频谱。
短时傅里叶变换(Short Time Fourier Transform,STFT)
短时傅里叶变换是最常用的一种时频分析方法,它通过时间窗内的一段信号来表示某一时刻的信号特征。在短时傅里叶变换过程中:
- 窗的长度决定频谱图的时间分辨率和频率分辨率。
- 窗长越长,截取的信号越长。
- 信号越长,傅里叶变换后的频率分辨率越高,时间分辨率越差。
- 相反,窗长越短,截取的信号就越短,频率分辨率越差,时间分辨率越好。
- 简单来说,短时傅里叶变换就是先把一个函数和窗函数进行相乘,然后再进行一维的傅里叶变换。并通过窗函数的滑动得到一系列的傅里叶变换结果,将这些结果竖着排开得到一个二维的表象。
傅里叶变换后,横轴为频率,纵轴为幅值
短时傅里叶变换后,横轴为时间,纵轴为频率
短时傅里叶变换公式为:
X
(
t
,
f
)
=
∫
−
∞
∞
w
(
t
−
τ
)
x
(
τ
)
e
−
j
2
π
f
τ
d
τ
X(t, f)=\int_{-\infty}^{\infty} w(t-\tau) x(\tau) e^{-j 2 \pi f \tau} d \tau
X(t,f)=∫−∞∞w(t−τ)x(τ)e−j2πfτdτ
角频率表示法:
X
(
t
,
ω
)
=
∫
−
∞
∞
w
(
t
−
τ
)
x
(
τ
)
e
−
j
ω
τ
d
τ
X(t, \omega)=\int_{-\infty}^{\infty} w(t-\tau) x(\tau) e^{-j \omega \tau} d \tau
X(t,ω)=∫−∞∞w(t−τ)x(τ)e−jωτdτ
X
(
t
,
ω
)
X(t, \omega)
X(t,ω)是
w
(
t
,
ω
)
x
(
τ
)
w(t,\omega)x(\tau)
w(t,ω)x(τ)的傅里叶变换。
窗函数
为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。
矩形窗函数:
ω
(
n
)
=
R
M
(
n
)
=
{
1
,
0
⩽
n
⩽
M
−
1
0
,
其它
\omega(n)=R_{M}(n)=\left\{\begin{array}{r} 1,0 \leqslant n \leqslant M-1 \\ 0, \text { 其它 } \end{array}\right.
ω(n)=RM(n)={1,0⩽n⩽M−10, 其它
三角窗函数:
ω
(
n
)
=
0.5
[
1
−
cos
(
2
π
n
M
+
1
)
]
,
1
⩽
n
⩽
M
\omega(n)=0.5\left[1-\cos \left(\frac{2 \pi n}{M+1}\right)\right], 1 \leqslant n \leqslant M
ω(n)=0.5[1−cos(M+12πn)],1⩽n⩽M
hamming窗函数:
ω
(
n
)
=
[
0.54
−
0.46
cos
(
2
π
n
M
−
1
)
]
R
M
(
n
)
\omega(n)=\left[0.54-0.46 \cos \left(\frac{2 \pi n}{M-1}\right)\right] R_{M}(n)
ω(n)=[0.54−0.46cos(M−12πn)]RM(n)
窗函数的主要类型
- 幂窗,采用时间变量某种幂次的函数,如矩形、三角形、梯形或其它时间 t 的高次幂。
- 三角函数窗,应用三角函数,即正弦或余弦函数等组合成复合函数,例如 hanning、hamming 窗等。
- 指数窗,采用指数时间函数,例如高斯窗等。
频谱(Spectrogram)
Spectrogram 即短时傅里叶转换后结果的绝对值平方,两者的本质上是相同的,在文献上也经常出现 Spectrogram 这个名词。
S
P
x
(
t
,
f
)
=
∣
X
(
t
,
f
)
∣
2
=
∣
∫
−
∞
∞
w
(
t
−
τ
)
x
(
τ
)
e
−
j
2
π
f
τ
d
τ
∣
2
S P_{x}(t, f)=|X(t, f)|^{2}=\left|\int_{-\infty}^{\infty} w(t-\tau) x(\tau) e^{-j 2 \pi f \tau} d \tau\right|^{2}
SPx(t,f)=∣X(t,f)∣2=∣∣∣∣∫−∞∞w(t−τ)x(τ)e−j2πfτdτ∣∣∣∣2
梅尔频谱(Mel-spectrogram)
声谱图往往是很大的一张图,为了得到合适大小的声音特征,往往把它通过梅尔标度滤波器组(mel-scale filter banks),变换为梅尔频谱。
梅尔频谱变换公式:
mel
(
l
)
=
2595
∗
log
10
(
1
+
f
/
700
)
\operatorname{mel}(l)=2595 * \log _{10}(1+f / 700)
mel(l)=2595∗log10(1+f/700)
通过上面的公式变换,可以将不统一的频率转化为统一的频率,也就是统一的滤波器组,将频谱通过一组Mel滤波器就得到Mel频谱。
Mel频率倒谱系数(Mel-Frequency Cepstral Coefficients)
将频谱通过一组Mel滤波器就得到Mel频谱。公式表述就是: log X [ k ] = log ( M e l − S p e c t r u m ) \log{X_{[k]}} = \log (Mel-Spectrum) logX[k]=log(Mel−Spectrum)。这时候我们在 l o g X [ k ] log {X_{[k]}} logX[k]上进行倒谱分析:
- 取对数: l o g X [ k ] log {X_{[k]}} logX[k]= l o g H [ k ] log {H_{[k]}} logH[k] + l o g E [ k ] log {E_{[k]}} logE[k]。
- 进行逆变换:
x
[
k
]
=
h
[
k
]
+
e
[
k
]
x_{[k]} = h_{[k]} + e_{[k]}
x[k]=h[k]+e[k]。
在Mel频谱上面获得的倒谱系数 h [ k ] h_{[k]} h[k]就称为Mel频率倒谱系数,简称MFCC。
提取MFCC特征的过程:
- 先对语音进行预加重、分帧和加窗;(加强语音信号性能(信噪比,处理精度等)的一些预处理);
- 对每一个短时分析窗,通过FFT得到对应的频谱;(获得分布在时间轴上不同时间窗内的频谱);
- 将上面的频谱通过Mel滤波器组得到Mel频谱;(通过Mel频谱,将线形的自然频谱转换为体现人类听觉特性的Mel频谱);
- 在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征;(倒谱分析,获得MFCC作为语音特征)。
总结
本文主要介绍了短时傅里叶变换,梅尔频谱和梅尔频率倒谱。后续笔者将根据自己阅读的论文进行后续更新。