其实MFCC加DTW模型主要应用于孤立词识别,而且DTW基本用的是DP算法,所以计算量会偏大,对于8KHz的采样率,帧长256,帧叠128,,单通道(双通道帧太多,难以处理)。所能识别的孤立词最多为7个左右,而本人测试了 对于5个词,仅差别一个字,同样是可以识别出的。总的来说该套模型,对于孤立词识别还是有很好的优势,模板训练量要求并不大。不像HMM,需要大批的训练。OK,先介绍下理论的知识。
MFCC系数
人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数的关系。近年来,一种能够比较充分利用人耳这种特殊的感知特性的参数得到了广泛的应用,这就是Mel尺度倒铺系数(Mel-scaled Cepstrum Coefficients),或称Mel频率倒铺系数,简称为MFCC。大量研究表明,MFCC参数能够比较好地提高系统的识别性能。
MFCC系数的计算是以"bark"为其频率基准的,它和线性频率的转换关系为:.MFCC参数也是按帧计算的。首先要通过FFT得到该帧信号的功率谱
,转换为Mel频率下的功率谱,这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:
M为滤波器的个数,通常取24,N为一帧语音信号的点数,为了计算FFT的方便,通常取N为256。滤波器在频域上为简单的三角形,其中心频率为,它们在Mel频率轴上是均匀分布的。在线性频率上,当m较小时,相邻的
间隔很小,随着m的增加,相邻的
间隔逐渐拉开。另外在频率较低的区域,
和f之间有一段是线性的。带通滤波器的参数事先计算好,在计算MFCC参数时直接使用。
MFCC参数的计算通常采用如下的流程:
(1)首先确定每一帧语音采样序列的点数,取N=256点。对每帧序列进行预加重处理后在经过离散FFT变换,取模的平方得到离散功率谱
.
(2)计算通过M个
后得到的功率值,即计算
和
在各离散频率点上乘积之和,得到M个参数
.
(3)计算的自然对数,得到
.
(4)对计算其离散余弦变换,得到
(5)舍去代表直流成分的,取
作为MFCC参数。
DTW算法原理
在孤立词语音识别中,最为简单有效的方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法。
无论在训练和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。已存入模板库的各个词条称为参考模板,一个参考模板可表示为,m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模板所包含的语音帧总数,R(m)为第m帧的语音特征矢量。所要识别的一个输入词条语音成为测试模板,可表示为
,n为测试语音帧的时序标号,n=1为起点语音帧,n=N为终点语音帧,因此N为该模板所包含的语音帧总数,T(n)为第n帧的语音特征矢量。参考模板与测试模板一般采用相同类型的特征矢量(如MFCC系数)、相同的帧长、相同的窗函数和相同的帧移。
假设测试和参考模板分别用T和R表示,为了比较它们之间的相似度,可以计算它们之间的距离D[T,R],距离越小则相似度越高。为了计算这一失真距离,应从T和R中各个对应帧之间的距离算起。设n和m分别是T和R中任意选择的帧号,d[T(n),R(m)]表示这两帧特征矢量之间的距离。距离函数取决于实际采用的距离度量。在DTW算法中通常采用欧氏距离。
若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果N<M可以将T线性映射为一个M帧的序列,再计算它与之间的距离,但是这样的计算没有考虑到语音中各个段在不同的情况下的持续时间会产生或长或短的变化,因此识别效果不可能最佳。因而更多地是采用动态规划(DP)的方法。
如果把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(n,m)表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法可以归结为寻找一条通过次网格中若干格点的路径,路径通过的格点即为测试和参考模板中进行距离计算的帧号。路径不是随意选择的,首先任何一种语音的发音快慢都可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束,如下图所示:
为了描述这条路径,假设路径通过的所有格点依次为,其中
.路径可以用函数
描述,其中
.为了使路径不至于过分倾斜,可以约束斜率在0.5~2的范围内,如果路径已通过了格点
,那么下一个通过格点
只可能是下列三种情况之一:
用表示上述三个约束条件。求最佳路径的问题可以归结为满足约束条件
时,求最佳路径函数
,使得沿路径的积累距离达到最小值,即:
搜索该路径的方法如下:搜索从点出发,可以展开若干条满足
的路径,假设可计算每条路径到达
点时的总的积累距离,具有最小累计距离者为最佳路径。易于证明,限定范围内的任一格点
只可能有一条搜索路径通过。对于
,其可到达该格点的前一个格点只可能是
、
,那么
一定选择这3个距离中的最小者所对应的格点作为其前续格点,若用
代表此格点,并将通过该格点之路径延伸而通过
,这时此路径的积累距离为:
其中的由下式决定:
这样可以从=(1,1)出发搜索
,再搜索
......,对每一个
都存储相应的前一格点
及相应的帧匹配距离
。搜索到
时,只保留一条最佳路径。如果有必要的话,通过逐点向前寻找就可以求的整条路径。这套DP算法便是DTW算法。