% 对一个语音信号进行分帧,并研究分帧后的短时能量和过零率特性
%读音频文件
clear all;
[filename,pathname]=uigetfile('d:\MATLAB\work\fenzhen\xxx.wav','请选择语音文件:');
[sound,fs]=wavread([pathname,filename]);
a=size(sound(:,1));
Tn=(a(1)-1)/fs;
t=0:1/fs:Tn;
figure(3)
subplot(411),plot(t,sound(:,1)),xlabel('t(s)'),ylabel('sound')
%分帧
N=fs*10*10.^(-3);
frame_shift=N/0.5
frame_array=enframe(sound(:,1),hamming(N),frame_shift);
subplot(412),plot(frame_array),xlabel('帧'),ylabel('分帧加窗后矩阵')
%求短时能量
n=size(frame_array);
for i=1:n(1)
frame_energy(i)=frame_array(i,:)*frame_array(i,:)';
end
subplot(413),plot(frame_energy),xlabel('帧'),ylabel('短时能量')
%求过零率
a=sign(frame_array);
b=zeros(1,n(1));
c=[b' a];
d=[a b'];
zeropass_density=d-c;
zeropass_density=0.5*sum(abs(zeropass_density),2);
subplot(414),plot(zeropass_density),xlabel('帧'),ylabel('过零率')