MFCC特征
MFCC(Mel倒谱系数)符合人类听觉原理,能够有效的提取语音声学特征,适合作为语音特征输入。本文学习了以下2篇博客——博客1 博客2,并做了自己的总结
MFCC的提取流程如下图所示:
预加重
令输入语音信号
s
i
g
n
a
l
=
[
s
1
,
s
2
,
.
.
.
,
s
T
]
signal=[s_1,s_2,...,s_T]
signal=[s1,s2,...,sT],其中T为信号采样频率。预加重可以去除口唇辐射的影响,增加语音的高频分辨率,其实现方式如下:
s
i
g
n
a
l
i
=
s
i
g
n
a
l
i
+
1
−
α
s
i
g
n
a
l
i
signal_i=signal_{i+1}-\alpha signal_i
signali=signali+1−αsignali
其中
α
\alpha
α为预加重系数,一般取0.97。
分帧
为了保证输入信号的平衡,采用分帧的方式将语音分成多段,其实现方式如下:
n
u
m
f
r
a
m
e
s
=
1
+
c
e
i
l
(
(
T
−
f
r
a
m
e
_
l
e
n
g
t
h
)
/
f
r
a
m
e
_
s
t
e
p
)
numframes=1+ceil((T-frame\_length)/frame\_step)
numframes=1+ceil((T−frame_length)/frame_step)
其中frame_length为帧长,frame_step为相邻帧的平移距离,对不足一帧长的信号进行补0处理。
加窗
令
X
=
[
x
1
,
x
2
,
…
,
x
n
u
m
f
r
a
m
e
s
]
X=[x_1,x_2,…,x_{numframes}]
X=[x1,x2,…,xnumframes]为得到的numframes个帧。采用加窗的方式,避免信号因非周期截断导致的频谱泄露问题:
x
i
=
x
i
∗
ω
i
x_i=x_i*ω_i
xi=xi∗ωi
其中ω_i为汉宁窗或汉明窗。
离散傅里叶变换
通常信号在时域上的变换很难看出信号的特性,因此采用快速傅里叶变换得到各帧的频谱:
F
i
,
k
=
∑
n
=
0
N
−
1
x
i
,
n
e
−
j
(
2
π
/
N
)
k
n
,
(
0
≤
k
≤
N
−
1
)
,
F_{i,k}=∑_{n=0}^{N-1}x_{i,n}e^{-j(2π/N)kn},(0≤k≤N-1),
Fi,k=n=0∑N−1xi,ne−j(2π/N)kn,(0≤k≤N−1),
其中
F
i
,
k
F_{i,k}
Fi,k代表第i帧第k个点的频率,
x
i
,
n
x_{i,n}
xi,n为第i帧第n个点。
梅尔滤波器
通常人耳所听到的声音高低与声音的频率不成线性正比关系,而Mel频率尺度更符合人耳的听觉特性,因此采用Mel滤波器进行处理,Mel频率与实际频率的转换公式如下:
M
e
l
(
f
)
=
2595
∗
l
o
g
10
(
1
+
f
/
700
)
Mel(f)=2595*log_{10} (1+f/700)
Mel(f)=2595∗log10(1+f/700)
采用上述公式将音频的频率范围转换为梅尔频率的频率范围,并均匀等分为L份,即L个梅尔滤波器,Mel滤波器为三角形状,等分后的梅尔频率为梅尔滤波器的中心频率,令
o
l
o_l
ol,
c
l
c_l
cl,
h
l
h_l
hl分别为梅尔滤波器的下限频率,中心频率和上限频率,可以得到如下关系:
c
l
=
h
l
−
1
=
o
l
+
1
c_l=h_{l-1}=o_{l+1}
cl=hl−1=ol+1
即梅尔滤波器的中心频率等于上一个梅尔滤波器的上限频率,也等于下一个梅尔滤波器的下限频率。三角形梅尔滤波器的公式可表示为:
W
l
(
k
)
=
{
k
−
o
l
c
l
−
o
l
,
o
l
≤
k
≤
c
l
h
l
−
k
h
l
−
c
l
,
c
l
≤
k
≤
h
l
W_l(k) = \begin{cases} \frac{k-o_l}{c_l-o_l}, o_l\leq k \leq c_l\\ \frac{h_l-k}{h_l-c_l}, c_l \leq k \leq h_l \end{cases}
Wl(k)={cl−olk−ol,ol≤k≤clhl−clhl−k,cl≤k≤hl
梅尔滤波器的最终输出可以表示为:
m
l
=
∑
k
=
o
l
h
l
W
l
(
k
)
∣
F
k
∣
2
,
l
∈
[
1
,
2
,
.
.
.
,
L
]
m_l=∑_{k=o_l}^{h_l}W_l (k) |F_k|^2,\quad l\in[1,2,...,L]
ml=k=ol∑hlWl(k)∣Fk∣2,l∈[1,2,...,L]
离散余弦变换
对梅尔滤波器的输出进行离散余弦变换(DCT)得到最终的梅尔倒谱系数:
c
i
=
2
L
∑
j
=
1
L
m
j
c
o
s
(
π
i
L
∗
(
j
−
0.5
)
)
,
i
∈
[
1
,
2
,
.
.
.
,
I
]
c_i=\sqrt{\frac{2}{L}} \sum_{j=1}^Lm_jcos(\frac{\pi i}{L}*(j-0.5)),\quad i\in [1,2,...,I]
ci=L2j=1∑Lmjcos(Lπi∗(j−0.5)),i∈[1,2,...,I]
其中i为倒谱系数个数