您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > 西工大LPC线性预测编码实验报告
LPC线性预测编码100112062012302516邹维韬一、LPC基本原理基本原理:线性预测编码就是利用过去的样值对新样值进行预测,然后将样值的实际值与其预测值相减得到一个误差信号,显然误差信号的动态范围远小于原始语音信号的动态范围,对误差信号进行量化编码,可大大减少量化所需的比特数,使编码速率降低。设语音信号的样值序列为s(n),n=1,2,…,n,其中语音信号的当前取样值,即第n时刻的取样值s(n)。而p阶线性预测,是根据信号过去p个取样值的加权和来预测信号当前取样值s(n),此时的预测器称为p阶预测器。设ˆs(n)为s(n)的预测值,则有1ˆ()()piisnasni(1)式中,a1,a2,…,ap,称为线性预测系数,式(1)称为线性预测器,预测器的阶数为p阶。p阶线性预测器的传递函数为1()piiiPzaz(2)信号s(n)与其线性预测值ˆs(n)之差称为线性预测误差,用e(n)表示。则e(n)为1ˆ()()()()()piiensnsnsnasni(3)可见,预测误差e(n)是信号s(n)通过具有如下传递函数的系统输出1()1piiiAnaz(4)图一LPC误差滤波器如图一所示。称系统A(z)为LPC误差滤波器,设计预测误差滤波器A(z)就是求解预测系数a1,a2,…,ap,使得预测器的误差e(n)在某个预定的准则下最小,这个过程称为LPC分析。Levinson-Durbin算法递推求解自相关法求解式据线性预测分析的原理可知,求解p个线性预测系数的依据,是预测误差滤波器的输出方均值或输出功率最小。可称这一最小方均误差为正向预测误差功率Ep,即2min11()[()]{()[()()]}[()()][()()]ppiiiiEpEenEensnasniEensnaEensni(17)已知上式的第二项为0。再将式(3)代入上式可得11[()()][()()][()()](0)()pppiiiiEEensnEsnsnaEsnsniRaRi(18)将式(18)与式(12)组合起来可得121(0)(1)()(1)(0)(1)0(2)(1)(2)0()(1)(0)0ppRRRpEaRRRpaRRRpaRpRpR(19)式(19)方程的系数矩阵是对称的,且沿着任一与主对角线平行的斜对角线上的所有元素相等,系数矩阵大小为p×p,这样的矩阵称为Toeplitz(特普利茨)矩阵。式(19)称为Yule-Walker方程,其中R(p)为根据式(9)确定的待分析语音信号s(n)的自相关序列。可见,为了解得线性预测系数,必须先计算出R(k),然后解式(19)即可。经典的线性预测求解方法之自相关法,该方法假定语音信号序列s(n)在间隔0≤n≤N-1以外为0;用窗函数从语音序列中截取出选定的序列部分,截取出的序列记为s(0),s(1),…,s(N-1)。用对称Toeplitz矩阵的性质,自相关法求解式(19)可用Levinson-Durbin(莱文森一杜宾)递推算法求解。算法的计算复杂度为O(p2),利用Levinson-Durbin算法递推时,从最低阶预测器开始,由低阶到高阶进行逐阶递推计算。其递推过程如下:1(1)(1)1[()()],1iiijijkriarijEip(20)(0)(0)Er(21)2(1)(1)iiiEkE(22)()iiiak(23)()(1)(1),11iiijjiijaakaji(24)由式(20)到式(24)可对i=1,2,…,p进行递推求解,其最终解为(),1pjjaajp在上面的一组式子中,i表示预测器阶数,如()ija表示i预测器的第j个预测系数。对p阶预测器,在上述求解预测器系数的过程中,阶数低于p的各阶预测器系数也同时得到。二、LPC的代码实现%Levinson'smethod%初始化矩阵R=zeros(1,order+1);pc=zeros(1,order);az=zeros(order,order);N=size(frameData,1);%计算自相关系数R的矩阵forh=1:order+1R(h)=0;forf=h:NR(h)=R(h)+frameData(f)*frameData(f-h+1);endend%开始计算初值pc(1)=R(2)/R(1);az(1,1)=pc(1);E=(1-pc(1)^2)*R(1);temp=0;forh=2:ordertemp=0;forf=1:h-1temp=temp+az(h-1,f)*R(h-f+1);end%计算反射系数pc与预测系数azpc(h)=(R(h+1)-temp)/E;az(h,h)=pc(h);forf=1:h-1az(h,f)=az(h-1,f)-pc(h)*az(h-1,h-f);endE=E*(1-pc(h)^2);end%得出预测系数矩阵zz=-az(order,:);%计算增益,使用的是pdf中的公式gain=R(1);forh=1:ordergain=gain+z(h)*R(h+1);endai(:,nframe)=z;%a1,a2,...,a20G(nframe)=sqrt(6898403*gain);%gain,系数6898403三、编码客观评价A、波形与声谱图比较:aslp_zhy_00001.wav与aslp_zhy_00001.wav比较波形图大致吻合,部分细节有所出入,为LPC导致的失真。声谱图吻合。播放效果除了音质有所下降外,无明显失真。B、信噪比与压缩比计算[inspeech,Fs1,bits1]=wavread('wav\\aslp_zhy_00001.wav');[outspeech,Fs2,bits2]=wavread('lpcWav\\aslp_zhy_00001.wav');%计算信噪比duration1=length(inspeech);duration2=length(outspeech);up=0;down=0;fori=1:duration1up=up+inspeech(i)^2;endfori=1:duration2down=down+(inspeech(i)-outspeech(i))^2;endSNR=10*log10(up/down);信噪比与压缩比绘制成表格四、实验感想与收获通过本次试验,我理解了线性预测分析方法原理,基本掌握了Levinson-Dubin算法。实验中遇到增益过小(表现为合成声音过低的情况),但最终通过对比原数据,乘以一个系数得到了解决。
本文标题:西工大LPC线性预测编码实验报告
链接地址:https://www.777doc.com/doc-2036655 .html