www.pudn.com > RELS11111.rar > RELS.m
u0=idinput(15,'prbs');
u0=u0';
u=[];
for i=1:4
u=[u,u0];
end %取长度为60的M序列
figure(1);
subplot(211);
stem(u),grid on %画出M序列输入信号
v=randn(1,60);%产生一组60个正态分布的随机噪声
subplot(212);
plot(v),grid on %画出随机噪声信号
u,v %显示输入信号和噪声信号
%建模
a1=-1.5;a2=0.7;b1=1;b2=0.5;d1=-1;d2=0.2;
z=zeros(1,60);
z(1)=v(1);
z(2)=-a1*z(1)+b1*u(1)+v(2)+d1*v(1);
for k=3:60
z(k)=-a1*z(k-1)-a2*z(k-2)+b1*u(k-1)+b2*u(k-2)+v(k)+d1*v(k-1)+d2*v(k-2);
end
%辨识
theta0=[0.001 0.001 0.001 0.001 0.001 0.001]';
p0=10^6*eye(6,6);
%E=0.00000000005;%相对误差E=0.00000000005
theta=[theta0,zeros(6,14)];
%e=zeros(6,15);
for k=3:60
h1=[-z(k-1),-z(k-2),u(k-1),u(k-2),v(k-1),v(k-2)]';
x=h1'*p0*h1+1;
x1=inv(x);
k1=p0*h1*x1;%求出K值
m1=z(k)-h1'*theta0;
theta1=theta0+k1*m1;%辨识参数theta
v(k)=z(k)-h1'*theta1;
% e1=theta1-theta0;
%e2=e1./theta0;
% e(:,k)=e2;
theta0=theta1;
theta(:,k)=theta1;%把递推出的辨识参数C的列向量加入辨识参数矩阵
p1=p0-k1*h1'*p0;%find p(k)
p0=p1;%给下次使用
% if e2