基于MATLAB的语音识别DTW算法设计_第1页
基于MATLAB的语音识别DTW算法设计_第2页
基于MATLAB的语音识别DTW算法设计_第3页
基于MATLAB的语音识别DTW算法设计_第4页
基于MATLAB的语音识别DTW算法设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1概述21.1研究的目的和意义21.2国内外发展状况21.2.1国外研究历史及现状31.2.3国内研究历史及现状42语音识别系统的概述43 MATLAB中的语音信号的采集43.1 wavrecord函数43.2 wavplay函数64语音信号的端点检测64.1语音信号端点检测的流程64.1.1短时能量84.1.2过零率的计算94.1.3双门限端点检测115语音识别参数提取125.1 MFCC的基本原理126特定人语音识别算法-DTW算法136.1DTW算法原理146.2DTW算法流程及实验结果167 GUI界面的设计177.1图形用户界面设计工具的启动177.3测试与分析18总结20致谢2

2、1参考文献22附件23基于MATLAB的特定人语音识别算法设计摘要在高度发达的社会,语言是一种人类交流最方便的,最速度的信息,在高度发达的社会中,用数字化的方式举行语音的保存、传递、判别、加强和合成等是全部数字化通信过程中最基础、最重要的组成的一部分。由于人类进入信息社会节奏加快, 语音信号处理方面的知识被越来越多的地方需要。本设计主要在MATLAB平台下先语音信号的端点检测、预处理,然后提取特征参数,建立两个模块,一个为参考模块,一个为测试模块,然后通过动态时间归整技术(DTW)算法进行匹配,算出匹配结果。最后在用户开发界面(GUI界面)直观地呈现出来。本次设计录制010的数字做为参考库(m

3、odel),测试库(test)中为需要测试及识别的语音,0的序号为11,19的数字以相应数字做为文件名的命名。关键词:端点检测; MFCC特征提取;语音识别;DTW算法1概述1.1研究的目的和意义随着计算机技术和科技成果的的飞速发展,人们早已不再满足于让计算机做一些简单的科学计算和运算,而是向它提出了更高的要求,即要求我们的计算机向智能化方向发展,于是人们便开始了第五代计算机(即智能计算机)的研究。计算机人工智能方面的研究内容有很多,诸如计算机知识处理、专家系统、视觉、计算机语音等。其中人机自然语言的接口是一个非常重要的部分。它要求人工智能计算机能说会听,应此要求出现了语音识别和语音合成两门学

4、科。语音识别是人机通信的关键技术之一,也是一种最为理想的人机通信方式。 对于许多应用来说,一个语音识别系统只要一组词汇或命令就能为用户提供一个有效的工具,因此简单有效的特定人语音识别系统就能满足要求。同时特定人语音识别系统具有广阔的应用前景,比如工业命令控制、计算机控制、家庭电器服务、个人移动通信呼叫等,尤其当人手已被占用或无法使用的情况下必须进行声音控制时,更可以起到不可替代的作用,这项技术将给人们的日常生活带来极大的便利。1.2国内外发展状况1.2.1国外研究历史及现状国外的语音识别方面的研究工作可以追溯到20世纪50年代AT&T贝尔实验室的Audry系统,它是第一个可以识别十个英文数字的

5、语音识别系统。但是真正取得实质性进展,并将其作为一个重要的课题开展研究则是在60年代末70年代初。这首先是因为计算机技术的发展为语音识别的实现提供了硬件和软件的可能,更重要的是语音信号线性预测编码(LPC)技术和动态时间规整(DTW)技术的提出,有效的解决了语音信号的特征提取和不等长匹配问题。实验室语音识别研究的巨大突破产生于20世纪80年代末:人们终于在实验室突破了大词汇量、连续语音和非特定人这三大障碍,第一次把这三个特性都集成在一个系统中,比较典型的是卡耐基梅隆大学(CarnegieMellonUniversity)的Sphinx系统,它是第一个高性能的非特定人、大词汇量连续语音识别系统。

