文献综述(或调研报告):
系统整体可分为特征提取和神经网络关键词识别这两个部分,我研读了大量相关论文,来对这两部分具体实现方案进行了相关调研。
首先,特征提取部分通常使用DTW(Dynamic Time Warping)[1]、LPC(Linear Predictive Coding)、MFCC(Mel-frequency Cepstral Coefficients)[2]等相关算法,DTW是通过放缩音频时间轴长度来测试其与参考模板的匹配度来直接得到语音结果的,不需要神经网络,直接可以判断出音频的结果,但是DTW的算法效率较低,成功率较低误认率较高,而且只能识别孤立词。LPC算法是通过估计共振峰、剔除它们在语音信号中的作用、估计保留的蜂鸣音强度与频率来分析语音信号。具体是用若干个过去语音取样值线性加权组合来当前的语音取样值进行对比,通过修改加权系数使的两者最终逼近,这些加权系数就能代表语音的特征,这是早期特征系数的来源,但是这种方法受噪声影响大,得到的特征值准确性较低。MFCC是通过将时域信号转化为频域信号,再对频域信号进行梅尔滤波,梅尔滤波的本质是将最终特征尽可能接近人的生理感官(因为人对声音的感知是非线性的),然后再对梅尔滤波结果做自然对数运算,最终对取自然对数后的结果做DCT变换得到声音的一系列特征。通过实验比较,在加上任何一种噪音的情况下,MFCC的表现都更优于LPC[3],图1为MFCC和LPC在不同情况下得到特征与标准特征的偏差值。可见,与LPC相比MFCC的失真度更小。因此最终选定MFCC为系统特征提取的方案。
图1 MFCC和LPC特征提取偏差值比较图
对于MFCC过程的研究发现,在硬件实现MFCC的过程中,系统整体功耗和片上存储代价都集中于MFCC中的FFT步骤,因此,我们对FFT的硬件硬件架构做了相关调研。现有的FFT在原理上可分为基2时分FFT、基4时分FFT、基8时分FFT[4]等,不同的基数值意味着蝶形运算单元的不同。基数值的提高是通过提升蝶形运算单元的输入数据大小和算法复杂程度,来降低算法的硬件代价。而从硬件设计架构来看,目前分为两大类:并行FFT架构和串行FFT架构[5][6](又称为pipeline流水线架构)。并行FFT架构是将FFT蝶形运算网络整体实现在硬件上,实现一帧512点数据的输入,在经过9层蝶形运算单元,最终直接输出一帧的FFT结果,其优点是速度快,实时性极好,但是由于网络整体都要放在硬件上,9层FFT(每层512个16位精度的数据)意味着占用了72kb的ROM,资源占用太大。而且每次都要对存储器进行大量的存储和读取操作,这将导致功耗太高。而串行FFT架构在牺牲了一定速度的情况下,复用了大量蝶形运算单元,来降低存储损耗和功耗,而且流水线架构是FFT结果是依次流出,只要系统整体频率满足总时间小于一帧信号输入的时间,运行速度较慢也是在可承受范围之内的。而在串行FFT架构里,又分为R2MDC、R2SDF、R4SDF、R4MDC、R4SDC、R22SDF[7]等,其基本样式都是按照流水线架构形式,具体区别只是不同算法在控制逻辑和蝶形运算顺序以及大小的区别。经比较得到这些算法的区别,如表1所示。由表可知,R22SDF在资源使用和算法简洁性上都优于其他算法。因此初步选择R22SDF为MFCC中FFT算法的硬件架构。
表1 算法硬件需求对比表
其次,在关键字识别部分,早期使用基于隐马尔科夫模型(HMM)的Keyword and Filler系统[8],此系统关键是图2中的解码模块,和语音识别器中的解码器类似,它也是通过维特比算法(用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列)来获取到最优的路径,但是在解码网络具体的构建和语音识别中LVCSR[9](大规模词表语音识别)系统有一定的区别,语音识别中的解码网络包含所有词典中的词汇,而唤醒的解码网络包含了关键词和Filler的途径,除了关键词以外的词汇都包含在Filler路径当中,不是每一个词都会有相应的路径,因此与语音识别网络相比,它的结构会小很多,因为只对关键词进行解码,因此可选的路径的数量就相对减少,解码的速度也会得到大幅度的提升。对于解码出来的候选再作一个判断,这就是一套完整的技术方案构架了。
图2 隐式马尔科夫模型架构
以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。