基于MATLAB的语音识别系统的设计实现_第1页
基于MATLAB的语音识别系统的设计实现_第2页
基于MATLAB的语音识别系统的设计实现_第3页
基于MATLAB的语音识别系统的设计实现_第4页
基于MATLAB的语音识别系统的设计实现_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

摘要图2-1语音识别方案框架图语音识别的过程可以被看作模式匹配的过程,模式匹配是指根据一定的准则,使未知模式与模型库中的某一个模型获得最佳匹配的过程。模式匹配中需要用到的参考模板通过模板训练获得。在训练阶段,将特征参数进行一定的处理后,为每个词条建立一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音特征参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。1、预处理假设输入的音频信号为(n),预处理过程如下。(1)归一化处理。归一化处理的目的是消除不同样本声音大小的差异,将样本幅度值限定在[-1,+1]。(2)预加重。预加重一般是用具有6dB/倍频程的一阶数字滤波器来实现,如式(2-1)所示:(2-1)其中u为常数,一般取0.97。(3)对音频信号进行重叠分帧。为了避免信号间断,一般取256点为一帧,帧间重叠为128点。2、MFCCMFCC是在Mel标度频率域提取出来的倒谱参数,Mel标度描述了人耳频率感知的非线性特性,反映了音频短时幅度谱的特征,因此在异常声音识别得到了广泛应用。MFCC的提取方法是将预处理后的信号(r)作频域变换后,将对数能电子科技大学成都学院本科毕业设计论文4量谱依照Mel标度分布的三角滤波器组作卷积,再对滤波器组的输出向量作离散余弦变换(DiscreteCosineTransform,DCT)这样得到的前n维向量称为MFCC,如式(2-2)所示:电子科技大学成都学院本科毕业设计论文4(2-2)然后根据下式(2-3)对MFCC系数进行一阶差分,得到MFCC的一组差分系数。(2-3)3、语音识别算法———DTW算法动态时间规整(DynamicTimeWarping,DTW)是把时间规整和距离测度计算结合起来的一种非线性规整技术,解决了测试模板与参考模板语音时间长度不等的问题。在训练和建立模板以及识别阶段,都先采用端点检测算法确定语音的起点和终点。参考模板和测试模板一般都采用相同类型的特征矢量(如MFCC系数)、相同的帧长、相同的窗函数和相同的帧移。在识别阶段,语音信号经过相同的通道得到语音特征参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。第5章实现功能5

第3章实现功能3.1实现功能描述试验一:能对10段语音进行识别,并显示。验二:能对实时录取的一段语音进行识别,并显示。3.2软件设计3.2.1软件设计思路存放10段语音在MATLAB路径下,通过滤波、预处理、端点检测等等对语音信号进行处理,通过MFCC提取特征参数生成参考模板语音库,对需要识别的10段语音通过同样的处理提取MFCC提取特征参数生成测试模板,通过DTW算法进行模板匹配,将匹配分数最高的参考模板作为识别结果,在通过文字显示。录取一段语音通过语音信号处理,提取MFCC提取特征参数生成测试模板,通过匹配参考模板语音库,识别出录取的语音,并通过文字显示。电子科技大学成都学院本科毕业设计论文63.2.2具体程序语音录取播放在MATLAB中使用wavrecord函数,可得出信号的采样频率8000的录取语音,可以清晰的听到“one、two、、、ten”语音,采集数据并画出波形图。声音的采样频率Fs=8000Hz,y为采数据。语音读取函数waveread,语音保存函数wavewrite,语音录取函数wavrecord,语音播放函数wavplay。disp('请说话...')n=3;fs=8000;%设置n录音时间,采样率fsy=wavrecord(n*fs,fs,'int16');%录音pause%暂停wavplay(y,fs);%播放录取的声音plot(y);%画图

