%function qzy(wav)
clear all
clc
s=wavread('nihao.wav');
L=length(s);
figure;
subplot(511);
k=1:L;
plot(k,s);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
framenumber=floor(L/80);%帧数
for i=1:framenumber-1
amp(i)=sum(abs(s((80*(i-1)+1):(80*(i-1)+160))));
end
temp=0;
subplot(512);
plot(amp);
ylabel('短时能量');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算过零率
s=5*(s-mean(s)); %去均值
for i=1:framenumber-2
tmp1(:,i)=s((80*(i-1)+1):(80*(i-1)+160));
end
for i=1:framenumber-2
tmp2(:,i)=s((80*(i-1)+2):(80*(i-1)+161));
end
signs=(tmp1.*tmp2)<0; %两个抽样值相反的
diffs=(abs(tmp1-tmp2))>0.1; %并且两个抽样值的差的绝对值大小0.1,可以在一定程序上减少噪声的影响
zcr=sum(signs.*diffs,1);
subplot(513);
plot(zcr);
ylabel('短时过零率');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EZR=zcr./amp(1:framenumber-2);
subplot(514);
plot(EZR);
ylabel('零能比');
for i=1:framenumber-2
if amp(i)<5
EZR(i)=0;
elseif EZR(i)<1
EZR(i)=1;
else
EZR(i)=-1;
end
end
subplot(515);
plot(EZR,'.');
ylabel('清浊音区分结果');
评论1