1 硬件平台
嵌入式系统的软硬件高度结合,针对系统的特定任务,要量体裁衣、去除冗余、使得系统能够在高性能、高效率、高稳定性的同时,保证低车成本和低功耗,因此,系统硬件平台的选用是因为系统整体性能的关键因素,系统采用Infineon公司Unispeech 80D51语音处理专用芯片作为芯片的硬件平台,该芯片集成了一个16位定点DSP核(OAK)、一个8位MCU核(M8051 E-Warp)、两路ADC、两路DAC、104KB的SRAM以及高灵活性的MMU等器件,其中DSP最高工作频率可达100MHz,MCU最高工作频率为50MHz。
由于系统的语音处理专用芯片UniSpeech集成了大部分的功能单元,片外所需元件很少,因此系统硬件平台的板级结构非常简单,图1为硬件平台的板级结构图。
专用芯片只需外接:
(1)EPROM:存放系统程序;
(2)Flash Memory:存放语音识别系统需要的声学模型参数和系统中的语音提示、语音回放数据;
(3)语音输入器件:可直接外接麦克风,接收语音信号;
(4)语音输出器件:可直接外接扬声器或耳机,输出系统的提示音;
(5)电源:通过电压变换芯片,为电路板上各芯片提供需要的电压;
(6)USB接口:接板级语音识别模块提供了USB接口,以提高该嵌入式系统和通用计算机系统之间数据交换的速度;
(7)键盘:提供外接键盘接口,方便系统控制;
(8)液晶:可外接一块液晶显示屏,以输出识别结果;
(9)其他设备接口:为了增强该语音信号处理模块的功能扩展性,UniSpeech提供了丰富的I/O资源,共有100条通用I/O,系统也预留了这些I/O接口,以方便与其他设备连接。
2 算法研究
2.1 两阶段识别算法
在英语语音识别系统中,常用的声学模型基本单元是单词(word)、上下文无关音速(Monophone)[1]、上下文相关音速(Triphone、Biphone)和音节(Syllable)[2],单词模型由于其灵活性太差及计算时间和占用内存随待识别单词数的增加而线性增长,所以在嵌入式语音识别系统中很少应用。Monophone模型具有模型简单、状态数较少、识别速度快、内存占用少且与识别词汇量无关等优点,但其对发音的相关性描述不够精确,一选识别率不高,Triphone和Syllable模型对发音相关性能准确建模,但模型数量巨大、状态数较多、识别速度慢、内存占用多,为了解决内存占用量与识别速度之间的矛盾,本文采用了两阶段搜索算法,其基本流程如图2所示。
在第一阶段识别中,采用monophone模型和静态识别网络,得到多侯选词条;在第二阶段识别中,根据第一阶段输出的多侯选词条,构建新的识别网络,采用triphone模型,进行精确识别,得到最终的识别结果。由于第二阶段识别的词条数较少,与只采用triphone模型的一阶段识别相比,识别速度大大提高,同时,第二阶段识别可重用第一阶段的内存资源,也减少了级别系统的内存占用量。
2.2 特征提取与选择
在连续语音识别系统中,通常采用39维的MFCC(Mel Frequency Cepstral Coefficient)特征,甚至再加入一些特征。但是,考虑到嵌入式系统有限的硬件资源,在不降低识别率的基础上,应尽量减少特征的维数,本文采用最小互信息改变准则MMIC(Minimum Mutual Information Change)进行特征选择,一阶段采用22维MFCC特征(9 MFCC,6ΔMFCC,4Δ2MFCC,E,ΔE,Δ2E),二阶段采用26维MFCC特征(10MFCC,7ΔMFCC,6Δ2MFCC,E,ΔE,Δ2E)。
2.3 数据的输入输出
对于硬件系统,如果数据的读入速度较慢,则对运算速度影响就很大,在保证系统高识别率的前提下,系统的内存消耗量和识别时间常常是一对矛盾体,很难保证两者同时达到理想状态,如果仅仅考虑节省内存、将每个词条识别网络和相应的状态逐个读入,计算匹配分数,这样虽然可以最大限度地节省内存的使用,但是数据的多次读入占用了大量时间,并且反复计算同一个转移概率,也对识别时间影响很大,另一方面,如果仅仅考虑运算速度,一次性将所有词条的识别网络和所有状态模型读入内存,虽然仅需一次性数据读入,运算速度大大提高,但却对内存提出了更高要求,为了更好地利用系统的硬件资源,本系统首先逐个读入模型,计算所有观察矢量在各状态模型的输出概率,存放在内存中,然后逐条读入识别网络,选取路径似然度最高的词条作为最终的识别结果,这样综合了前面两种方案的优点,适应了硬件系统的要求。
2.4 两阶段端点检测
端点检测是嵌入式语音识别中最基本的模块,端点检测是否准确直接影响系统的运算复杂度和系统的识别性能,因此在不增加复杂运算量的前提下,希望端点检测能尽量准确,而且能适应嵌入式系统多变的应用环境,本文使用了一种有效的两阶段端点检测方法,在第一阶段使用图像分割中经常使用的边缘检测滤波器方法,得到一个能包含语音段同时又比较宽松的端点结果,在第二阶段,对第一阶段的结果进行再判决,使用直方图统计方法得到静音段的能量聚类中心,并用这个中心能量值对整句能量序列进行中心削波,对削波后的能量序列进行最终判决,通常最终的结果会在第二阶段端点检测的基础上作适当的放松,前后放松4-5帧(大约64-80ms),这些放松在求取特征的差分分量时是很有必要的。
在实验室环境下(信噪比大于25dB),以8KHz采样频率录制了20人(其中男、女各10人)的语音数据,对于1200句原始录制语音或带噪语音,对传统的固定能量阈值方法和两阶段检测方法进行了比较测试,测试的性能如表1所示。
传统的固定阈值方法就是针对环境噪声设定一个固定的能量阈值进行端点检测,实践证明,两阶段检测方法无论在安静环境中还是在包含一定噪声的环境中,都比固定能量阈值的端点检测方法有更好的性能,此方法能够进一步改善嵌入式语音识别系统的识别性能。
2.5 束搜索
英语语音发音快、单词长、状态数多,因而搜索时间长,要实现实时识别、就不能在所有的语音数据都得到后再进行解码识别,在两级识别网络中,第一阶段要在大量的词条中搜索,而第二阶段只在N_BEST词条中搜索,相对时间占用量很少,为了满足实时要求,本系统在获取语音信号的同时进行提取特征和第一阶段识别[6],根据硬件的内存容量,考虑到匹配分数所占用的内存,选取每20帧(320ms)的语音完成一次搜索。由于所搜索的词条并没有结束,不能求出最终对应于词条得分数,因此,必须保留每次搜索中每个词条的每个节点的匹配分数,这带来了新的内存开销。
解决方法是在第一阶段识别网络中加入束搜索(Beam Search)快速算法。该算法假设:Viterbi解码过程中的最终路径在任何时刻都能保证较高的似然度,在搜索过程中对网络进行剪枝,只保留匹配分数最大的有限个路径,以减少运算量和内存消耗。但是,要获得匹配得分数最大的几个状态,在每次搜索过程中都要对匹配分数进行排序,这使运算负担加重,在实际中不可取,为了解决这一问题,结合本系统识别网络的特点,采用了一种滑动窗束搜索算法。对于每一个词条网络,Viterbi解码过程中,近似地认为真实路径总是当前匹配分数最优的路径和近邻路径,因此,设置了一个固定宽度的窗,在所有时刻,窗中的路径总包含了该时刻似然度最高的路径及其相邻路径,而那些落在窗外的路径则将被剪枝,由于模型状态不可跨越,因此,下一个活跃路径的位置,只可能是上一个活跃路径的原有位置或者滑动一格,由于中间的匹配分数相同,比较滑动窗两端的匹配分数即可决定下一个滑动窗的位置,这样可大大减少比较的运算量,提高运算速度。
由于语音信号随机性较强,束搜索的这种假设并不符合真实情况,因此,过窄的束宽很容易导致最后识别结果的错误,以三对角高斯模型为例,语音库为10个男生的命令词,窗宽与识别率的关系如表2所示。
可以看出,当窗宽为15时,识别率基本没有下降,这个结果与侯选词条的长度有关,词条的状态越多,最优结果在搜索过程中“露出”窗外的可能性也就越大,综合束搜索对系统率和识别时间两方面的影响,选定了束宽为10的滑动窗算法为系统的束搜索算法。
3 实验结果
实验训练集采用LDC WSJ1训练库(SI_TR_S)包括200人的连续语音,共61个小时,降采样为8KHz,16位量化,测试集为由WSJ1测试集(CDTest和HSDTest)得到的525个短句(每句包含2个单词),侯选词条为535个,包括637个不同的单词发音,同样降采样为8KHz,16位量化。
表3为一阶段识别和两阶段识别的识别率,识别时间和内存占用量比较,从表3中可以看出,与直接进行的一阶段识别相比,两阶段识别通过采用两阶段断电检测方法、MMIC特征选择算法、特征提取和解码同步的束搜索算法,极大的提高了识别率,减少了内存占用量和识别时间。
本文提出了一种基于定点DSP的嵌入式英语孤立词识别系统,两阶段识别的连续HMM模型,其中第一阶段为实时识别,第二阶段为非实时识别,通过采用新颖的两阶段端点测试方法、最后互信息改变准则特征选择算法、特征提取和解码同步的束搜索算法,进一步提高了识别性能、减少了内存占用量和计算复杂度。