基于DTW的孤立词语音识别系统(文档+MATLAB+GUI)

 

            基于DTW的孤立词语音识别系统(文档+MATLAB+GUI)


引言.......................................................................................... 1

1  绪论.................................................................................... 3

1.1 语音识别的概念....................................... 3

1.2 语音识别的发展简史................................... 3

1.3 本文的主要工作和组织结构............................. 4

2  孤立词语音识别系统概述................................................ 5

2.1 孤立词语音识别的分类................................. 5

2.2 孤立词语音识别系统基本构成........................... 6

2.3 语音识别的基元选择................................... 7

2.4 语音识别的发展趋势................................... 8

3 孤立词语音识别的系统设计.............................................. 9

3.1 方案设计............................................ 10

3.1.1 mfcc提取特征参数设计.............................. 10

3.1.2 端点检测设计...................................... 11

3.1.3 DTW算法设计....................................... 13

3.1.4 录音函数设计...................................... 14

3.1.5 训练函数设计...................................... 15

3.2 DTW算法............................................. 15

3.2.1匹配模式........................................... 16

3.2.2 DTW算法原理....................................... 16

3.3 孤立词语音信号的预处理.............................. 20

3.3.1 语音信号采集...................................... 20

3.3.2 语音信号分帧...................................... 21

3.3.3 语音信号的预加重和加窗............................ 21

3.3.4 语音信号的端点检测................................ 22

3.4 特征参数的提取...................................... 24

4  孤立词语音识别系统的实现.......................................... 26

4.1 初始GUI界面的设计.................................. 26

4.2 语音识别界面设计.................................... 28

5  结论.................................................................................. 31

附  录.................................................................................... 34


下面是本内容的核心部分,有需要完整代码和文章的加QQ245051943获取。

 

 孤立词语音信号的预处理

语音信号的预处理模块一般包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。在不同的系统中对各子模块会有不同的要求,如在嵌入式语音识别系统中一般要求有防混叠滤波电路、A/D转换电路和采样滤波电路等,而在计算机上实验时则可由音频采集卡完成,无需实验者亲自动手。

3.3.1 语音信号采集

在Matlab环境中语音信号的采集可使用wavrecord(n,fs,ch,dtype)函数录制,也可使用Windows的“录音机”程序录制成.wav文件然后使用wavread(file)函数读入。为了进行批量的的训练和识别处理,本系统的训练语音和识别语音全部使用“录音机”程序预先录制。如图3.5所示为“电子”的训练语音电子.wav的信号完整语音波形。

                                               

                                                               图3.5 语音电子.wav的信号波形图

3.3.2 语音信号分帧

语音信号是一种典型的非平稳信号,它的均值函数u(x)和自相关函数R(xl,x2)都随时间而发生较大的变化。但研究发现,语音信号在短时间内频谱特性保持平稳,即具有短时平稳特性。因此,在实际处理时可以将语音信号分成很小的时间段(约10~30ms),称之为“帧”,作为语音信号处理的最小单位,帧与帧的非重叠部分称为帧移,而将语音信号分成若干帧的过程称为分帧。分帧小能清楚地描绘语音信号的时变特征但计算量大;分帧大能减少计算量但相邻帧间变化不大,容易丢失信号特征。一般取帧长20ms,帧移为帧长的1/3-1/2。

在Matlab环境中的分帧最常用的方法是使用函数enframe(x,len,inc),其中x为语音信号,len为帧长,inc为帧移。在本系统中帧长取240,帧移取80。

3.3.3 语音信号的预加重和加窗

对于语音信号的频谱,通常是频率越高幅值越小,在语音信号的频率增加两倍时,其功率谱的幅度下降6dB。因此必须对高频进行加重处理,一般是将语音信号通过一个一阶高通滤波器1-0.9375z-1,即为预加重滤波器。其目的是滤除低频干扰,特别是50Hz到60Hz的工频干扰,将对语音识别更为有用的高频部分进行频谱提升。在计算短时能量之前将语音信号通过预加重滤波器还可起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。预加重滤波器在Matlab中可由语句x=filter([1-0.9375],1,x)实现。

为了保持语音信号的短时平稳性,利用窗函数来减少由截断处理导致的Gibbs效应。用的最多的三种为矩形窗、汉明窗(Hamming)和汉宁窗(Hanning)。其窗函数如式3-8、3-9、3-10所示,式中的N为窗长,一般等于帧长。

   窗口的选择非常重要,不同的窗口将使能量的平均结果不同。矩形窗的谱平滑,但波形细节丢失;而汉明窗则刚好相反,可以有效克服泄漏现象,具有平滑的低通特性。因此,在语音的时域处理方法中,一般选择矩形窗,而在语音的频域处理方法中,一般选择汉明窗或汉宁窗。在Matlab中要实现加窗即将分帧后的语音信号乘上窗函数,如加汉明窗即为x=x.*hamming(N)。在语音识别系统中我们主要也是采用汉明窗来实现语音信号的加窗。

3.3.4 语音信号的端点检测

