【摘要】以一个能识别数字0~9的语音识别系统的实现过程为例,阐述了基于DTW算法的特定人孤立词语音识别的基本原理和关键技术。其中包括对语音端点检测方法、特征参数计算方法和DTW算法实现的详细讨论,最后给出了在Matlab下的编程方法和实验结果。
【关键字】语音识别;端点检测;MFCC系数;DTW算法
【中图分类号】TN912.34【文献标识码】A
0引言
自计算机诞生以来,通过语音与计算机交互一直是人类的梦想,随着计算机软硬件和信息技术的飞速发展,人们对语音识别功能的需求也更加明显和迫切。语音识别技术就是让机器通过识别和理解过程把人类的语音信号转变为相应的文本或命令的技术,属于多维模式识别和智能计算机接口的范畴[1]。传统的键盘、鼠标等输入设备的存在大大妨碍了系统的小型化[10],而成熟的语音识别技术可以辅助甚至取代这些设备。在PDA、智能手机、智能家电、工业现场、智能机器人等方面语音识别技术都有着广阔的前景。
语音识别技术起源于20世纪50年代,以贝尔实验室的Audry系统为标志[1,8]。先后取得了线性预测分析(LP)、动态时间归整(DTW)、矢量量化(VQ)、隐马尔可夫模型(HMM)等一系列关键技术的突破和以IBM的ViaVoice、Microsoft的VoiceExpress[9]为代表的一批显著成果。国内的语音识别起步较晚,1987年开始执行国家863计划后语音识别技术才得到广泛关注。具有代表性的研究单位为清华大学电子工程系与中科院自动化研究所模式识别国家重点实验室,中科院声学所等[9]。其中中科院自动化所研制的非特定人连续语音听写系统和汉语语音人机对话系统,其准确率和系统响应率均可达90%以上[1]。
常见的语音识别方法有动态时间归整技术(DTW)、矢量量化技术(VQ)、隐马尔可夫模型(HMM)、基于段长分布的非齐次隐马尔可夫模型(DDBHMM)和人工神经元网络(ANN)[1,9]。DTW是较早的一种模式匹配和模型训练技术,它应用动态规划的思想成功解决了语音信号特征参数序列比较时时长不等的难题,在孤立词语音识别中获得了良好性能。虽然HMM模型和ANN在连续语音大词汇量语音识别系统优于DTW,但由于DTW算法计算量较少、无需前期的长期训练,也很容易将DTW算法移植到单片机、DSP上实现语音识别且能满足实时性[7]要求,故其在孤立词语音识别系统中仍然得到了广泛的应用。本文将通过能识别数字0~9的语音识别系统的实现过程详细阐述基于DTW算法的特定人孤立词识别的相关原理和关键技术。
1语音识别系统概述
语音识别系统的典型原理框图[1,9-10]如图1-1所示。从图中可以看出语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语音信号不能直接用于提取特征,而要进行前期的预处理。预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。经过预处理的语音数据就可以进行特征参数提取。在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。后续的处理过程还可能包括更高层次的词法、句法和文法处理等,从而最终将输入的语音信号转变成文本或命令。
图1-1语音识别系统原理框图
本文所描述的语音识别系统(下称本系统)将对数字0~9共10段参考语音进行训练并建立模板库,之后将对多段测试语音进行识别测试。系统实现了上图中的语音输入、预处理、特征提取、训练建立模板库和识别等模块,最终建立了一个比较完整的语音识别系统。
2语音信号预处理
语音信号的预处理模块一般包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。在不同的系统中对各子模块会有不同的要求,如在嵌入式语音识别系统中一般要求有防混叠滤波电路[5]、A/D转换电路和采样滤波电路等,而在计算机上实验时则可由音频采集卡完成,无需实验者亲自动手。
2.1语音信号采集
在Matlab环境中语音信号的采集可使用wavrecord(n,fs,ch,dtype)函数录制,也可使用Windows的“录音机”程序录制成.wav文件然后使用wavread(file)函数读入。为了进行批量的的训练和识别处理,本系统的训练语音和识别语音全部使用“录音机”程序预先录制。如图2-1所示为数字0的训练语音00.wav的信号波形图,第(I)幅图为完整的语音波形,第(II)、(III)幅图分别为语音的起始部分和结束部分的放大波形图。
图2-1语音00.wav的信号波形图
2.2分帧
语音信号是一种典型的非平稳信号,它的均值函数u(x)和自相关函数R(xl,x2)都随时间而发生较大的变化[5,9]。但研究发现,语音信号在短时间内频谱特性保持平稳,即具有短时平稳特性。因此,在实际处理时可以将语音信号分成很小的时间段(约10~30ms[5,7]),称之为“帧”,作为语音信号处理的最小单位,帧与帧的非重叠部分称为帧移,而将语音信号分成若干帧的过程称为分帧。分帧小能清楚地描绘语音信号的时变特征但计算量大;分帧大能减少计算量但相邻帧间变化不大,容易丢失信号特征。一般取帧长20ms,帧移为帧长的1/3~1/2。
在Matlab环境中的分帧最常用的方法是使用函数enframe(x,len,inc),其中x为语音信号,len为帧长,inc为帧移。在本系统中帧长取240,帧移取80。
2.3预加重
对于语音信号的频谱,通常是频率越高幅值越小,在语音信号的频率增加两倍时,其功率谱的幅度下降6dB。因此必须对高频进行加重处理,一般是将语音信号通过一个一阶高通滤波器1-0.9375z-1,即为预加重滤波器。其目的是滤除低频干扰,特别是50Hz到60Hz的工频干扰,将对语音识别更为有用的高频部分进行频谱提升。在计算短时能量之前将语音信号通过预加重滤波器还可起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。预加重滤波器在Matlab中可由语句x=filter([1-0.9375],1,x)实现。
2.4加窗
为了保持语音信号的短时平稳性,利用窗函数来减少由截断处理导致的Gibbs效应。用的最多的三种为矩形窗、汉明窗(Hamming)和汉宁窗(Hanning)。其窗函数如下,式中的N为窗长,一般等于帧长。
窗口的选择非常重要,不同的窗口将使能量的平均结果不同。矩形窗的谱平滑,但波形细节丢失;而汉明窗则刚好相反,可以有效克服泄漏现象,具有平滑的低通特性[4-6]。因此,在语音的时域处理方法中,一般选择矩形窗,而在语音的频域处理方法中,一般选择汉明窗或汉宁窗[5-6]。在Matlab中要实现加窗即将分帧后的语音信号乘上窗函数,如加汉明窗即为x=x.*hamming(N)。本系统中的端点检测采用时域方法故加矩形窗,计算MFCC系数时加汉明窗。
3端点检测
在基于DTW算法的语音识别系统中,无论是训练和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。语音端点检测是指用计算机数字处理技术从包含语音的一段信号中找出字、词的起始点及结束点,从而只存储和处理有效语音信号。对汉语来说,还可进一步找出其中的声母段和韵母段所处的位置。语音端点检测是语音分析、合成和识别中的一个重要环节,其算法的优劣在某种程度上也直接决定了整个语音识别系统的优劣。进行端点检测的基本参数主要有短时能量、幅度、过零率和相关函数等。端点检测最常见的方法是短时能量短时过零率双门限端点检测,近年来在此基础上发展出的动态窗长短时双门限端点检测方法[4]也被广泛使用。
3.1短时能量
语音和噪声的主要区别在它们的能量上,如图3-1(III)和图3-2(III)所示。语音段的能量比噪声段的大,语音段的能量是噪声段能量叠加语音声波能量的和。对第n帧语音信号的短时能量En的定义为:
(3-1)
xn为原样本序列在窗函数所切取出的第n段短时语音,N为帧长。因为在计算时使用的是信号的平方,故将En作为一个度量语音幅度值变化的函数有一个缺陷,即对高电平非常敏感。因此在许多场合会将En用下式来代替:
(3-2)
这样就不会因为取平方而造成信号的小取样值的大取样值出现较大差异。
本系统中窗函数为WR(见式2-1),N为240。图3-1(I)和图3-2(I)分别为数字0的训练语音00.wav和数字4的训练语音40.wav的波形,图3-1(III)和图3-2(III)分别为它们的短时能量。
图3-1语音00.wav的时域分析参数
图3-2语音40.wav的时域分析参数
3.2短时过零率
短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号则称为过零。过零率就是样本改变符号次数,定义语音信号寿(m)的短时过零率Zn为:
(3-3)
(3-4)
清音的能量多集中在较高的频率上,它的平均过零率要高于浊音,故短时过零率可
以用来区分清音、浊音以及无声。图3-1(II)和图3-2(II)分别为数字0的训练语音00.wav和数字4的训练语音40.wav的短时过零率。从图中可以看到清音‘s’的过零率明显高于其后的‘i’音,有声段过零率明显高于无声段,但在鼻音阶段过零率迅速滑落到无声水平而能量值则是缓慢下滑。在实际应用时并不能通过式3-3直接计算过零率,因为在无声段噪声使语音波形在0值附近来回摆动,导致计算出的过零率和有声段的区别并不十分明显。比较简单的解决方法是设定一个差的阈值δ,使不仅xn(m)*xn(m-1)<0,还要|xn(m)-xn(m-1)|>δ。在本系统中经多次试验取定δ=0.01。
3.3双门限端点检测
双门限端点检测顾名思义需要两级检测,即短时能量检测和短时过零率检测。在开始检测之前需要设定4个门限,即分别为短时能量和短时过零率各设置一个高门限和一个低门限:EHigh、ELow和ZHigh、ZLow。整个语音端点检测分为四部分:静音段、过度段、语音段、结束段。在静音段中如果能量或过零率有一个超过了其低门限,则认为进入了过度段。在过度段中,由于参数数值较小,还不能确定是否真的进入语音段,只有两个参数的其中一个超越了高门限才被认为是进入语音段。当参数降至低门限则认为进入结束。此外,还有两种可能会引起端点检测的误判:一是短时噪音引起的误判,此时则需要引入最小语音长度门限进行噪声判定,即语音段时间小于一定数值则认定为是噪声,重新回到静音段,本系统设为20ms;二是语音中字与字的时间空隙引起的误判,此时需要设定最大静音长度门限来降低识别的错误率,本系统所训练和识别的都为单字,故无需设置此门限。
在双门限端点检测中4个门限的设定至关重要,门限设定的好坏将直接影响端点检测的结果。门限值的设置还没有一个通用可靠的方法,需要根据经验和特定环境进行调整。常见的方法有最大值乘上某个比率、中位值乘上某个比率、最小值乘上某个常数、前三帧平均值乘上某个常数等。本系统中EHigh,ELow,ZHigh,ZLow的取值分别为:
EHigh=max([min(amp)*10,mean(amp)*0.2,max(amp)*0.1]);ZHigh=max([round(max(zcr)*0.1),5]);
ELow=min([min(amp)*10,mean(amp)*0.2,max(amp)*0.1]);ZLow=max([round(mean(zcr)*0.1),3]);
图3-3和图3-4分别是数字0的训练语音00.wav和数字4的训练语音40.wav的端点检测结果,红线之间的部分为检测出的语音有声段。
图3-3语音00.wav的端点检测结果
图3-4语音40.wav的端点检测结果
4语音识别参数提取
经过预处理的语音数据就可以进行特征参数提取,特征参数的好坏将直接影响系统的性能和效率,对特征参数的要求包括[9-10]:
(1)提取的特征参数能有效地代表语音特征,具有很好的区分性;
(2)各阶参数之间有良好的独立性;
(3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。
4.1LPC与LPCC系数
LPC(LinearPredictionCoefficient,线性预测系数)模拟人发音器官的声管模型,是一种基于语音合成的参数模型。在语音识别系统中很少直接使用LPC系统,而是由LPC系数推出的另一种参数LPCC。LPCC(LinearPredictionCepstrumCoefficient,线性预测倒谱系数)是LPC在倒谱域中的表示。该特征是基于语音信号为自回归信号的假设,利用线性预测分析获得倒谱系数。LPCC的优点是计算量小,易于实现,对元音有较好的描述能力,缺点是对辅音描述能力较差。
4.2MFCC系数
LPC模型是基于发音模型建立的,LPCC系数也是一种基于合成的系数,这种参数没有充分利用人耳的听觉特性。实际上,人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数的关系[9-10]。近年来,一种能够比较充分利用人耳的这种特殊感知特性的系数得到了广泛应用,这就是Mel尺度倒谱系数(Mel-scaledCepstrumCoefficients,简称MFCC)。大量研究表明,MFCC系数能够比LPCC参数更好地提高系统的识别性能[10]。
MFCC系数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:
(4-1)
MFCC系数也是按帧计算的,首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:
Hm(n)m=0,1,…,M-1;n=0,1,…,N/2-1(4-2)
M为滤波器的个数,通常取24,与临界带的个数一样;N为一帧语音信号的点数,为了计算FFT的方便,通常取256。滤波器在频域上为简单的三角形,其中心频率fm在Mel频率轴上是均匀分布的。如图4-1所示为Mel尺度滤波器组,包含24个滤波器,语音信号帧长取为256个点,语音信号的采样频率为8KHz,。
图4-1Mel尺度滤波器组
带通滤波器的系数事先计算好,在计算MFCC系数是直接使用。MFCC系数的计算过程如下:
(1)预处理:确定每一帧语音采样序列的长度(如N=256),并对每帧序列s(n)进行预加重、分帧和加窗处理;
(2)计算离散功率谱:对预处理的每帧进行离散FFT变换得到其频谱,再取模的平方作为离散功率谱S(n);
(3)将功率谱通过滤波器组:计算S(n)通过M个Hm(n)后所得的功率值,即计算S(n)和Hm(n)在各离散频率点上的乘积之和,得到M个参数Pm,m=0,1,……M-1;
(4)取对数:计算Pm的自然对数,得到Lm,m=0,1,……M-1;
(5)离散余弦变换:对Lm计算其离散余弦变换,得到Dm,m=0,1,……M-1,舍去代表直流成份的D0,取D1,D2,……,Dk作为MFCC参数。
具体流程可以用框图4-2表示为:
图4-2MFCC系数计算流程图
在Matlab环境中计算M个滤波器的系数可以调用语音工具箱voicebox中的函数melbankm(m,n,fs)来实现,其中m为滤波器的个数,n为语音帧长,fs为采样频率。计算mfcc系数的函数为melcepst(s,fs),s为语音信号。
5DTW算法实现
DTW(DynamicTimeWarping,动态时间规整)是语音识别中较为经典的一种算法。在实现小词汇表孤立词识别系统时,其识别率及其它指标与HMM算法实现几乎等同[9]。又由于HMM算法复杂,在训练阶段需要提供大量的语音数据通过反复计算才能得到模型参数,而DTW算法本身既简单又有效,因此在特定的场合下获得了广泛的应用。
5.1匹配模式
模板匹配方法的语音识别算法需要解决的一个关键问题是说话人对同一个词的两次发音不可能完全相同,这些差异不仅包括音强的大小、频谱的偏移,更重要的是发音时音节的长短不可能完全相同,而且两次发音的音节往往不存在线性对应关系。设参考模板有M帧矢量{R(1),R(2),…R(m),…,R(M)},R(m)为第m帧的语音特征矢量,测试模板有N帧矢量{T(1),T(2),…T(n),…,T(N)},T(n)是第n帧的语音特征矢量。d(T(in),R(im))表示T中第in帧特征与R中im帧特征之间的距离,通常用欧几里德距离[9-10]表示。直接匹配是假设测试模板和参考模板长度相等,即in=im;线性时间规整技术假设说话速度是按不同说话单元的发音长度等比例分布的,即。显然,这两种假设都不符合实际语音的发音情况,我们需要一种更加符合实际情况的非线性时间规整技术。如图5-1所示为三种匹配模式对同一词两次发音的匹配距离(两条曲线间的阴影面积),显然D3<D2<D1。
图5-1三种匹配模式对比
5.2DTW算法原理
DTW是把时间规整和距离测度计算结合起来的一种非线性规整技术,它寻找一个规整函数im=Ф(in),将测试矢量的时间轴n非线性地映射到参考模板的时间轴m上,并使该函数满足:
(5-1)
D就是处于最优时间规整情况下两矢量的距离。由于DTW不断地计算两矢量的距离以寻找最优的匹配路径,所以得到的是两矢量匹配时累积距离最小所对应的规整函数,这就保证了它们之间存在的最大声学相似性。DTW算法的实质就是运用动态规划的思想,利用局部最佳化的处理来自动寻找一条路径,沿着这条路径,两个特征矢量之间的累积失真量最小,从而避免由于时长不同而可能引入的误差
DTW算法要求参考模板与测试模板采用相同类型的特征矢量、相同的帧长、相同的窗函数和相同的帧移。为了使动态路径搜索问题变得有实际意义,在规整函数上必须要加一些限制,不加限制使用式(5-1)找出的最优路径很可能使两个根本不同的模式之间的相似性很大,从而使模式比较变得毫无意义。通常规整函数必须满足如下的约束条件:
(1)边界限制:当待比较的语音已经进行精确的端点检测,在这种情况下,规整发生在起点帧和端点帧之间,反映在规整函数上就是:
(5-2)
(2)单调性限制由于语音在时间上的顺序性,规整函数必须保证匹配路径不违背语音信号各部分的时间顺序。即规整函数必须满足单调性限制:
(5-3)
(3)连续性限制有些特殊的音素有时会对正确的识别起到很大的帮助,某个音素的差异很可能就是区分不同的发声单元的依据,为了保证信息损失最小,规整函数一般规定不允许跳过任何一点。即:
(5-4)
DTW算法的原理图如图5-2,把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(ti,rj)表示测试模式中某一帧与训练
模式中某一帧的交汇。DTW算法分两步进行,一是计算两个模式各帧之间的距离,即求出帧匹配距离矩阵,二是在帧匹配距离矩阵中找出一条最佳路径。搜索这条路径的过程可以描述如下:搜索从(1,1)点出发,对于局部路径约束如图5-3,点(in,im)可达到的前一个格点只可能是(in-1,im)、(in-1,im-l)和(in-1,im-2)。那么(in,im)一定选择这三个距离中的最小者所对应的点作为其前续格点,这时此路径的累积距离为:
D(in,im)=d(T(in),R(im))+min{D(in-1,im),D(in-1,im-1),D(in-1,im-2)}(5-5)
这样从(l,1)点出发(令D(1,1)=0)搜索,反复递推,直到(N,M)就可以得到最优路径,而且D(N,M)就是最佳匹配路径所对应的匹配距离。在进行语音识别时,将测试模板与所有参考模板进行匹配,得到的最小匹配距离Dmin(N,M)所对应语音即为识别结果。
5.3DTW算法改进
DTW算法虽然简单有效,但是动态规划方法需要存储较大的矩阵,直接计算将会占据较大的空间,计算量也比较大。由图5-3的局部路径约束可知DTW算法所动态搜索的空间其实并不是整个矩形网格,而是局限于对角线附近的带状区域[9],如图5-4所示,许多点实际上是达不到的。因此,在实际应用中会将DTW算法进行一些改进以减少存储空间和降低计算量。常见的改进方法有搜索宽度限制、放宽端点限制等。
5.3.1搜索宽度限制
以图5-3中的局部约束路径为例,待测模板轴上每前进一帧,对于点(in,im)只需要用到前一列(in-1,im)、(in-l,im-l)和(in-1,im-2)三点的累积距离,也就是im-1和im-2两行的累积距离。整个DTW算法的计算过程递推循环进行,也就是每一行中的格点利用前两行格点的累积距离计算该点的累积距离的过程。基于这种循环递推计算,只需分配3×N的存储空间重复使用,而不需要保存帧匹配距离矩阵和所有的累积距离矩阵。又由于DTW算法的动态搜索宽度局限于对角线附近的带状区域,假设其宽度为width,如图5-4和图5-6,则实际只需分配3×width的存储空间即可。
图5-4带状搜索区域图5-5搜索宽度限制存储空间
5.3.2放宽端点限制
普通DTW对端点检测比较敏感,端点信息是作为一组独立的参数提供给识别算法的。它要求两个比较模式起点对起点,终点对终点,对端点检测的精度要求比较高。当环境噪声比较大或语音由摩擦音构成时,端点检测不易进行,这就要求在动态时间规整过程中给以考虑。放松端点限制方法不严格要求端点对齐,克服由于端点算法不精确造成的测试模式和参考模式起点终点不能对齐的问题。一般情况下,起点和终点在纵横两个方向只要放宽2-3帧就可以,也就是起点可以在(1,1),(l,2),(1,3),(2,1),(3,l),终点类似。如图5-6。
在放宽端点限制的DTW算法中,累积距离矩阵中的元素(1,l),(l,2),(l,3),(2,l),(3,1)不是根据局部判决函数计算得到的,而是直接将帧匹配距离矩阵的元素填入,自动从其中选择最小的一个作为起点,对于终点也是从松弛终点的允许范围内选择一个最小值作为参考模式和未知模式的匹配距离。
6Matlab编程结果
在音频信号处理方面,Matlab提供了wav文件读写函数和声卡的录音和放音函数,利用这些函数可以实现某些语音信号处理工作。语音工具箱voicebox为实现语音识别提供了许多实用函数。为了进行批量的的训练和识别处理,本系统的训练语音和识别语音全部使用“录音机”程序录制。本语音识别系统的文件结构如图6-1所示,其中train文件夹中包含
图6-1语音识别系统的文件结构
数字0~9的训练语音,test中包含若干测试语音,都分别以相应数字作为文件名的首数字。文件vad.m为端点检测程序,mfcc.m计算MFCC系数,train.m为语音训练程序,它将计算得到的特征参数存入mfcc.mat作为模板库。dtw.m为DTW算法的实现程序,dtwtest.m为测试程序。图6-2为4组语音的识别测试结果图,从中得出本语音识别系统的正确识别率为0.825,详细数据如下表:
图6-2语音识别测试结果
参考文献
[1]詹新明,黄南山,杨灿.语音识别技术研究进展[J].现代计算机(专业版),,(09)
[2]相征,朗朗,王静.基于基音频能值的端点检测算法[J].安徽工程科技学院学报,,(09)
[3]沈宏余,李英.语音端点检测方法的研究[J].科学技术与工程,,(08)
[4]李景川,董慧颖.一种改进的基于短时能量的端点检测算法[J].沈阳理工大学学报,,
(06)
[5]蔡妍.语音信号端点检测方法的研究[硕士学位论文][D].江南大学,
[6]吴亚栋.语音识别基础[R].上海交通大学计算机系,-01
[7]吴晓平,崔光照,路康.基于DTW算法的语音识别系统实现[J].电子工程师,,(07)
[8]谭保华,熊健民,刘幺和.语音识别技术概述[J].郧阳师范高等专科学校学报,,(06)
[9]朱淑琴.语音识别系统关键技术研究[硕士学位论文][D].西安电子科技大学,
[10]何强,何英.MATLAB扩展编程[M].清华大学出版社,2002-06