1、第 1 页 共 17 页智能驾驶中关键词识别系统的设计与仿真0 引言语音识别作为人机交互通信的主要技术,一直受到国内外研究机构的广泛关注。语音识别技术的飞速发展,使得语音识别在各个领域的影响越来越重要。当今世界进入信息时代,科技资料急剧增多,科学技术飞速发展国际合作和交流日益广泛和深入。但是,语言的差异已经成为人们获取信息、增进了解、扩大交流与合作的严重阻碍。因此,语音识别技术的发展不仅是每个国家发展的重要支点,同时也是加强国家国际竞争力的重要技术。智能驾驶是当前国内外研究的热门领域,如国际著名的谷歌公司、国内百度公司等,都在进行智能驾驶技术的研发工作。智能驾驶涉及注意力吸引和注意力分散的认知
2、工程学,主要包括网络导航、自主驾驶和人工干预三个环节。智能驾驶的前提条件是,我们选用的车辆满足行车的动力学要求,车上的传感器能获得相关视听觉信号和信息,并通过认知计算控制相应的随动系统。语音识别是智能驾驶的基础技术,只有高精度的语音识别基础才能实现人机无障碍交互,进而通过计算机控制车辆行驶,所以语音识别是智能驾驶领域的重要技术之一,也是制约智能驾驶精度的瓶颈。语音识别技术起源于 20 世纪 50 年代,以贝尔实验室的 Audry 系统为标志 1,8。先后取得了线性预测分析(LP)、动态时间归整 (DTW)、矢量量化(VQ)、隐马尔可夫模型(HMM) 等一系列关键技术的突破和以 IBM 的 Vi
3、aVoice、Microsoft 的 VoiceExpress9为代表的一批显著成果。国内的语音识别起步较晚,1987 年开始执行国家 863 计划后语音识别技术才得到广泛关注。具有代表性的研究单位为清华大学电子工程系与中科院自动化研究所模式识别国家重点实验室,中科院声学所等 9。其中中科院自动化所研制的非特定人连续语音听写系统和汉语语音人机对话系统,其准确率和系统响应率均可达 90%以上 1。常见的语音识别方法有动态时间归整技术(DTW)、矢量量化技术(VQ)、隐马尔可夫模型(HMM)、基于段长分布的非齐次隐马尔可夫模型(DDBHMM)和人工神经元网络(ANN) 1,9。DTW 是较早的一种
4、模式匹配和模型训练技术,它应用动态规划的思想成功解决了语音信号特征参数序列比较时时长不等的难题,在孤立词语音识别中获得了良好性能。虽然 HMM模型和 ANN 在连续语音大词汇量语音识别系统优于 DTW,但由于 DTW 算法计算量较少、无需前期的长期训练,也很容易将 DTW 算法移植到单片机、 DSP 上实现语音识别且能满第 2 页 共 17 页足实时性 7要求,故其在孤立词语音识别系统中仍然得到了广泛的应用。本文将通过能识别数字 09 的语音识别系统的实现过程详细阐述基于 DTW 算法的特定人孤立词识别的相关原理和关键技术。1 语音识别系统概述语音识别系统的典型原理框图 1,9-10如图 1-
5、1 所示。从图中可以看出语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语音信号不能直接用于提取特征,而要进行前期的预处理。预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。经过预处理的语音数据就可以进行特征参数提取。在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。后续的处理过程还可能包括更高层次的词法、句法和文法
6、处理等,从而最终将输入的语音信号转变成文本或命令。预处理 特征提取测度估计失真测度模板库语音输入识别决策识别训练识别结果专家知识图 1-1 语音识别系统原理框图本文所描述的语音识别系统(下称本系统) 将对数字 09 共 10 段参考语音进行训练并建立模板库,之后将对多段测试语音进行识别测试。系统实现了上图中的语音输入、预处理、特征提取、训练建立模板库和识别等模块,最终建立了一个比较完整的语音识别系统。2 语音信号预处理语音信号的预处理模块一般包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。在不同的系统中对各子模块会有不同的要求,如在嵌入式语音识别系统中一般要求有防混叠滤波电路 5、A/
7、D 转换电路和采样滤波电路等,而在计算机上实验时则可由音频采集卡完成,无需实验者亲自动手。第 3 页 共 17 页2.1 语音信号采集在 Matlab 环境中语音信号的采集可使用 wavrecord(n,fs,ch,dtype)函数录制,也可使用Windows 的“录音机”程序录制成 .wav 文件然后使用 wavread(file) 函数读入。为了进行批量的的训练和识别处理,本系统的训练语音和识别语音全部使用“录音机”程序预先录制。如图 2-1 所示为数字 0 的训练语音 00.wav 的信号波形图,第 (I)幅图为完整的语音波形,第(II)、(III) 幅图分别为语音的起始部分和结束部分的
8、放大波形图。0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8-0.500.51 (I) “00.wav”信信信信信信Time:sAmplitude(normalized)0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3-0.500.51 (II) “00.wav”信信信信信信信信信信Time:sAmplitude(normalized)0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5-0.500.51 (III) “00.wav”信信信信信信信信信信Time:sAm
9、plitude(normalized)图 2-1 语音 00.wav 的信号波形图2.2 分帧语音信号是一种典型的非平稳信号,它的均值函数 u(x)和自相关函数 R(xl,x2)都随时间而发生较大的变化 5,9。但研究发现,语音信号在短时间内频谱特性保持平稳,即具有短时平稳特性。因此,在实际处理时可以将语音信号分成很小的时间段(约 1030ms5,7),称之为“帧” ,作为语音信号处理的最小单位,帧与帧的非重叠部分称为帧移,而将语音信号分成若干帧的过程称为分帧。分帧小能清楚地描绘语音信号的时变特征但计算量大;分帧大能减少计算量但相邻帧间变化不大,容易丢失信号特征。一般取帧长 20ms,帧移为帧
10、长的1/31/2。在 Matlab 环境中的分帧最常用的方法是使用函数 enframe(x,len,inc),其中 x 为语音信号,len 为帧长,inc 为帧移。在本系统中帧长取 240,帧移取 80。第 4 页 共 17 页2.3 预加重对于语音信号的频谱,通常是频率越高幅值越小,在语音信号的频率增加两倍时,其功率谱的幅度下降 6dB。因此必须对高频进行加重处理,一般是将语音信号通过一个一阶高通滤波器 1-0.9375z-1,即为预加重滤波器。其目的是滤除低频干扰,特别是 50Hz 到60Hz 的工频干扰,将对语音识别更为有用的高频部分进行频谱提升。在计算短时能量之前将语音信号通过预加重滤
11、波器还可起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。预加重滤波器在 Matlab 中可由语句 x=filter(1-0.9375,1,x)实现。2.4 加窗为了保持语音信号的短时平稳性,利用窗函数来减少由截断处理导致的 Gibbs 效应。用的最多的三种为矩形窗、汉明窗(Hamming)和汉宁窗(Hanning)。其窗函数如下,式中的N 为窗长,一般等于帧长。矩形窗:汉明窗(Hamming):汉宁窗(Hanning):WR = 1 (0nN-1)0 (Other)WHM = 0.5-0.46cos(2 n/(N-1) (0nN-1)0 (Other) WHN = 0.5-0.5cos
12、(2n/(N-1) (0nN-1) 0 (Other)(2-1)(2-2)(2-3)窗口的选择非常重要,不同的窗口将使能量的平均结果不同。矩形窗的谱平滑,但波形细节丢失;而汉明窗则刚好相反,可以有效克服泄漏现象,具有平滑的低通特性 4-6。因此,在语音的时域处理方法中,一般选择矩形窗,而在语音的频域处理方法中,一般选择汉明窗或汉宁窗 5-6。在 Matlab 中要实现加窗即将分帧后的语音信号乘上窗函数,如加汉明窗即为 x=x.*hamming(N)。本系统中的端点检测采用时域方法故加矩形窗,计算 MFCC系数时加汉明窗。3 端点检测在基于 DTW 算法的语音识别系统中,无论是训练和建立模板阶段
13、还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。语音端点检测是指用计算机数字处理技术从包含语音的一段信号中找出字、词的起始点及结束点,从而只存储和处理有效语音信号。第 5 页 共 17 页对汉语来说,还可进一步找出其中的声母段和韵母段所处的位置。语音端点检测是语音分析、合成和识别中的一个重要环节,其算法的优劣在某种程度上也直接决定了整个语音识别系统的优劣。进行端点检测的基本参数主要有短时能量、幅度、过零率和相关函数等。端点检测最常见的方法是短时能量短时过零率双门限端点检测,近年来在此基础上发展出的动态窗长短时双门限端点检测方法 4也被广泛使用。3.1 短时能量语音和噪声的主要区别在它
14、们的能量上,如图 3-1(III) 和图 3-2(III)所示。语音段的能量比噪声段的大,语音段的能量是噪声段能量叠加语音声波能量的和。对第 n 帧语音信号的短时能量 En 的定义为:(3-1)102)(NmnnxExn 为原样本序列在窗函数所切取出的第 n 段短时语音,N 为帧长。因为在计算时使用的是信号的平方,故将 En 作为一个度量语音幅度值变化的函数有一个缺陷,即对高电平非常敏感。因此在许多场合会将 En 用下式来代替:(3-2)|)(|10Nmnx这样就不会因为取平方而造成信号的小取样值的大取样值出现较大差异。本系统中窗函数为 WR(见式 2-1),N 为 240。图 3-1(I)和
15、图 3-2(I)分别为数字 0 的训练语音 00.wav 和数字 4 的训练语音 40.wav 的波形,图 3-1(III)和图 3-2(III)分别为它们的短时能量。第 6 页 共 17 页0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8-0.500.51 (I) “00.wav”信信信信信信Time:sAmplitude(normalized)0 50 100 150 2000510(II) 信信信信信FrameZcr0 50 100 150 2000510(III) 信信信信FrameEnergy图 3-1 语音 00.wav 的时域分析参数0 0.1 0.2 0.3
16、0.4 0.5 0.6-0.500.51 (I) “40.wav”信信信信信信Time:sAmplitude(normalized)0 20 40 60 80 100 120 140 160 180050100(II) 信信信信信FrameZcr0 20 40 60 80 100 120 140 160 18002040(III) 信信信信FrameEnergy图 3-2 语音 40.wav 的时域分析参数3.2 短时过零率短时过零表示一帧语音信号波形穿过横轴(零电平) 的次数。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号则称为过零。过零率就是样本
17、改变符号次数,定义语音信号寿(m)的短时过零率 Zn 为:第 7 页 共 17 页(3-3)10 |)1(sgn)(s|2Nmnn mxxZ(3-4)1 (x0)-1 (x0)sgnx=清音的能量多集中在较高的频率上,它的平均过零率要高于浊音,故短时过零率可以用来区分清音、浊音以及无声。图 3-1(II)和图 3-2(II)分别为数字 0 的训练语音 00.wav 和数字 4 的训练语音 40.wav 的短时过零率。从图中可以看到清音 s的过零率明显高于其后的i音,有声段过零率明显高于无声段,但在鼻音阶段过零率迅速滑落到无声水平而能量值则是缓慢下滑。在实际应用时并不能通过式 3-3 直接计算过
18、零率,因为在无声段噪声使语音波形在 0 值附近来回摆动,导致计算出的过零率和有声段的区别并不十分明显。比较简单的解决方法是设定一个差的阈值 ,使不仅 xn(m)*xn(m-1) 。在本系统中经多次试验取定 =0.01。3.3 双门限端点检测双门限端点检测顾名思义需要两级检测,即短时能量检测和短时过零率检测。在开始检测之前需要设定 4 个门限,即分别为短时能量和短时过零率各设置一个高门限和一个低门限:E High、E Low 和 ZHigh、Z Low。整个语音端点检测分为四部分:静音段、过度段、语音段、结束段。在静音段中如果能量或过零率有一个超过了其低门限,则认为进入了过度段。在过度段中,由于
19、参数数值较小,还不能确定是否真的进入语音段,只有两个参数的其中一个超越了高门限才被认为是进入语音段。当参数降至低门限则认为进入结束。此外,还有两种可能会引起端点检测的误判:一是短时噪音引起的误判,此时则需要引入最小语音长度门限进行噪声判定,即语音段时间小于一定数值则认定为是噪声,重新回到静音段,本系统设为 20ms;二是语音中字与字的时间空隙引起的误判,此时需要设定最大静音长度门限来降低识别的错误率,本系统所训练和识别的都为单字,故无需设置此门限。在双门限端点检测中4个门限的设定至关重要,门限设定的好坏将直接影响端点检测的结果。门限值的设置还没有一个通用可靠的方法,需要根据经验和特定环境进行调
20、整。常见的方法有最大值乘上某个比率、中位值乘上某个比率、最小值乘上某个常数、前三帧平均值乘上某个常数等。本系统中E High,E Low,Z High,Z Low的取值分别为:EHigh=max(min(amp)*10,mean(amp)*0.2,max(amp)*0.1); ZHigh=max(round(max(zcr)*0.1),5);ELow=min(min(amp)*10,mean(amp)*0.2,max(amp)*0.1); ZLow=max(round(mean(zcr)*0.1),3);第 8 页 共 17 页图3-3和图3-4 分别是数字0的训练语音00.wav和数字4的训
21、练语音40.wav的端点检测结果,红线之间的部分为检测出的语音有声段。2000 4000 6000 8000 10000 12000 14000 16000 18000-0.500.51 (I) “00.wav”信信信信SampleSpeech20 40 60 80 100 120 140 160 180 200 2200510(II) 信信信信信FrameZCR20 40 60 80 100 120 140 160 180 200 2200510(III) 信信信信FrameEnergy图 3-3 语音 00.wav 的端点检测结果2000 4000 6000 8000 10000 1200
22、0 14000-0.500.51 (I) “40.wav”信信信信SampleSpeech20 40 60 80 100 120 140 160 180050100(II) 信信信信信FrameZCR20 40 60 80 100 120 140 160 18002040(III) 信信信信FrameEnergy图 3-4 语音 40.wav 的端点检测结果4 语音识别参数提取经过预处理的语音数据就可以进行特征参数提取,特征参数的好坏将直接影响系统的第 9 页 共 17 页性能和效率,对特征参数的要求包括 9-10:(1) 提取的特征参数能有效地代表语音特征,具有很好的区分性;(2) 各阶参数
23、之间有良好的独立性;(3) 特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。4.1 LPC 与 LPCC 系数LPC(Linear Prediction Coefficient,线性预测系数)模拟人发音器官的声管模型,是一种基于语音合成的参数模型。在语音识别系统中很少直接使用 LPC 系统,而是由 LPC 系数推出的另一种参数 LPCC。LPCC(Linear Prediction Cepstrum Coefficient,线性预测倒谱系数)是LPC 在倒谱域中的表示。该特征是基于语音信号为自回归信号的假设,利用线性预测分析获得倒谱系数。LPCC 的优点是计算量小,易于实现
24、,对元音有较好的描述能力,缺点是对辅音描述能力较差。4.2 MFCC 系数LPC 模型是基于发音模型建立的,LPCC 系数也是一种基于合成的系数,这种参数没有充分利用人耳的听觉特性。实际上,人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数的关系 9-10。近年来,一种能够比较充分利用人耳的这种特殊感知特性的系数得到了广泛应用,这就是 Mel 尺度倒谱系数(Mel-scaled Cepstrum Coefficients,简称 MFCC)。大量研究表明,MFCC 系数能够比 LPCC 参数更好地提高系统的识别性能 10。MFCC 系数的计算是以“bark”
25、为其频率基准的,它和线性频率的转换关系是:(4-1)701(log259ffmel MFCC 系数也是按帧计算的,首先要通过 FFT 得到该帧信号的功率谱 S(n),转换为 Mel 频率下的功率谱。这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:Hm(n) m=0,1,M-1; n=0,1,N/2-1 (4-2)M 为滤波器的个数,通常取 24,与临界带的个数一样;N 为一帧语音信号的点数,为了计算 FFT 的方便,通常取 256。滤波器在频域上为简单的三角形,其中心频率 fm 在 Mel 频率轴上是均匀分布的。如图 4-1 所示为 Mel 尺度滤波器组,包含 24 个滤波器,语音信
26、号帧长取为 256 个点,语音信号的采样频率为 8KHz, 。第 10 页 共 17 页0 20 40 60 80 100 120 14000.20.40.60.811.21.41.61.82 Mel-Spaced FilterbankFrequency Hz图 4-1 Mel 尺度滤波器组带通滤波器的系数事先计算好,在计算 MFCC 系数是直接使用。 MFCC 系数的计算过程如下:(1) 预处理:确定每一帧语音采样序列的长度( 如 N=256),并对每帧序列 s(n)进行预加重、分帧和加窗处理;(2) 计算离散功率谱:对预处理的每帧进行离散 FFT 变换得到其频谱,再取模的平方作为离散功率谱
27、 S(n);(3) 将功率谱通过滤波器组:计算 S(n)通过 M 个 Hm(n)后所得的功率值,即计算 S(n)和 Hm(n)在各离散频率点上的乘积之和,得到 M 个参数 Pm,m=0,1,M-1;(4) 取对数:计算 Pm 的自然对数,得到 Lm,m=0,1, M-1;(5) 离散余弦变换:对 Lm 计算其离散余弦变换,得到 D m,m=0,1, M-1,舍去代表直流成份的 D0,取 D1,D 2,D k 作为 MFCC 参数。具体流程可以用框图 4-2 表示为:预处理F F T | |2M e l 滤波器组L o g D C T语音信号M F C C系数图 4-2 MFCC 系数计算流程图在 Matlab 环境中计算 M 个滤波器的系数可以调用语音工具箱 voicebox 中的函数melbankm(m,n,fs)来实现,其中 m 为滤波器的个数,n 为语音帧长,fs 为采样频率。计算mfcc 系数的函数为 melcepst(s,fs),s 为语音信号。