原创 一阶预测器的设计

2008-7-2 19:50 4375 9 9 分类: 测试测量

一、实验内容<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


x(n)AR(1)信号,x(n)+ax(n-1)=ν(n),其中ν(n)为零均值,方差为


σw2的白噪声。设计一阶预测器,用x(n-1)估计x(n)


由一阶自回归方程产生的信号x(n)的自相关rxx(m)= σw2(-a)|m|/(1-a2),为使σx2=1,即:rxx(0)= σw2/(1-a2)=1,则σw2=1-a2,取a=-0.99


二、实验程序


function oneorderPredictor(mu)


N=1000;M=100;a=-0.99;


nu=normrnd(0,sqrt(1-a^2),N,M);


b_filter_coefficient=[1];a_filter_coefficient=[1,-0.99];  


x=filter(b_filter_coefficient,a_filter_coefficient,nu); 


y=zeros(N,M);   w=zeros(N,M);


for j="1:1:M"                          


        for i="1:1:N"


            if i>1  temp=x(i-1,j);


             else   temp=0; 


            end


             y(i,j)=w(i,j)*temp;


             e(i,j)=x(i,j)-y(i,j);


             w(i+1,j)=w(i,j)+mu*e(i,j)*temp;


       end


  end


w_mean=mean(w,2);     plot(0:N,w(:,j),0:N,w_mean)


   title('权重系数')


   xlabel('迭代次数')


   ylabel('权重值')


   figure


mse=e.*e;  mse_mean=mean(mse,2);                 


plot(0:N-1,e(:,j),0:N-1,mse_mean)


   title('均方误差')


   xlabel('迭代次数')


   ylabel('均方误差值')


 


三、运行图如下


1、下图为mu=0.05时的权重系数图和均方误差图


matlabcommand windows里面输入oneorderPredictor(0.05)得到:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 


点击开大图 


 


 


图一 权重系数图


点击开大图


 


图二 均方误差图


由图一可以看到,最优权重系数的估计值w的均值,随迭代次数的增加最终趋近于0.9657,单次实现时,w的曲线上下波动,而平均后曲线则平滑了许多。。由题意可得:y(n)==wx(n-1),此时信号x(n)的自相关距阵Rxx=rxx(0)=1。因为我们是用x(n-1)去估计x(n),则互相关矢量rdx=rxx(1)=-a。根据维纳-霍夫方程:Rxxw=rdx,可以求出最佳滤波器系数wo=Rxx-1rdx=-a=0.99。这个与我们用matlab防真出来结果非常地接近。


由图二可以看到,均方误差估计值随迭代次数的增加最终趋近于0.01443,此时自适应滤波器的权重系数达到最佳值。同样,单次实现时,曲线上下波动,而平均后曲线则平滑了许多。我们理论计算均方误差J=E[e(n)e*(n)]=σd2-rdxHw


-wHrdx+wHRxxw=1-a2-a2+a2=1-a2=1-0.992=1-0.9801=0.0199。由此可以看到理论分析与matlab分析结果相符。


2、当mu分别取0.10.050.01时,看均方误差的收敛速度。


程序清单如下:


function oneorderPredictor1(mu)


N=1000;M=100;


a=-0.99;


v=normrnd(0,sqrt(1-a^2),N,M);


b=[1];a=[1,-0.99];  


x=filter(b,a,v); 


y=zeros(N,M);       


w=zeros(N,M);


for j="1:1:M"                         


        for i="1:1:N"


            if i>1  temp=x(i-1,j);


             else   temp=0; 


            end


             y(i,j)=w(i,j)*temp;


             e(i,j)=x(i,j)-y(i,j);


             w(i+1,j)=w(i,j)+mu*e(i,j)*temp;


       end


  end


mse=e.*e;                       


mse_mean=mean(mse,2);                   


plot(0:N-1,mse_mean)


   title('均方误差')


   xlabel('迭代次数')


   ylabel('均方误差值')


matlabcommand windows里面输入oneorderPredictor1(0.01),然后输<?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />hold on,再输入oneorderPredictor1(0.05)oneorderPredictor1(0.1),就可以得到图三。


 


点击开大图


 


图三 mu取不同的均方误差


 


可以观察到当mu=0.01时,均方误差达到最小也即自适应滤波器的权重系数达到最佳值,需要的迭代次数大概为500次;mu=0.05时,均方误差达到最小,需要的迭代次数大概为200次:mu=0.1时,均方误差达到最小,需要的迭代次数大概为120次。


可以得出,收敛因子mu值越大,自适应过程收敛越快,即自适应滤波器的权重系数达到最佳值越快。


 

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条