最小二乘递推算法的MATLAB 仿真 针对辨识模型,有z(k)-+a1*z(k-1)+a2*z(k-2)=b1*u(k-1)+b2*u(k-2)+v(k)模型结构,对其进行最小二乘递推算法的MATLAB 仿真,对比真值与估计值。更改a1、a2、b1、b2 参数,观察结果。 仿真对象:z(k)-1.5*z(k-1)+0.7*z(k-2)=u(k-1)+0.5*u(k-2)+v(k) 程序如下: L=15; y1=1;y2=1;y3=1;y4=0; %四个移位寄存器的初始值 for i=1:L; %移位循环 x1=xor(y3,y4); x2=y1; x3=y2; x4=y3; y(i)=y4; %取出作为输出信号,即 M 序列 if y(i)>0.5,u(i)=-0.03; %输入信号 else u(i)=0.03; end y1=x1;y2=x2;y3=x3;y4=x4; end figure(1); stem(u),grid on z(2)=0;z(1)=0; for k=3:15; z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2); %输出采样信号 end c0=[0.001 0.001 0.001 0.001]'; %直接给出被识别参数的初始值 p0=10^6*eye(4,4); %直接给出初始状态 P0 E=0.000000005; c=[c0,zeros(4,14)]; e=zeros(4,15); for k=3:15; %开始求 k 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 的值 d1=z(k)-h1'*c0;c1=c0+k1*d1; 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; if e2<=E break; end 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(2); i=1:15; plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':') title('Parameter Identification w ith Recursive Least Squares Method') figure(3); i=1:15; plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') title('Identification Precision') 程序运行结果: p0 = 1000000 0 0 0 0 1000000 0 0 0 0 1000000 0 0 0 0 1000000 c = Columns 1 through 9 0.0010 0 0.0010 -0.4984 -1.2325 -1.4951 -1.4962 -1.4991 -1.4998 0.0001 0 0.0001 0.0001 -0.2358 0.6912 0.6941 0.6990 0.6998 0.0010 0 0.2509 1.2497 1.0665 1.0017 1.0020 1.0002 0.9999 0.0010 0 -0.2489 0.7500 0.5668 0.5020 0.5016 0.5008 0.5002 Columns 10 through 15 -1.4999 -1.5000 -1.5000 -1.5000 -1.4999 -1.4999 0.6999 0.7000 0.7000 ...