递推的极大似然法辨识程序

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

u 递推的极大似然法辨识程序

例5.2系统模型如图5.5所示。试用递推的极大似然法对系统辨识的参数集

v(k)随机信号,输入信号为幅值为的M 序列或随机信号,要求画出程序流程图,打印出

程序(程序中带有注释)和辨识中的参数、误差曲线。

解: 首先解释编程所用的部分字母:由于在MATLAB 语言中无法用希腊字母描述、无法用上标及下标,故

用 ‘o ’和‘o1’表示;令

;产

生M 序列时,a(i),b(i),c(i),d(i)表示四级移位寄存器的第1,2,3,4级寄存器的输出;

① 编程如下(光盘上该程序:FLch5RMLeg2.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; %初始化 for i=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); end

u; %若取去‘;’可以在程序运行中观测到m 序列

v=randn(1200,1); %产生正态分布随机数 V=0; %计算噪声方差 for i=1:1200 V=V+v(i)*v(i); end

V1=V/1200;

for k=3:1200 %根据v 和u 计算z

z(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); end

u(k)

+ e(k) y(k)+

z(k)

λv(k)

图5.5 例5.2系统模型

o1=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;

%迭代计算参数值和误差值

for k=3:1200

h=[-z(k-1);-z(k-2);u(k-1);u(k-2);v(k-1);v(k-2)];

hf=h;

K=p0*hf*inv(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(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)];

end

o1 %若取去‘;’可以在程序运行中观测到参数

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('k')

ylabel('parameter')

legend('a1=-1.2,','a2=0.6','b1=1.0','b2=0.5','d1=-1.0','d2=0.2'); %图标炷title('The parameter idendification of the RML');

end

subplot(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('误差曲线') end

subplot(4,1,3) k=1:1200; plot(k,u); xlabel('k') ylabel('input') %title('系统输入信号') end

subplot(4,1,4) k=1:1200; plot(k,v); xlabel('k')

ylabel('random noise') %title('系统所加的随机噪声') end

① 程序运行结果如图5.7 所示

p a r a m e t e r

The parameter idendification of the RML

e r r o

r

i n p u t

k

r a n d o m n o i s e

图5.7 RML 辨识参数曲线

相关文档
最新文档