语音信号端点检测 matlab,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)

x2=n

count=x2-x1;

status=3,

end

case 3,

if count

statu=0;

end

end

end

x1

x2

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

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

需要一些改进。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值