资源描述:
《递推的极大似然法辨识程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、递推的极大似然法辨识程序例5.2系统模型如图5.5所示。试用递推的极大似然法对系统辨识的参数集图5.5例5.2系统模型u(k)+e(k)y(k)+z(k)λv(k)uv(k)随机信号,输入信号为幅值为的M序列或随机信号,要求画出程序流程图,打印出程序(程序中带有注释)和辨识中的参数、误差曲线。解:首先解释编程所用的部分字母:由于在MATLAB语言中无法用希腊字母描述、无法用上标及下标,故用‘o’和‘o1’表示;令;;产生M序列时,a(i),b(i),c(i),d(i)表示四级移位寄存器的第1,2,3,4级寄存器的输出;①编程如下(光盘上该程序:FLch5
2、RMLeg2.m,可在MATLAB6.I下直接运行):编程如下:clear%清零a(1)=1;b(1)=0;c(1)=1;d(1)=0;u(1)=d(1);z(1)=0;z(2)=0;%初始化fori=2:1200%产生m序列u(i)a(i)=xor(c(i-1),d(i-1));b(i)=a(i-1);c(i)=b(i-1);d(i)=c(i-1);u(i)=d(i);endu;%若取去‘;’可以在程序运行中观测到m序列v=randn(1200,1);%产生正态分布随机数V=0;%计算噪声方差fori=1:1200V=V+v(i)*v(i);endV1
3、=V/1200;fork=3:1200%根据v和u计算zz(k)=1.2*z(k-1)-0.6*z(k-2)+u(k-1)+0.5*u(k-2)+v(k)-v(k-1)+0.2*v(k-2);endo1=0.001*ones(6,1);p0=eye(6,6);%赋初值zf(1)=0.1;zf(2)=0.1;vf(2)=0.1;vf(1)=0.1;uf(2)=0.1;uf(1)=0.1;%迭代计算参数值和误差值fork=3:1200h=[-z(k-1);-z(k-2);u(k-1);u(k-2);v(k-1);v(k-2)];hf=h;K=p0*hf*in
4、v(hf'*p0*hf+1);p=[eye(6,6)-K*hf']*p0;v(k)=z(k)-h'*o1;o=o1+K*v(k);p0=p;o1=o;a1(k)=o(1);a2(k)=o(2);b1(k)=o(3);b2(k)=o(4);d1(k)=o(5);d2(k)=o(6);e1(k)=abs(a1(k)+1.2);e2(k)=abs(a2(k)-0.6);e3(k)=abs(b1(k)-1.0);e4(k)=abs(b2(k)-0.5);e5(k)=abs(d1(k)+1.0);e6(k)=abs(d2(k)-0.2);zf(k)=z(k)-d1
5、(k)*zf(k-1)-d2(k)*zf(k-2);uf(k)=u(k)-d1(k)*uf(k-1)-d2(k)*uf(k-2);vf(k)=v(k)-d1(k)*vf(k-1)-d2(k)*vf(k-2);hf=[-zf(k-1);-zf(k-2);uf(k-1);uf(k-2);vf(k-1);vf(k-2)];endo1%若取去‘;’可以在程序运行中观测到参数V1%绘图subplot(4,1,1)k=1:1200;plot(k,a1,'k:',k,a2,'b',k,b1,'r',k,b2,'m:',k,d1,'g',k,d2,'k');xlabel
6、('k')ylabel('parameter')legend('a1=-1.2,','a2=0.6','b1=1.0','b2=0.5','d1=-1.0','d2=0.2');%图标炷title('TheparameteridendificationoftheRML');endsubplot(4,1,2)k=1:1200;plot(k,e1,'k',k,e2,'b',k,e3,'r',k,e4,'m',k,e5,'g',k,e6,'k');xlabel('k')ylabel('error')%title('误差曲线')endsubplot(4,1,3)
7、k=1:1200;plot(k,u);xlabel('k')ylabel('input')%title('系统输入信号')endsubplot(4,1,4)k=1:1200;plot(k,v);xlabel('k')ylabel('randomnoise')%title('系统所加的随机噪声')end