matlab大作业语音合成.docx
《matlab大作业语音合成.docx》由会员分享,可在线阅读,更多相关《matlab大作业语音合成.docx(34页珍藏版)》请在第一文库网上搜索。
1、清华大学电子工程系mt1b安弟抠语音合成综合实验班级:无99姓名:姜舒扬学号:2009011970实验日期:2011/7/29交报告日期:2011/7/29一、语音预测模型(1)参数分析给定e(n)=s(n)-as(n-1)-a2s(n-2)假设e(n)是输入信号,s(n)是输出信号,上述滤波器的传递函数是什么?如果a=1.3789,a2=-0.9506,上述合成模型的共振峰频率是多少?用zp1ane,freqz,impz分别绘出零极点图,频率响应和单位样值响应。用fi1ter绘出单位样值响应,比较和impz的是否相同。为了求得传递函数,我们需要使用tfO函数,其中b=1,a=1z-a1z-a
2、2,其中a=1.3789,32=-0.9506,可得传递函数如下:Transferfunction:11-1.379z-1+0.9506z-2Samp1ingtime:unspecified因而可得函数传递函数的一般表达式为:H(Z)=J1-az1其代码如下:a1=1.3789;a2=-0.9506;a=1,-a1,-a2;b=1;sys=tf(bzaz-1zVariab1e,z-1,)由于题中给出的为二阶差分方程,因此有一对共挽极点,可知一对共规极点Wf月在时域冲激响应中的贡献为AP,中s(,?+9),并且有C=2,可得freq=999.9447因此共挽峰频率为999.9447HZo下面分别
3、列出零极点图、频率响应和单位样值响应。(1)零极点图:Rea1Part(2)频率响应(3)单位样值响应Impu1seResponse其中单位样值响应中,上面一个图为impz得到的响应,下面为fi1ter得到的响应。可见两者是完全相同的。因而单位样值响应就是单位样值信号经过数字滤波器得到的响应。其代码如下:c1eara11;c1osea11;c1c;a1=1.3789a2=-0.950;a=1,-a1,-a2);b=1;r,p,k=residuez(b,a);omega=abs(ang1e(p(1);T=18000;freq=omegaT2pifigure(1);zp1ane(bza);figu
4、re(2);freqz(b,a);n=O:50,;e=(n=0);figure(3);subp1ot(2,1,1);impz(b,a,50);subp1ot(2z1,2);y=fi1ter(bza,e);stem(n,y);(2)理解speechproc.m基本流程阅读SPeeChPrOC.m程序,理解基本流程。程序中已经完成了语音分帧、加窗、线性预测和基音周期提取等功能。注意:不要求掌握线性预测和基音周期提取的算法原理。通过程序和注释我们可以知道整个程序的流程为:定义常数;滤波器常数初始化;依次处理每帧语音(包括计算预测系数、得到激励信号、重建语音、基音周期、合成激励的能量、合成语音、变速不
5、变调语音和变调不变速语音);保存所有文件;相关函数的实现。(3)观察零极点图运行该程序到27帧时停住,用(1)中的方法观察零极点图利用ZPIaneO函数可以得到,代码如下:ifn=27%(3)在此位置写程序,观察预测系统的零极点图zp1ane(1,A);end(4)计算激励信号在循环中添加程序:对每帧语音信号s(n)和预测模型系数佃,用E1ter计算激励信号e(n)。注意:在系数变化的情况下连续滤波,需维持滤波器的状态不变,要利用fi1ter的Zi和Zf参数。这里要利用zi_pre,利用Z1Pre作为初始状态得到最终状态,本次循环得到的最终状态最为术次循环的初始状态,并且把每次循环得到的激励保
6、存下来。代码如下:s_f=s(n-1)*F1+1:n*F1);%本帧语音,下面就要对它做处理%(4)在此位置写程序,用fi1ter函数s_f计算激励,注意保持滤波器状态exc_f,zi_pre=f1iter(A,1,s_fzzi_pre);exc(n-1)*F1+1:n*F1)=exc_f;%将你计算得到的激励写在这里(5)重建语音完善SPeeChProc.m程序,在循环中添加程序:用你计算得到的激励信号e(n)和预测模型系数ai,用fi1ter计算重建语音Sqn)。同样要注意维持滤波器的状态不变。与第四题的解法相同,这里由激励得到语音,并且要利用ziec,利用ziec作为初始状态得到最终状态
7、,本次循环得到的最终状态最为下灰循环的初始决态,并且把每次循环得到的重建语音保存下来。代码如下:%(5)在此位置写程序,用fi1ter函数和exc重建语音,注意保持滤波器状态rec_f,zi_rec=fi1ter(1,A,exc_fzzi_rec);s_rec(n-1)*F1+1:n*F1)=rec_f;带将你计算存到的屈建语音写在这里(6)对比信号在循环结束后添加程序:用SOUnd试听(6)中的e(n)信号,比较和s(n)以及s?n)信号有何区别。对比画出三个信号,选择一小段,看看有何区别。用soundO试听三个信号,发现重建语音与原语音比较相近,不过少了些“吱吱”的噪声,但是exc噪声相差
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 作业 语音 合成
