湖南科技大学信息与电气工程学院DSP原理及应用语音识别器的设计学院信息与电气工程学院班级13级自动化3班姓名冯伟学号13040203192016年5月1概述语音识别(SpeechRecognition)是指让机器听懂人说的话,即在各种情况下,准确的识别语音的内容,从而根据其信息,执行人的各种意图或执行特定的任务,其最终目标是实现人与机器进行自然语言通信。利用DSP可以对语音信号进行实时采集、提取语音特征向量、进行语音识别。语音识别系统对语音特征参量的提取可以采用FFT等算法,不同的参数表示不同的频谱包络。本设计要求利用DSP的DMA方式进行信号采集和信号处理,对语音信号进行实时识别。语音识别按不同的角度有以下几种分类方法:1.识别的单位分类:有孤立词识别、音素识别、音节识别、孤立句识别、连续语音识别和理解。2.识别的词汇量分类:有小词汇(10-50个)、中词汇(50-200个)、大词汇(200以上)等。3.讲话人的范围分类:有单个特定讲话人、多讲话人和与讲话者无关。4.识别的方法分类:有模块匹配法、随机模型法和概率语法分析法。本实验的主要任务就是通过TMS30VC5402对语音信号“0”、“1”、“2”进行训练和识别,并由相应的灯LED0、LED1、LED2亮来显示结果是否正确;该系统核心识别算法采用动态时间规整(DTW)算法,主要流程包括预处理、端点检测、提取特征值、模式匹配和模板训练。1.2DSP系统设计的方法和步骤(1)对A/D、D/A进行初始化;(2)根据识别系统的类型选择一种识别方法,采用语音分析方法分析出这种识别方法所要求的语音特征参数,作为标准模式由机器存储起来,形成标准模式库。(3)对语音进行特征参数的分析,语音信号经过相同的通道得到语音参数,生成测试模板;(4)将测试模板与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果,从而实现语音的识别。2.1设计总体方案语音识别基本原理如图1所示。模拟语音信号经过数字化处理(即采样和量化过程)之后,再经去噪和预加重环节得到较干净的数字语音信号。信号起止点检测的主要作用是从各类背景噪声中找出语音的开始和终止点。这一环节对于后续特征参数的提取非常重要。在孤立词语音识别中,确定语音起止点可有效减少系统计算量。另外,在相对较安静的环境下,依靠短时能量与过零率这两个特征就可以很好地完成语音信号的起止点判决。整个语音识别系统可分为两个阶段,即训练阶段和识别阶段。在训练阶段,由用户说出若干训练字,系统根据一定算法建立上述训练语句的特征参考模板;在识别阶段,则从使用者的发音资料中先导出相关特征参量,再将这些参量与事先训练好的特征参考模板进行相似度计算(即模式匹配)。若两者的相似度大于设定的门限值,则予以确认,反之系统则会拒识。(实际中,采用相似度最大者作为匹配结果输出)3硬件设计(1).系统构成这里采用DSP芯片为核心(图2),系统包括直接双访问快速SRAM、一路ADC/一路DAC及相应的模拟信号放大器和抗混叠滤波器。外部只需扩展FLASH存储器、电源模块等少量电路即可构成完整系统应用。(2).系统主要功能模块构成语音处理模块采用TITMS320VC5402,其主要特点包括:采用改进的哈佛结构,一条程序总线(PB),三条数据总线(CB,DB,EB)和四条地址总线(PAB,CAB,DAB,EAB),带有专用硬件逻辑CPU(40位算术逻辑单元(ALU),包括1个40位桶形移位器和二个40位累加器;一个17×17乘法器和一个40位专用加法器,允许16位带或不带符号的乘法),片内存储器(八个辅助寄存器及一个软件栈),片内外专用的指令集,允许使用业界最先进的定点DSPC语言编译器。TMS320VC5402含4KB的片内ROM和16KB的双存取RAM,一个HPI(HostPortInterface)接口,二个多通道缓冲单口MCBSP(Multi-ChannelBufferedSerialPort),单周期指令执行时间10ns,带有符合IEEE1149.1标准的JTAG边界扫描仿真逻辑。语音输入、输出的模拟前端采用TI公司的TLC320ADSOC,它是一款集成ADC和DAC于一体的模拟接口电路,并且与DSP接口简单,性能高、功耗低,已成为当前语音处理的主流产品。16位数据结构,音频采样频率为2~22.05kHz,内含抗混叠滤波器和重构滤波器的模拟接口芯片,还有一个能与许多DSP芯片相连的同步串行通信接口。TLC320AD50C片内还包括一个定时器(调整采样率和帧同步延时)和控制器(调整编程放大增益、锁相环PLL、主从模式)。TLC320AD50C与TMS320VC5402的硬件连接,如图3所示。4语音识别算法软件实现(1)系统流程图(2)端点检测端点检测的目的就是在复杂的应用环境下的信号流中分辨出语音信号和非语音信号,并确定语音信号的开始及结束。好的端点检测方法能改变语音识别软件存在的检测效果不理想、识别率低等问题。用短时能量短时过零率结合的方法,此方法实现简单,在噪声干扰不大的环境中可以取得较好的识别效果.为了减小语音帧的截断效应,需要加窗处理,采用hamming窗,10),12cos(46.054.0)(NnNnnw因为矩形窗的主瓣宽度最小,旁瓣高度最高,会导致泄漏现象,哈明窗的主瓣最宽,旁瓣高度最低,可以有效的克服泄漏现象,具有更平滑的低通特性,应用更广泛。短时能量定义为:语音信号强度的度量参数)(1020nSENnw短时平均能量的主要用途:①可以从语音中区别出浊音来,因为浊音时短时平均能量的值要比清音时短时平均能量的值大很多;②可以用来区别声母和韵母的分界、无声和有声的分界等③作为一种超音段信息,用于语音识别中。短时过零率:波形穿过横轴的次数|})]1(sgn[)](sgn[|{210nsnsZww0,10,1)sgn(xxx短时过零可以看作信号频率的简单度量:浊音时能量集中于较低频率段内,具有较低的过零率,而清音时能量集中于较高频率段内,具有较高的过零率。短时平均幅度:100)(NnwnSM这里用计算加权了的信号的绝对值之和替代平方和,因而短时处理的方法比较简单,硬件更易实现。因此本实验采用短时平均幅值和短时过零率相结合的双门限端点检测法双门限端点检测顾名思义需要两级检测,即短时平均幅值检测和短时平均过零率检测.首先用短时平均幅值进行第一次判别,然后用短时平均过零率进行第二次判别.开始检测之前,为计算整体平均幅值,当短时平均幅值大于12的整体平均幅值或者第m+1帧的短时过零率大于3倍的第m帧的短时过零率,即找到了语音的开头.当短时平均幅值小于14的整体平均幅值,就找到了语音的结尾。两种可能会引起端点检测的误判,一是短时噪音引起的误判,此时则需要引入最小语音长度门限进行噪声判定,即语音段时间小于一定数值则认定为是噪声.二是语音中字与字的时间空隙引起的误判,此时需要设定最大静音长度门限来降低识别的错误率。这种双门限端点检测是最常用的孤立词识别所采用的端点检测方法,其方法物理意义明确,计算量小,在安静的环境中有较好的识别率,但它也有很多不足,例如门限值需要由经验来设定,更换实验环境,则效果不理想等可以采用的改进方法:采用动态窗长短时能量检测语音端点。检测时首先要对语音信号进行加窗分帧处理,如果窗的长度过大,在提高检测速度的同时导致识别率的下降,如果窗的长度过短,在提高检测识别率的同时增加了检测的时间.考虑此种情况,采用动态窗长短时能量端点检测方法,在静音段使用大窗长,进入过度段后,改用小窗长,进入语音段则使用正常窗长.(3)特征量提取矢量量化的过程是:将语音信号波形的K个样点的每一帧,或有K个参数的每一参数帧,构成k维空间中的一个矢量,然后将这个矢量进行量化临界带特征矢量是指:将一帧信号的功率谱按频率高低分成若干个临界带,每一个临界中的功率谱求和,即可得到相应的临界带特征矢量。每一帧信号都对应一个若干维的临界带特征矢量临界带特征矢量算法的过程第一步,求出每一帧的加窗语音Xn(m):m=0~(N-1),的DFT的模平方值|Xn(k)|2此即为功率谱。做256点的DFT变换,采样频率为8kHz,窗长为38ms(即N=256),窗形为汉明窗。|Xn(k)|2与原始加窗语音信号的频谱模平方|Xn(exp(jwk))|2具有下列关系:|Xn(k)|2=|Xn(exp(jwk))|20~256其中,wk=2πfk,fk=fs512k第二步,划分临界带。在o~fs/2中确定若干个临界带频率分割点。确定的方法是将i=1,2,3⋯代人下面的式子中,即可求出相应的(以Hz为单位)。由此可以求出并且,由构成第一临界带,构成第二临界带,以此类推。在实验数据中需要安排了16个临界带。第三步,求临界带特征矢量。将每一个临界带中的功率谱|Xn(k)|2取和,即可得到相应的临界带特征矢量。如果用表示临界带特征矢量,则每一个分量可通过以下的式子求得。从而,每帧都可以得到一个16维的临界带特征矢量:提取一帧语音信息加Hamming窗FFT变换求功率谱划分频带将频带内功率求和,得到一个语音特征量将算出的16个特征量存储入数组中(4)特定人语音识别算法(两个特征量的比较)目前较为常用的语音识别算法有DTW算法(动态时间归整法)、HMM算法(隐马尔可夫模型法)和ANN算法(人工神经网络法)等。考虑到DSP存储资源的有限性与系统运行实时性等要求,本文设计采用了计算量相对较小,内存空间占用少,算法简单、高效的DTW算法。该算法基于动态规划(DynamicProgramming,DP)的思想,很好地解决了发音长短不一的模板匹配问题,在小词汇量的语音识别中获得了较优的识别效果。动态时间归整算法基本原理如下:以T和R分别表示测试和参考模板,为计算两者之间的相似度,可以计算它们之间的距离D[T,R]。距离越小,相似度越高。设n和m分别是T和R中任意选择的帧号,d[(n),(m)]表示这两帧之间的距离。距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧氏距离。欧氏距离(Euclideandistance)也称欧几里得度量,是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。在二维和三维空间中的欧氏距离的就是两点之间的距离。二维计算公式ρ=√((x1-x2)2+(y1-y2)2)。若n=m,则可以直接进行计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,但这样会忽略掉语音中各个段在不同情况下的持续时间,将会出现或长或短的变化情况,使识别效果难以达到最佳。因此,更多时候采用的是动态规划(DP)的方法。以n为横轴、m为纵轴构建一个二维网格,网格中的每一个交叉点(n,m)表示测试模板中的某一帧与训练模板中的某一帧的交汇点。动态规划算法就是确定一条路径,路径通过的格点坐标即为进行距离计算的帧号。路径不是随意选择的,首先任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束,如图所示DTW算法路径原理示意图为了使路径不至于过分倾斜,将各段线段的斜率限制在0.5~2。如果路径已通过图中格点(ni-1,mi-1),),则下一个通过的格点(ni,mi)只可能是下列三种情况之一:用η表示上述三个约束条件,求最佳路径的问题可以归结为:满足约束条件η时,求最佳路径函数,使沿该路径的积累距离达到最小值,即编程时,可以在数据区开辟出两个nXm的矩阵,即积累矩阵D和帧匹配距离矩阵d,其中帧匹配距离矩阵d(i,j)的值为测试模板的第i帧与参考模板的第j帧的距离,而D(n,m)则为最佳匹配路径所对应的匹配距离,DTW算法可以直接按上面的描述来实现。通过将测试模板和模板库中各个参考模板分别进行DTW运算,就可以找到与测试模板匹配距离“最小”的参考模板。当这一匹配距离值小于所设的门限值时,就可识别出所输入的语音信号。5设计(安装)与调试的体会在实验的过程中,我在网上查找了很多资料,并在图书馆查阅了很多语音识别相关