6、这一时期,语音识别研究进一步走向深入,其显著特征是隐马尔可夫模型(HMM)模型和人工神经元网络(ANN)在语音识别中的成功应用。HMM模型的广泛应用应归功于AT&TBell实验室Rabiner等科学家的努力,他们把原本艰涩的HMM纯数学模型工程化,从而为更多研究者了解和认识,从而使统计方法成为了语音识别技术的主流。20世纪90年代前期,许多著名的大公司如IBM、苹果、AT&T和NTT都对语音识别系统的实用化研究投以巨资。语音识别技术有一个很好的评估机制,那就是识别的准确率,而这项指标在20世纪90年代中后期实验室研究中得到了不断的提高。比较有代表性的是:IBM公司推出的ViaVoice和Dra

7、gonSystem公司的NaturallySpeaking,Nuance公司的NuanceVoicePlatform语音平台,Microsoft的Whisper,Sun的VoiceTone等。其中IBM公司于1997年开发出汉语ViaVoice语音识别系统,次年又开发出可以识别上海话、广东话和四川话等地方口音的语音识别系统ViaVoice98。它带有一个32,000词的基本词汇表,可以扩展到65,000词,还包括办公常用词条,具有“纠错机制”,其平均识别率可以达到95%。该系统对新闻语音识别具有较高的精度,是目前具有代表性的汉语连续语音识别系统。1.2.3国内研究历史及现状我国语音识别研究工作

8、起步于五十年代,但近年来发展很快。研究水平也从实验室逐步走向实用。从1987年开始执行国家863计划后,国家863智能计算机专家组为语音识别技术研究专门立项,每两年滚动一次。我国语音识别技术的研究水平已经基本上与国外同步,在汉语语音识别技术上还有自己的特点与优势,并达到国际先进水平。清华大学电子工程系语音技术与专用芯片设计课题组,研发的非特定人汉语数码串连续语音识别系统的识别精度,达到94.8%(不定长数字串)和96.8%(定长数字串)。在有5%的拒识率情况下,系统识别率可以达到96.9%(不定长数字串)和98.7%(定长数字串),这是目前国际最好的识别结果之一,其性能已经接近实用水平。研发的

9、5000词邮包校核非特定人连续语音识别系统的识别率达到98.73%,前三选识别率达99.96%;并且可以识别普通话与四川话两种语言,达到实用要求。中科院自动化所及其所属模式科技(Pattek)公司2002年发布了他们共同推出的面向不同计算平台和应用的“天语”中文语音系列产品PattekASR,结束了中文语音识别产品自1998年以来一直由国外公司垄断的历史。2语音识别系统的概述语音识别系统的总体结构框图如图2-1所示。从图中可以看出语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语

10、音信号不能直接用于提取特征,而要进行前期的预处理。首先通过语音的录制作为输入信号,输入的模拟语音信号要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等等。经过预处理后,接下来就是重要的一环:特征参数提取,在训练阶段,将特征参数进行一定的处理之后,为每个词得到一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。训练识别参考 模块识别结果语音输入预处理特征提取测度估计模板库识别决策专家知识图2.1 语音识别总体架构3 MATLAB中的语音信号的采集语音信号的采集也可以使用Windows中的“录音

11、机”录制成.wav格式。而在MATLAB环境中语音信号的采集可使用wavrecord函数录制,然后使用wavread函数读入,wavplay函数播放,uiputfile函数保存。3.1 wavrecord函数wavrecord的用法:y = wavrecord(n,Fs);y = wavrecord(n,Fs,ch);其中n为样本个数,Fs为频率,默认值为11025,本设计采用16000,ch为通道数,默认为1,若为2,则表示采样为双声道立体声数据,本设计ch为1Audiorecorder函数也可以用来录制音频,但在本次设计的操作上,通常采用的语音格式以wav格式为主,在保存语音上,uiput

12、file能更好的与wavrecord相结合,所以用wavrecord比较好。3.2 wavplay函数wavplay函数的用法:wavplay(y,Fs)其中y为输入信号,Fs为频率sound函数与soundsc函数也可以用来播放音频,虽然它们可以在任何操作系统平台上使用,而wavplay只支持Windows平台。但因为在语音识别中,我们通常采用的语音格式为wav格式,而wavplay函数与wavrecord函数的配合能更好的操作运行起来,两者结合共同使用。举个例子:Fs=16000;y=wavrecord(5*Fs,Fs,int16);wavplay(y,Fs);该段代码意思为:通过Wind

