基于Matlab仿真的孤立词语音识别技术研究Word格式.docx
- 文档编号:18645319
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:15
- 大小:478.90KB
基于Matlab仿真的孤立词语音识别技术研究Word格式.docx
《基于Matlab仿真的孤立词语音识别技术研究Word格式.docx》由会员分享,可在线阅读,更多相关《基于Matlab仿真的孤立词语音识别技术研究Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
(3)连续语音识别。
孤立词识别的任务是识别事先已知的孤立的词,如“开机”、“关机”等;
连续语音识别的任务则是识别任意的连续语音,如一个句子或一段话;
连续语音流中的关键词检测针对的是连续语音,但它并不识别全部文字,而只是检测已知的若干关键词在何处出现,如在一段话中检测“计算机”、“世界”这两个词。
一般来说,语音识别的方法有三种:
基于声道模型和语音知识的方法、利用人工神经网络的方法以及模式匹配的方法。
其中模式匹配方法的发展比较成熟,目前已达到实用阶段,而其他两种方法由于其模型及语音知识过于复杂,现阶段还没有达到实用的阶段。
就模式识别来说常用技术有:
动态时间规整(DTW)、隐马尔可夫模型(HMM)。
本文采用了动态时间规整(DTW)的方法来实现对孤立词的识别,具体用来识别0~10十一个数字。
2语音识别简介
2.1语音识别系统的分类
语音识别是近年来十分活跃的一个研究领域。
本文介绍了语音识别的基本流程、所用到的语音参数算法、语音识别的训练算法和识别算法做初步的探究,主要运用了特定人孤立词识别的DTW算法和非特定人识别的连续HMM算法的MATLAB识别系统。
语音识别按说话人的讲话方式可分为孤立词(IsolatedWord)识别、连接词(ConnectedWord)识别和连续语音(ContinuousSpeech)识别。
孤立词识别是指说话人每次只说一个词或短语,每个词或短语在词汇表中都算作一个词条,一般用在语音电话拨号系统中。
连接词语音识别支持一个小的语法网络,其内部形成一个状态机,可以实现简单的家用电器的控制,而复杂的连接词语音识别系统可以用于电话语音查询、航空定票等系统。
连续语音识别是指对说话人以日常自然的方式发音,通常特指用于语音录入的听写机。
显然,连续非特定人语音识别的难度要大得多,因为不仅有说话人口音的问题,还有协同发音、断字断句、搜索等问题,除了考虑语音的声学模型外还要涉及到语言模型,如构词法、文法等。
2.2语音识别系统的基本构成
语音识别系统的典型实现方案为:
输入的模拟语音信号首先要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等。
语音信号经预处理后,接下来很重要的一环就是特征参数提取。
对特征参数的要求是:
(1)提取的特征参数能有效地代表语音特征,具有很好的区分性。
(2)各阶参数之间有良好的独立性。
(3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。
在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模版库。
在识别阶段,语音喜好经过相同的通道得到语音参数,生成测试模版,与参考模版进行匹配,将匹配分数最高的参考模版作为识别结果。
同时还可以在很多先验知识的帮助下,提高识别的准确率。
3参数提取
3.1语音识别系统概述
语音识别系统的典型原理框图,如图3-1所示。
从图中可以看出语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。
由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语音信号不能直接用于提取特征,而要进行前期的预处理。
预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。
经过预处理的语音数据就可以进行特征参数提取。
在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模板库。
在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。
后续的处理过程还可能包括更高层次的词法、句法和文法处理等,从而最终将输入的语音信号转变成文本或命令。
图3-1语音识别系统的典型原理框图
本文所描述的语音识别系统将对数字0~10共11段参考语音进行训练并建立模板库,之后将对多段测试语音进行识别测试。
系统实现了上图中的语音输入、预处理、特征提取、训练建立模板库和识别等模块,最终建立了一个比较完整的语音识别系统。
3.1语音信号预处理
语音信号的预处理模块一般包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。
在不同的系统中对各子模块会有不同的要求,如在嵌入式语音识别系统中一般要求有防混叠滤波电路[5]、A/D转换电路和采样滤波电路等,而在计算机上实验时则可由音频采集卡完成,无需实验者亲自动手。
3.1.1语音信号采集
在Matlab环境中语音信号的采集可使用getaudiodata(recorder,dataType)函数采集[4],也可使用相关软件,如Adobe的Audition、Windows的“录音机”程序等,将录制成.wav文件然后使用wavread(file)函数读入。
为了进行实时的的训练和识别处理,本系统的训练语音和识别语音全部getaudiodata(recorder,dataType)录制。
图3-2所示为数字10的采集语音言语数字3的信号波形图。
图3-2数字10的语音波形
3.1.2分帧
语音信号是一种典型的非平稳信号,它的均值函数u(x)和自相关函数R(xl,x2)都随时间而发生较大的变化[5][9]。
但研究发现,语音信号在短时间内频谱特性保持平稳,即具有短时平稳特性。
因此,在实际处理时可以将语音信号分成很小的时间段[2](约10~30ms),称之为“帧”,作为语音信号处理的最小单位,帧与帧的非重叠部分称为帧移,而将语音信号分成若干帧的过程称为分帧。
分帧小能清楚地描绘语音信号的时变特征但计算量大;
分帧大能减少计算量但相邻帧间变化不大,容易丢失信号特征。
一般取帧长10-30ms,帧移为帧长的1/3~1/2。
在Matlab环境中的分帧最常用的方法是使用函数enframe(x,len,inc),其中x为语音信号,len为帧长,inc为帧移。
在一般情况下帧长取240,帧移取80,而这种方法的缺陷在于,采集语音的前半部分和后半部分,可以认为是静音段,静音段仍然采用相同长度的帧长没有必要,只会增加计算量。
因此本文中,提出了一种滑动帧的分帧方法,可以在语音静音段时,采用较长的窗:
在语音和静音的过渡段时采用较小的窗,可以确切判断语音的起始点,一旦确定语音的起点就改用常规窗长。
公式3-1、3-2,计算出语音信号半帧的点数,
其中,fs表示语音信号采样频率,」为向下取整符号,在Matlab中可用floor函数计算,s表示每半帧的点数,因此在进行分帧是帧长len=2*s,帧移inc=s,采用这种方法便可以有效的进行简化分帧运算。
3.1.3预加重
对于语音信号的频谱,通常是频率越高幅值越小,在语音信号的频率增加两倍时,其功率谱的幅度下降6dB。
因此必须对高频进行加重处理,一般是将语音信号通过一个一阶高通滤波器1-0.9375z-1,即为预加重滤波器。
其目的是滤除低频干扰,特别是50Hz到60Hz的工频干扰,将对语音识别更为有用的高频部分进行频谱提升。
在计算短时能量之前将语音信号通过预加重滤波器还可起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。
预加重滤波器在Matlab中可由语句x=filter([1-0.9375],1,x)实现[2]。
3.1.4加窗
为了保持语音信号的短时平稳性,利用窗函数来减少由截断处理导致的Gibbs效应。
用的最多的三种为矩形窗、汉明窗(Hamming)和汉宁窗(Hanning)。
其窗函数如下,式中的N为窗长,一般等于帧长。
窗口的选择非常重要,不同的窗口将使能量的平均结果不同。
矩形窗的谱平滑,但波形细节丢失;
而汉明窗则刚好相反,可以有效克服泄漏现象,具有平滑的低通特性[4][5][6]。
因此,在语音的时域处理方法中,一般选择矩形窗,而在语音的频域处理方法中,一般选择汉明窗或汉宁窗[5-6]。
在Matlab中要实现加窗即将分帧后的语音信号乘上窗函数,如在Matlab中加汉明窗即为x=x.*hamming(N)。
本文中的端点检测采用时域方法故加矩形窗,计算MFCC系数时加汉明窗。
3.2端点检测
在基于DTW算法的语音识别系统中,无论是训练和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。
语音端点检测是指用计算机数字处理技术从包含语音的一段信号中找出字、词的起始点及结束点,从而只存储和处理有效语音信号。
对汉语来说,还可进一步找出其中的声母段和韵母段所处的位置。
语音端点检测是语音分析、合成和识别中的一个重要环节,其算法的优劣在某种程度上也直接决定了整个语音识别系统的优劣。
进行端点检测的基本参数主要有短时能量、幅度、过零率和相关函数等。
端点检测最常见的方法是短时能量短时过零率双门限端点检测,近年来在此基础上发展出的动态窗长短时双门限端点检测方法[4]也被广泛使用。
3.2.1短时能量
语音和噪声的主要区别在它们的能量上,如图3-2所示。
语音采集是在相对安静的实验室进行的,由图3-1的数字10的实时波形能看到前端和尾端仍然有较大的噪声干扰,但语音段的能量比噪声段的大,语音段的能量是噪声段能量叠加语音声波能量的和。
对第n帧语音信号的短时能量En的定义为:
xn为原样本序列在窗函数所切取出的第n段短时语音,N为帧长。
因为在计算时使用的是信号的平方,故将En作为一个度量语音幅度值变化的函数有一个缺陷,即对高电平非常敏感。
因此在许多场合会将En用下式来代替:
这样就不会因为取平方而造成信号的小取样值的大取样值出现较大差异。
图3-3数字10的短时过零率
本文中窗函数为WR矩形窗(见公式3-3),N为240,图3-3为数字10的短时能量图。
3.2.2短时过零率
短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。
对于连续语音信号,过零意味着时域波形通过时间轴;
而对于离散信号,如果相邻的取样值的改变符号则称为过零。
过零率就是样本改变符号次数,定义语音信号寿(m)的短时过零率Zn为:
清音的能量多集中在较高的频率上,它的平均过零率要高于浊音,故短时过零率可以用来区分清音、浊音以及无声。
图3-4和3-5为数字10和数字0的语音的短时过零率。
从图中可以看到清音‘s’的过零率明显高于其后的‘i’音,有声段过零率明显高于无声段,但在鼻音阶段过零率迅速滑落到无声水平而能量值则是缓慢下滑。
在实际应用时并不能通过式3-8直接计算过零率,因为在无声段噪声使语音波形在0值附近来回摆动,导致计算出的过零率和有声段的区别并不十分明显。
比较简单的解决方法是设定一个差的阈值δ,使不仅xn(m)*xn(m-1)<
0,还要|xn(m)-xn(m-1)|>
δ。
在本系统中经多次试验取定δ=0.01[5][7]。
图3-4数字10的短时过零率
图3-5数字0的短时过零率
3.3语音识别参数提取
经过预处理的语音数据就可以进行特征参数提取,特征参数的好坏将直接影响系统的性能和效率,对特征参数的要求包括[9][10]:
(1)提取的特征参数能有效地代表语音特征,具有很好的区分性;
(2)各阶参数之间有良好的独立性;
3.3.1MFCC
LPC模型是基于发音模型建立的,LPCC系数也是一种基于合成的系数,这种参数没有充分利用人耳的听觉特性。
实际上,人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的,基本上是一个对数的关系[1][2]。
近年来,一种能够比较充分利用人耳的这种特殊感知特性的系数得到了广泛应用,这就是Mel尺度倒谱系数(Mel-scaledCepstrumCoefficients,简称MFCC)。
大量研究表明,MFCC系数能够比LPCC参数更好地提高系统的识别性能[3]。
MFCC系数的计算是以“bank”为其频率基准的,它和线性频率的转换关系是:
MFCC系数也是按帧计算的,首先要通过FFT得到该帧信号的功率谱S(n),转换为Mel频率下的功率谱。
这需要在计算之前先在语音的频谱范围内设置若干个带通滤波器:
Hm(n)m=0,1,…,M-1;
n=0,1,…,N/2-1(3-11)
M为滤波器的个数,通常取24,与临界带的个数一样;
N为一帧语音信号的点数,为了计算FFT的方便,通常取256。
滤波器在频域上为简单的三角形,其中心频率fm在Mel频率轴上是均匀分布的。
如图3-6所示为Mel尺度滤波器组,包含24个滤波器,语音信号帧长取为刚刚3.1节公式3-1和3-2滑动帧计算得到的点数点,语音信号的采样频率为8KHz。
3-6Mel尺度滤波器组
带通滤波器的系数事先计算好,在计算MFCC系数是直接使用。
MFCC系数的计算过程如下:
(1)预处理:
确定每一帧语音采样序列的长度,并对每帧序列s(n)进行预加重、分帧和加窗处理;
(2)计算离散功率谱:
对预处理的每帧进行离散FFT变换得到其频谱,再取模的平方作为离散功率谱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计算其离散余弦变换,得到Dm,m=0,1,……M-1,舍去代表直流成份的D0,取D1,D2,……,Dk作为MFCC参数。
具体流程可以用框图3-6表示为:
图3-6MFCC系数计算流程图
在Matlab环境中计算M个滤波器的系数可以调用语音工具箱voicebox中的函数melbankm(m,n,fs)来实现[3],其中m为滤波器的个数,n为语音帧长,fs为采样频率。
计算mfcc系数的函数为melcepst(s,fs),s为语音信号。
4DTW算法实现
DTW(DynamicTimeWarping,动态时间规整)是语音识别中较为经典的一种算法。
在实现小词汇表孤立词识别系统时,其识别率及其它指标与HMM算法实现几乎等同[9]。
又由于HMM算法复杂,在训练阶段需要提供大量的语音数据通过反复计算才能得到模型参数,而DTW算法本身既简单又有效,因此在特定的场合下获得了广泛的应用。
4.1匹配模式
模板匹配方法的语音识别算法需要解决的一个关键问题是说话人对同一个词的两次发音不可能完全相同,这些差异不仅包括音强的大小、频谱的偏移,更重要的是发音时音节的长短不可能完全相同,而且两次发音的音节往往不存在线性对应关系。
设参考模板有M帧矢量{R
(1),R
(2),…R(m),…,R(M)},R(m)为第m帧的语音特征矢量,测试模板有N帧矢量{T
(1),T
(2),…T(n),…,T(N)},T(n)是第n帧的语音特征矢量。
d(T(in),R(im))表示T中第in帧特征与R中im帧特征之间的距离,通常用欧几里德距离[7][8]表示。
直接匹配是假设测试模板和参考模板长度相等,即in=im;
线性时间规整技术假设说话速度是按不同说话单元的发音长度等比例分布的,即。
显然,这两种假设都不符合实际语音的发音情况,我们需要一种更加符合实际情况的非线性时间规整技术。
如图5-1所示为三种匹配模式对同一词两次发音的匹配距离(两条曲线间的阴影面积),显然D3<
D2<
D1。
图4-1三种匹配模式对比
4.2DTW算法原理
DTW是把时间规整和距离测度计算结合起来的一种非线性规整技术,它寻找一个规整函数im=Ф(in),将测试矢量的时间轴n非线性地映射到参考模板的时间轴m上,并使该函数满足:
(4-1)
D就是处于最优时间规整情况下两矢量的距离。
由于DTW不断地计算两矢量的距离以寻找最优的匹配路径,所以得到的是两矢量匹配时累积距离最小所对应的规整函数,这就保证了它们之间存在的最大声学相似性。
DTW算法的实质就是运用动态规划的思想,利用局部最佳化的处理来自动寻找一条路径,沿着这条路径,两个特征矢量之间的累积失真量最小,从而避免由于时长不同而可能引入的误差。
DTW算法要求参考模板与测试模板采用相同类型的特征矢量、相同的帧长、相同的窗函数和相同的帧移。
为了使动态路径搜索问题变得有实际意义,在规整函数上必须要加一些限制,不加限制使用公式(4-1)找出的最优路径很可能使两个根本不同的模式之间的相似性很大,从而使模式比较变得毫无意义。
通常规整函数必须满足如下的约束条件:
(1)边界限制:
当待比较的语音已经进行精确的端点检测,在这种情况下,规整发生在起点帧和端点帧之间,反映在规整函数上就是:
(4-2)
(2)单调性限制由于语音在时间上的顺序性,规整函数必须保证匹配路径不违背语音信号各部分的时间顺序。
即规整函数必须满足单调性限制:
(4-3)
(3)连续性限制有些特殊的音素有时会对正确的识别起到很大的帮助,某个音素的差异很可能就是区分不同的发声单元的依据,为了保证信息损失最小,规整函数一般规定不允许跳过任何一点。
即:
(4-4)
DTW算法的原理图如图4-2,把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(ti,rj)表示测试模式中某一帧与训练。
模式中某一帧的交汇。
DTW算法分两步进行,一是计算两个模式各帧之间的距离,即求出帧匹配距离矩阵,二是在帧匹配距离矩阵中找出一条最佳路径。
搜索这条路径的过程可以描述如下:
搜索从(1,1)点出发,对于局部路径约束如图4-3,点(in,im)可达到的前一个格点只可能是(in-1,im)、(in-1,im-l)和(in-1,im-2)。
那么(in,im)一定选择这三个距离中的最小者所对应的点作为其前续格点,这时此路径的累积距离为:
D(in,im)=d(T(in),R(im))+min{D(in-1,im),D(in-1,im-1),D(in-1,im-2)}(4-5)
这样从(l,1)点出发(令D(1,1)=0)搜索,反复递推,直到(N,M)就可以得到最优路径,而且D(N,M)就是最佳匹配路径所对应的匹配距离。
在进行语音识别时,将测试模板与所有参考模板进行匹配,得到的最小匹配距离Dmin(N,M)所对应语音即为识别结果。
4.3DTW算法改进
DTW算法虽然简单有效,但是动态规划方法需要存储较大的矩阵,直接计算将会占据较大的空间,计算量也比较大。
由图4-3的局部路径约束可知DTW算法所动态搜索的空间其实并不是整个矩形网格,而是局限于对角线附近的带状区域[5][6],如图4-4所示,许多点实际上是达不到的。
因此,在实际应用中会将DTW算法进行一些改进以减少存储空间和降低计算量。
常见的改进方法有搜索宽度限制、放宽端点限制等。
4.3.1搜索宽度限制
以图4-3中的局部约束路径为例,待测模板轴上每前进一帧,对于点(in,im)只需要用到前一列(in-1,im)、(in-l,im-l)和(in-1,im-2)三点的累积距离,也就是im-1和im-2两行的累积距离。
整个DTW算法的计算过程递推循环进行,也就是每一行中的格点利用前两行格点的累积距离计算该点的累积距离的过程。
基于这种循环递推计算,只需分配3×
N的存储空间重复使用,而不需要保存帧匹配距离矩阵和所有的累积距离矩阵。
又由于DTW算法的动态搜索宽度局限于对角线附近的带状区域,假设其宽度为width,如图4-4和图4-6,则实际只需分配3×
width的存储空间即可。
图4-4带状搜索区域图4-5搜索宽度限制存储空间
4.3.2放宽端点限制
普通DTW对端点检测比较敏感,端点信息是作为一组独立的参数提供给识别算法的。
它要求两个比较模式起点对起点,终点对终点,对端点检测的精度要求比较高。
当环境噪声比较大或语音由摩擦音构成时,端点检测不易进行,这就要求在动态时间规整过程中给以考虑。
放松端点限制方法不严格要求端点对齐,克服由于端点算法不精确造成的测试模式和参考模式起点终点不能对齐的问题。
一般情况下,起点和终点在纵横两个方向只要放宽2-3帧就可以,也就是起点可以在(1,1),(l,2),(1,3),(2,1),(3,l),终点类似。
如图4-6。
图4-6改进的DTW算法原理图
在放宽端点限制的DTW算法中,累积距离矩阵
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Matlab 仿真 孤立 词语 识别 技术研究