用Matlab编程实现语音信号的短时分析_第1页
用Matlab编程实现语音信号的短时分析_第2页
用Matlab编程实现语音信号的短时分析_第3页
用Matlab编程实现语音信号的短时分析_第4页
用Matlab编程实现语音信号的短时分析_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Matlab编程实现语音信号的短时分析课程设计目录一、目的2二、原理及方法2三、实验步骤2四、实验结论与分析2五、心得体会4六、附录4用Matlab编程实现语音信号的短时分析一、目的1.在理论学习的基础上,进一步地理解和掌握语音信号短时分析的意义,短时时域分析的基本方法。2.进一步理解和掌握语音信号短时平均能量函数及短时平均过零数的计算方法和重要意义。二、原理及方法一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为主要成份的语音段),其能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可

2、认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。三、实验步骤(1)从网上找了一段录音,采样率为8KHZ,量化精度为16比特线性码。(2)利用设计方案中给定的公式分别编程计算这段语音信号的短时能量、短时平均幅度、短时过零率,然后分别画出它们的曲线;(3)然后画出短时零能比曲线。(4)根据上述结果判断找出其中的一帧浊音信号和一帧清音信号。判断依据是,浊音:短时能量大、短时平均幅度大、短时过零率低;清

3、音:短时能量小、短时平均幅度小、短时过零率高。浊音,取13270-13510个点,清音,取12120-12360个点。分别计算他们的短时自相关函数和平均幅度差函数;(5)根据图形,分析浊音段语音的基音周期。四、实验结论与分析(1)从图中明显可以看出,浊音信号的具有明显的周期性,其自相关函数和平均幅度差函数也表现出周期性。清音信号稍微差一点,但不是很明显,主要是由于清音信号的位置找的不是很好。(2)浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。(3)基音提取消除共振峰的影响。从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。

4、但是加一个60500Hz的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。(4)画出的波形如下所示:图1为没有加窗nowindow.wav,无滤波,图2为加窗后的语音信号为 havewindow.wav,有滤波。图1没有滤波的第一列的图形从上到下分别表示:短时能量、短时平均幅度、短时过零率和零能比曲线,第二列从上到下分别为浊音的短时自相关函数、短时平均幅度差函数和轻清音的短时自相关函数、短时平均幅度差函数。图1 图2五、心得体会在本次的课程设计中,通过自己查找资料,修改程序,最后得出了基音频率。这种以实

5、验方式学习的过程,加深了我对语音信号理论知识的理解,在设计中,也使我获得了很多新的知识,熟练对matlab的使用,对MATLAB的应用也更加熟练了。总的说来,这个实验在周老师的指导下完成,感谢周老师在这个课程教会了我们很多关于语音处理的知识。六、附录8 / 8源程序:% 没有加窗nowindow.wavN=240Y=WAVREAD('nowindow',1 18000);L=length(Y)%30秒,每秒8000个点,一共240000个点LL=length(Y)/N %一共 1000帧figure(1)set(1,'Position',10,35,350,65

6、0)%短时能量 Em=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(12000,16000,0.15,0.4) %短时平均幅度Mn=sum(abs(Y)/NMn=zeros(1,(LL-1)*240);for ii=1:(LL-1)*240, temp=Y(ii:ii+240); Mn(ii)=sum(abs(temp)/N;endfig

7、ure(1) subplot(4,1,2)jj=1:(LL-1)*240; plot(jj, Mn,'b');grid% axis(12000,16000,0.02,0.04) %短时过零率 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(jj, Zn,'b');gri

8、d% axis(12000,16000,0,20)%零能比曲线figure(1)subplot(4,1,4)jj=1:(LL-1)*240; plot(jj, Zn./Em,'b');grid% axis(12000,16000,0,100)% % Wn=60/8000 ,500/8000% n=1:240;% B = FIR1(239,Wn,'bandpass');%浊音,取13270-13510个点 %短时自相关函数 temp=Y(13271:13510);% % wc1 = 0.0075; wc2 = 0.9625; % wn = wc1/pi,wc2/p

9、i;% h = fir1(239,wn,blackman(240);% h=reshape(h,240,1);% temp= temp.*abs(h);% % %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); endend figure(2)set(2,'Position',400,35,350,650) subplot(4,1,1)jj=1:240;plot(jj,

10、 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); endend figure(2) subplot(4,1,2)jj=1:240;plot(jj, Yn1,'b');grid%清音,取12120-12360个点 %短时自相关函数 temp=Y(12121:12360); % %temp2=reshape(temp,1,240); %tem

11、p=temp2.*B;Rn2=zeros(1,240); for nn=1:240, for ii=1:240-nn, Rn2(nn) =Rn2(nn)+ temp(ii)*temp(nn+ii); endend figure(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); enden

12、d figure(2) subplot(4,1,4)jj=1:240;plot(jj, Yn2,'b');grid%加窗后的语音信号为 havewindow.wavN=240Y=WAVREAD('havewindow',1 18000);L=length(Y)%30秒,每秒8000个点,一共240000个点LL=length(Y)/N %一共 1000帧figure(1)set(1,'Position',10,35,350,650)%短时能量 Em=zeros(1,(LL-1)*240);for ii=1:(LL-1)*240, temp=Y(i

13、i: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(ii:ii+240); Mn(ii)=sum(abs(temp)/N;endfigure(1) subplot(4,1,2)jj=1:(LL-1)*240

14、; 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(jj, Zn,'b');grid% axis(12000,16000,0,60)%零能比曲线figure(

15、1)subplot(4,1,4)jj=1:(LL-1)*240; plot(jj, Zn./Em,'b');grid%axis(12000,16000,0,3*107)% % Wn=60/8000 ,500/8000% n=1:240;% B = FIR1(239,Wn,'bandpass');%浊音,取13270-13510个点 %短时自相关函数 temp=Y(13271:13510); % %temp2=reshape(temp,1,240); %temp=temp2.*B;Rn1=zeros(1,240); for nn=1:240, for ii=1:2

16、40-nn, Rn1(nn) =Rn1(nn)+ temp(ii)*temp(nn+ii); endend figure(2)set(2,'Position',400,35,350,650) subplot(4,1,1)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); endend figure(2) subplot(4,1,2)jj=1:240;plot(jj, Yn1,'b');grid%清音,取12120-12360个点 %短时自相关函数 temp=Y(12121:12360); % %temp2=reshape(temp,1,240); %temp=temp2.*B;Rn2=zeros(1,240); for nn=1:240, for ii=1:240-nn, Rn2(nn) =Rn2(nn)+ temp(ii)*temp(nn+ii);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论