|
摘 要:详细介绍了一种非特定人的数码语音识别算法:连续距离密度分段概率模型(CDD_SPM),同时给出了基于ADSP2181 DSP芯片的语音识别模块的实现方案。 关键词:CDD_SPM;语音识别;DSP;HMM;ADSP-2181
1 引言 近几十年来,国内外关于语音识别的研究取得了重大进展。现已出现了动态时间弯曲(DTW)、隐马尔可夫大模型(HMM)和人工神经网络三种方法。其中隐马尔可夫大模型(HMM)以其计算量少和识别率高等特点,近年来在实践上取得了突破性进展,成为公认的语音识别的主流技术。本文介绍一种非特定人、小词汇表、孤立词的语音识别系统,它采用连续距离密度的分段概率模型(CDD_SPM),并采用ADSP2181 DSP芯片来实现。该系统的识别率大于96%,识别时间小于1秒且性能良好。 2 语音识别技术和CDD-SPM算法 语音识别是把输入的语音信号经过数字信号处理后得到一组特征参数,然后将这组特征参数与预存的模板进行比较,从而确定说话者所说内容的一门新的声音识别技术。图1所示是其原理框图。

在语音识别系统中,前端处理的主要作用是对输入的语音进行分析,以提取出包含语义的语音参量。此外,在孤立词的识别中,还要包括语音的端点检测。语音识别系统中的模型训练阶段主要是对人类的语言进行学习,并在学习结束后把学习的内容组成语音库存储起来。在识别阶段,前端处理的语音参量进入该模块后,可根据不同的识别模型来计算与相应词库中每个模型间的逻辑距离。然后在判决逻辑中确定识别的判决方式并最终确定识别结果。目前有多种语音识别算法,如DTW(Dynamic TimeWrapping)、NNS(Neural Network System)、SPM(Segmental Probability Model)、HMM(Hidden MarkevModelling)以及它们的组合方法。其中以基于HMM模型的系统用的最广泛,同时也最成功。 CDD_SPM算法不同于传统的HMM模型,在性能相差无几的情况下,其计算量远远低于连续隐马尔可夫模型,因而是一种介于连续马尔可夫模型(CHMM)和离散马尔可夫模型(DHMM)之间的模型。它不必进行矢量量化,而具有连续密度分布的特征,但却没有分段概率模型(SPM)那么大的计算量。 2.1 算法原理 假设随机变量ξ符合正态分布N(0,σ),那么其概率密度为:

CDD-SPM模型假定某一段语音的所有特征向量离开特征向量中心C的欧氏距离符合AN(σ),这样,其训练过程就是计算某段语音的CDD_SPM模型中的参数,即矢量中心C和概率密度σ的过程。这两个参数可以用来表征这段语音。识别时,计算出待识别的语音段的每个特征向量离开中心C的距离,进而估计出每个向量出现的概率以及整个段的概率。最后将某个语音的所有段综合起来的最大概率者就是识别结果。 2.2 CDD-SPM模型的训练算法 在CDD-SPM模型的训练算法中,首先对语音库中N个词的M个语音样本按帧计算出特征向量。然后从n=1到N对每个词Wn模型进行训练,并把属于词Wn的所有Q个样本中的每一个样本都非线性划分为J段。最后从j=1到J按以下方法计算每一段的参数,其步骤如下: (1)从q=1到Q统计第j段的矢量中心Cnj; (2)从q=1到Q计算第j段中每个矢量偏离Cnj的距离Dnjq的均值Dnj; (3)计算σnj。 通过以上步骤得到的Cnj和σnj即是第n个词Wn第j段的模型参数。这样,词Wn的模型便是(Cn,σn),其中:

2.3 识别算法 识别算法的主要过程有两步:第一是计算待识别语音Wx的特征向量,并将其非线性划分为J段,设每段的特征向量数为mj。第二是从n=1到N计算Wx与每个词模型λn=(Cn,σn)的匹配概率。而从j=1到J,则可分为以下三步进行处理: (1)计算待识别语音第j段mj个特征向量偏离Cn的距离Dnjk; (2)利用(2)式计算mj个特征向量出现在λn模型中的g(Dnjk); (3)用下式计算第j段mj个特征向量出现的总概率:

