(基于matlab自写代码)语音信号的短时分析,计算平均能量,短时过零数

一定时宽的语音信号,其能量的大小随时间有明显的变化。
清音段能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上。
可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,故对一短时语音段计算其短时平均能量及短时平均过零数,就可以区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。

自己编写的matlab代码,对一段语音,取帧长为240个点,计算其平均能量及短时平均过零数。

[x]=audioread(‘E:\matlab\yuyin1.m4a’);
figure;
subplot(4,1,1);
plot(x);
axis([1 length(x) -1 1]);
ylabel(‘Speech’);
enhance=filter([1-0.9375],1,x);
FrameLen=240;
FrameInc=80;
movefile ENFRAME.M ENFRAME.m_bad; movefile ENFRAME.m_bad ENFRAME.m
yframe=ENFRAME(x,FrameLen,FrameInc);
amp1=sum(abs(yframe),2);
subplot(4,1,2);
plot(amp1);
axis([1 length(amp1) 0 max(amp1)]);
ylabel(‘Energy’);
legend(‘amp1=∑│x│’);
amp2=sum(abs(yframe.yframe),2);
subplot(4,1,3);
plot(amp2);
axis([1 length(amp2) 0 max(amp2)]);
ylabel(‘Energy’);
legend('amp1=∑│x
x│’);
%zcr=zeros(size(yframe,1),1)delta=0.02
%for i=1:size(yframe,1) x=yframe(i,:) 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 endend
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(4,1,4);
plot(zcr);
axis([1 length(zcr) 0 max(zcr)]);
ylabel(‘ZCR’);
legend(‘zcr’);

结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值