13、ows的录音设备以16000Hz的采样频率录制5秒的数据,采样精度为16位,存储格式为int16;随后通过Windows的音频设备进行播放, 如图3-1所示为采集到的信号波形图。图3-1 语音信号波形 在MATLAB平台处理语音信号时,可以通过wavplay函数回放录制好了的语音,次函数具有快速检验数据和计算可靠性。但是在录音的时候,wavrecord函数有很大的局限性,在录制语音的时候必须事先制定语音的时间。如果在指定的时间内用户没有说话,就会漏掉全部或部分的语音数据,操作起来不方便。并且,在一个语音识别系统中,程序会自动判断当前是用户在说话还是静音,如果检测用户有发出语音,那么就会保存该段

14、语音,然后将删除掉头部和尾部的静音部分,这一功能被称为语音信号的端点检测。4语音信号的端点检测无论是测试和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。语音端点检测是指用计算机数字处理技术从包含语音的一段信号中找出起始点及结束点,从而只存储和处理有效语音信号。语音端点检测是语音分析和识别中的一个重要环节,其算法的优劣在某种程度上也直接决定了整个语音识别系统的优劣。4.1语音信号端点检测的流程语音信号输入设置短时能量高、低门限设置短时过零率高、低门限计算过零率计算短时能量进入状态status开始检测调整能量门限归一化语音端点检测流程如图4-1所示。图4-1端点检测算法流程

15、图(1)归一化:为了后面处理方便,通常将读取的语音信号进行归一化到-1,1(2)短时能量的作用: 可以较好地区分出浊音和静音。(3)短时过零的作用:检测清音。由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音(如“S”、“C”)(4)高低门限的作用:检测之前,先为短时能量和过零率分别确定两个门限。一个是比较低的门限,其数值比较小,对信号的变化能够敏感,很容易就会被超过;而另一个是比较高的门限,数值要求比较大,信号要达到一定的强度,该门限才可能被超过。不过,低门限被超过未必就是语音的开始,有可能是时间很短的噪声引起的。高门限被超过的话则可以

16、基本确定是由于语音信号引起的。在了解语音信号的端点检测之前,我们先来了解一下语音信号的特征,如图4-2可以看到,信号在大致0.480.84之间的采样点属于发音状态,在头部跟尾部的信号幅度很低,属于静音或噪音。图4-2 语音信号波形图4-1中的图(II)和图(III)是信号波形的头部放大图,可以看出,在0.48之前的信号幅度很低,明显属于静音,而从0.48开始,幅度开始增强,并且有明显的周期性,两个尖峰之间的距离就是所谓的基音周期,也就是人的声带振动的周期。于是我们可以用信号的幅度作为特征来区分静音和语音。这样只要设定一个门限,当语音信号幅度超过这个门限时,就当作语音开始,当幅度降低到门限以下时

17、就认为语音结束。于是,我们可以采用短时能量来描述语音信号的幅度。比如,对于一个读取到的语音信号x(n),n为采样点,首先对其进行分帧,将语音信号分为每20-30ms一段,相邻两帧起始点之间的间隔为10ms,也就是说两帧之间有10-20ms的交叠。由于采样频率的差异,帧长和帧移所对应的实际采样点数都不一样。比如:一个8kHz的采样频率,30ms的帧长对应240点,记为N,而10ms的帧移对应为80点,记为M。 对应第i帧,第n个样本,与原始语音信号的关系为:xi(n)=x(i-1)M+n第i帧的语音信号的短时能量就可以用下面几种算法得到:分别为绝对值的累加、平方累加和平方的对数的累加,以上任意一

