如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
语音处理实验报告自03张驰昱2010012028语音预测模型给定e(n)=s(n)-a1s(n-1)-a2s(n-2)假设e(n)是输入信号,s(n)是输出信号,上述滤波器的传递函数是什么?如果a1=1.3789,a2=-0.9506,上述合成模型的共振峰频率是多少?用zplane,freqz,impz分别绘出零极点图,频率响应和单位样值响应。用filter绘出单位样值响应,比较和impz的是否相同。问题分析:本问题主要练习传递函数到零极点的转化,零极点的绘制,频率响应的绘制,单位响应的绘制,复习filter数字滤波器的使用。具体实现:clear;clc;a=[1,-1.3789,0.9506];sys=tf(1,a,-1,'variable','z^-1')[z,p]=tf2zp(1,a);%[r,p,k]=residuez(1,a);也能求出零点omg=abs(angle(p(1)));fs=8000;%数字采样频率f=omg*fs/2/pi%弧度转化为频率n=[0:49]';x=(n==0);figure(1);zplane(1,a);figure(2);freqz(1,a);figure(3);subplot(2,1,1),stem(n,filter(1,a,x));figure(3);subplot(2,1,2),impz(1,a,50);理解speechproc的主要流程我认为主要的部分是以下程序段:(个人理解写在了注释中)%先要统一初始化所用到的向量,这样可以提高执行效率forn=3:FN%汉明窗取到了帧长的三倍,所以n从3开始s_w=s(n*FL-WL+1:n*FL).*hw;%加窗方便用lpc处理[AE]=lpc(s_w,P);%用lpc技术得到传递函数系数As_f=s((n-1)*FL+1:n*FL);%待处理的本帧语音,即激励响应%需要推算本帧语音的激励,只有得到了激励才能做接下来的变声处理s_Pitch=exc(n*FL-222:n*FL);PT=findpitch(s_Pitch);%刚才算出的激励信号是有高斯白噪声的,需要找%出基音周期和能量,为重新合成激励信号做准备G=sqrt(E*PT(n));在27帧处观察零极点图问题分析:主要让我们对语音传函的共轭极点有一个更直观的认识具体实现:ifn==27figure(n);zplane(1,A);end(4)用filter计算每帧的激励信号问题分析:已经求出了传函系数和激励相应,只要传函的分子分母互换把激励相应当激励,得到的相应就是原激励具体实现:%前输出状态作为后输入状态即前后状态不变[temp1,zi_pre]=filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL)=temp1;(5)利用刚才得到的激励信号,继续用filter重建语音问题分析:相当于对于之前求出的激励的验算。与前题一样,要保持前后状态不变。具体实现:[temp2,zi_rec]=filter(1,A,temp1,zi_rec);s_rec((n-1)*FL+1:n*FL)=temp2;(6)比较激励信号与s(n)和重建语音的区别问题分析:重建语音因为用原激励exc做输入,所以和原语音相同。但exc中包含了高斯白噪声序列,这就是为什么接下来要计算exc的基音周期并重新合成“干净”的激励。具体实现:figure;subplot(2,1,1),plot(s(2000:4000));subplot(2,1,2),plot(exc(2000:4000));语音合成模型生成一个8kHz抽样频率的持续1s的数字信号,该信号是频率为200Hz的单位样值串问题分析:200Hz即一秒钟200个样值,所以NS=200。又因为抽样频率为8000,所以相邻样值间隔为40,即N=40。具体实现:N=8000;f=200;%如果要300Hz,就改为300e=(mod([1:N],floor(N/f))==0);%8000个点取模再求逻辑判断自然生成一个样值串sound(e,8000);生成基因周期满足PT=80+5mod(m,50)的样值序列,其中m为10ms长的段的序号。问题分析:需要有一个变量来记忆现在已经到了第几个段,用循环累加的方式存储之前所有样值间隔的和。而且没法用for循环,因为步距不固定且步数事先不知道。用while循环。具体实现:N=8000;e=zeros(N,1);%一秒信号初始化PTsum=1;%第一个样值在1处whilePTsum<=Ne(PTsum)=1;m=ceil