本系统的目的是在廉价定点数字信号处理器(DSP)芯片上实现语音识别。在微机平台,一般采用隐含Markov模型(HMM)进行语音识别,该算法在识别阶段计算量较少,适应性强,但是需要大量的前期训练工作。由于DSP系统存储资源有限,计算速度也比较慢,大运算量的前期训练是无法在有限的DSP资源上独立完成的,因此系统采用了动态时间弯折算法(DTW),以解决模板匹配中时间不定长的问题,实现了一个特定人小词表语音识别系统。下面分别介绍该系统的硬件和软件结构。 1 系统硬件 系统的电路原理如图1所示。该系统采用Analog Decive公司(ADI)的定点数字信号处理器ADSP2181为核心部件。2181指令字长24位,数据字长16位,在16.67MHz下工作,指令周期可达30ns。用AD73311编码译码器(COEDC)作语音输入输出模拟前端。AD73311是ADI公司的低成本、低功耗通用模拟前端。它具有诸多优良性能:如16位75dB的模数转换信噪比和70dB的数模转换信噪比、输入输出采样频率和增益可编程、小的转换群延时、允许8个芯片级连、工作电压范围宽(2.7~5.5V)、自身带参考电压等,在语音信号处理和有源控制方面得到了广泛的应用。AD73311通过串行口与2181相连。采用一片 27C512作为程序存储器,系统复位后,程序自动由EPROM中加载进入DSP的片内程序存储区运行。还有一片AT29C020作为模板和语音存储器,通过BDMA接口与2181相连。以上四个芯片组成了语音识别的核心电路。系统的译码电路由一片GAL16V8实现,复位和电源监视电路由MAX705实现,还有一片74HC574用来输出识别结果,这就构成了基本的语音识别模块。加上可选的键盘、LCD显示接口和相应的译码电路,即可构成完整的控制器。该控制器具有体积小、成本低的优点。 2 系统软件 2.1 语音信号的端点检测 所谓端点检测,就是从含噪声的环境中检测出说话人的语音命令。我们采用语音信号的短时能量和过零率来进行端点检测。语音信号的采样频率为8kHz,每帧数据为30ms,共240个采样点,帧交迭10ms,共80个采样点。每隔10ms计算一次短时能量和过零率。短时能量用下面公式计算: 其中N为一帧语音的采样点数(240)。过零率为一帧语音信号穿越零电平的次数。短时能量描述了信号的幅度,而过零率对能量低的清音比较敏感,两者配合起来就可以准确地判断语音信号的开始和结束。 2.2 语音参数的选择和计算 输入的模拟语音信号首先要通过截止频率为4kHz的抗混迭滤波器,然后由AD73311采样和量化。接下来很重要的一环就是特征参数的提取。对特征参数的要求是:(1)能有效地代表语音特征,包括声道特征和听觉特征,具有很好的区分性;(2)各阶参数之间有良好的独立性;(3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。一般选择线性预测倒谱系数(LPCC)和Mel频率倒谱系数(MFCC)作为语音识别的参数,两种参数的计算请参考文献[1]和[2]。该系统为每帧信号计算出12阶LPCC系数,加上短时能量和过零率,作为以后的识别参数。以上算法是用ADSP2181的汇编语言实现的定点算法,比纯浮点算法快得多,可以在720μs内完成,从而可以达到实时计算。 大量文献的研究表明,MFCC系数对提高识别率有一定的作用。我们也在ADSP2181上实现了MFCC系数的定点算法,但是与LPCC系数相比, MFCC系数计算有两个缺点:一是计算时间长,一帧参数的计算至少需要1.25ms;二是精度难以保证。由于MFCC系数的计算需要FFT变换和对数操作,影响了计算的动态范围,要保证其在定点DSP上的运算速度,就只有牺牲参数精度。而LPCC参数的计算有递推公式,速度和精度都可以保证。在微机和 DSP平台上分别进行的大量试验表明,LPCC参数已经足以满足我们的识别要求,同时采用LPCC参数,可以减少计算时间,从而降低系统功耗。 2.3 语音的编码与回放 本系统采用8kHz采样频率,精度为16位,数据传输率为128kbps。采用ADPCM算法实现对语音的编码,将采集到的语音样本压缩到32kbps,可以保持清晰的音质,同时大大降低存储需求。为了进一步降低码率,系统还可以采用GSM编码算法,不但合成语音质量好,而且算法比较简单,可以在 ADSP2181定点DSP芯片上实时实现。它的码率为13.6kbps。GSM编码实际上是规则脉冲激励长时线性预测编码(RPE-LTP),它包括预处理、LPC分析、短时分析滤波、长时预测和规则脉冲激励序列编码等五部分。GSM算法比ADPCM相对复杂,占用DSP计算时间也长,因而功耗也相对高。 2.4 参数模板的管理 语音参数和ADPCM编码保存在256kB的Flash RAM内。该芯片为AT29C020,是非易失存储器。为了合理利用这有限的存储资源,同时实现快速的模板搜索,我们参考DOS的磁盘管理系统,实现了以扇区为单位的管理系统。 首先将256K字节空间划分为1024块,每块为一扇区,每扇区256字节。由于2181的字长为16位,因此每扇区按128字处理。如果设置类似DOS的文件分配表(FAT)和文件目录表,来管理这些扇区,势必导致对这两个表的频繁读取和擦写。考虑到Flash RAM的擦写次数有限,而其读取速度很快,我们采用了顺序表的方法进行管理。每扇区的格式固定,如表1所示。
其中标志字含义为:0x01:语音参数扇区,0x02:语音ADPCM编码扇区,0xffff:空白扇区,其它:坏扇区。编号字分高低8位两个字节,高8 位为命令分组(或用户)号码,低8位为该命令分组(或用户)的命令编号。长度字为该模板或语音编码的帧数。读取模板时,根据给定的分组号和命令号,顺序搜索FlashRAM,将符合条件的扇区读入片内存储器,组装成一个完整的模板。写模板时,首先将片内存储器中的数据按125字分成若干块,再依次寻找空闲扇区,加上三个字的头信息,写入FlashRAM。写入时采用累加和进行校验,如果写入有错误,则将该扇区标记为坏扇区。试验证明,该方法稳定可靠,而且速度很快,检索一个模板平均只需5ms左右。 2.5 参数模板的匹配 本系统采用动态时间弯折算法完成模板的匹配。在孤立词语音识别中,最为简单有效的方法是采用DTW算法。该算法基于动态规划的思想,解决了发音长短不一的匹配问题,是语音识别中出现较早,较为经典的一种算法。 DTW算法用于计算机两个长度不同的模式之间的相似程度,或称失真距离。假设测试和参考模式分别用T和R表示,按时间顺序含有N帧和M帧的语音参数,由于每帧数据为12维,T、R分别为N×12和M×12的矩阵。失真距离越小,表示T、R越接近。 如果把测试模式的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模式的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(n,m)表示测试模式中某一帧与训练模式中某一帧的交会点。对应两个12维的向量的欧氏距离。DTW算法可以归结为寻找一条通过此网格中若干交叉点的路径,使得该路径上节点的距离和(即失真距离)为最小。本系统的DTW算法也是用定点汇编程序实现,以加快速度。 2.6 进一步提高识别率的措施 为了进一步提高系统的识别率,我们设计了两种措施。首先是为每个语音命令设置四个模板的预留空间,每个命令可以有四个模板参与识别。识别结果取其中的最小者或平均值,这样可以尽量适应说话人语气语调的变化,大大提高一次识别率。其次提供多候选供用户确认,设置确认词,即“正确”、“不对”。程序在模板匹配完成后,选择3个最佳模板,如果其中最佳模板的得分高于确信门限,则提示用户口呼确认词加以选择。该措施大大降低了错误识别率。 2.7 模板管理 在训练过程中,可以通过键盘和液晶显示器进行模板录制和管理。键盘上有语音录制、回放,模板添加、删除,FlashRAM存储器管理等功能,操作状态和结果由液晶显示器显示出来。在识别阶段,这两者都不再需要。 总之,以本系统为基础,我们成功地开发了通用语音识别模块、汽车语音防盗报警器等系统。经过大量试验和应用表明,该系统稳定可靠,正确识别率超过97%,系统平均响应时间小于0.5s。其硬件成本低,可以控制在200元以下,是一种实用的语音识别装置。
|