18、种都可以。计算完每帧的短时能量,接着再设定一个门限,便实现一个简单的检测算法了。但是这种算法并不可靠,因为人的发音有浊音和清音之分,浊音为声带振动发出,幅度高,周期性明显,而清音则不会有声带的震动,只是靠空气在口腔中的摩擦和冲击,其短时能量一般比较小。如声母“s”、“c”等的幅度就很低。所以基于短时能量的算法对这些语音信号几乎无能为力。不过虽然不能用短时能量区分开,但是可以通过用一帧信号中波形穿越零电平的次数来描述这种变化的剧烈程度,称为过零率,公式为:实际上,为了避免静音段的随机噪声产生过高的过零率,通常都会先设定一个门限,当前后两个采样的符号不同时,而且差值大于该门限的时候,就将过零率的数

19、值加1。4.1.1短时能量语音和噪声的主要区别在它们的能量上,如图4-3所示。语音段的能量比噪声段的大,语音段的能量是噪声段能量叠加语音声波能量的和。对第n帧语音信号的短时能量En的定义为:xn为原样本序列在窗函数所切取出的第n段短时语音,N为帧长。因为在计算时使用的是信号的平方,故将En作为一个度量语音幅度值变化的函数有一个缺陷,即对高电平非常敏感。因此在许多场合会将En用下式来代替:这样就不会因为取平方而造成信号的小取样值的大取样值出现较大差异。4.1.2过零率的计算短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相

20、邻的取样值的改变符号则称为过零。过零率就是样本改变符号次数,定义语音信号)的短时过零率Zn为: 1 (x0)-1 (x0)sgnx= 清音的平均过零率要高于浊音,它的能量多集中在较高的频率上,故短时过零率可以用来区分清音、浊音以及无声。图4-3(II)和图4-4(II)分别为数字6数字4的短时过零率。从图中可以看到清音S的过零率明显高于其后的L音,有声段过零率明显高于无声段,但在鼻音阶段过零率迅速滑落到无声水平而能量值则是缓慢下滑。在实际应用时并不能直接计算过零率,因为在无声段噪声使语音波形在0值附近来回摆动,导致计算出的过零率和有声段的区别并不十分明显。比较简单的解决方法是设定一个差的阈值,

21、使不仅xn(m)*xn(m-1) 。在本系统中经多次试验取定=0.01。图4-3 数字“6”的过零率波形图图4-4 数字“4”的过零率波形图完成计算短时能量及过零率后,并调整好能量门限,接下里进入到最关键的一步,即变量status分析,status可以分为四种状态:(1)在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。(2)在过渡段,由于参数的数值小,不能确定是否处于真正的语音段,所以只要当两个参数的数值都回落到低门限以下,就要将当前状态恢复到静音状态,但是如果在过渡段中两个参数中的任何一个超过了高门限,那么就可以确定进入语音段了。(3)结束段。但是一些突发性的噪声当

22、然也会引起过零率或者短时能量的数值变高,但是都不能维持足够长的时间,比如开关门窗、物体的碰撞等等引起的噪声。这些都可以通过设置最短时间门限来判定。若当前状态假如处于语音段时,若两个参数的数值降低到最低门限以下,并且总的记时长度小于最短的时间门限,那么我们认为这一段为噪声,然后继续扫描接下来的语音数据。图4-5为语音信号的端点检测结果,竖线之间的部分为检测出的语音有声段。图4-5 端点检测结果4.1.3双门限端点检测双门限端点检测顾名思义需要两级检测,即短时能量检测和短时过零率检测。在开始检测之前需要设定4个门限,即分别为短时能量和短时过零率各设置一个高门限和一个低门限:EHigh、ELow和Z

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

24、需设置此门限。在双门限端点检测中4个门限的设定至关重要,门限设定的好坏将直接影响端点检测的结果。门限值的设置还没有一个通用可靠的方法,需要根据经验和特定环境进行调整。常见的方法有最大值乘上某个比率、中位值乘上某个比率、最小值乘上某个常数、前三帧平均值乘上某个常数等。本系统中EHigh,ELow,ZHigh,ZLow的算法分别为:5语音识别参数提取语音信号进行端点检测及预处理后便会进行MFCC(特征参数提取),特征参数提取的好坏对系统的性能和准确率的影响非常大,对MFCC参数的要求如下:(1)提取具有很好区分性及能够有效地代表语音特征的参数特;(2)各个参数之间有良好的独立性;(3)为了确保语音