wavwrite(y,fs,'1y.wav');%保存为文件为1y.wavpause%暂停[y,fs,bits]=wavread('1y.wav',)end第3章实现功能7图3-1语音six的波形图语音分帧语音数据进行分帧时候用到的一个工具箱voicebox中有一个函数叫做enframe,用于对语音数据进行分帧。语音信号因为是准稳态信号,在处理时常把信号分帧,每帧长度约20ms-30ms,在这一区间内把语音信号看作为稳态信号。只有稳态的信息才能进行信号处理,所以要先分帧。“语音信号分帧进行小波变换”就是把语音信号分帧后,对每一帧进行小波变换和处理。enframe.m函数functionf=enframe(x,win,inc)nx=length(x(:));nwin=length(win);if(nwin==1)len=win;elselen=nwin;end电子科技大学成都学院本科毕业设计论文8if(nargin<3)inc=len;endnf=fix((nx-len+inc)/inc);f=zeros(nf,len);indf=inc*(0:(nf-1)).';inds=(1:len);f(:)=x(indf(:,ones(1,len))+inds(ones(nf,1),:));if(nwin>1)w=win(:)';f=f.*w(ones(nf,1),:);end图3-2语音six分帧波形图语音滤波将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽。三角带通滤波器有两个主要目的:对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。因此一段语音的音调或音高,是不会呈现在MFCC参数内,换句话说,以MFCC为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响。此外,还可以降低运算量。melbankm.m函数function[x,mn,mx]=melbankm(p,n,fs,fl,fh,w)ifnargin<6w='tz';ifnargin<5fh=0.5;ifnargin<4fl=0;endendendf0=700/fs;fn2=floor(n/2);lr=log((f0+fh)/(f0+fl))/(p+1);第3章实现功能9%converttofftbinnumberswith0forDCtermbl=n*((f0+fl)*exp([01pp+1]*lr)-f0);b2=ceil(bl(2));b3=floor(bl(3));ifany(w=='y')pf=log((f0+(b2:b3)/n)/(f0+fl))/lr;fp=floor(pf);r=[ones(1,b2)fpfp+1p*ones(1,fn2-b3)];c=[1:b3+1b2+1:fn2+1];v=2*[0.5ones(1,b2-1)1-pf+fppf-fpones(1,fn2-b3-1)0.5];mn=1;mx=fn2+1;elseb1=floor(bl(1))+1;b4=min(fn2,ceil(bl(4)))-1;pf=log((f0+(b1:b4)/n)/(f0+fl))/lr;fp=floor(pf);pm=pf-fp;k2=b2-b1+1;k3=b3-b1+1;k4=b4-b1+1;r=[fp(k2:k4)1+fp(1:k3)];c=[k2:k41:k3];v=2*[1-pm(k2:k4)pm(1:k3)];mn=b1+1;mx=b4+1;endifany(w=='n')v=1-cos(v*pi/2);elseifany(w=='m')v=1-0.92/1.08*cos(v*pi/2);end电子科技大学成都学院本科毕业设计论文10ifnargout>1x=sparse(r,c,v);elsex=sparse(r,c+mn-1,v,p,1+fn2);end语音信号预处理端点检测语音信号端点检测目的就是从包含语音的一段信号中准确地确定语音的起始点和终止点,区分语音和非语音信号,它是语音处理技术中的一个重要方面.。短时过零率分析:过零就是信号通过零值。对于连续语音信号,可以考察其时域波形通过时间轴的情况。对于离散时间信号,如果相邻的取样值改变符号则称为过零。由此可以计算过零数,过零数就是样本改变符号的次数。单位时间内的过零数称为平均过零数。短时过零分析通常用在端点侦测,特别是用来估计清音的起始位置和结束位置。短时能量:1、短时能量是音频信号最基本的短时参数之一,它表征一帧音频信号能量的大小,是音频信号一个重要的时域特征。2、由一帧音频信号求出的短时能量是一个标量值,与其他参量构成组合参数不会使原特征矢量的维数明显增加。特征矢量的维数越少,则需要的运算复杂度越小。获取短时能量的运算并不复杂。3、短时能量是时域特征,而MFCC参数是人耳听觉感知特征,两者之间的相关性不大,两者反映音频信号的不同特征,结合应用有较好的效果。端点检测采用基于短时能量和短时平均过零率法,利用已知为“静态”的最初十帧信号为短时能量设置2个门限ampl和amph,以及过零率阀值zcr。语音起始点从第11帧开始检测,其流程图如下图。图3-3端点检测流程图第三章实现功能11整个端点检测可分为四段:静音段、过渡段、语音段、结束。静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。处于语音段时,如果两参数降低到门限以下,而且总的计时长度小于最短时间门限,则认为是一段噪音,继续扫描以后的语音数据,否则标一记结束端点。3-4语音six端点检测图vad.m函数电子科技大学成都学院本科毕业设计论文12function[x1,x2]=vad(x)%幅度归一化到[-1,1]x=double(x);x=x/max(abs(x));%常数设置FrameLen=240;FrameInc=80;amp1=10;amp2=2;zcr1=10;zcr2=5;maxsilence=3;%3*10ms=30msminlen=15;%15*10ms=150msstatus=0;count=0;silence=0;%计算过零率tmp1=enframe(x(1:length(x)-1),FrameLen,FrameInc);tmp2=enframe(x(2:length(x)),FrameLen,FrameInc);signs=(tmp1.*tmp2)<0;diffs=(tmp1-tmp2)>0.02;zcr=sum(signs.*diffs,2);%计算短时能量amp=sum(abs(enframe(filter([1-0.9375],1,x),FrameLen,FrameInc)),2);%调整能量门限amp1=min(amp1,max(amp)/4);amp2=min(amp2,max(amp)/8);%开始端点检测x1=0;x2=0;forn=1:length(zcr)goto=0;第3章实现功能13switchstatuscase{0,1}%0=静音,1=可能开始ifamp(n)>amp1%确信进入语音段x1=max(n-count-1,1);status=2;silence=0;count=count+1;elseifamp(n)>amp2zcr(n)>zcr(2)%可能处于语音段status=1;count=count+1;else%静音状态status=0;count=0;endcase2,%2=语音段ifamp(n)>amp(2)zcr(n)>zcr(2)%保持在语音段count=count+1;else%语音将结束silence=silence+1;ifsilence<maxsilence%静音还不够长,尚未结束count=count+1;elseifcount<minlen%语音长度太短,认为是噪声status=0;silence=0;count=0;else%语音结束status=3;endendcase3,break;电子科技大学成都学院本科毕业设计论文14end第3章实现功能15endcount=count-silence/2;x2=x1+count-1;MFCC特征参数提取在\o"语音识别与合成知识库"语音识别(SpeechRecognition)和话者识别(SpeakerRecognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequencyCepstralCoefficients,简称MFCC)。根据人耳听觉机理的研究发现,人耳对不同频率的声波有不同的听觉敏感度。从200Hz到5000Hz的语音信号对语音的清晰度影响对大。两个响度不等的声音作用于人耳时,则响度较高的频率成分的存在会影响到对响度较低的频率成分的感受,使其变得不易察觉,这种现象称为掩蔽效应。一般来说,低音容易掩蔽高音,而高音掩蔽低音较困难。在低频处的声音掩蔽的临界带宽较高频要小。所以,人们从低频到高频这一段频带内按临界带宽的大小由密到疏安排一组带通滤波器,对输入信号进行滤波。将每个带通滤波器输出的信号能量作为信号的基本特征,对此特征经过进一步处理后就可以作为语音的输入特征。由于这种特征不依赖于信号的性质,对输入信号不做任何的假设和限制,又利用了听觉模型的研究成果。因此,这种参数比基于声道模型的LPCC相比具有更好的适应性,更符合人耳的听觉特性,而且当信噪比降低时仍然具有较好的识别性能。梅尔倒谱系数(Mel-scaleFrequencyCepstralCoefficients,简称MFCC)是在Mel标度频率域提取出来的倒谱参数,Mel标度描述了人耳频率的非线性特性,它与频率的关系可用下式近似表示:(3-1)公式式中f为频率,单位为Hz。下图展示了Mel频率与线性频率的关系:图3-5Mel频率与线性频率的关系第3章实现功能15一、语音特征参数MFCC提取基本流程:电子科技大学成都学院本科毕业设计论文16图3-6MFCC参数提取基本流程1、预加重:预加重处理其实是将语音信号通过一个高通滤波器:(3-2)公式中的值介于0.9-1.0之间,我们通常取0.97。预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱。同时,也是为了消除发生过程中声带和嘴唇的效应,来补偿语音信号受发音系统所抑制的高频部分,也为了突出高频的共振峰。2、分帧:先将N个采样点集合成一个观测单位,称为帧。通常情况下N的值为256或512,涵盖的时间约为20~30ms左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000x1000=32ms。3、加窗(HammingWindow)将每一帧乘以汉明窗,以增加帧左端和右端的连续性。假设分帧后的信号为S(n),n=0,1,…,N-1,N为帧的大小,那么乘上汉明窗后W(n)形式如下:(3-3)(3-4)不同的a值会产生不同的汉明窗,一般情况下a取0.46。4、快速傅里叶变换:由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。语音信号的DFT为:电子科技大学成都学院本科毕业设计论文16(3-5)第3章实现功能15公式中x(n)为输入的语音信号,N表示傅里叶变换的点数。5、三角带通滤波器:将能量谱通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器。M通常取22-26。各f(m)之间的间隔随着m值的减小而缩小,随着m值的增大而增宽,如图所示:图3-7Mel频率滤波器组(3-6)第3章实现功能17三角滤波器的频率响应定义为:(3-7)(3-8)三角带通滤波器有两个主要目的:对频谱进行平滑化,并消除谐波的作用,突显原先语音的共振峰。(因此一段语音的音调或音高,是不会呈现在MFCC参数内,换句话说,以MFCC为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响)此外,还可以降低运算量。6、计算每个滤波器组输出的对数能量:(3-9)7、经过离散余弦变换(DCT)得到MFCC系数:(3-10)电子科技大学成都学院本科毕业设计论文18将上述的对数能量带入离散余弦变换,求出L阶的Mel-scaleCepstrum参数。L阶指MFCC系数阶数,通常取12-16。这里M是三角滤波器个数。8、对数能量:一帧的音量(即能量),也是语音的重要特征非常容易计算。因此,通常再加上一帧的对数能量(定义:一帧内信号的平方和,再取以10为底的对数值,再乘以10使得每一帧基本的语音特征就多了一维,包括一个对数能量和剩下的倒频谱参数。注:若要加入其它语音特征以测试识别率,也可以在此阶段加入,这些常用的其它语音特征包含音高、过零率以及共振峰等。9、动态差分参数的提取(包括一阶差分和二阶差分):标准的倒谱参数MFCC只反映了语音参数的静态特性,语音的动态特性可以用这些静态特征的差分谱来描述。实验证明:把动、静态特征结合起来才能有效提高系统的识别性能。差分参数的计算可以采用下面的公式:(3-11)公式中,dt表示第t个一阶差分;Ct表示第t个倒谱系数;Q表示倒谱系数的阶数;K表示一阶导数的时间差,可取1或2。将上式中结果再代入就可以得到二阶差分的参数。因此,MFCC的全部组成其实是由:N维MFCC参数(N/3MFCC系数+N/3一阶差分参数+N/3二阶差分参数)+帧能量(此项可根据需求替换)mfcc.m函数functionccc=mfcc(x)%归一化mel滤波器组系数bank=melbankm(24,256,8000,0,0.5,'m');bank=full(bank);bank=bank/max(bank(:));%DTC系数,12*24fork=1:12n=0:23;dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));end第3章实现功能19%归一化倒谱提升窗口w=1+6*sin(pi*[1:12]./12);w=w/max(w);%预加重滤波器xx=double(x);xx=filter([1-0.9375],1,xx);%语音信号分帧xx=enframe(xx,256,80);%计算每帧的MFCC参数fori=1:size(xx,1)y=xx(i,:);s=y'.*hamming(256);t=abs(fft(s));t=t.^2;c1=dctcoef*log(bank*t(1:129));c2=c1.*w';m(i,:)=c2';end%差分参数dtm=zeros(size(m));fori=3:size(m,1)-2dtm(i,:)=-2*m(i-2,:)-m(i-1,:)+m(i+1,:)+2*m(i+2,:);enddtm=dtm/3;%合并mfcc参数和一阶差分mfcc参数ccc=[mdtm];%去除首尾两帧,因为这两帧的一阶差分参数为0ccc=ccc(3:size(m,1)-2,:);DTW算法DTW算法原理:在孤立词语音识别中,最为简单有效的方法是采用DTW(DynamicTimeWarping,动态时间归整)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法。电子科技大学成都学院本科毕业设计论文20用于孤立词识别,DTW算法与HMM算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而DTW算法的训练中几乎不需要额外的计算。所以在孤立词语音识别中,DTW算法仍然得到广泛的应用。DTW一般算法:无论在训练和建立模板阶段还是在识别阶段,都先采用端点算法确定语音的起点和终点。已存入模板库的各个词条称为参考模板,一个参考模板可表示为R={R(1),R(2),……,R(m),……,R(M)},m为训练语音帧的时序标号,m=1为起点语音帧,m=M为终点语音帧,因此M为该模板所包含的语音帧总数,R(m)为第m帧的语音特征矢量。所要识别的一个输入词条语音称为测试模板,可表示为T={T(1),T(2),……,T(n),……,T(N)},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算法中通常采用欧氏距离。若N=M则可以直接计算,否则要考虑将T(n)和R(m)对齐。对齐可以采用线性扩张的方法,如果N<M可以将T线性映射为一个M帧的序列,再计算它与{R(1),R(2),……,R(M)}之间的距离。但是这样的计算没有考虑到语音中各个段在不同情况下的持续时间会产生或长或短的变化,因此识别效果不可能最佳。因此更多的是采用动态规划(DP)的方法。如果把测试模板的各个帧号n=1~N在一个二维直角坐标系中的横轴上标出,把参考模板的各帧号m=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网络,网络中的每一个交叉点(n,m)表示测试模式中某一帧的交汇点。DP算法可以归结为寻找一条通过此网络中若干格点的路径,路径通过的格点即为测试和参考模板中进行计算的帧号。路径不是随意选择的,首先任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束。第3章实现功能21如图3-8DTW算法搜索路径为了描述这条路径,假设路径通过的所有格点依次为(n,m),……,(n,m),……,(n,m),其中(n,m)=(1,1),(n,m)=(N,M)。路径可以用函数m=Ø(n)描述,其中n=i,i=1,2,……,N,Ø(1)=1,Ø(N)=M。为了使路径不至于过倾斜,可以约束斜率在0.5~2的范围内,如果路径已经通过了格点(n,m),那么下一个通过的格点(n,m)只可能是下列三种情况之一:(n,m)=(n+1,m+2)(n,m)=(n+1,m+1)(n,m)=(n+1,m)用r表示上述三个约束条件。求最佳路径的问题可以归结为满足约束条件时求最佳路径函数m=Ø(n),使得沿路径的积累距离达到最小值。搜索该路径的方法如下:搜索从(n,m)点出发,可以展开若干条满足ŋ的路径,假设可计算每条路径达到(n,m)点时的总的积累距离,具有最小累积距离者即为最佳路径。易于证明,限定范围的任一格点(n,m)只可能有一条搜索路径通过。对于(ni,mi),其可达到该格点的前一个格点只可能是(n,m)、(n,m-1)和(n,m-2),那么(n,m)一定选择这3个距离之路径延伸而通过(n,m),这时此路径的积累距离为:D[(n,m)]=d[T(n),R(m)]+D[(n,m)]其中的n=n-1,m-1,由下式决定:第3章实现功能23D[(n,m)]=min{D[(n,m)],D[(n,m-1)],D[(n,m-2)]}电子科技大学成都学院本科毕业设计论文22这样可以从(n,m)=(1,1)出发搜索(n,m),再搜索(n,m),……,对每一个(n,m)都存储相应的前一格点(n,m)及相应的帧匹配距离d[n,m]。搜索到(n,m)时,只保留一条最佳路径。如果有必要的话,通过逐点向前寻找就可以求得整条路径。这套DP算法便是DTW算法。DTW算法可以直接按上面的描述来实现,即分配两个N×M的矩阵,分别为积累距离矩阵D和帧匹配距离矩阵d,其中帧匹配距离矩阵d(i,j)的值为测试模板的第i帧与参考模板的第j帧间的距离。D(N,M)即为最佳匹配路径所对应的匹配距离。DTW一般算法程序函数dtw.mfunctiondist=dtw(t,r)n=size(t,1);m=size(r,1);%帧匹配距离矩阵d=zeros(n,m);fori=1:nforj=1:md(i,j)=sum((t(i,:)-r(j,:)).^2);endend%累积距离矩阵D=ones(n,m)*realmax;D(1,1)=d(1,1);%动态规划fori=2:nforj=1:mD1=D(i-1,j);ifj>1D2=D(i-1,j-1);ElseD2=realmax;endifj>2第3章实现功能23D3=D(i-1,j-2);elseD3=realmax;endD(i,j)=d(i,j)+min([D1,D2,D3]);endenddist=D(n,m);

