• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: Matlab
  • 标签: 静音检测  

资源简介

包含静音检测的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);
%调整能量门限
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
     

评论

共有 条评论