matlab中语音端点检测

首先在matlab中装好voicebox工具箱,里面有一些需要用到的.m文件

具体程序如下:

x=readwav('D:/hao.wav');
t=x;
N=size(x)
x=double(x);
x=x/max(abs(x));%归一化
y1=0;%未到语音的端点帧
%amp1=10;
%amp2=2;
status=0;
minlen=15;


figure(1);
subplot(311);
plot(x);
FrameLen=240;
FrameInc=80;
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);
subplot(312);
plot(zcr);%显示过零率
title('过零率')
xlabel('帧')

amp=sum(abs(enframe(filter([1 -0.9375],1,x),FrameLen,FrameInc)),2);
subplot(313);
plot(amp);%显示短时能量
title('短时能量');
xlabel('帧');

amp1=min(10,max(amp)/4);
b=max(amp)/4
amp2=min(2,max(amp)/8);
c=max(amp)/8


%开始端点检测
x1=0;
x2=0;
for n=1:length(zcr)
    switch status
        case 0,
   if amp(n)>amp1   %进入语音段
   x1=n;
   status=1;
   end
        case 1,  %保持在语音段
          if amp(n)<amp1
            x2=n
            count=x2-x1;
            status=3,
          end
        case 3,
            if count<minlen
                statu=0;
            end
   
    end
end
x1
x2

 

 

这个里面可以显示过零率和短时能量的端点检测图形

x1和x2分别是语音的起始端点的帧和结束端点的帧。这里我只是用到了短时能量来求出x1和x2。

需要一些改进。

 

 

 

 

 

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值