电子科技大学成都学院本科毕业设计论文24第4章调试及实现4.1调试中遇到的重点与难点我才开始不熟悉MATLAB软件的使用,通过看书学习掌握能熟练使用了。在编写语音识别程序的时候有些程序不知道怎么编写,相应函数不知道怎么调用。我遇到的中重点是DTW匹配算法,MFCC,vad端点检测等的程序编写问题。对相应函数公式的理解不是很清楚。跑程序的时候遇到很多问题。如下图:。图4-1test1主程序错误第4章调试及实现25图4-2MFCC函数错误4.2解决方案通过上网查询资料和询问指导老师。通过不断的学习相关知识解决了问题。disp('正在计算参考模板的参数...')fori=1:10fname=sprintf('%da.wav',i);x=wavread(fname);第4章调试及实现23[x1x2]=vad(x);x1=int32(x1);x2=int32(x2);fprintf('正在提出第%da个语音的MFCC特征:',i);m=mfcc(x);m=m(x1-2:x2-4,:);ref(i).mfcc=m;fprintf('提取完成\n');endfunctionccc=mfcc(x)%归一化mel滤波器组系数bank=melbankm(24,256,8000,0,0.5,'m');bank=full(bank);bank=bank/max(bank(:));%DTC系数,12*24fork=1:12n=0:23;dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));end通过对相关函数的了解和学习,学习相关算法,在这两段函数中通过反复修改i,n的值,终于符合本设计的要求,程序经过测试,可以真确的运行。电子科技大学成都学院本科毕业设计论文264.3实现展示(附上仿真图或实物照片)图4-3(one-ten)10段语音识别图4-4匹配矩阵最小距离第4章调试及实现27图4-5实录语音six的识别图4-6匹配矩阵距离通过本次语音识别试验,识别效果达到100%。电子科技大学成都学院本科毕业设计论文28第5章总结5.1实验验准备和步骤实验平台为Windows平台上,软件工具MATLAB的基本使用方法,采用MATLAB数学工具,通过编写程序而实现。本实验主要采用DTW算法实现语音识别。首先,我在MATLAB路径下放入两组10段本别为从1-10英语语音。其中一组为参考模板,另外一组为测试模板。首先用wavread函数读入wav文件,用mfcc函数获得其MFCC参数,用vad函数对其进行端点检测,并保存语音部分的MFCC参数到参考模板的机构数ref(i).mfcc中图5-1测试模板语音(6.wav)发音的vad输第5章总结29图5-2参考模板语音(6a.wav)发音的vad输出vad函数的功能就是通过端点检测功能甄别出语音信号的起始点与结束点,图中的红线就是程序标记的语音信号始末点,可以看出,杂音基本被排除,效果是非常明显的。同时,从以上两个图的对比可以看出,不同发音者的发音波形及特性有较明显区别。原始波形中,测试语音(six)的波形在横轴两端不对称,而参考语音5的波形在横轴两端比较对称;能量波形中,两者的区别更加明显:测试语音5的能量高峰在语音后部,参考语音(six)的能量高峰在语音前部;过零率波形中也可以明显看出两个人的区别。端点检测下的短时能量分析只是语音识别的第一步,但是通过该步骤已经可以粗略的区别出不同发音者,并且可以进一步分析发音者语音信号的特点。由此证明了端点检测在语音识别中是非常重要的。再通过mfcc.m函数进行特征参数提取,通过dtw函数进行匹配,将匹配分数最高的参考模板作为识别结果。并通过文字显示在MATLAB窗口。5.2试验结果和自我总结基于MATLAB通过DTW算法的语音信号的识别,对1-10的英文识别效果电子科技大学成都学院本科毕业设计论文30接近100%,对孤立词的识别有很好的效果,本次设计基本达到预期效果。以下第5章总结31是我的一些自我评价总结。我要读懂MATLAB的程序还需要找相关的书来看,所以花了很长的时间来学习,要实现相关主程序test函数的算法,主要是弄懂它的帧匹配距离的由来和电子科技大学成都学院本科毕业设计论文30累积距离的计算公式。经过不断的调试修改,最终实现了算法的要求。

