语音识别-mfcc特征
mfcc(梅尔频率倒谱系数)
简单的说就是用来描述人的声道的特征,也就是人的声音特征。
我查了好多网上资料,写的都不错,但是缺少一些中间的过程和可视化的解释,因为声音,频率这些光用文字描述很难理解的,所以我研究了下中间的一些结果,并截图展示出来,便于理解。
预加重
目的:提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱。同时,也是为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。
分帧
一般音频信号都是时域的,如果要分析具体音频频率信息,要转换到频域,就需要用到傅里叶变换,但是傅里叶变换的要求是平稳信号,而音频信号是不稳定的,但是在很短时间内(50ms以下),可以假设是稳定的,在比较短的时间内,嘴巴动得是没有那么快的,语音信号就可以看成平稳的,就分成很多段,也叫做帧,做傅里叶变换了。那怎么截取呢,所以需要有长度,间隔,长度较做帧长,一般25ms,间隔较帧跳跃,一般10ms,然后转换到相应的采样点上,进行分帧处理。比如采样率16khz,帧长=16000x0.025=400点 帧间隔=16000x0.01=160点。
加窗
目的是平滑信号,使用汉明窗加以平滑,尽量保持分帧后的帧连续性。一般是加汉明窗。
我们可以看到,以正弦函数sin为例,不加窗和矩形窗的效果,帧之间的断层很明显,而加了汉明窗的,先对平缓很多。
快速傅里叶变换
由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱,具体公式什么的很多文章有,我就不打了。
梅尔滤波器组滤波并取对数
在获得音频的能量谱的同时,还需要构造一个梅尔滤波器组,并与能量谱进行点积运算。梅尔滤波器的作用是将能量谱转换为更接近人耳机理的梅尔频率。MEL刻度是仿照人耳进行设计的,更符合人耳的听觉特性。
将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为f(m) 。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽。
三角带通滤波器主要目的:
对频谱进行平滑化,以 MFCC 为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响) 此外,还可以降低运算量。
对于滤波器组的能量,我们对它取log,对微小的声音,只要响度稍有增加人耳即可感觉到,但是当声音响度已经大到一定程度后,即使再有较大的增加,人耳的感觉却无明显变化。我们把人耳对声音响度的这种听觉特性称为“对数式”特性。因此,对梅尔频谱图取对数的原因就是为了模拟人耳的“对数式”特性。
离散余弦变换(DCT)
最后一步是对这些能量进行DCT变换。因为不同的Mel滤波器是有交集的,因此它们是相关的,我们可以用DCT变换去掉这些相关性.为什么只取低13个系数呢?因为后面的能量表示的是变化很快的高频信号,在实践中发现它们会使识别的效果变差。
好了,今天就到这里了,希望对学习理解有帮助,部分图片来自网络,侵删,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。