语音特征提取技术——MFCC

语音识别和说话人识别中,常用的语音特征是基于Mel频率的倒谱系数(即MFCC)。MFCC参数是将人耳的听觉感知特性和语音的产生机制相结合。
人的发声由很多部位共同影响的结果,如嘴形、牙齿等因素,这种形状可以决定声音的输出。如果我们可以精确的确定形状,那么我们就可以对发出的因素进行科学的表示。

MFCC倒谱系数计算过程如下;

① 将信号进行分帧,预加重和加汉明窗处理,然后进行短时傅里叶变换并得到其频谱。
② 求出频谱平方,即能量谱,并用M个Mel带通滤波器进行滤波;由于每一个频带中分量的作用在人耳中是叠加的。因此将每个滤波器频带内的能量进行叠
加,这时第k个滤波器输出功率谱)(’
kx。
③ 将每个滤波器的输出取对数,得到相应频带的对数功率谱;并进行反离散余弦变换,得到L个MFCC系数,一般L取12~16个左右。

实现MFCC步骤:

① 输入样本音频

② 给样本音频预加重、分帧、加窗

首先,对波形图分帧。通常我们取20-40m为一帧的宽度,例如我们取40ms位一帧的宽度,对于一个44.1kHz采样的信号,一帧就包含0.040*44100=1764个采样点,帧移通常去帧宽的二分之一,也就是20ms,这样就允许没两帧之间有一半的overlap。这样一来,第一帧就是从第一个采样点到第1764个采样点,第二帧就是从第882个采样点到第2646个采样点…直到最后一个采样点,如果音频长度不能被帧数整除,在最后补0 。对于一个30s的音频文件,可以得到44100 *30 / 882 = 1500帧。

对每一帧进行加窗。加窗的目的是平滑信号,使用汉明窗加以平滑的话,相比于矩形窗函数,会减弱FFT以后旁瓣大小以及频谱泄露。

例如使用汉明窗(hamming window)对信号进行加窗处理:
语音特征提取技术——MFCC
语音特征提取技术——MFCC

从上面的例子可以看出来,如果不进行加窗,那么某一帧的结束值和下一帧的开始值会有一个gap(因为有overlap),在频谱图上来看,峰值会变得比较“宽”,而加过hamming window的帧在频谱图上的峰值就会变得更加sharp也更容易辨认。设加窗函数为h(n)。

③ 将处理好的样本音频做傅里叶变换

对每一帧进行离散傅里叶变化(DFT):
语音特征提取技术——MFCC
其中s(n)为波形信号,S(n)为幅度谱。

因为有
语音特征提取技术——MFCC

语音特征提取技术——MFCC
另一种形式为:

语音特征提取技术——MFCC
所以其实DFT变换就是两个“相关(correlation)”操作,一个是与频率为k的cos序列相关,一个是与频率为k的sin序列相关,然后两者叠加就是与频率k的正弦波相关的结果,如果得到的值很大,就表明信号包含频率为k的能量很大。

④ 计算功率谱

语音特征提取技术——MFCC
例如,我们从一个1764个点的FFT计算得到功率谱以后,只保留前1764/2+1=883个系数。

⑤ 进行Mel频率滤波

频率和mel频率之间的转化公式为:
语音特征提取技术——MFCC

mel滤波器组是一组非线性分布的滤波器组,它在低频部分分布密集,高频部分分布稀疏,这样的分布是为了更好得满足人耳听觉特性。

语音特征提取技术——MFCC
将这样一组三角滤波器(例如128个)作用到一帧上,就将一个883维的向量转化为128维的向量。

语音特征提取技术——MFCC

⑤ 进行Log对数能量

对上述128维的mel功率谱取log,得到128维的 log-mel filer bank energies。这样做的原因是由于人耳对声音的感知并不是线性的,用log这种非线性关系更好描述,另外,取完log以后才可以进行倒谱分析。

⑥ 离散余弦变换。

对上述128维的向量进行DCT,DCT和DFT类似,但是只使用实数,不涉及复数运算。

语音特征提取技术——MFCC
其中
语音特征提取技术——MFCC

引入ai是为了使ci正交化。将ci表示为矩阵形式:
语音特征提取技术——MFCC
DCT矩阵形式
这样得到的C(n)矩阵中,较大的值都集中再靠近左上角的低能量部分,其余部分会产生大量的0或者接近0的数,这样,我们可以进行进一步数据压缩。这也表明DCT有很好的能量聚集效应。相比于傅里叶变换(FFT),离散余弦变换的结果没有虚部,更好计算(DCT也可以理解为没有虚部的FFT)。利于对于ASR任务,通常取低13维的系数。

⑦ 输出MFCC图像