由于此设计主要由本人完成,难度较大,期间培养了自我学习的能力,在询问老师和同学交流中自我能力有了进一步的提高,相信在将来的工作和学习中受益匪浅。参考文献31关于DTW算法方面的一些认识:1、录音设备和程序偏简单。一个非常良好和精确的模板库是高效率语音识别系统的基础。我使用简易耳机和windows自带录音程序建立一个的模板库。2、DTW算法自身的缺陷。DTW自身算法只适用于孤立字语音识别,而且是简单字。因此识别机理上更加先进的HMM和ANN方法能够满足更高的要求。对DTW算法进行改进(比如端点检测)已经提高了该算法的识别率。3、DTW算法仅限于孤立字的语音识别,而连续语音的识别目前来说还比较难以达到高的识别率,这也是今后语音识别课题研究发展的方向。

本设计最终在MATLAB平台的基础上基本实现了个别个体的特定语音识别,基本上达到了预定的目的。基于DTW模型的语音识别简单的说就是通过MATLAB的程序段,将待识别的语音信号与数据库中的模板进行相似度对比,将相似度最高者最为识别结果输出,同时DTW的识别效率取决于参考模板的清晰度以及广泛度,如果能够建立一个范围庞大而且清晰的特定人语音库,将能够大大提高语音识别的效率。DTW识别算法在特定人孤立字语音识别中的巨大作用。在程序中,由于受数据库的局限,并没有实现对于语音的模糊识别,但个别个体的特定语音识别也具有广泛的用途。参考文献31参考文献[1]薛凤.陈骑兵.数学试验与数学模型.北京:科学出版社,2016.7[2]

王中群.MATLAB建模与仿真应用.北京:机械工业出版社,1010[3]聂晓燕.信号与系统分析.北京:人民邮电出版社,2014.8[4]OppenheimAlanV.WillskyAlans.SignalsandSystems[M].2ened.Prentice-Hall,Inc,1997[5]张焱.张杰.黄志同.语音识别中动态时间规整和隐马尔可夫统一模型.数据采集与处理1997年03期p.218-222[6]

何强.何英.MATLAB扩展编程[M].北京:清华大学出版社,2002.6电子科技大学成都学院本科毕业设计论文32致谢这次的毕业论文设计是在我的指导老师史勤刚老师亲切关怀和悉心指导下完成的。从毕业设计选题到设计完成,史老师给予了我耐心指导与细心关怀,有了莫老师耐心指导与细心关怀我才不会在设计的过程中迷失方

温馨提示

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

评论

0/150

提交评论