
课程名称: 语音信号处理
实验项目: 语音短时平均能量的实现
实验地点: 起点机房
专业班级:通信// 学号:2009////
学生姓名: //////
指导教师: //////////
2012年 10月 23日
一.实验目的
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(50,25,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,1)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=50')
axis([0,2500,0,4* 10^10])
s=fra(100,50,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,2)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=100')
axis([0,1200,0,8* 10^10])
s=fra(400,200,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,3)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=400')
axis([0,300,0,3* 10^11])
s=fra(800,400,x)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,4)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=800')
axis([0,150,0,6* 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
七.思考题
1.通过改动不同的窗长和窗移,观看短时平均能量的变化。
答:窗长越小短时平均能量越小,细节越多,随着窗长的增大短时平均能量越大,曲线越光滑,个别细节被平滑掉了,同时随着窗长和窗移的增加,帧数越来越少。
2.在相同的实验环境下,把本文中的矩形窗改成hamming窗,来实现语音短时平均能量。
fid=fopen('zqq.txt','rt');
x=fscanf(fid,'%f');
fclose(fid);
s=fra(50,25,x)*hamming(50)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,1)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=50')
axis([0,2500,0,1* 10^10])
s=fra(100,50,x)*hamming(100)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,2)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=100')
axis([0,1200,0,2* 10^10])
s=fra(400,200,x)*hamming(400)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,3)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=400')
axis([0,300,0,3* 10^11])
s=fra(800,400,x)*hamming(800)
s2=s.^2;
energy=sum(s2,2)
subplot(2,2,4)
plot(energy)
xlabel('帧数')
ylabel('短时能量 E')
legend('N=800')
axis([0,150,0,8* 10^11])