25、识别的实时实现,计算特征参数方便,最好是有效的计算方法。5.1 MFCC的基本原理近年来,以一种能充分利用人耳的感知性能系数有这被大量而广泛应用,这个系数就是Mel尺度倒谱系数(MFCC)。在整个语音识别的过程中,MFCC参数为了方便建模及计算,是按照帧计算的。其特征提取的过程如图5-1所示。x(n)预加重、分帧、加窗端点检测DFT/FFTMel频率滤波器组log对数能量DCT求倒谱图5-1 MFCC特征提取及计算流程Mel频率可以用如下公式表示:MFCC系数按每个帧计算后,我们必须通过FFT得到对应帧信号的功率谱S(n),转换为Mel频率下的功率谱。这必须在计算先前在语音频谱范围之内设置的几

26、个带通滤波器:Hm(n) m=0,1,M-1; n=0,1,N/2-1 M是滤波器的数目,通常取24;一帧语音信号的点数为N,通常取256,这样计算FFT的方便。滤波器是一个简单的三角形的频域滤波器的中心频率,FM是均匀地分布在频率轴。语音信号帧长取为256个点,包含了24个滤波器,本设计语音信号的采样频率设为8KHz。事先计算好带通滤波器的系数,再计算MFCC系数。MFCC特征系数的计算过程如下:(1)预处理:首先确定N为每一帧语音采样点,如:N=256,并对每一帧序列s(n)进行分帧、预加重和加窗处理;(2)离散功率谱的计算:先对预处理的每一帧进行离散傅里叶变换得到其频谱,再通过模的平方计

27、算离散功率谱S(n),功率谱如图5-2所示。图5-2 DTW功率谱图(3)将离散功率谱经过滤波器组:将S(n)通过M个滤波组后得到功率值,也就是在各离散频率点上将S(n)和Hm(n)的乘积并相加,得到M个参数Pm,m=0,1,M-1;(4)对数的计算:得到Lm,m=0,1,M-1;6特定人语音识别算法-DTW算法语音识别中较为经典的一种算法是DTW算法(动态时间规整)。在词,音节识别系统,识别率和HMM算法的识别率几乎是一样的。但是相比之下HMM算法相当的复杂,在识别阶段需要进行大量的反复计算语音数据才能得到模型参数,但是DTW算法不需要反复计算,因此本设计采用DTW算法。6.1DTW算法原理

28、不管是在测试和建立参考模块还是在识别阶段,语音的起点和终点都必须用端点检测来确定。已存入模板库的各个词条称为参考模板,一个参考模板可以表示为,m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模板所包含的语音帧总数,R(m)为第m帧语音特征矢量。所要识别的一个输入词条语音称为测试模板,可表示为,n为测试语音帧的时序标号,n=1为起点语音帧,n=N为终点语音帧,因此N为该模板所包含的语音帧总数,T(n)为第n帧语音特征矢量。参考模板与测试模板一般采用相同类型的特征矢量(如MFCC系数)、相同的帧长、相同的窗函数和相同的帧移。假设测试和参考模板分别用T和R表示,为了比较它

29、们之间的相似度,可以计算它们之间的距离DT,R,距离越小则相似度越高。为了计算这一失真距离,应从T和R中各个对应帧之间的距离算起。设n和m分别是T和R中任意选择的帧号,dT(n),R(m)表示这两种特征矢量之间的距离。距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧氏距离。若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果NM可以将T线性映射为一个M帧的序列,再计算它与之间的距离。但是这样的计算没有考虑到语音中各个段在不同的情况下的持续时间会产生或长或短的变化,因此识别效果不可能最佳。因而更多地是采用动态规划(DP)的方法。通常,规整函数被限

30、制在一个平行四边形的网格内,如图6-1所示。它的一条边斜率为2,另一条边斜率为1/2。规整函数的起点是(1, 1),终点为(N,M)。DTW算法的目的是在此平行四边形内由起点到终点寻找一个规整函数,使其具有最小的代价函数,保证了测试模板与参考模板之间具有最大的声学相似特性。图6-1 DTW原理图由于在模板匹配过程中限定了弯折的斜率,因此平行四边形之外的格点对应的帧匹配距离是不需要计算的。另外,因为每一列各格点上的匹配计算只用到了前一列的3个网格,所以没有必要保存所有的帧匹配距离矩阵和累积距离矩阵。充分利用这两个特点可以减少计算量和存储空间的需求,形成一种高效的DTW算法,如图所示。图中,把实际

31、的动态弯折分为三段,(1,xa),(xa+1,xb),(xb+1,N),其中:xa= (2M-N)/3,xb=2(2N-M)/3xa和xb都取最相近的整数,由此可得出对M和N长度的限制条件:2M-N3,2N-M2当不满足以上条件时,认为两者差别太大,则无法进行动态弯折匹配。在x轴上的每一帧不再需要与y轴上的每一帧进行比较,而只是与y轴上ymin,ymax间的帧进行比较,ymin和ymax的计算公式为:ymin=x/2,0xxb,2x+(M-2N),xb xNymax=2x,0xxa,x/2+(M-N/2),xa xb的情况,则弯折匹配的三段为(1,xb),(xb+1,xa),(xa+1,N)。

32、对于x轴上每前进一帧,虽然所要比较的y轴上的帧数不同,但弯折特性是一样的,累积距离的更新都是用下式实现的:D(x,y) = d(x,y)+minD(x-1,y),D(x-1,y-1),D(x-1,y-2)6.2DTW算法流程及实验结果通过DTW算法原理,得出DTW算法的流程如图6-2所示信号输入帧匹配距离矩阵累积距离矩阵动态规划信号输出图6-2 DTW算法流程首先申请两个n*m的矩阵D和d,分别为累计距离和帧匹配距离。这里n和m为测试模板与参考模板的帧数。然后通过一个循环计算两个模板的帧匹配距离矩阵d。接下来进行动态规划,为每个格点(i,j)都计算其三个可能的前续格点的累积距离1D,2D和3D

33、。考虑到边界问题,有些前续格点可能不存在,因此要加用一些判断条件。最后利用最小值函数min,找到三个前续格点的累积距离的最小值作为累积距离,与当前帧的匹配距离d(i,j)相加,作为当前格点的累积距离。该计算过程一直达到格点(n,m),并将D(n,m)输出,作为模板匹配的结果。通过点击语音识别组件,MATLAB将会自动读取对应文件夹中的wav格式的语音,然后进行前期的端点检测和预处理,通过计算非线性预测系数(MFCC),并保留为参考库及测试库。接着通过DTW算法进行匹配并计算它们的dist距离。最终得出结果,其运行结果窗口如图6-3所示。图6.3 运行结果窗口图7 GUI界面的设计光标、按键、窗

34、口、菜单、图标、对话框和文本等各种图形对象组成的用户界面组成了图形用户界面(GUI)。它让我们用户自己定制MATLAB与用户的交互方法,使命令窗口不是唯一与MATLAB的交互方式。其能够使使用者的学习和使用更为方便、简单。用户不需要了解应用程序到底怎么样执行各种命令的,而只需要知道GUI的使用方法;用户也不必要了解命令是怎么样执行的,用户只需通过与界面交互就可以使指定行为可以正确执行。7.1图形用户界面设计工具的启动单击如图7-1所示的红色框,有三个设计模式,选择一个GUI设计模板,选择自己的存储路径,然后点击OK按钮后,MATLAB就会跳出如图7-2所示GUI设计窗口,当然选择不同的GUI设

35、计模式时,在进入GUI设计窗口后显示的结果当然也是不一样的。图7-1 GUI打开方式(1)组件面板在GUI界面中放置组件, GUI组件布置完成后,可以单击菜单栏中最后一个三角形按钮选项来观察GUIDE的设计结果。这时会自动生成一个FIG文件和一个M文件,FIG文件会提示保存路径。双击界面区域内的按钮就会弹出属性窗口,可以修改自己需要的属性。(2)编程回调函数布置完GUI组件后,接下来最重要的一步就是编程每个按钮的回调函数,实现自己需要的功能,其编程过程为: 选择右键单击按钮,弹出窗口,选择最后一项views callbacks; 鼠标放在views callbacks后就会弹出子选择窗口,根据

36、自己的按钮属性选择相应的函数回调;选择完函数后,则会自动跳到M文件中该按钮所对应的回调函数,在该段函数中,可以编写自己需要实现该按钮的功能的代码。待所有按钮的功能的回调函数都编写完毕后,点击保存,然后点击菜单栏中的三角形按钮,则会弹出用户开发界面,在该用户开发界面中,用户可以单击按钮以实现该按钮所拥有的功能。7.3测试与分析在MATLAB窗口中选择自己弄好的GUI的路径,打开GUI。然后单击菜单栏中的三角形按钮则弹出如图7-2 的用户开发界面。在我的这次设计中,组建了三个模块,即参考模块、测试模块、分析模块,参考模块和测试模块均有相同的功能,即录音、暂停、播放、保存及读取,分析模块包含语音识别

37、和退出。用户可以在点击录音后,录制字、词,录制完毕后,可以点击播放进行回放自己所录制的语音,通过保存(uiputfile函数),用户就可以保存数个录制的语音。通过读取(uigetfile函数),用户可以打开文件并读取语音信号波形。图7-2运行界面录制完成后,点击分析模块中的语音识别控件,系统就会将之前录制好的参考模板库与测试模板库中的语音自动进行匹配。并将结果在MATLAB命令窗口中显示出来,可以看到,显示结果如图7-3。图7-3运行结果图本设计采用端点检测算法,再经过特征提取,最后运用DTW算法来实现语音的识别。采样频率为8kHz语音,语音帧长20ms,一帧分为256点,帧移为80,采用汉明

38、窗的窗函数。录制数字010的语音作为model(参考库),test(测试库)中有若干个需要识别语音,0的序号设置为11,且110的数字文件名的命名都依次从110命名。试验数据如表1-1。由以上数据分析可知识别率为86%。数字1234567891000-10正确数8910710879981095错误数2103023112015正确率80%90%100%70%100%80%70%90%90%80%100%86%表1-1 结果分析总结通过这次设计,了解了语音识别的发展历史以及在语音识别中每个算法的原理。在本设计中,通过MATLAB进行录制语音、播放语音、保存语音、读取语音及打开语音,先对语音信号进行

39、预处理,其次进行端点检测,提取特征参数,然后建立一个参考库及一个测试库。最后通过DTW算法进行匹配,最终将结果在MATLAB命令窗口显示出来。在本次设计中遇到的难题有很多。比如:端点检测算法的运行DTW算法等等,最终通过论导师以及同学的解答,均解决了。在本次设计也存在着许多需要改进的地方,比如:GUI界面功能比较单一,GUI界面美化不够,算法不够精准,有待进行算法改进;本次设计只局限于孤立词的识别,机器只能识别一个孤立的词、音节等,而不能进行少量词汇的语音识别;DTW算法只针对于特定人语音识别。 致谢俗话说,“磨刀不误砍柴工”,每当我遇到不懂的问题,我都将记录在本子上,虚心请教指导老师,老师给

40、我耐心地回答,从来都没有因为我的问题有些简单加以责备,选定题目设计到完成设计,老师总是给我们细心引导和耐心讲解。从选课题题目到设计的顺利完成,陈杰老师都一直给予我耐心的指导。 第一,我要感谢我的良师益友陈洁老师是她精细,苛刻,扎实细致的工作作风一直在我实例给我起指明灯的作用;其次,还要感谢方刚同学对我的帮助,没有他们的帮助和耐心解释、鼓励,这次课程设计也不会完成的如此的顺利。参考文献1 张雪英.数字语音处理及MATLAB仿真J.北京:电子工业出版社,2010.72韦丽兴,张淼,钟映春,韩光.采用PCNN的有噪特定人语音识别系统J.2012.13张瑶.基于量子神经网络的特定人语音识别研究D.天津

