资源描述:
《基于matlab语音端点检测双门限部分代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于Matlab的语音端点检测方法浅析语音的端点检测在语音的编码、语音识别、语音增强、说话人识别中起着非常重要的作用,直接影响着后续工作的正确率。本文介绍了端点检测的基本方法:基于短时能量的、基于短时过零率的、双门限检测的方法,,并通过Matlab仿真对双门限检测的方法进行分析。端点检测是语音识别中非常重要的一步。所谓语音端点检测,就是从一段给定的语音信号中找出语音的起始点和结束点。在语音识别系统中,正确、有效的进行端点检测不仅可以减少计算量和缩短处理时间,而且能排除无声段的噪声干扰、提高语音识别的正确率。所谓端点检测,就是从一段给定的语音信号中找出语音的起始点和结束点。在语
2、音识别系统中,正确、有效地进行端点检测不仅可以减少计算量和缩短处理时间,而且能排除无声段的噪声干扰、提高语音识别的正确率。研究表明,即使是在安静的环境下,语音识别系统一半以上的错误可能主要来基于Matlab编写的语音端点检测程序function[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=8; %6*10ms =30msminlen =15; %15*10ms=15
3、0msstatus =0;count =0;silence=0;%计算过零率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);%计算短时能量amp=sum(abs(enframe(filter([1-0.9375],1,x),FrameLen,FrameInc)),2);%调整能量门限amp1=min(am
4、p1,max(amp)/4);amp2=min(amp2,max(amp)/8);%开始端点检测x1=0;x2=0;forn=1:length(zcr) goto=0; switchstatus case{0,1} %0=静音,1=可能开始 ifamp(n)>amp1 %确信进入语音段 x1=max(n-count-1,1); status =2; silence=0; count =count+1; elseifamp(n)>amp2
5、...%可能处于语音段 zcr(
6、n)>zcr2 status=1; count =count+1; else %静音状态 status =0; count =0; end case2, %2=语音段 ifamp(n)>amp2
7、... %保持在语音段 zcr(n)>zcr2 count=count+1; else %语音将结束 silence=silence+1; ifsilence8、e%静音还不够长,尚未结束 count =count+1; elseifcount9、(x)-11])ylabel('Speech');line([x1*FrameIncx1*FrameInc],[-11],'Color','red');line([x2*FrameIncx2*FrameInc],[-11],'Color','red');subplot(312)plot(amp);axis([1length(amp)0max(amp)])ylabel('Energy');line([x1x1],[min(amp),max(amp)],'Color','red');line([x2x2],