最后再从n=1到N检查Pn,以将最大者的模型所对应的词作为识别结果。 2.4 CDD_SPM的实现 前面介绍了CDD-SPM算法的原理,现在介绍本系统中的具体实现步骤: (1)使ADSP2181以8kHz的采样率接收语音数据。 (2)判断语音的起点和终点。在语音采集过程中,计算每一帧的平均能量,连续几帧都达到一定域值就认为已经是语音段,再向前搜索至过零率始终大于某个事先设好的域值,则这就是语音段的起点。终点的判定与起点类似。 (3)预加重、分帧和加窗处理。在每一帧中取256点,帧移为128点。然后通过一个一阶的滤波器H(z)=1-a/z对采集的信号进行处理。 (4)计算LPC系数及LPC倒谱矢量。用Durbin算法计算出P阶LPC系数后,直接用LPC参数求出LPC倒谱。 (5)非线性划分。计算出一个语音样本的各帧的LPC倒谱系数后,不论是训练还是识别,都要对接收到的每个语音样本进行非线性划分,接收到的语音一概划分为6段。具体方法如下: ●计算两个CEP矢量之间距离; ●计算出整个样本所有相邻CEP矢量的距离之和D; ●计算非线性划分的距离标准Davr; ●进行划分。 (6)训练算法。每个样本训练五次,并完成以下工作: ●计算此语音样本每一段的矢量中心; ●计算各段中每个矢量偏离中心的距离的均值Davri; ●计算每一段的参数σi。 (7)识别算法。在算出段内每一个矢量与矢量中心的距离后,通过公式(2)计算出各个矢量出现的概率,再用公式(4)和公式(5)计算出待识别语音与各个模型的匹配概率,最后将匹配概率最大者定为识别结果。 3 系统硬件 本文介绍的语音识别模块由ADSP-2181、CODECMC145503、ROM、FLASH及输入输出器件组成,图2所示为其组成框图。

其中的DSP用于完成语音训练和识别等主要功能。CODEC则用于完成语音的输入输出,即模数/数模转换等功能。利用ROM可存放DSP的程序及初始化数据。而FLASH则用于存放语音模板和压缩的语音。 3.1 DSP与CODEC的接口 CODEC一般可接在DSP的串行通信口0上,采用的芯片是MC145503。该芯片是一种通用语音信号编码电路,其采样率为8kHz,8bit量化,可以选择A率压缩或μ率压缩,符合CCITTG..711建议。图3为ADSP2181与MC145503语音编码器的接口电路。 MC145503语音编码器所需要的2.048MHz时钟信号和8kHz的采样信号都是由ADSP2181提供的,其2.048MHz的时钟信号可使用串口的帧同步信号,而SCLK信号则用的是串行同步时钟。在图3中,DT是发送数据端,DR是接收数据端,TFS是发送帧同步信号,RFS为接收帧同步信号端。其中RFS和TFS为8kHz,SLCK为2.048MHz。 3.2 存储器接口 图4所示是该语音识别模块的存储器接口电路,其中的27C010用来存放自举程序和初始化数据,这是一片采用CMOS工艺的低功耗EPROM,容量为128k。FLASHAT29C020用来存放语音模板和压缩语音。为了对二者进行区分,笔者使用了一片74F139进行译码,这样,当ADSP2181进行BDMA操作时,便可选通74F139译码器。


3.3 与MCU的接口 由于语音识别模块随时要接受MCU送来的指令,并向MCU通信返回接收状态。因此笔者将该语音识别模块和MCU进行串行方式连接,由于CODEC已经用了SPOT0,所以将ADSP2181的SPOT1设为串行模式并通过5根线与MCU相连,其接口电路如图5所示。图中,串行时钟SCLK1设置为输出模式,这样可以充分利用ADSP2181的资源;RFS1和TFS1分别为接收帧同步和发送帧同步信号,它们用于指明串行数据字的开始,帧同步信号可在内部产生,也可在外部产生,它可以是高电平,也可以是低电平。系统中的TFS1为输出,RFS1为输入,它们均为高电平。DR1和DT1分别用于串行数据的接收和发送,SPOT1从DR1上接收数据,由DT1发送数据,发送和接收的首位为MSB,工作在全双工模式,数据位与串行时钟SCLK1同步;通信时,DSP的内部时钟为100kHz,串行通信采用8位字长。 笔者将该语音识别模块放在一般的办公环境中对20个人(10男10女)的名字词条进行了训练(每个词条训练5次)测试,测试表明:当识别条件与训练条件基本一致时,其识别率不小于97%,但是如果环境变化较大,识别率会有所下降。从话筒输入到计算机屏幕显示所需时间不到一秒,可以满足实时性要求,说明本模块已达到实用阶段。

参考文献
1.OppenheimAV,Schafer RW.Digitalsignal Processing.Prentice Hall,Inc.1975.董士嘉译.数字信号处理.北京:科学出版社,1981 2.姚天任,孙洪.现代数字信号处理.武汉:华中 理工大学出版社,1999 3.胡光锐.语音处理与识别.上海科学技术文献出版社,1994 4.吴虎,方励棠.连续距离密度的分段概率模型 CDD-SPM.NCMMSC-94,38-241
|