孤立词语音识别系统的实现
2014-10-09 来源:eefocus
引 言
在孤立词语音识别中,最为简单有效的方法是采用动态时间规整(Dynamic Time Warping,DTW)算法,该算法解决了发音长短不一的模板匹配问题,是语音识别中出现最早、较为经典的一种算法。用于孤立词识别,该算法较现在比较流行的HMM算法在相同的环境条件下,识别效果相差不大,但HMM算法要复杂的多,这主要体现在HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算。所以在孤立词语音识别中,DTW算法仍得到广泛的应用。本系统就采用了该算法。
系统概述
语音识别系统的典型实现方案如图1所示。输入的模拟语音信号首先要进行预处理,包括预滤波、采样和量化、加窗、断点检测、预加重等。语音信号经过预处理后,接下来重要的一环就是特征参数提取,其目的是从语音波形中提取出随时间变化的语音特征序列。然后建立声学模型,在识别的时候将输入的语音特征同声学模型进行比较,得到最佳的识别结果。
硬件构成
系统构成
这里采用DSP芯片为核心(图2),系统包括直接双访问快速SRAM、一路AlDC/一路DAC及相应的模拟信号放大器和抗混叠滤波器。外部只需扩展FLASH存储器、电源模块等少量电路即可构成完整系统应用。
系统主要功能模块构成
语音处理模块采用TI TMS320VC5402,其主要特点包括:采用改进的哈佛结构,一条程序总线(PB),三条数据总线(CB,DB,EB)和四条地址总线(PAB,CAB,DAB,EAB),带有专用硬件逻辑CPU(40位算术逻辑单元(ALU),包括1个40位桶形移位器和二个40位累加器;一个17×17乘法器和一个40位专用加法器,允许16位带或不带符号的乘法),片内存储器(八个辅助寄存器及一个软件栈),片内外专用的指令集,允许使用业界最先进的定点DSP C语言编译器。TMS320VC5402含4 KB的片内ROM和16 KB的双存取RAM,一个HPI(HostPortInterface)接口,二个多通道缓冲单口MCBSP(Multi-Channel Buffered SerialPort),单周期指令执行时间10 ns,带有符合IEEE1149.1标准的JTAG边界扫描仿真逻辑。
语音输入、输出的模拟前端采用TI公司的TLC320AD50C,它是一款集成ADC和DAC于一体的模拟接口电路,并且与DSP接口简单,性能高、功耗低,已成为当前语音处理的主流产品。16位数据结构,音频采样频率为2~22.05 kHz,内含抗混叠滤波器和重构滤波器的模拟接口芯片,还有一个能与许多DSP芯片相连的同步串行通信接口。
片内还包括一个定时器(调整采样率和帧同步延时)和控制器(调整编程放大增益、锁相环PLL、主从模式)。TLCC320AD50C与TMS320VC5402的硬件连接,如图3所示。
语音识别算法实现
语音信号的端点检测
语音的端点检测是语音识别中最基本的模块,在嵌入式语音识别系统中更是占有非常重要的地位:一方面端点检测的结果不准确,系统的识别性能就得不到保证;另一方面如果端点检测的结果过于放松,虽然语音部分被很好地包含在处理的信号中,但是增加过多的静音则会增加系统的运算量,同时对识别性能也有负面影响。因此为能量和过零率两个参数分别设定两个门限,一个是比较低的门限,数值比较小,对信号的变化比较敏感,很容易就被超过。另一个是比较高的门限,数值比较大,信号必须达到一定的强度,该门限才可能被超过:低门限被超过未必就是语音的开始,有可能是时间很短的噪声引起的。高门限被超过,则基本确信是由于语音信号引起的。
整个语音信号的端点检测可以分为四段:静音、过渡段、语音段、结束。程序中使用一个变量status来表示当前所处的状态。在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。在过渡段中,由于参数的数值比较小,不能确信是否处于真正的语音段,因此只要两个参数的数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果在过渡段中两个参数中任意一个超过了高门限,就可以确信进入语音段了。一些突发性的噪声可以引发短时能量或过零率的数值很高,但是往往不能维持足够长的时间,这些可以通过设定最短时间门限来判别。当前状态处于语音段时,如果两个参数的数值降低到低门限以下,而且总的计时长度小于最短时间门限,则认为这是一段噪音,继续扫描以后的语音数据。否则就标记好结束端点,并返回。
语音特征参数的提取
近年来,一种能够比较充分利用人耳这种特殊的感知特新的参数得到了广泛的应用,这就是Mel尺度倒谱参数(Mel-scaled Cepstrum Coefficients,MFCC)。
参数是按帧计算的。首先要通过FFT得到该帧信号的功率谱,转换为Mel频率下的功率谱。这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器Hm(n)。MFCC参数的计算流程为:
确定每一帧语音采样序列的点数,本系统采取N=256点。对每帧序列s(n)进行预加重处理后再经过离散FFT变换,取模的平方得到离散功率谱s(n)。
计算s(n)通过M个Hm(n)后所得的功率值,即计算s(n)和Hm(n)在各个离散频率点上乘积之和,得到M个参数Pm,m=0,1,…,M-1。
计算Pm的自然对数,得到Lm,m=0,1,…,M-1。
对L0,L1,…,LM-1计算其离散余弦变换,得到Dm,m=0,1,…,M-1。
舍去代表直流成分的D0,取D1,D2,…,Dk作为MFCC参数。此处K=12。
特定人语音识别算法
在孤立词语音识别中,最为简单有效的方法是采用DTW动态时间规整算法,设参考模板特征矢量序列为A={a1,a2,…,aj),输入语音特征矢量序列为B={b1,b2,…,bk},j≠k。DTW算法就是要寻找一个最佳的时间规整函数,使得语音输入B的时间轴K映射到参考模板A的时间轴j上总的累计失真最小。
将己经存入模板库的各个词条称为参考模板,一个参考模板可以表示为{R(1),R(2),…,R(M)},m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模式包含的语音帧总数,R(m)为第m帧语音的特征矢量。所要识别的一个输入词条语音称为参考模板,可表示为{T(1),T(2),…,T(N)),n为测试语音帧标号,模板*包含N帧音,T(n)为第n帧音的特征矢量。
为了比较它们的相似度,可以计算,它们之间的失真D[T,R],失真越小相似度越高。为了计算这一失真,应从T和R中各个对应帧之间的失真算起。将各个对应帧之间的失真累计起来就可以得到两模式间的总失真。很容易想到的办法是当两模式长度相等时,直接以相等的帧号相匹配后累加计算总失真,而当两个模式长度不等时则利用线性扩张或线性压缩的方法使两模式具有相等长度,随后进行匹配计算失真度。但由于人类发音具有随机的非线性变化,这种方法效果不可能是最佳的。为了达到最佳效果,可以采用动态时间规整的方法。如图4所示,横坐标对应“1”这个字音的一次较短的发音,经过分帧和特征矢量计算后共得到一个长度为43帧的语音序列,而纵坐标对应“1”这个字音的一次较长的发音,该语音特征序列共有56帧。为了找到两个序列的最佳匹配路径,现把测试模式的各个帧号n=1~N(图4中N=43)在一个二维直角坐标系中的横轴上标出,把参考模式的各帧号m=1~M(图4中M=56)在纵轴上标出。
通过这些表示帧号的整数坐标画一些纵横线即可形成一个网格,网格中何一个节点(n,m)表示测试模式中的某一帧和参考模式中的某一帧的交汇点。动态时间规整算法可以归结为寻找一条通过此网格中若干交叉点的路径,路径通过的交叉点即为参考模式和测试模式中进行失真计算的帧号。路径不是随意选择的,首先任何一种语音的发音快慢可能有变化,但是各部分的先后顺序不可能改变,因此所选的路径必定从左下角出发,在右上角结束。其次为了防止漫无目的的搜索,可以删去那些向n轴方向或者m轴方向过分倾斜的路径(例如,过分向n轴倾斜意味着R(m)压缩很大而T(n)扩张很大,而实际语音中这种压、扩总是有限的)。为了引入这个限制,可以对路径中各通过点的路径平均斜率的最大值和最小值予以限制。通常最大斜率定为2,最小平均斜率定为1/2。路径的出发点可以选择(n,m)=(1,1)点,也可以选择(n,m)=(1,2)或(1,3)或(2,1)或(3,1)…点出发。前者称为固定起点,后者称为松弛起点。同样,路径可在(n,m)=(N,M)点结束,也可以在(n,m)=(N,M-1)或(N,M-2)或(N-1,M)或(N-2,M)…点结束。前者称为固定终点,后者称为松弛终点。
使用DTW算法为核心直接构造识别系统十分简单,首先通过训练得到词汇表中各参考语音的特征序列,直接将这些序列存储为模板。在进行识别时,将待识语音的特征序列依次与各参考语音特征序列进行DTW匹配,最后得到的总失真度最小且小于识别阈值的就认为是识别结果。该方法最显著的优点是识别率极高,大大超过目前多数的HMM语音识别系统和VQ语音识别系统。但其最明显的缺点是由于需要对大量路径及这些路径中的所有节点进行匹配计算,导致计算量极大,随着词汇量的增大其识别过程甚至将达到难以接受的程度,因此无法直接应用于大、中词汇量识别系统。
结 语
以本系统为基础开发了一种语音拨号系统,经过大量实验表明,该系统电路运行稳定,且识别率可以达到90%。系统成本低,稍加改进就可把该语音识别模块移植应用到各种系统设备中。
下一篇:语音识别及其定点DSP实现