在基于DTW算法的语音识别系统中,无论是训练和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。语音端点检测是指用计算机数字处理技术从包含语音的一段信号中找出字、词的起始点及结束点,从而只存储和处理有效语音信号。对汉语来说,还可进一步找出其中的声母段和韵母段所处的位置。语音端点检测是语音分析、合成和识别中的一个重要环节,其算法的优劣在某种程度上也直接决定了整个语音识别系统的优劣。进行端点检测的基本参数主要有短时能量、幅度、过零率和相关函数等。端点检测最常见的方法是短时能量短时过零率双门限端点检测,近年来在此基础上发展出的动态窗长短时双门限端点检测方法也被广泛使用。

(1)短时能量

语音和噪声的主要区别在它们的能量上,语音段的能量比噪声段的大,语音段的能量是噪声段能量叠加语音声波能量的和。对第n帧语音信号的短时能量的定义为:

为原样本序列在窗函数所切取出的第n段短时语音,N为帧长。因为在计算时使用的是信号的平方,故将作为一个度量语音幅度值变化的函数有一个缺陷,即对高电平非常敏感。因此在许多场合会将En用下式来代替:

这样就不会因为取平方而造成信号的小取样值的大取样值出现较大差异。

本系统中窗函数为WR(见式3-8),N为240。图3.6和图3.7分别为“电子”的训练语音电子.wav和“北海”的训练语音北海.wav的短时能量波形。

                                                              

                                                                       图3.6 语音电子.wav的短时能量波形

                                                                   图3.7 语音北海.wav的短时能量波形

(2)短时过零率

短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号则称为过零。过零率就是样本改变符号次数,定义语音信号的短时过零率为:清音的能量多集中在较高的频率上,它的平均过零率要高于浊音,故短时过零率可以用来区分清音、浊音以及无声。在实际应用时并不能通过式3-13直接计算过零率,因为在无声段噪声使语音波形在0值附近来回摆动,导致计算出的过零率和有声段的区别并不十分明显。比较简单的解决方法是设定一个差的阈值,使不仅,还要。在本系统中经多次试验取定=0.02。

(3)双门限端点检测

双门限端点检测顾名思义需要两级检测,即短时能量检测和短时过零率检测。在开始检测之前需要设定4个门限,即分别为短时能量和短时过零率各设置一个高门限和一个低门限:EHigh、ELow和ZHigh、ZLow。整个语音端点检测分为四部分:静音段、过度段、语音段、结束段。在静音段中如果能量或过零率有一个超过了其低门限,则认为进入了过度段。在过度段中,由于参数数值较小,还不能确定是否真的进入语音段,只有两个参数的其中一个超越了高门限才被认为是进入语音段。当参数降至低门限则认为进入结束。此外,还有两种可能会引起端点检测的误判:一是短时噪音引起的误判,此时则需要引入最小语音长度门限进行噪声判定,即语音段时间小于一定数值则认定为是噪声,重新回到静音段,本系统设为20ms;二是语音中字与字的时间空隙引起的误判,此时需要设定最大静音长度门限来降低识别的错误率。

在双门限端点检测中4个门限的设定至关重要,门限设定的好坏将直接影响端点检测的结果。门限值的设置还没有一个通用可靠的方法,需要根据经验和特定环境进行调整。常见的方法有最大值乘上某个比率、中位值乘上某个比率、最小值乘上某个常数、前三帧平均值乘上某个常数等。本系统中,,,的取值分别为:

图3.8和图3.9分别是“电子”的训练语音电子.wav和“北海”的训练语音北海.wav的端点检测结果,红线之间的部分为检测出的语音有声段。

                                                                       图3.8 语音电子.wav的端点检测结果

                                                                   图3.9 语音北海.wav的端点检测结果

3.4 特征参数的提取

经过预处理的语音数据就可以进行特征参数提取,特征参数的好坏将直接影响系统的性能和效率,对特征参数的要求包括:

(1)提取的特征参数能有效地代表语音特征,具有很好的区分性;

(2)各阶参数之间有良好的独立性;

(3)特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。

对于特征参数的选取,我们使用MFCC的方法来提取。MFCC参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel标度频率域提取出来的倒谱特征参数。美尔频标倒谱系数(Mel Frequency Cepstrum Coefficient,MFCC)考虑了人耳的听觉特性,将频谱转化为基于Mel频标的非线性频谱,然后转换到倒谱域上。由于充分考虑了人耳的听觉特性,而且没有任何的前提假设,MFCC参数具有良好的识别性能和抗噪声能力,但其计算量和计算精度要求较高。

孤立词语音识别系统的实现

 

4.1 初始GUI界面的设计

图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用。人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。

Matlab中GUI程序的设计使得使用者无需清楚的知道里面的函数是如何调用和实现的,它的操作简单并且交互性强,有利于设计者与使用者的良好沟通。

    初始界面主要设计4个部分,包括题目、背景图片、进入按钮和退出按钮。题目采用静态文本设计,背景图片采用外部图片导入。初始界面如图4.1所示。点击“进入”按钮进入孤立词识别系统,退出按钮包含交互式对话框,确认后退出整个MATLAB程序。

 


 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章