资源描述:
《最新matlab端点检测.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、精品资料matlab端点检测........................................精品资料function[x1,x2]=vad(x)%幅度归一化到[-1,1]
x=double(x);
x=x/max(abs(x));%常数设置
FrameLen=240;%帧长为240点
FrameInc=80;%帧移为80点amp1=10;%初始短时能量高门限
amp2=2;%初始短时能量低门限
zcr1=10;%初始短时过零率高门限
zcr2=5;%初始短时过零率低门限maxsilence=8;%8*10ms=80ms%语音段
2、中允许的最大静音长度,如果语音段中的静音帧数未超过此值,则认为语音还没结束;如果超过了该值,则对语音段长度count进行判断,若countminlen,则认为语音段结束;
minlen=15;%15*10ms=150ms........................................精品资料%语音段的最短长度,若语音段长度小于此值,则认为其为一段噪音
status=0;%初始状态为静音状态
count=0;%初始语音段长度为0
silence=0;%
3、初始静音段长度为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);amp=sum(abs(enframe(x,Frame
4、Len,FrameInc)),2);........................................精品资料%调整能量门限
amp1=min(amp1,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
5、=count+1;
elseifamp(n)>amp2
6、...%可能处于语音段
zcr(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、够长,尚未结束
count=count+1;
elseifcount9、(x)
axis([1length(x)-11])%函数中的四个参数分别表示xmin,xmax,ymin,ymax,即轴的范围
ylabel('Speech');
line([x1*FrameIncx1*FrameInc],[-11],'Color','red');%这里作用为用直线画出语音段的起点和终点,看起来更直观。第一个[]中的两个参数为线起止点的横坐标,%第二个[]中的两个参数为线起止点的纵坐标。最后两个参数设置了线的颜色。
........................................精品资料line([x2*Fr
10、ameIncx2*FrameInc],[-11],'Color','red');subplot(312)
plot(amp);
axis([1length(amp)