语音短时平均能量的实现
一.实验目的:
1.熟悉Matlab基本程序的运用。
2.充分理解取不同窗长时的语音短时平均能量的变化情况。 3.熟悉Matlab编程语言在语音信号处理中的作用。 4.能够实现程序的重新编制。 二.实验原理:
定义n时刻某语音信号的短时平均能量En为:
Enm[x(m)w(nm)]2mn(N1)[x(m)w(nm)]n2
式中N为窗长,可见短时平均能量为为一帧样点值的甲醛平方和。特殊地,当窗函数为矩形窗时,有
Enmn(N1)xn2(m)
三.实验要求:
1.实验前自己用Cool Edit音频编辑软件录制声音“我到北京去”,并把它保存为.txt文件。
2.编程实现不同矩形窗长N=50、100、200、800的短时平均能量。 3.用Matlab画出不同窗长的短时平均能量的图形。 4.写出实验报告,分析实验结果。 四.实验条件:
计算机 Matlab软件 五.实验步骤:
1.用Cooledit读入语音“我到北京去”。设置采样率为8kHz,16位,单声道。 2.将读入的语音wav文件保存为txt文件,即zqq.txt文件。 3.把保存的文件zqq.txt文件读入Matlab。 4.对采样到的语音样点值进行分帧。
5.对照不同矩形窗长N的短时平均能量,画出图形。 六.实验程序及数据: fid=fopen('zqq.txt','rt'); x=fscanf(fid,'%f');
fclose(fid); s=fra(25,50,x) s2=s.^2;
energy=sum(s2,2) subplot(2,2,1) plot(energy) xlabel('帧数')
ylabel('短时能量 E') legend('N=50')
axis([0,1500,0,2* 10^10]) s=fra(60,100,x) s2=s.^2;
energy=sum(s2,2) subplot(2,2,2) plot(energy) xlabel('帧数')
ylabel('短时能量 E') legend('N=100')
axis([0,750,0,4* 10^10]) 2x 1010N=50s=fra(250,400,x) E1.5 s2=s.^2;
量energy=sum(s2,2) 能1时subplot(2,2,3) 短0.5plot(energy) xlabel('帧数')
0050010001500ylabel('短时能量 E') 帧数legend('N=400')
axis([0,190,0,1.5* 10^11]) 15x 1010N=400s=fra(500,800,x) E s2=s.^2;
量10energy=sum(s2,2) 能时subplot(2,2,4) 短5plot(energy)
xlabel('帧数') 0050100150ylabel('短时能量 E') 帧数legend('N=800')
axis([0,95,0,3* 10^11])
其中fra()为分帧函数,其MATLAB程序如下: function f=fra(len,inc,x)
fh=fix(((size(x,1)-len)/inc)+1) f=zeros(fh,len); i=1;n=1;
while i<=fh j=1;
while j<=len f(i,j)=x(n); j=j+1;n=n+1; end
n=n-len+inc; i=i+1;
End
4x 1010N=100E3 量能2时短100200400600帧数3x 1011N=800E 量2能时短10020406080帧数