您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > Levinson-Durbin算法实验报告-2
1Levinson-Durbin算法一、实验目的学会LEVINSON-DURBIN算法求解Yule-Walker方程,并通过MATLAB实现程序及仿真。二、实验原理1、线性预测分析的基本原理由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在或未来的样点值。如下图所示)(...)1(),(pnxpnxpnx,,图1线性预测图示由上图可得plpllnxanx1)()(,从而可以通过使实际语音x(n)和线性预测结果)(nx之间的误差e(n)在某个准则下达到最小值来决定唯一的一组预测系数pla。而这组系数就能反映语音信号的特性,可以作为语音信号特征参数来用于语音编码、语音合成和语音识别等应用中去。2、Yule-Walker(Y-W)方程由估计值和实际信号值的误差可有plplplpllnxalnxanxnxnxne01)()()()()()(10pa根据e(n)最小均方误差准则,来决定唯一的一组预测系数pla,即)(nx线性预测2min)()(eE122plpllnxanxEn由此可得到Y-W方程:pkklkRalpl,...,2,100minp0取遍k值之后可有以下:ppppaaaRpRpRpRRRpRRR...0...1............1...01...100...010min由相关函数的偶函数性质可有ppppaaaRpRpRpRRRpRRR...0...1............1-...01...100...010min在已知自相关函数的前提下,根据e(n)均方误差最小的原则来求解ak,本实验中采用Levinson-Durbin算法。3、Levinson-Durbin算法简介Levinson-Durbin算法首先由一阶AR模型开始,按照前面的Y-W方程可有,一阶AR模型(p=1)的Y-W方程是010101011021121112111xxxxxxxxxxxxxxrarraarrrr该方程解出:然后增加一阶,即令p=2,可得到:00a1012101210222221arrrrrrrrrxxxxxxxxxxxxxxxxxx由上式可解出:2122222112211212111221/22aaaaararaxxxx3然后令,...3,2p以此类推,可以得到一般的递推公式:nxErkpkakaaakkpraprkxxpppkpppkppkpppppkxxpxxp2202122))(1()1(21111011,...2,1式中的pk称为反射系数,而数的增加而减少。,即预测误差随地退次进而得到应满足下式,这样必须大于等于值,因此是预测误差的均方误差和2122212101pppppppkkk三、实验过程实验开始先按照前文所述的Levinson算法的递推公式编写子函数function[a_p,E_V]=Levinson_algorithm(x,p)其中a_p是输出的预测系数ka,E_V是输出的预测误差均放值。该子函数实现用Levinson-Durbin算法求解Yule-Walker方程,用迭代方法求解与谱估计有关的参量。利用子函数估计AR(2)模型中的参数值,估计其功率谱,并与已知的信号功率谱进行比较。参数设置:已知信号为白噪声通过线性系统H(z)=1/(1+a1*z^(-1)+a2*z^(-2))产生信号向量,p=90,先假设已知模型的输入系数为a0=[10.780.92]。实验结果由图可知,两图的频谱基本一致,即可知该子函数可以很好的估计出模型参数。4附录:函数程序%%%子函数程序%Levinson-Durbin函数%参量:A(R)模型的输入参数为信号x和滤波器阶数p,输出参数为模型预测系数a_p和预测功率误差E_p;function[a_p,E_V]=Levinson_algorithm(x,p)%输入信号的互相关函数计算算N=length(x);fori=1:NRx(i)=x(1:N-i+1)*(x(i:N))'/N;%计算输入信号的自相关函数值数值end%levinson算法迭代过程a(1)=1;a(2)=-Rx(2)/Rx(1);%自适应滤波器的前两个系数个系数fork=1:p-1E_V(k+1)=Rx(1)+a(2:k+1)*Rx(2:k+1)';%预测误差更新D(k+1)=a(1:k+1)*(fliplr(Rx(2:k+2)))';%为扩大方程矩阵中的Dk的更新新gama(k+2)=D(k+1)/E_V(k+1);%反射系数gama的更新的更新E_V(k+2)=E_V(k+1)*(1-(gama(k+2))^2);%预测误差的更新%预测系数的更新a_yuce(1)=1;%由k阶系数预测第k+1阶系数forq=1:ka_yuce(q+1)=a(q+1)-gama(k+2)*a(k-q+2);enda_yuce(k+2)=-gama(k+2);a=a_yuce;%准备下一次迭代enda_p=a;%算法迭代完成输出模型系数E_p=E_V;%输出系统预测误差%%%%%函数应用实例%运用前面所编写的levinson算法程序计算已知信号的预测误差,一次检验所设计的算法准确性。%给出一个已知的模型,让一直信号经过该模型之后利用函数估计模型系数%已知模型设为x(n)=a1*u(n-2)+a2*u(n-1)+a3*u(n)clear;closeall;clc;%产生已知的信号5u=randn(1,3000);%产生均值为0,方差(功率)为1,数据长度为3000的高斯白噪声a0=[10.720.88];%已知模型的输入系数x=filter(1,a0,u);%产生的信号模型是x(n)=a0(1)*u(n-2)+a0(2)*u(n-1)+a0(3)*u(n);%其中的a0(i)为a0中的数值%由已知模型画出信号的功率谱函数图w=linspace(-pi,pi,3000);%将角频率w从-pi到pi平均分成2000等份form=1:3000c=w(m);s(m)=1/(abs(1+a0(2:3)*exp(-j*c*(1:2))'))^2;%信号功率谱s,其中系数为给定的模型参数endfigure(1);plot(w,s);%画出一直信号的频谱图title('根据已知的模型参数求得信号的频谱');%下面利用所编写的算法求得预测模型系数p=50;%用于估计的模型参数[a_p,E_V]=Levinson_algorithm(x,p);%调用子函数form=1:3000c=w(m);sx(m)=1/(abs(1+a_p(2:p+1)*exp(-j*c*(1:p))'))^2;%信号功率谱s,其中系数为由子函数预测得到的模型参数endfigure(2);plot(w,sx);%画出一直信号的频谱图title('根据预测得到的模型参数求得信号的频谱');6
本文标题:Levinson-Durbin算法实验报告-2
链接地址:https://www.777doc.com/doc-5200906 .html