Professional Documents
Culture Documents
专 业: 电子信息
姓 名: 薛润
学 号: 20721894
成 绩:
考虑如下模型
z(k)-1.5z(k-1)+0.7z(k-2)=u(k-1)+0.5u(k-2)+v(k)
其中 v(k)是均值为 0,方差为 1 的白噪声。根据模型生成数据,采用递推最
小二乘法对模型参数进行辨识,要求绘出各参数随时间的变化曲线。
解:仿真程序如下:
% 产生 M 序列
function [Out]=M_Seq_Gen(m,plength,A)
X(n)=1;
end
for i=1:m
for j=plength:-1:2
X(j)=X(j-1);
end
X(1)=xor(X(plength-1),X(plength)); %异或运算
if X(plength)==0
Out(i)=-1;
else
Out(i)=X(plength);
end
end
%save ('mdata','Out');
%绘图
%i1=i;
k=1:1:m;
plot(k,Out,'g',k,Out,'g')
xlabel('k')
ylabel('M 序列')
title('移位寄存器产生的 M 序列')
end
% RLS
L=480;A=1;%数据长度 L=480,幅值为 1
f=zeros(1,480);
f(1)=1;
for i=2:479
% plot(u,'r')
v = wgn(1,L,2); %产生高斯白噪声
z=zeros(0,16);
z(1)=0;z(2)=0;%取 z 的前两个初值为 0
for k=3:L
z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2)+v(k);
end
p0=10^6*eye(4,4);%直接给出初始状态 P0,即一个充分大的实数单位矩阵
E=0.000000005;%相对误差的初始值大小
c=[c0,zeros(4,L-1)];%被辨识参数矩阵的初始值及大小
e=zeros(4,L);%相对误差的初始值及大小
for k=3:L;
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';
x=h1'*p0*h1+1;
x1=inv(x);
k1=p0*h1*x1;%计算 K(k);
d1=z(k)-h1'*c0;
c1=c0+k1*d1;%计算辨识参数 C(k);
e1=c1-c0;
e2=e1./c0;
e(:,k)=e2;
c0=c1;
c(:,k)=c1;
p1=p0-k1*k1'*[h1'*p0*h1+1];%计算 P(k)
p0=p1;
end
c;e;
a1=c(1,:);a2=c(2,:);b1=c(3,:);b2=c(4,:);ea1=e(1,:);ea2=e(2,:);eb1=e(3,:);eb2=e(4,:);
figure(1);
i=1:L;
plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':')
title('递推最小二乘法的参数变化')
figure(2);
i=1:L;
plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:')
title('识别精度')
a1=c(1,480);a2=c(2,480);b1=c(3,480);b2=c(4,480);%从中分离并显示 a1,b1,a2,b2
fprintf(' a1=%f\n',a1);
fprintf(' a2=%f\n',a2);
fprintf(' b1=%f\n',b1);
fprintf(' b2=%f\n',b2);
仿真结果如下: