李健楠11010307仪表2班资料.docx
- 文档编号:4672337
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:29
- 大小:815.74KB
李健楠11010307仪表2班资料.docx
《李健楠11010307仪表2班资料.docx》由会员分享,可在线阅读,更多相关《李健楠11010307仪表2班资料.docx(29页珍藏版)》请在冰豆网上搜索。
李健楠11010307仪表2班资料
燕山大学
课程设计说明书
题目:
基于MATLAB的语音识别设计
学院(系):
电气工程学院
年级专业:
11级仪表2班
学号:
110103020087
学生姓名:
李健楠
指导教师:
谢平杜义浩
教师职称:
教授讲师
指导教师:
张淑清
教师职称:
教授
燕山大学课程设计(论文)任务书
院(系):
电气工程学院基层教学单位:
自动化仪表系
学号
110103020087
学生姓名
李健楠
专业(班级)
仪表2班
设计题目
基于MATLAB的语音识别设计
设
计
技
术
参
数
1.语音信号的端点检测
2.非线性预测mfcc系数
3.三角带通滤波器
4.DTW算法
5.MATLAB与单片机串口
设
计
要
求
1.提取的特征参数要能有效地代表语音特征,具有很好的区分性。
2.各阶参数之间有良好的独立性。
3.特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。
4.搭建GUI界面,使展示更加直观清晰。
工
作
量
首先通过语音的录制作为输入信号,输入的模拟语音信号要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等等。
经过预处理后,接下来就是重要的一环:
特征参数提取。
最后进行GUI界面的设计及与单片机相连。
工
作
计
划
第1-2天根据任务书及设计题目的要求查阅相关资料文献,确定总体设计思路第3-4天具体的分析设计题目,理解原理同时寻求相关的实现算法
第5-8天编写程序代码,并上机进行调试
第9-10天整理方法和结果,撰写课程设计报告书,进行答辩
参
考
资
料
[1]信号处理原理及应用谢平林洪彬王娜编著机械工业出版社
[2]Matlab通信仿真与应用刘敏魏玲编著国防工业出版社
[3]基于Matlab7.x的系统分析与设计楼顺天等编著西安电子科技大学
[4]基于声卡和MATLAB的语音信号采集和处理陈宇锋著中国现代教育装备
[5]数字信号处理孙洪等译电子工业出版社
指导教师签字
基层教学单位主任签字
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2014年7月5日
摘要
语言是人类交换信息最方便、最快捷的一种方式,在高度发达的信息社会中,用数字化的方法进行语音的传送、存储、识别、合成和增强等是整个数字化通信网中最重要、最基本的组成部分之一。
而在随着科技技术的发展的今天,除了人与人之间的自然语言通信之外,人与机或机器与机器之间也开始使用语言。
也就是因为如此,需要涉及到语音识别技术。
为了解决机器能“听懂”人类的语言,在科技如此迅猛发展的今天,语音识别技术一直受到各国科学界的关注,其对计算机发展和社会生活的重要性也日益凸显出来。
在孤立字语音识别中,如语音密码锁,汽车控制等领域,都运用到了特定人语音识别技术,也就是DTW算法,相对于HMM算法,DTW算法具有简单操作。
在相同环境下,两者识别效果相差不大,但是HMM算法要复杂得多,主要体现在HMM算法在训练阶段需要提供大量的语音数据,而DTW算法则不需要额外的计算。
所以在特定人语音识别当中,DTW算法被广泛使用。
在本次设计中,将运用到MATLAB平台来对语音信号进行处理及识别。
通过MATLAB平台建立一个GUI界面,接着对一组语音信号的输入进行预处理及端点检测,提取特征参数(MFCC),形成参考模块。
然后再对一组相同的语音信号输入进行同样的操作作为测试模块,与参考模块进行DTW算法进行匹配,输出匹配后的识别结果。
最后通过串口连接实现识别的命令与单片机相连,借助c语言,显示识别的数据,达到matlab与单片机,软件与硬件的结合。
关键词 MATLABGUI端点检测MFCCDTW串口单片机
目录
摘要I
第1章研究背景及意义..................................................................................................1
第2章总体设计思路2
1.1设计目的2
1.2设计意义2
1.3总体设计方案及思路3
第2章信号处理模块基本原理3
2.1端点检测3
2.2MEL倒谱系数的求取10
2.3DTW算法.............................................................................................12
第3章MATLAB与单片机连接模块...............................................................15
第4章MATLAB软件设计及实现16
3.1GUI概述16
3.2MATLAB语音信号类型18
3.3设计流程19
第5章系统整体调试及结果说明20
第6章课设学习心得及总结21
参考文献22
附录23
第1章研究背景及意义
早在计算机发明之前,自动语音识别的设想就已经被提上了议事日程,早期的声码器可被视作语音识别及合成的雏形。
而1920年代生产的"Radio Rex"玩具狗可能是最早的语音识别器,当这只狗的名字被呼唤的时候,它能够从底座上弹出来。
最早的基于电子计算机的语音识别系统是由AT&T贝尔实验室开发的Audrey语音识别系统,它能够识别10个英文数字。
其识别方法是跟踪语音中的共振峰。
该系统得到了98%的正确率。
到1950年代末,伦敦学院(Colledge of London)的Denes已经将语法概率加入语音识别中。
1960年代,人工神经网络被引入了语音识别。
这一时代的两大突破是线性预测编码Linear Predictive Coding (LPC),及动态时间弯折Dynamic Time Warp(DTW)技术。
国外的语音识别的研究工作可以追溯到20世纪50年代AT&T贝尔实验室的Audry系统,它是第一个可以识别十个英文数字的语音识别系统。
但真正取得实质性进展,并将其作为一个重要的课题开展研究则是在60年代末70年代初。
这首先是因为计算机技术的发展为语音识别的实现提供了硬件和软件的可能,更重要的是语音信号线性预测编码(LPC)技术和动态时间规整(DTW)技术的提出,有效的解决了语音信号的特征提取和不等长匹配问题。
这一时期的语音识别主要基于模板匹配原理,研究的领域局限在特定人,小词汇表的孤立词识别,实现了基于线性预测倒谱和DTW技术的特定人孤立词语音识别系统;同时提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。
第2章总体设计思路
1.1设计目的
语言是人类交换信息最方便、最快捷的一种方式,在高度发达的信息社会中,用数字化的方法进行语音的传送、存储、识别、合成和增强等是整个数字化通信网中最重要、最基本的组成部分之一。
随着人类步入信息社会步伐的加快,越来越多的地方需要用到语音信号处理的知识。
而MATLAB作为一个语音信号处理的平台,是一个高性能的科学计算软件,广泛应用于数学计算、算法开发、数学建模、系统仿真、数据分析处理及可视化、科学和工程绘图、应用系统开发(包括建立用户界面)等。
其语言是一种简单、高效、功能极强的高级语言,具有强大的矩阵运算能力和极高的编程效率,这一方面使得MATLAB程序可以被高度向量化,另一方面使得程序易读易写。
本设计主要围绕着MATLAB平台进行语音信号的录制及预处理,提取特征参数,建立两种模块,一组为参考模块,一组为测试模块,然后通过DTW算法进行匹配,算出匹配结果。
主要通过用户开发界面直观地呈现出来。
1.2设计意义
语音识别技术的应用及研究方向
①连续自然语音的识别。
目的是能让计算机更好的理解人说的话,能让计算机更好的处理人类流畅的自然发音,该技术需要解决的难点很多,对它的研究是今后的目标之一。
②语音识别技术与多媒体技术的结合。
今后的发展,人类对语音信号的需要将不仅仅局限于可懂性和正确性上了,而是需要在合成语音的美感的同时并输出辅助的视频特征,实现主持人的效果。
③不同语种的解决。
不同民族有不同的语言,在如今开放的信息网络时代,不同语言之间的交流显得十分重要,因此,多语种的合成有着独特的应用价值。
例如,在自动电话翻译、有声电子邮件等应用中都涉及到了多语种合成的需求。
1.2总体设计方案及思路
本次课设主要通过运用MATLAB进行编程,结合GUI界面实现语音识别0~9这几个数字,主要用的是端点检测,非线性预测MFCC系数,DTW算法等,然后通过MATLAB与串口相连实现将识别出的语音信号传送到单片机上显示,实现单片机与MATLAB的连接,硬件与软件的结合。
第2章信号处理模块基本原理
2.1端点检测
如图3.1可以看到,数字“1”信号在大致4500~11000之间的采样点属于发音状态,头部跟尾部的信号幅度都很低,属于静音或噪音。
图2.1数字“1”的时域图
图2.1是数字“1”的头部放大图,从图中可以看出,在4400之前的信号幅度很低,明显属于静音,而从4400开始,幅度开始增强,并且有明显的周期性,两个尖峰之间的距离就是所谓的基音周期,也就是人的声带振动的周期。
这样的话,我们可以用信号的幅度作为特征,区分静音和语音。
只要设定一个门限,当信号幅度超过这个门限的时候,就当作语音开始,当幅度降低到门限以下的时候就认为语音结束。
图2.2数字“1”头部放大图
因此,我们可以采用短时能量来描述语音信号的幅度。
比如,对于一个读取到的语音信号x(n),其中n为采样点,首先进行分帧,将语音信号分为每20~30ms一段,相邻两帧起始点之间间隔为10ms,也就是说两帧之间有10~20ms的交叠。
由于采样频率的差异,帧长和帧移所对应的实际采样点数都不一样。
对应第i帧,第n个样本,它与原始语音信号的关系为:
xi(n)=x[(i-1)M+n]
第i帧的语音信号的短时能量就可以用下面几种算法得到:
分别为绝对值的累加、平方累加和平方的对数的累加,选择其中一种就可以了。
计算完每帧的短时能量,然后再设定一个门限,就可以实现一个简单的检测算法了。
但是这种算法不可靠,因为人的发音有清音和浊音之分,浊音为声带振动发出,对应的幅度高,周期性明显,而清音则不会有声带的震动,只是靠空气在口腔中的摩擦、冲击或爆破而发音,其短时能量一般比较小。
如声母“s”、“c”等的幅度就很低,往往会被漏掉。
图2.3数字“3”的头部放大图
比如图3.3显示的数字“3”开始部分的波形,可以看到声母“s”的范围大概为6400~7100。
幅度明显比后面的低很多,以至于有时用肉眼都难以区分跟静音的区别,所以基于短时能量的算法对这些语音信号几乎无能为力。
不过虽然不能用短时能量可靠的区分开,但是可以发现在静音段信号的波形变化相对比较缓慢,而在清音段,因为口腔空气摩擦的效果,造成的波形在幅度上相对变化比较剧烈,这时,可以通过用一帧信号中波形穿越零电平的次数来描述这种变化的剧烈程度,成为过零率,公式为:
实际上,为了避免静音段的随机噪声产生过高的过零率,通常都会先设定一个门限,当前后两个采样的符号不同时,而且差值大于该门限的时候,就将过零率的数值加1。
该算法不是实时运行的,而是读取一个wav文件获得语音采样,然后将其分帧计算短时能量和过零率参数,再进行端点检测。
这种方式称为离线处理方法。
(1)短时能量的计算
基于前面讲过的短时能量可以用下面命令实现:
amp1=sum(log(y.*y+eps),2);
在计算短时能量时,一般都要将语音信号通过一个一阶高通滤波器
,称为预加重滤波器,它的目的在于滤除掉低频干扰,尤其是50Hz或60Hz的工频干扰,提升更为有用的高频部分的频谱。
在计算短时能量之前应用该滤波器,还可以起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。
公式为:
amp=sum(abs(enframe(filter([1-0.9375],1,x),FrameLen,FrameInc)),2);
在公式中用的虽是绝对值能量,实际上就是平均幅度。
(2)过零率的计算
过零率的计算则没有那么简单。
其计算过程如图3.4所示。
图2.4短时过零率流程图
在计算流程中,可以设置门限delta=0.02。
这个门限可以进行细微的调整,通过该流程并编写相应的代码可以得到图3.5波形。
与原始语音信号波形一起可以看到,语音信号声母部分的幅度虽然比较低,但是其过零率的数值却很高,峰值将近50,而在其后面的韵母部分过零率则比较低,在20左右。
图2.5过零率波形图
因此,在实际应用中,一般都是利用过零率来监测清音,利用短时能量来监测浊音,两者配合起来则实现可靠的端点检测。
用得比较多的是一种双门限的算法。
在过零率的程序中,为了后面处理方便,通常将读取的语音信号进行归一化,即:
x=x./max(abs(x));
然后再计算语音信号的短时能量和过零率,而该程序用了两重循环,影响了运算速度,为了提高算法的效率,通常采用一种矢量化的计算方法,如下:
tmp1=enframe(x(1:
end-1),FrameLen,FrameInc);
tmp2=enframe(x(2:
end),FrameLen,FrameInc);
signs=(tmp1.*tmp2)<0;
diffs=(tmp1-tmp2)>0.02;
zcr=sum(signs.*diffs,2);
以上代码中,tmp1和tmp2都是由x得到,但是相互之间相差一个采样点,signs为符号数组,用于存储相邻两个采样点的符号是否相同,也就是说是否穿越零电平。
diffs用来度量相邻两个采样点之间的距离,如果距离大于所设置的门限即0.02,则为1,否则为0。
最后将两个矩阵点相乘就可以得到满足两个条件的采样点矩阵。
然后将其按帧求和,就可以得到过零率。
(3)端点检测的流程
前两小节均介绍了语音端点检测两点主要算法,其检测流程如图3.6所示。
图2.6端点检测算法流程图
检测之前,先为短时能量和过零率分别确定两个门限。
一个是比较低的门限,其数值比较小,对信号的变化能够敏感,很容易就会被超过;而另一个是比较高的门限,数值要求比较大,信号要达到一定的强度,该门限才可能被超过。
不过,低门限被超过未必就是语音的开始,有可能是时间很短的噪声引起的。
高门限被超过的话则可以基本确定是由于语音信号引起的。
(4)端点检测运行结果
从运行结果可以看出通过上述方法可以较为准确的显示出语音信号的起始终止段,从而实现端点检测,较好的为下一步的工作铺垫。
2.2MEL倒谱系数的求取
随着语音识别技术在各个国家的科学界受到重视,寻找一种与人耳相近的参数是每个科学家的目标,而近年来,一种能够比较充分利用人耳这种特殊的感知特性的参数得到广泛应用,这种参数就是Mel尺度倒谱参数(Mel-scaledCepstrumCoefficients),或称Mel频率倒谱参数,简称MFCC。
1.MFCC基本原理
在语音识别处理信号过程中,MFCC参数是按照帧计算的。
其特征提取及计算过程如图2.7所示。
、
图2.7MFCC特征提取及计算流程
(1)预加重、分帧及加窗
在语音参数计算之前,一般要将其通过一个预加重滤波器,预加重目的是为了对语音的高频部分进行加重增加其高频分辨率,其函数为:
x=filter([1-0.9375],1,x);
分帧操作主要是提取语音短时特性便于建模,一般取帧长30ms,帧移10ms;对于语音信号时域分析来说,窗函数的选择很重要,虽说矩形窗平滑比较好,但是容易丢失波形细节,并有可能造成泄漏现象。
而Hamming窗可以有效的客服泄漏现象。
所以在加窗方面常以Hamming窗为主,即:
(2)端点检测
端点检测是语音识别中的一个重要环节,有效的端点检测方法不仅可以减少数据的存储量和处理时间,还可以排除无声段的噪声干扰。
而在第三章就详细介绍了基于短时能量和短时过零率的端点检测算法过程。
可以参考下第三章的端点检测算法。
(3)FFT算法计算:
在序列后补零以构成N=512点在进行离散FFT变换,第i帧语言的频谱为:
。
(4)将上述线性频谱X(k,i)通过在频率范围内设置的若干个具有三角滤波特性的带同滤波器
的Mel滤波器组得到Mel频谱。
总传递函数为:
(5)将对数能量谱S(k,i)经过离散余弦变换(DTC)即可得到Mel倒谱系数
M为滤波器的个数:
。
2.MFCC运行结果
如图2.8可以看出不同语音信号分别对应的MFCC系数图存在明显的差异,对应分别为‘0’,‘1’,‘2’。
‘0’的MFCC系数图前一段相对较平稳,后一段相对波动较大,‘1’的MFCC系数图基本比较平稳,‘2’的MFCC整体的波动都比较大。
2.3DTW算法
在孤立词语音识别中,最为简单有效的方法是采用DTW算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配为题,是语音识别中出现较早、较为经典的一种算法。
无论在训练和建立模板阶段还是在识别阶段,都先采用端点检测算法确定语音的起点和终点。
已存入模板库的各个词条称为参考模板,一个参考模板可以表示为
,m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模板所包含的语音帧总数,R(m)为第m帧语音特征矢量。
所要识别的一个输入词条语音称为测试模板,可表示为
,n为测试语音帧的时序标号,n=1为起点语音帧,n=N为终点语音帧,因此N为该模板所包含的语音帧总数,T(n)为第n帧语音特征矢量。
参考模板与测试模板一般采用相同类型的特征矢量(如MFCC系数)、相同的帧长、相同的窗函数和相同的帧移。
假设测试和参考模板分别用T和R表示,为了比较它们之间的相似度,可以计算它们之间的距离D[T,R],距离越小则相似度越高。
为了计算这一失真距离,应从T和R中各个对应帧之间的距离算起。
设n和m分别是T和R中任意选择的帧号,d[T(n),R(m)]表示这两种特征矢量之间的距离。
距离函数取决于实际采用的距离度量,在DTW算法中通常采用欧氏距离。
通常,规整函数被限制在一个平行四边形的网格内,如图.1所示。
它的一条边斜率为2,另一条边斜率为1/2。
规整函数的起点是(1,1),终点为(N,M)。
DTW算法的目的是在此平行四边形内由起点到终点寻找一个规整函数,使其具有最小的代价函数,保证了测试模板与参考模板之间具有最大的声学相似特性。
图2.8DTW原理图
由于在模板匹配过程中限定了弯折的斜率,因此平行四边形之外的格点对应的帧匹配距离是不需要计算的。
另外,因为每一列各格点上的匹配计算只用到了前一列的3个网格,所以没有必要保存所有的帧匹配距离矩阵和累积距离矩阵。
充分利用这两个特点可以减少计算量和存储空间的需求,形成一种高效的DTW算法,如图所示。
图中,把实际的动态弯折分为三段,(1,xa),(xa+1,xb),(xb+1,N),其中:
xa=(2M-N)/3,
xb=2(2N-M)/3
xa和xb都取最相近的整数,由此可得出对M和N长度的限制条件:
2M-N≥3,
2N-M≥2
当不满足以上条件时,认为两者差别太大,则无法进行动态弯折匹配。
在x轴上的每一帧不再需要与y轴上的每一帧进行比较,而只是与y轴上[ymin,ymax]间的帧进行比较,ymin和ymax的计算公式为:
ymin=x/2,0≤x≤xb,
2x+(M-2N),xb ymax=2x,0≤x≤xa, x/2+(M-N/2),xa 如果出现xa>xb的情况,则弯折匹配的三段为(1,xb),(xb+1,xa),(xa+1,N)。 对于x轴上每前进一帧,虽然所要比较的y轴上的帧数不同,但弯折特性是一样的,累积距离的更新都是用下式实现的: D(x,y)=d(x,y)+min[D(x-1,y),D(x-1,y-1),D(x-1,y-2)] 第3章MATLAB与单片机连接模块 通过编写串口通信的连接及51单片机的连接,实现上位机与下位机的相连,将上位机的运行结果发送到下位机,同时也可将下位机接收的数据反馈给上位机,实现串口通信,软件与硬件结合。 当上位机实现识别某一个数字的时候,通过GUI界面的按钮打开串口,实现串口通信,然后将识别的数字转换为ASCII的对应值,借助C语言在单片机数码管中实现显示。 部分代码如下: functionpushbutton1_Callback(hObject,eventdata,handles) clc; globals; s=serial('COM3','BaudRate',9600,'Parity','none','DataBits',8,'StopBits',1); s.BytesAvailableFcnMode='byte'; s.BytesAvailableFcnCount=1; s.BytesAvailableFcn=@instrcallback; fopen(s); functionpushbutton2_Callback(hObject,eventdata,handles) globalda; Da functionpushbutton3_Callback(hObject,eventdata,handles) globals; fclose(s) 第4章MATLAB软件设计与实现 4.1GUI概述 在开发一个实际的应用程序时都会尽量做到界面友好,最常用的方法就是使用图形界面。 其能够使用户的学习和使用更为方便容易。 用户不需要知道应用程序究竟怎样执行各种命令的,而只需要了解可见界面组件的使用方法;用户也不需要知道命令是怎么执行的,只要通过与界面交互就可以使指定的行为得以正确执行。 正是MATLAB为用户开发图形界面提供了一个方便高效的集成开发环境,MATLAB图形用户界面开发环境GUIDE(MATLABGraphicalUserInterfaceDevelopmentEnvironment)。 GUIDE主要是一个界面设计工具集,MATLABR2011B将所有GUI支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法。 GUIDE将用户设计好的GUI界面保存在一个FIG资源文件中,同时还能够生成包含GUI初始化和组件界面布局控制代码的M文件。 这个M文件为实现回调函数(当用户激活GUI某一组件时执行的函数)提供了一个参考框架。 图4.1GUI设计框架图 实现一个GUI主要包括GUI界面设计和GUI组件编程两项工作。 整个GUI的实现过程如图4.1所示 图4.2GUI打开方式 4.2MATLAB中的语音信号模型 可以看出,发音过程及收听语音的过程是及其复杂的。 所以对于计算机而言,是难以找到一种完全接近的算法来诠释发音及收听过程。 但是,在MATLABR2011B中,有两个函数可以用来模拟人的发音及收集语音功能,即wavplay函数跟wavreord函数。 部分声音信号的时域波形: 图4.3数字“1”的时域图 图4.4数字“3”的时域图 4.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 李健楠 11010307 仪表 资料