收藏 分享(赏)

Matlab在语音识别中的应用.doc

上传人:精品资料 文档编号:7739650 上传时间:2019-05-25 格式:DOC 页数:50 大小:4.27MB
下载 相关 举报
Matlab在语音识别中的应用.doc_第1页
第1页 / 共50页
Matlab在语音识别中的应用.doc_第2页
第2页 / 共50页
Matlab在语音识别中的应用.doc_第3页
第3页 / 共50页
Matlab在语音识别中的应用.doc_第4页
第4页 / 共50页
Matlab在语音识别中的应用.doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、11.基于 GUI的音频采集处理系统注:本实验是对“东、北、大、学、中、荷、学、院”孤立文字的识别!首先是 GUI 的建立,拖动所需控件,双击控件,修改控件的参数;主要有 string Tag(这个是回调函数的依据),其中还有些参数如 value style 也是需要注意的,这个在实际操作中不能忽视。这里需要给说明一下:图中所示按钮都是在一个按钮组里面,都属于按钮组的子控件。所以在添加回调函数时,是在按钮组里面添加的,也就是说右击三个按钮外面的边框,选择 View CallbackSelectionChange,则在主函数中显示该按钮的回调函数:function uipanel1_Select

2、ionChangeFcn(hObject, eventdata, handles)以第一个按钮“录音”为例讲解代码;2下面是“播放”和“保存”的代码:以上就是语音采集的全部代码。程序运行后就会出现这样的界面:3点击录音按钮,录音结束后就会出现相应波形:点击保存,完成声音的保存,保存格式为.wav。这就完成了声音的采集。42.声音的处理与识别2.1 打开文件语音处理首先要先打开一个后缀为.wav 的文件,这里用到的不是按钮组,而是独立的按钮,按钮“打开”的回调函数如下:function pushbutton1_Callback(hObject, eventdata, handles)其中 pus

3、hbutton1 是“打开”按钮的 Tag.在回调函数下添加如下代码:运行结果如图:562.2 预处理回调函数如下:function pushbutton2_Callback(hObject, eventdata, handles)运行结果如图:72.3 短时能量短时能量下的回调函数:function pushbutton3_Callback(hObject, eventdata, handles)其回调函数下的代码是:892.4 端点检测这里要先声明一点,为了避免在以后的函数调用中,不能使用前面的变量,所以其实后面的函数都包含了前面的部分。显而易见这样程序就会显得很冗长,这也是值得以后修改的

4、地方。function pushbutton4_Callback(hObject, eventdata, handles)101112132.5 生成模版本功能和上面重复的部分省略掉了,现在只补充添加的代码:142.6 语音识别将打开的语音与提前录好的语音库进行识别,采用的是 DTW 算法。识别完后就会在相应的文本框里显示识别的文字。代码如下:15程序运行前后的对比图:16GUI 的整体效果图:17总结实验已经实现了对“东、北、大、学、中、荷、学、院”文字的识别,前提是用模版的语音作为样本去和语音库测试,这已经可以保证的正确率,这说明算法是正确的,只是需要优化。而现场录音和模版匹配时,则不能保

5、证较高的正确率,这说明特征参数的提取这方面还不够完善。特征参数提取的原则是类内距离尽量小,类间距离尽量大的原则,这是需要以后完善的地方。也需要优化,先生成一个模版库,然后用待测语音和模版库语音识别,让这个模版库孤立出来,不需要每次测试都要重复生成模版库,提高运算速率。以后有机会可以实现连续语音的识别!18附件这是全部代码文件mfcc.mat 文件是程序运行过程中生成的;test 文件夹里面存放了录音的模版:这里是 6 个.M 文件,如下:1 WienerScalart96.mfunction output=WienerScalart96(signal,fs,IS)% output=WIENER

6、SCALART96(signal,fs,IS)19% Wiener filter based on tracking a priori SNR usingDecision-Directed % method, proposed by Scalart et al 96. In this method it is assumed that% SNRpost=SNRprior +1. based on this the Wiener Filter can be adapted to a% model like Ephraims model in which we have a gain functi

