高级数字信号处理大作业学院专业学号学生姓名2016年月日1.仿真题目ForthiscomputerexperimentinvolvingtheLMSalgorithm,useafirst-order,autoregressive(AR)processtostudytheeffectsofensembleaveragingonthetransientcharacteristicsoftheLMSalgorithmforrealdata.ConsideranARprocessoforderone,describedbythedifferenceequation()(1)()xnaxnvnwhereaisthe(oneandonly)parameteroftheprocessand()vnisazero-meanwhite-noiseprocessofvariance2v.Toestimatetheparametera,useanadaptivepredictoroforderone,asdepictedinFig.P4.z-1f(n)-+Fig.P4Adaptivefirst-ordorpredictornx1-nxnwˆGivendifferentsetsofARparameters,fixedthestep-sizeparameter,andtheinitialconditionˆ(0)0w.·Pleaseplotthetransientbehaviorofweightˆ()wnincludingthesinglerealizationandensemble-averagedresult.·Thetransientbehaviorofthesquaredpredictionerror.·Drawtheexperimentallearningcurves,whatistheresultwhenthestep-sizeparameterisreduced.2.题目分析已知()xn满足一阶AR过程,其差分方程为()(1)()xnaxnvn(2-1)这里a是这个过程的参数,()vn是零均值,方差为2v的白噪声。为了估计参数a,我们使用一阶自适应预测器,初始值ˆ(0)0w,自适应算法采用LMS算法。预测器抽头权值的LMS自适应算法形式为ˆˆ(1)()(1)()wnwnxnfn(2-2)其中ˆ()()()(1)fnxnwnxn(2-3)是预测误差。题目要求我们用计算机对一阶AR过程随机信号的LMS滤波进行仿真,通过绘制不同过程参数情况下,单一实现和集平均时一阶自适应预测器权值和平方预测误差的瞬态特性图,来研究实时数据集平均对LMS算法瞬态特性的影响。最后,绘出不同步长因子情况的学习曲线图后,分析学习曲线在步长因子减小情况下的变化情况。仿真的目的是通过计算机仿真来研究输入到LMS滤波器的信号参数、步长因子对LMS算法性能的影响。因此在仿真实验中需要改变题目中的AR参数a和步长因子,并对实验得到的权系数和均方误差的瞬态特性进行分析,来获得这些因素对LMS算法性能的影响情况。3.仿真原理(1).LMS算法LMS(Least-Mean-Square)又称最小均方算法是自适应滤波器中常用的一种算法,与维纳算法不同的是,其系统的系数是随输入序列而改变的。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此,理论上讲LMS算法的性能在同等条件下要优于维纳算法,但是LMS算法是在一个初始化值的基础上进行逐步跟踪调整得到的,这就使得系统在进入稳定之前有了一个调整的时间,这个时间受到算法步长因子的控制,在一定数值范围内,增大会减小调整时间,但超过这个值范围时系统收效性能会降低或者不再收敛,的最大取值为R的迹。LMS算法表达式:①设计参数:()xnn时刻的输入数据矢量()ynn时刻的期望响应()cnn时刻的滤波器系数矢量M系数的数目步长参数②初始化:(1)(1)0cx(3-1)③计算:对于0,1,2,,n有ˆ()(1)()Hyncnxn(3-2)ˆ()()()enynyn(3-3)*()(1)2()()cncnxnen(3-4)(2).实验数据的产生()vn的方差未知,步长因子未知,这两个需要我们自己给定。输入数据()xn和噪声()vn也没有给出,需要我们自己产生。()xn的产生:由()(1)()xnaxnvn知,给定(1)x,对于1n的()xn全部唯一确定。()vn的产生:由Yule-Walker方程2(0)(1)1(1)(0)0vrrrra(3-5)可以得到2222(1)(0)(1)vxara(3-6)4.仿真过程(1).实验涉及到的各个参数条件设定如下:①AR参数120.197,0.95aa;②步长因子=0.01、0.04、0.08;③高斯白噪声()vn的功率为20.169v;④AR序列()xn的长度为1000;实验次数为100。(2).仿真步骤:①实验开始先定义以上参变量。②对于不同的参数a、步长因子和试验次数M分别进行N次迭代来获得每个点的权值系数。③对于不同的参数a和步长因子分别计算它们的M次集平均权值特性和均方误差特性。④绘出三幅图,分别是该一阶自适应预测器的权值和平方误差瞬时特性图以及不同步长因子下的学习曲线图。5.仿真结果通过运行附录程序可以得出该一阶自适应预测器权值的瞬态特性图(=0.04)如下所示:图1一阶自适应预测器权值的瞬态特性(=0.04)图一中,显示了平均的()cn学习曲线及一个实现,其中实线所示为某一单独实验中的得到的权值瞬态特性曲线,虚线表示的是在100次实验后得到的一个平均结果。观察两条曲线发现,虚线较实线平滑。这是因为集平均实现采用的是100次试验的平均处理,平滑了单一处理中梯度噪声的影响。图2一阶自适应预测器的平方预测误差瞬时特性(=0.04)图二中,是相应的一阶自适应预测器的平方预测误差与迭代次数的关系图,可见,LMS算法单一实现的学习曲线呈现出严重的噪声的形式,但经总体平均后得到了一条较稳定的曲线,即=0.04时的一阶自适应预测器的学习曲线。图3一阶自适应预测器的学习曲线(变步长)在图三中,我们可以看到当步长参数分别取0.01、0.04和0.08时均方误差的学习曲线。图中显示,影响收敛速度,也影响稳态值。当0.08时算法大约在100次迭代收敛,而当0.04时大约需要250次迭代才收敛,而前者的稳态值要比后者的高。当0.01时需要700次的迭代。综上所述随着步长因子的减小,LMS算法就需要进行更多的迭代才能收敛,即到达最优点的时间越长。6.结论由以上实验结果分析可归纳为:(1)单一实现的轨迹和学习曲线明显是随机的或是“有噪声的”,而随着实验次数的增多,其平均结果趋于平滑。即总体平均有一个平滑的作用。(2)LMS算法的收敛速度依赖于步长。在允许的范围内值取得越大,收敛速度越快,反之步长越小,收敛速度就越慢。LMS算法是一种相对简单而性能又十分优越的自适应算法。在对LMS算法进行应用或设计的时候,我们可以用变步长方法来缩短其自适应收敛过程,为了达到快速收敛的目的,必须选择合适的步长因子的值,一个可能的策略是尽可能多的减少瞬时平方误差,即用瞬时平方误差作为均方误差的简单估计。LMS算法的上述特点使得LMS滤波器越来越多的应用于更广泛的领域。附录:clcclearN=1000;M=100;w=zeros(M,N,3,2);f=zeros(M,N,3,2);forl=1:2,ifl==1a=0.95;elsea=-0.197;end;ford=1:3,ifd==1u=0.01;elseu=0.04*(d-1);end;fork=1:M,v=0.169*randn(1,N);x(1)=1;forn=2:N,x(n)=-a*x(n-1)+v(n);f(k,n,d,l)=x(n)-w(k,n,d,l)*x(n-1);w(k,n+1,d,l)=w(k,n,d,l)+u*x(n-1)*f(k,n,d,l);endendendendforl=1:2ford=1:3forn=1:N,fea(n,d,l)=0;wea(n,d,l)=0;form=1:Mfea(n,d,l)=fea(n,d,l)+f(m,n,d,l)^2;wea(n,d,l)=wea(n,d,l)+w(m,n,d,l);endfea(n,d,l)=fea(n,d,l)/M;wea(n,d,l)=wea(n,d,l)/M;endendendn=1:N;figure(1)plot(n,w(1,n,2,1),'r-',n,wea(n,2,1),'b--',n,w(1,n,2,2),'r-',n,wea(n,2,2),'b--');title('一阶自适应预测器权值的瞬态特性(u=0.04)')xlabel('迭代次数'),ylabel('抽头权值')legend('\it单一实现','\it100次实验集平均实现')text(400,-0.01,'a=-0.197')text(400,-0.8,'a=+0.95')figure(2)plot(n,f(1,n,2,1),'r-',n,fea(n,2,1),'b-');title('一阶自适应预测器的平方预测误差瞬时特性(u=0.04)')axis([010000.0011]);xlabel('迭代次数'),ylabel('平方误差')legend('\it单次误差','\it100次重复实验平均误差')figure(3)semilogy(n,fea(n,1,1),'b-',n,fea(n,2,1),'g-',n,fea(n,3,1),'r-');axis([010000.011]);title('一阶自适应预测器的学习曲线(变步长u)')xlabel('迭代次数'),ylabel('均方误差')legend('\itu=0.01','\itu=0.04','\itu=0.08')