1、 设 计 报 告课程名称 语音信号处理 任课教师 周泽华 设计题目 用 matlab 实现语音信号的短时分析班级 08 电子 2 班 姓名 罗荣吉 学号 0805070210 日期 2011 年 10 月 17 日 2语音信号处理大作业用 Matlab 编程实现语音信号的短时分析一、目的1.在理论学习的基础上,进一步地理解和掌握语音信号短时分析的意义,短时时域分析的基本方法。2.进一步理解和掌握语音信号短时平均能量函数及短时平均过零数的计算方法和重要意义。二、原理及方法一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为主要成份的语音段) ,其能量比浊音段小得多。短时过零数
2、也可用于语音信号分析中,发浊音时,其语音能量约集中于 3kHz 以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。三、内容1.用 Matlab 语言完成程序编写工作。2.程序应具有加窗(分帧) 、计算 、 以及绘制曲线等功能。3.对录入的语音数据进行处理,并显示运行结果。4.依据曲线对该语音段进行所需要的分析,并作出结论。5.改变窗的宽度(帧长) ,重
3、复上面的分析内容。四、步骤(1) 用 cooledit 录了一段音,是我自己说的。采样率为 8KHZ,量化精度为 16 比特线性码。(2) 利用讲义中给定的公式分别编程计算这段语音信号的短时能量、短时平均幅度、短时过零率,然后分别画出它们的曲线;(3) 然后画出短时零能比曲线。(4) 根据上述结果判断找出其中的一帧浊音信号和一帧清音信号。判断依据是,3浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。浊音,取 13270-13510 个点,清音,取 12120-12360 个点。分别计算他们的短时自相关函数和平均幅度差函数;(5) 根据图形,分析浊
4、音段语音的基音周期。五、结论分析(1) 从图中明显可以看出,浊音信号的具有明显的周期性,其自相关函数和平均幅度差函数也表现出周期性。清音信号稍微差一点,但不是很明显,主要是由于清音信号的位置找的不是很好。(2) 浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。(3) 基音提取消除共振峰的影响。从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。但是加一个 60500Hz 的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。(4) 我开始试
5、着用 matlab 编一个滤波器,但是有点麻烦,最后我直接用 cooledit 提供的功能直接滤波,方便快速。滤波后的语音信号为 shop.wav(5) 画出的波形如下图所示:46、心得和体会通过这次作业,我对语音信号处理理论的理解更加深入了,通过近一周的摸索与查询资料,最终实际得出了自己的短时分析的结果,觉得很兴奋。在作业中,使自己对 matlab的语音处理函数应用也更加熟练了。对语音的短时分析各种函数的功能与使用有了较深的了解。附录:源程序N=240Y=WAVREAD(C:WINDOWS/shop.wav,1 18000);L=length(Y)LL=length(Y)/N figure(
6、1)set(1,Position,10,35,350,650)%短时能量 5Em=zeros(1,(LL-1)*240);for ii=1:(LL-1)*240,temp=Y(ii:ii+240);Em(ii)=sum(temp.*temp);endsubplot(4,1,1)jj=1:(LL-1)*240; plot(jj, Em,b);grid% axis(0,(LL-1)*240,0,0.6)% axis(12000,16000,0,0.06)%短时平均幅度 Mn=sum(abs(Y)/NMn=zeros(1,(LL-1)*240);for ii=1:(LL-1)*240,temp=Y(
7、ii:ii+240);Mn(ii)=sum(abs(temp)/N;endfigure(1)subplot(4,1,2)jj=1:(LL-1)*240; plot(jj, Mn,b);grid% axis(12000,16000,0,0.015)%短时过零率 Zn=zeros(1,(LL-1)*240);for ii=2:(LL-1)*240,temp1=sign(Y(ii:ii+240);temp=sign(Y(ii-1:ii+240-1);Zn(ii)=sum(abs(temp1-temp);endfigure(1)subplot(4,1,3)jj=1:(LL-1)*240; plot(j
8、j, Zn,b);grid%零能比曲线figure(1)subplot(4,1,4)jj=1:(LL-1)*240; plot(jj, Zn./Em,b);grid6%短时自相关函数temp=Y(13271:13510);% %temp2=reshape(temp,1,240);%temp=temp2.*B;Rn1=zeros(1,240);for nn=1:240,for ii=1:240-nn,Rn1(nn) =Rn1(nn)+ temp(ii)*temp(nn+ii);endendfigure(2)set(2,Position,400,35,350,650) subplot(4,1,1)
9、jj=1:240;plot(jj, Rn1,b);grid%axis(9,50,-0.01,0.02)%短时平均幅度差函数Yn1=zeros(1,240);for nn=1:240,for ii=1:240-nn,Yn1(nn) =Yn1(nn)+ abs(temp(ii)-temp(nn+ii);endendfigure(2)subplot(4,1,2)jj=1:240;plot(jj, Yn1,b);grid%短时自相关函数temp=Y(12121:12360);% %temp2=reshape(temp,1,240);%temp=temp2.*B;Rn2=zeros(1,240);for
10、 nn=1:240,7for ii=1:240-nn,Rn2(nn) =Rn2(nn)+ temp(ii)*temp(nn+ii);endendfigure(2)subplot(4,1,3)jj=1:240;plot(jj, Rn2,b);grid%axis(9,50,-0.01,0.02)%短时平均幅度差函数Yn2=zeros(1,240);for nn=1:240,for ii=1:240-nn,Yn2(nn) =Yn2(nn)+ abs(temp(ii)-temp(nn+ii);endendfigure(2)subplot(4,1,4)jj=1:240;plot(jj, Yn2,b);grid