语音短时平均能量的实现
一.实验目的:
1.熟悉Matlab基本程序的运用。
2.充分理解取不同窗长时的语音短时平均能量的变化情况。
3.熟悉Matlab编程语言在语音信号处理中的作用。
4.能够实现程序的重新编制。
二.实验原理:
定义n时刻某语音信号的短时平均能量为:
式中N为窗长,可见短时平均能量为为一帧样点值的甲醛平方和。特殊地,当窗函数为矩形窗时,有
三.实验要求:
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])
s=fra(250,400,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,3)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=400')
axis([0,190,0,1.5* 10^11])
s=fra(500,800,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,4)
plot(energy)
xlabel('帧数')
ylabel('短时能量 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