41、师范大学.2013.44 何强,何英.MATLAB扩展编程M.北京:清华大学出版社,20025 刘保柱,苏彦华,张宏林.MATLAB 7.0从入门到精通(修订版).北京:人民邮电出版社,2010.56陈立万.基于语音识别系统中DTW算法改进技术研究J.微机计算机信息.2006.27胡金平,陈若珠,李战明.基于语音识别中DTW改进算法的研究J.兰州.2011.118吴晓平,崔光照,路康.基于DTW算法的语音识别系统实现J.2004.79惠博.语音识别特征提取算法的研究与实现D.西北大学.2008.610詹新明,黄南山,杨灿. 语音识别技术研究进展J. 现代计算机(专业版).2008.911沈宏余

42、,李英. 语音端点检测方法的研究J. 科学技术与工程.2008.812谭保华,熊健民,刘幺和. 语音识别技术概述J. 郧阳师范高等专科学校学报.2004.613 赵力语音信号处理M北京:机械工业出版社2003.714 熊伟,罗云贵.语音识别的MFCC 算法研究.武汉:2010年第三期15 蔡妍. 语音信号端点检测方法的研究硕士学位论文D. 江南大学, 2008.616 朱淑琴. 语音识别系统关键技术研究硕士学位论文 D. 西安电子科技大学, 200417 刘金伟,黄樟钦,侯义斌 基于片上系统的孤立词语音识别算法设计J计算机工程2007,318 胡金平,陈若珠,李战明.基于语音识别中DTW改进算

43、法的研究.兰州:TP391.4219 李景川,董慧颖. 一种改进的基于短时能量的端点检测算法J. 沈阳理工大学学报,2008.6 20 王嘉梅.基于MATLAB的数字信号处理与时间开发.西安:西安电子科技大学出版社, 2007.1221 熊伟,罗云贵.语音识别的MFCC 算法研究.武汉:2010年第三期22 吴亚栋. 语音识别基础R. 上海交通大学计算机系, 2007.0123 雷静.语音识别技术的研究及基本实现D.武汉:武汉理工大学,2002 24 张雄伟,陈亮,杨吉斌.现代语音处理技术及应用M.北京:机械工业版社,200325 张志敏,郭英,王博一种基于倒谱特征的语音端点检测改进算法J电声

44、技术,2006.426 刘羽语音端点检测及其在MATLAB中的实现J计算机时代,2005.827 徐剐,徐华中语音信号端点检测的实验研究J福建电脑,2006.128 胡光锐,韦晓东基于倒谱特征的带噪语音端点检测J电子学报,2000.1029 于迎霞,史家茂一种改进的基于倒谱特征的带噪端点检测方法J计算机工程,2004.630 相征,朗朗,王静. 基于基音频能值的端点检测算法J. 安徽工程科技学院学报, 2008.9附件附录语音识别主函数function varargout = GUI(varargin)% GUI M-file for GUI.fig% GUI, by itself, crea

45、tes a new GUI or raises the existing% singleton*.% H = GUI returns the handle to a new GUI or the handle to% the existing singleton*.% GUI(CALLBACK,hObject,eventData,handles,.) calls the local% function named CALLBACK in GUI.M with the given input arguments.% GUI(Property,Value,.) creates a new GUI

46、or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before GUI_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to GUI_OpeningFcn via varargin.% *See GUI Options o

47、n GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Copyright 2002-2003 The MathWorks, Inc.% Edit the above text to modify the response to help GUI% Last Modified by GUIDE v2.5 30-Apr-2015 22:25:50% Begin initialization code - DO NOT E

48、DITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, GUI_OpeningFcn, . gui_OutputFcn, GUI_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:narg

49、out = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before GUI is made visible.function GUI_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to fi

50、gure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to GUI (see VARARGIN)% Choose default command line output for GUIhandles.output = hObject;% Update handles structureguidata(hObject, han

51、dles);% UIWAIT makes GUI wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = GUI_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to

52、 figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout1 = handles.output;% - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject,

53、eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global a;fs=16000;t=2; a=wavrecord(t*fs,fs);handles.a=a;guidata(hObject, handles);% - Executes on button press in

54、 pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global a;pause(handles.a);guidata(hObject, handles);% - Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbut

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论