資源簡介
包含靜音檢測的matlab程序,通過短時能量與過零率判斷
代碼片段和文件信息
%靜音檢測
clear?all;
clc;
[samplefsbits]=wavread(‘sp04.wav‘);
sample=sample(:1);
voiceseq=filter([1?-0.9375]1sample);
len=length(sample);
framelen=240;
frameinc=80;
delta=0.02;
ampu=10;
ampl=3;
zcru=10;
zcrl=5;
maxsilence=6;
minlen=15;
status=0;
count=0;
silence=0;
voice=enframe(voiceseqframelenframeinc);
voice=double(voice);
voice=voice/max(max(abs(voice)));
framenum=size(voice1);
amp=sum(sqrt(abs(voice)));
zcr=zeros(framenum1);
%for?i=1:framenum
%????x=voice(:i)
%????x=x/max(abs(x));
%????for?j=1:length(x)-1
%????????if?x(j)*x(j+1)<0?&?abs(x(j)-x(j+1))>delta
%????????????zcr(i)=zcr(i)+1;
%????????end
%????end
%end
%計算短時過零率
tmp1=enframe(voiceseq(1:len-1)framelenframeinc);
tmp2=enframe(voiceseq(2:len)framelenframeinc);
signs=(tmp1.*tmp2)<0;
diffs=(tmp1-tmp2)>delta;
zcr=sum(signs.*diffs2);
%計算短時能量
amp=sum(abs(voice)2);
%調(diào)整能量門限
ampu=min(ampumax(amp)/4);
ampl=min(amplmax(amp)/8);
%開始端點檢測
vobegin=0;
voend=0;
k=1;
vobegink=[1];
voendk=[framenum];
for?n=1:framenum
????goto=0;
????switch?status
????????case{01}
????????????if?amp(n)>ampu|zcr(n)>zcru
????????????????vobegin=max(n-count1);
????????????????silence=0;
????????????????count=count+1;
????????????????status=2;
????????????????
????????????elseif?amp(n)>ampl?|?zcr(n)>zcrl
????????????????status=1;
????????????????count=count+1;
????????????????if(count==3)
????????????????????status=2;
????????????????????vobegin=n;
???????????????
????????????????end
????????????
????????????else
????????????????status=0;
????????????????count=0;
????????????end
?????
評論
共有 條評論