7、on which is a% function of a priori SNR and a priori SNR is being tracked using Decision% Directed method. % Author: Esfandiar Zavarehei% Created: MAR-05if (nargin=3 %nfft=IS.nfft;wnd=IS.window;if isfield(IS,IS)IS=IS.IS;elseIS=.25;endend% UP TO HEREpre_emph=0;20signal=filter(1 -pre_emph,1,signal);NI

8、S=fix(IS*fs-W)/(SP*W) +1);%number of initial silence segmentsy=segment(signal,W,SP,wnd); % This function chops the signal into framesY=fft(y);YPhase=angle(Y(1:fix(end/2)+1,:); %Noisy Speech PhaseY=abs(Y(1:fix(end/2)+1,:);%SpecrogramnumberOfFrames=size(Y,2);FreqResol=size(Y,1);N=mean(Y(:,1:NIS); %ini

9、tial Noise Power Spectrum meanLambdaD=mean(Y(:,1:NIS).2);%initial Noise Power Spectrum variancealpha=.99; %used in smoothing xi (For Deciesion Directed method for estimation of A Priori SNR)NoiseCounter=0;NoiseLength=9;%This is a smoothing factor for the noise updatingG=ones(size(N);%Initial Gain us

10、ed in calculation of the new xiGamma=G;X=zeros(size(Y); % Initialize X (memory allocation)h=waitbar(0,Wait.);for i=1:numberOfFrames%VAD and Noise Estimation STARTif i Hangover) SpeechFlag=0; else SpeechFlag=1; end262 mfcc.mfunction cc=mfcc(k)%-% cc=mfcc(k)计算语音 k 的 MFCC 系数%-% M为滤波器个数,N 为一帧语音采样点数M=24;

11、 N=256;% 归一化 mel滤波器组系数bank=melbankm(M,N,22050,0,0.5,m);figure;plot(linspace(0,N/2,129),bank);title(Mel-Spaced Filterbank);xlabel(Frequency Hz);bank=full(bank);bank=bank/max(bank(:);% DCT 系数,12*24for i=1:12j=0:23;dctcoef(i,:)=cos(2*j+1)*i*pi/(2*24);end% 归一化倒谱提升窗口w=1+6*sin(pi*1:12./12);w=w/max(w);% 预加

12、重AggrK=double(k);AggrK=filter(1,-0.9375,1,AggrK);% 分帧FrameK=enframe(AggrK,N,80);% 加窗for i=1:size(FrameK,1)FrameK(i,:)=(FrameK(i,:).*hamming(N);endFrameK=FrameK;% 计算功率谱S=(abs(fft(FrameK).2;disp(显示功率谱 )figure; plot(S);axis(1,size(S,1),0,2);title(Power Spectrum (M=24, N=256);xlabel(Frame);27ylabel(Freq

13、uency Hz);colorbar;% 将功率谱通过滤波器组P=bank*S(1:129,:);% 取对数后作离散余弦变换D=dctcoef*log(P);% 倒谱提升窗for i=1:size(D,2)m(i,:)=(D(:,i).*w);end% 差分系数dtm=zeros(size(m);for i=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 参数cc=m,dtm;%去除首尾两帧,因为这两帧的一阶差分参数为 0cc=cc(3:size

14、(m,1)-2,:);283 getpoint.mfunction StartPoint,EndPoint=getpoint(k,fs)%UNTITLED 此处显示有关此函数的摘要% 此处显示详细说明signal=WienerScalart96(k,fs);sigLength=length(signal);%计算信号长度t=(0:sigLength-1)/fs;%计算信号对应时间坐标FrameLen = round(0.012/max(t)*sigLength);%定义每一帧长度FrameInc = round(FrameLen/3);%每一帧的重叠区域,选为帧长的 1/31/2tmp=enf

15、rame(signal(1:end), FrameLen, FrameInc);signal=signal/max(abs(signal);signal=double(signal);signal=filter(1,-0.9735,1,signal);tmp1=enframe(signal(1:end-1), FrameLen, FrameInc);tmp2=enframe(signal(2:end), FrameLen, FrameInc);%调用分帧函数Framesize=size(tmp1);window(1:Framesize(1),1:Framesize(2)=0;a=hamming

16、(Framesize(2);%对原信号进行加窗操作,这里用 hamming 窗for i=1:Framesize(1)window(i,1:Framesize(2)=a;endtmp1=tmp1.*window;%获得加窗后信号 tmp1、tmp2、tmptmp2=tmp2.*window;tmp=tmp.*window;signs = (tmp1.*tmp2)0.02;zcr = sum(signs.*diffs,2)/FrameLen;%zcr 保存过零率结果FrameNB=Framesize(1);%保存数据帧个数clear tmp1 tmp2 signs diffs a window

17、Framesize;%清除无用变量%计算语音信号的短时幅度amp=sum(abs(tmp), 2);%开始进行端点检测%定义变量amp1 = 6;amp2 = 2;%最大与最小能量幅度阈值maxsilence=5; % 最大沉默帧数目 5,长度 5*12ms = 72msminlen =15;% 最小语音长度 15*12ms = 180msstatus =0;%初始状态(静音段:0 ,语音段:1,结束段:2,此算法忽略了过度段的判断)count=0;%记录语音长度29%求前 5帧与后 5帧的能量幅度平均 值与过零率均值,认为前 5帧与后 5帧不为信号有效部分a=mean(amp(1:5)+me

18、an(amp(FrameNB-4:FrameNB);b=mean(zcr(1:5)+mean(zcr(FrameNB-4:FrameNB);%对求得的过零率与能量幅度进行修正amp=abs(amp-a);zcr=abs(zcr-b);%设定阈值amp1=min(amp1,max(amp)/4);amp2=min(amp2,max(amp)/8);%设定两个能量门限,其中 amp1为高能量门限,amp2 为低能量门限zcr1 =0.001;%过零律阈值for i=6:maxsilence:FrameNBswitch statuscase 0 %语音信号处于静音段if (amp(i)amp1) %

19、帧能量大于高能量门限时,确信进入语音段 x1=i;count=count+1; for j=i-1:-1:6 %进一步找到准确起始点if(zcr(j)zcr1)count=count+1;elsebreak endendstatus=1;endcase 1 %语音信号处于语音段if(zcr(i)zcr1) count=count+5;elsefor j=i:-1:i-4 %进 一步向前搜索,找到准确终止点if(zcr(j)zcr1)count=count+1;else30break endendif countminlen %语音信号长度小于最小语音长度时,认为信号为无效噪声,重新初始化变量搜索status=0;count=0;x1=0;x2=0;elsestatus=2; %语音信号有效时进入结束段end end case 2breakendend StartPoint=x1;EndPoint=x2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报