基于片上系统SoC的孤立词语音识别算法设计发布日期:2008-01-30作者:刘胜洋宋志勇来源:微计算机信息摘要:本文首先介绍了研究的孤立词语音识别系统,并针对片上系统进行了语音识别算法的选择。然后对基于语音帧的端点检测算法、线性预测编码倒谱系数LPCC算法和动态时间规整DTW算法进行了详细的分析和设计。对于新型语音识别SoC芯片的开发研制和推动片上可编程系统(SOPC)的研究与发展具有一定的理论和实践意义。关键词:片上系统;语音识别;端点检测;LPCC;DTW1.引言目前,嵌入式语音识别系统的实现主要通过单片机MCU和数字信号处理器DSP来实现[1]。但是单片机运算速度慢,处理能力不高;虽然DSP处理速度很快,但是产品的成本很高,电源能量消耗也很大。因此,为了满足嵌入式交互系统的体积越来越小、功能越来越强的苛刻需求,语音识别片上系统SoC(SystemonChip)应运而生。语音识别片上系统SoC本身就是一块芯片,在单一芯片上集成了模拟语音模数转换器ADC、数模转换器DAC、信号采集和转换、处理器、存储器和I/O接口等,只要加上极少的电源就可以具有语音识别的功能,集成了声音信息的采集、取样、处理、分析和记忆。SoC具有片内处理器和片内总线,有着更灵活的应用方式。它具有速度快,体积小,成本低,可扩展性强等优点,有着广泛的应用前景,已经成为语音识别技术应用发展的一个重要方向[2-3]。研究和开发应用于片上系统SoC芯片的语音识别算法有着非常重要的意义。2.孤立词语音识别系统孤立词语音识别系统应用于嵌入式控制领域,例如数字家庭控制、车载语音控制和智能语音可控玩具等。在训练阶段,用户将每一个词依次说一遍,并将计算得到的每一个词所对应的特征矢量序列作为模板存入模板库中。在识别阶段,将输入语音的特征矢量序列依次与模板库中的每一模板进行相似度比较,将相似度最高者作为识别结果输出。3.针对片上系统SOC的孤立词语音识别算法设计在SoC芯片中实现孤立词语音识别系统,就要根据语音识别片上系统的特点,来进行SoC的语音识别算法的选择和设计。首先是特征提取算法的选择。MFCC算法考虑到了人的听觉效果,能很好的表征语音信号,而且在噪声环境下能取得很好的识别效果。而LPC系数主要是模拟人的发声模型,对元音有较好的的描述能力,对辅音描述能力较差,抗噪声性能也相对差一些。但是从算法的计算量来考虑,MFCC提取特征参数是LPCC的10倍左右,通常在嵌入式系统下较难实现实时性。因此,选用LPCC算法。模式匹配技术的选择。隐马尔柯夫模型HMM方法是用概率及统计学理论来对语音信号进行分析与处理的,适用于大词汇量、非特定人的语音识别系统。该算法对系统资源的要求较多。而动态时间规整技术DTW采用模板匹配法进行相似度计算,是一个最为小巧的语音识别算法,系统开销小,识别速度快,可有效节约系统资源,降低系统成本开支。由于嵌入式系统资源有限,语音命令识别系统所需要的词汇量有限,所需识别的语音都是简短的命令,模式匹配算法选择DTW。3.1端点检测算法设计一个好的端点检测算法可以在一定程度上提高系统的识别率。在双门限端点检测原理的基础上,进行语音端点检测算法的设计。为了提高端点检测的精度,采用短时能量E和短时过零率ZCR。语音采样频率为8KHz,量化精度为16位,数字PCM码首先经过预加重滤波器H(z)=2-0.95z-1,再进行分帧和加窗处理,每帧30ms,240点为一帧,帧移为80,窗函数采用Hamming窗。然后对每帧语音进行归一化处理,即把每点的值都除以所有语音帧中数值绝对值的最大值,把值的范围从[-32767,32767]转换到[-1,1]。在实验中发现,双门限端点检测算法对于两个汉字和三个汉字的语音命令端点检测效果不好。以语音“开灯”为例,如图1所示语音波形图中,端点检测只能检测到第一个字。图1改进前对语音“开灯”的端点检测Fig2.theendpointingdetectionofspeech“kaideng”beforeameliorate如果语音命令中两个字的间隔过长,使用双门限端点检测方法会发生只检测到第一个字的情况,在实际中“开灯”和“开门”等命令只提取了“开”字的语音,从而可能造成语音匹配的错误。为避免该错误,采用的办法是,把可容忍的静音区间扩大到15帧(约150ms)。在双门限的后一门限往后推迟15帧,如15帧内一直没有energy和ZCR超过最低门限,则认为语音结束;如发现仍然有语音,则继续算入在内。图2改进后对语音“开灯”的端点检测Fig3.theendpointingdetectionofspeech“kaideng”afterameliorate改进后,整个语音信号的端点检测流程设计为四个阶段:静音、过渡段、语音段和语音结束。在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。在过渡段中,由于参数的数值比较小,不能确信是否处于真正的语音段,因此只要两个参数的数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果在过渡段中两个参数中的任一个超过了高门限,就可以确信进入语音段。在语音段,如果两个参数的数值降低到低门限以下,并且一直持续15帧,那么语音进入停止。如果两个参数的数值降低到低门限以下,但是并没有持续到15帧,后续又有语音段越过低门限,那么认为语音还没有结束。最后,如果检测出的这段语音总长度小于可接受的最小的语音帧数(设为15帧),则认为是一段噪音而放弃。采用改进后的端点检测算法,对于单个汉字或多个汉字的语音命令均识别正常。图2为语音“开灯”的端点检测图(两条红线以内的部分为检测出来的语音部分)。3.2LPCC特征参数提取算法设计LPC参数是模拟人的发声器官的,是一种基于语音合成的特征参数。在实际应用中,使用较多的是由LPC系数推导出的另一种系数,线性预测倒谱系数LPCC(LinearPredictiveCeptrumCoefficients)。3.2.1线性预测编码LPC算法LPC模型的基本思想是:对于给定一n时刻采样的语音信号采样值s(n),可以用p个取样值的加权和线性组合来表示[4]。a1,a2,…,ap称为LPC系数,也是全极点H(z)模型的参数。cm为倒谱系数,am为线性预测系统,m为倒谱系数的阶数,p为线性预测系统的阶数。这样利用LPC系数通过递推公式可以得到LPCC参数。LPCC由于利用了线性预测中声道系统函数的最小相位特性,避免了相位卷积、求复对数3.3基于DTW的模式匹配算法设计3.3.1动态时间规整DTW算法存入模板库的各个词条称为参考模板,一个参考模板可表示为R={R(1),R(2),…,R(m),…,R(M)}。m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,M为该模式包含的语音帧总数,R(m)为第m帧的语音LPC倒谱特征矢量。所要识别的一个输入词条语音称为测试模板,可表示为T={T(1),T(2),…,T(n),…,T(N)},n为测试语音帧标号,模式中共包含N帧语音,T(n)为第n帧的LPC倒谱特征矢量。比较参考模板和测试模板的相似度,可以计算它们的距离D[T,R],距离越小则相似度越高。语音中各个段落在不同情况下的持续时间会产生或长或短的变化,大多数情况下测试模板和参考模板长度不相等N≠M,因此采用动态规整(DP)的方法。DTW算法的实现为:分配两个N×M矩阵,分别为累积距离矩阵D和帧匹配距离矩阵d,其中帧匹配距离矩阵d(i,j)的值为测试模板的第i帧与参考模板的第j帧间的距离。算法分为两步:先要计算参考模板的所有帧和未知模板的所有帧之间的相互距离,结果存在矩阵d中;然后根据判断函数计算累积距离矩阵D,D(N,M)即为最佳匹配路径所对应的匹配距离。DTW算法约束端点条件为:起点(1,1),终点(n,m),n和m分别为测试和参考语音模板的帧序列长度。3.3.2应用中提高识别率的改进方法在应用中,提高DTW识别率的办法有冗余模板法、松弛起点终点法、改进局部路径约束函数法等。(1)冗余模板法。采用每个词条多套模板的方法,可以改进其识别效果。在实验中,采用在语音训练阶段,每个词条训练四次,即每个词条提取出4个参考模板,这样,只要测试模板与4个参考模板中的一个匹配成功,匹配结果就是正确的,这样便大大提高了识别率。(2)松弛起点终点法。将匹配过程中的固定起点(终点)改为松弛起点(终点)。端点对齐的限制条件提高了对语音端点检测的精度要求。路径不再是从(1,1)点出发,可以从(n,m)=(1,2)或(2,1),或(1,3)或(3,1)…点出发,称为松弛起点。同样,路径也不必在(N,M)点结束,可在(n,m)=(N,M-1)或(N-1,M)或(N,M-2)或(N-2,M)点…结束,称为松弛终点。松弛起点终点的优点是可克服由于端点检测不精确造成测试模板和参考模板起点终点不能严格对齐的问题[6]。(3)改变局部路径约束函数法。不同的连续性条件导致了不同的路径,局部路径约束函数不一样,DTW识别效果就会不同。可以对局部约束路径进行加权处理,提高识别率。本文中采用的模板匹配算法就是融合这三种改进技术后的动态规整算法,称之为ADTW算法。对这种算法进行了实验,得到该算法的实际识别率,并对之进行分析。3.3.3应用中提高算法效率的改进方法在计算传统DTW算法过程中,如果限定动态规整的计算范围,可以大大减小计算量,提高程序的性能。采用平行四边形限制动态规整范围,如图3,菱形之外的节点对应的帧匹配距离是不需要计算的,也没有必要保存所有帧匹配距离矩阵和累积距离矩阵,以ADTW的局部约束路径为例,每一列各节点上的匹配计算只用到了前两列的几个节点。充分利用这两个特点可以减少计算量和存储空间的需求。把实际的动态规整分为三段,(1,Xa),(Xa+1,Xb)和(Xb+1,N),由于X轴上每前进一帧,只用到前两列的累积距离,所以只需要三个列矢量A、B和C分别保存连续三列的累积距离,而不需保存整个距离矩阵。每前进一帧都对A、B、C进行更新,即用A和B的值求出C,再根据B和C的值求出下一列的累积矩阵放入A中,由此可以反复利用这三个矢量,一直前进到X轴上最后一列,最后一个求出矢量的第M个元素即为两个模板动态规整的匹配距离。高效DTW对识别的区域进行了限制,整个平面区域大小为M×N,匹配区域的大小为公式(12)若M=N=150,则限定区域内的计算量只是传统DTW算法计算量的24%;同时算法节省了空间,由原来的2个N×M矩阵,减少为3个M矢量,大大减少了需要的存储空间,解决了普通DTW算法在存储空间有限的嵌入式系统中难以实现的问题。4.MATLAB实验与分析为了对算法的识别效果进行测试,设计了用于数字家庭控制系统的识别命令集,并基于Matlab构建了孤立词语音识别系统,对识别算法进行实验和分析。该命令集包括语音命令100条,分别是如下几类:l语音通话控制命令,例如,“拨打电话”,数字,人名;l音乐控制类,“打开音乐”、“减小音量”等;l门窗控制类,“关闭百叶窗”、“打开大门”等;l家庭电器控制类,“打开空调”、“打开收音机”等。该系统使用设计的端点检测技术、特征提取和模板匹配技术。语音采用频率为8KHz,16位量化精度,预加重系数a=0.95,语音帧每帧30ms,240点为一帧,帧移为80,窗函数采用Hamming窗。LPC参数为10阶,LPCC参数为16阶。实验人员为三名同学,两男一女,分别用甲乙丙代表,实验环境为办公室环境。实验平台为WindowsXP,Matlab7.0,进行的各项实验和数据分别如下:(1)改进端点检测实验针对于设计的端点检测算法,得到改进前和改进后语音识别率的变化,数据见表1。其中,改进前和改进后所用的参考模板和测试模板数据相同。实验的过程是,Matlab程序自动把50个测试模板逐个和100个参考模板进行匹配,找到测试模板所对应的语音命令。表1改进端点检测前后的识别率Table1.therecognitionratioofbeforeandafterameliorateendpoin