matlab语音识别系统源代码副本.docx
- 文档编号:10694738
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:14
- 大小:51.62KB
matlab语音识别系统源代码副本.docx
《matlab语音识别系统源代码副本.docx》由会员分享,可在线阅读,更多相关《matlab语音识别系统源代码副本.docx(14页珍藏版)》请在冰点文库上搜索。
matlab语音识别系统源代码副本
《智能仪器》课程设计
题目:
MATLAB实现语音识别功能
班级:
学号:
姓名:
同组人员:
任课教师:
完成时间:
2018/11/3
一、设计任务及要求………………………………………………1
二、语音识别的简单介绍
2.1语者识别的概念……………………………………………2
2.2特征参数的提取……………………………………………3
2.3用矢量量化聚类法生成码本………………………………3
2.4VQ的说话人识别…………………………………………4
三、算法程序分析
3.1函数关系………………………………………………….4
3.2代码说明……………………………………………………5
3.2.1函数mfcc………………………………………………5
3.2.2函数disteu……………………………………………5
3.2.3函数vqlbg…………………………………………….6
3.2.4函数test………………………………………………6
3.2.5函数testDB……………………………………………7
3.2.6函数train……………………………………………8
3.2.7函数melfb………………………………………………8
四、演示分析…………………………………………………….9
五、心得体会…………………………………………………….11
附:
GUI程序代码………………………………………………12
一、设计任务及要求
用MATLAB实现简单的语音识别功能;
具体设计要求如下:
用MATLAB实现简单的数字1~9的语音识别功能。
二、语音识别的简单介绍
基于VQ的说话人识别系统,矢量量化起着双重作用。
在训练阶段,把每一个说话者所提取的特征参数进行分类,产生不同码字所组成的码本。
在识别(匹配>阶段,我们用VQ方法计算平均失真测度(本系统在计算距离d时,采用欧氏距离测度>,从而判断说话人是谁。
b5E2RGbCAP
语音识别系统结构框图如图1所示。
图1语音识别系统结构框图
2.1语者识别的概念
语者识别就是根据说话人的语音信号来判别说话人的身份。
语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。
用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用电话网络还可实现远程客户服务等。
因此,近几年来,说话人识别越来越多的受到人们的重视。
与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。
因此,说话人识别的应用前景非常广泛:
今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说话人识别的发展做出了贡献。
说话人识别技术是集声学、语言学、计算机、信息处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。
在吃力语音信号的时候如何提取信号中关键的成分尤为重要。
语音信号的特征参数的好坏直接导致了辨别的准确性。
p1EanqFDPw
2.2特征参数的提取
对于特征参数的选取,我们使用mfcc的方法来提取。
MFCC参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel标度频率域提取出来的倒谱特征参数。
DXDiTa9E3d
MFCC参数的提取过程如下:
1.对输入的语音信号进行分帧、加窗,然后作离散傅立叶变换,获得频谱分布信息。
设语音信号的DFT为:
<1)
其中式中x(n>为输入的语音信号,N表示傅立叶变换的点数。
2.再求频谱幅度的平方,得到能量谱。
3.将能量谱通过一组Mel尺度的三角形滤波器组。
我们定义一个有M个滤波器的滤波器组<滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为f(m>,m=1,2,3,···,MRTCrpUDGiT
本系统取M=100。
4.计算每个滤波器组输出的对数能量。
<2)
其中
为三角滤波器的频率响应。
5.经过离散弦变换 MFCC系数个数通常取20—30,常常不用0阶倒谱系数,因为它反映的是频谱能量,故在一般识别系统中,将称为能量系数,并不作为倒谱系数,本系统选取20阶倒谱系数。 5PCzVD7HxA 2.3用矢量量化聚类法生成码本 我们将每个待识的说话人看作是一个信源,用一个码本来表征。 码本是从该说话人的训练序列中提取的MFCC特征矢量聚类而生成。 只要训练的序列足够长,可认为这个码本有效地包含了说话人的个人特征,而与讲话的内容无关。 jLBHrnAILg 本系统采用基于分裂的LBG的算法设计VQ码本, 为训练序列,B为码本。 具体实现过程如下: 1.取提取出来的所有帧的特征矢量的型心(均值>作为第一个码字矢量B1。 2.将当前的码本Bm根据以下规则分裂,形成2m个码字。 <4) 其中m从1变化到当前的码本的码字数,ε是分裂时的参数,本文ε=0.01。 3.根据得到的码本把所有的训练序列(特征矢量>进行分类,然后按照下面两个公式计算训练矢量量化失真量的总和 以及相对失真(n为迭代次数,初始n=0, =∞,B为当前的码书>,若相对失真小于某一阈值ε,迭代结束,当前的码书就是设计好的2m个码字的码书,转5。 否则,转下一步。 xHAQX74J0X 量化失真量和: <5) 相对失真: <6) 4.重新计算各个区域的新型心,得到新的码书,转3。 5.重复2,3和4步,直到形成有M个码字的码书(M是所要求的码字数>,其中D0=10000。 2.4VQ的说话人识别 设是未知的说话人的特征矢量 ,共有T帧是训练阶段形成的码书,表示码书第m个码字,每一个码书有M个码字。 再计算测试者的平均量化失真D,并设置一个阈值,若D小于此阈值,则是原训练者,反之则认为不是原训练者。 LDAYtRyKfE <7) 三、算法程序分析 在具体的实现过程当中,采用了matlab软件来帮助完成这个工程。 在matlab中主要由采集,分析,特征提取,比对几个重要部分。 以下为在实际的操作中,具体用到得函数关系和作用一一列举在下面。 Zzz6ZB2Ltk 3.1函数关系 主要有两类函数文件Train.m和Test.m 在Train.m调用Vqlbg.m获取训练录音的vq码本,而Vqlbg.m调用mfcc.m获取单个录音的mel倒谱系数,接着mfcc.m调用Melfb.m---将能量谱通过一组Mel尺度的三角形滤波器组。 dvzfvkwMI1 在Test.m函数文件中调用Disteu.m计算训练录音<提供vq码本)与测试录音<提供mfcc)mel倒谱系数的距离,即判断两声音是否为同一录音者提供。 Disteu.m调用mfcc.m获取单个录音的mel倒谱系数。 mfcc.m调用Melfb.m---将能量谱通过一组Mel尺度的三角形滤波器组。 rqyn14ZNXI 3.2具体代码说明 3.2.1函数mffc: functionr=mfcc(s,fs> --- m=100。 n=256。 l=length(s>。 nbFrame=floor((l-n>/m>+1。 %沿-∞方向取整 fori=1: n forj=1: nbFrame M(i,j>=s(((j-1>*m>+i>。 %对矩阵M赋值 end end h=hamming(n>。 %加hamming窗,以增加音框左端和右端的连续性 M2=diag(h>*M。 fori=1: nbFrame frame(: i>=fft(M2(: i>>。 %对信号进行快速傅里叶变换FFT end t=n/2。 tmax=l/fs。 m=melfb(20,n,fs>。 %将上述线性频谱通过Mel频率滤波器组得到Mel频谱,下面在将其转化成对数频谱EmxvxOtOco n2=1+floor(n/2>。 z=m*abs(frame(1: n2,: >>.^2。 r=dct(log(z>>。 %将上述对数频谱,经过离散余弦变换(DCT>变换到倒谱域,即可得到Mel倒谱系数(MFCC参数>SixE2yXPq5 3.2.2函数disteu ---计算测试者和模板码本的距离 functiond=disteu(x,y> [M,N]=size(x>。 %音频x赋值给【M,N】 [M2,P]=size(y>。 %音频y赋值给【M2,P】 if(M~=M2> error('不匹配! '>%两个音频时间长度不相等 end d=zeros(N,P>。 if(N %在两个音频时间长度相等的前提下 copies=zeros(1,P>。 forn=1: N d(n,: >=sum((x(: n+copies>-y>.^2,1>。 end else copies=zeros(1,N>。 forp=1: P d(: p>=sum((x-y(: p+copies>>.^2,1>'。 end%%成对欧氏距离的两个矩阵的列之间的距离 end d=d.^0.5。 3.2.3函数vqlbg ---该函数利用矢量量化提取了音频的vq码本 functionr=vqlbg(d,k> e=.01。 r=mean(d,2>。 dpr=10000。 fori=1: log2(k> r=[r*(1+e>,r*(1-e>]。 while(1==1> z=disteu(d,r>。 [m,ind]=min(z,[],2>。 t=0。 forj=1: 2^i r(: j>=mean(d(: find(ind==j>>,2>。 x=disteu(d(: find(ind==j>>,r(: j>>。 forq=1: length(x> t=t+x(q>。 end end if(((dpr-t>/t> break。 else dpr=t。 end end end 3.2.4函数test functionfinalmsg=test(testdir,n,code> fork=1: n%readtestsoundfileofeachspeaker6ewMyirQFL file=sprintf('%ss%d.wav',testdir,k>。 [s,fs]=wavread(file>。 v=mfcc(s,fs>。 %得到测试人语音的mel倒谱系数 distmin=4。 %阈值设置处 %就判断一次,因为模板里面只有一个文件 d=disteu(v,code{1}>。 %计算得到模板和要判断的声音之间的“距离” dist=sum(min(d,[],2>>/size(d,1>。 %变换得到一个距离的量 %测试阈值数量级 mTLAB %handlesstructurewithhandlesanduserdata(seeGUIDATA>kavU42VRUs globaldata2。 %globaldataDN2。 sound(data2> %sound(dataDN2> axes(handles.axes2>%settoplotataxes1 plot(data2>。 %plot(dataDN2>。 xlabel('测试采样序列'>,ylabel('信号幅'>。 %xlabel('²âÊÔ²ÉÑùÐòÁÐ'>,ylabel('sym8С²¨½µÔëºóµÄÐźŷù'>。 %%y6v3ALoS89 gridon。 clear %---Executesonbuttonpressinpushbutton11. functionpushbutton11_Callback(hObject,eventdata,handles>M2ub6vSTnP %hObjecthandletopushbutton11(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLAB0YujCfmUCw %handlesstructurewithhandlesanduserdata(seeGUIDATA>eUts8ZQVRd globalmoodle。 testDB('测试\',1,moodle> %---Executesonbuttonpressinpushbutton12. functionpushbutton12_Callback(hObject,eventdata,handles>sQsAEJkW5T %hObjecthandletopushbutton12(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABGMsIasNXkA %handlesstructurewithhandlesanduserdata(seeGUIDATA>TIrRGchYzg globalmoodle。 moodle=train('实时模板\',1> %---Executesonselectionchangeinpopupmenu3. functionpopupmenu3_Callback(hObject,eventdata,handles>7EqZcWLZNX %hObjecthandletopopupmenu3(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABlzq7IGf02E %handlesstructurewithhandlesanduserdata(seeGUIDATA>zvpgeqJ1hk %Hints: contents=get(hObject,'String'>returnspopupmenu3contentsascellarrayNrpoJac3v1 %contents{get(hObject,'Value'>}returnsselecteditemfrompopupmenu31nowfTG4KI str=get(handles.popupmenu3,'String'>。 val=str2num(str{get(handles.popupmenu3,'Value'>}>。 switchval case1 case2 case3 case4 case5 case6 case7 case8 case9 end %---Executesduringobjectcreation,aftersettingallproperties.fjnFLDa5Zo functionpopupmenu3_CreateFcn(hObject,eventdata,handles>tfnNhnE6e5 %hObjecthandletopopupmenu3(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABHbmVN777sL %handlesempty-handlesnotcreateduntilafterallCreateFcnscalledV7l4jRB8Hs %Hint: popupmenucontrolsusuallyhaveawhitebackgroundonWindows.83lcPA59W9 %SeeISPCandCOMPUTER. ifispc&&isequal(get(hObject,'BackgroundColor'>,get(0,'defaultUicontrolBackgroundColor'>>mZkklkzaaP set(hObject,'BackgroundColor','white'>。 end %---Executesonbuttonpressinpushbutton9. functionpushbutton13_Callback(hObject,eventdata,handles>AVktR43bpw %hObjecthandletopushbutton9(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABORjBnOwcEd %handlesstructurewithhandlesanduserdata(seeGUIDATA>2MiJTy0dTT %---Executesonbuttonpressinpushbutton10. functionpushbutton14_Callback(hObject,eventdata,handles>gIiSpiue7A %hObjecthandletopushbutton10(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABuEh0U1Yfmh %handlesstructurewithhandlesanduserdata(seeGUIDATA>IAg9qLsgBX %---Executesduringobjectcreation,aftersettingallproperties.WwghWvVhPE %functionaxes8_CreateFcn(hObject,eventdata,handles>asfpsfpi4k %hObjecthandletoaxes8(seeGCBO> %eventdatareserved-tobedefinedinafutureversionofMATLABooeyYZTjj1 %handlesempty-handlesnotcreateduntilafterallCreateFcnscalledBkeGuInkxI %Hint: placecodeinOpeningFcntopopulateaxes8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 语音 识别 系统 源代码 副本