Simulink RLS.rar

  • chenzhi1995123
    了解作者
  • matlab
    开发工具
  • 9KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2021-03-21 19:12
    上传日期
递推最小二乘法参数辨识,matlab simulink
Simulink RLS.rar
  • rls
  • rls.m
    3.4KB
  • open_controller.mdl
    28.2KB
内容介绍
%========================================================================== %========================最小二乘参数估计的在线辨识递推算法================== %========================================================================== clear all; close all; set(0,'defaultfigurecolor','w') %===================================产生输出信号============================ dataLength=1200; %辨识的数据长度 dataLength_Init=200; %辨识的初始数据长度 e=0.1*wgn(dataLength,1,0); %误差信号利用高斯白噪声 a1=-1.5;a2=0.7;b1=0.2;b2=-0.1; sim('open_controller',[0,599.5]); u=X; %驱动信号 z=Y; %实际输出信号 z=z+e; %量测信号 z(1,1)=0; %赋初值给z(1,1),z(2,1) z(2,1)=0; %===============================LS系统辨识================================== %前dataLength_Init个点用最小二乘辨识,得出初值 idenStart=1; %辨识数据起点 N=2; %系统模型阶次 for j=1:N for i=1:dataLength_Init z1(i,j)=z(N+i-j+idenStart,1); u1(i,j)=u(N+i-j+idenStart,1); z2(i,1)=z(N+i+idenStart,1); end end H=[-z1 u1]; Pa=inv(H'*H)*H'*z2 %辨识得到的参数Pa=[a1,a2,b1,b2] P=inv(H'*H); %================================递推最小二乘估计=================================== %之后的点用递推最小二乘估计辨识 for i=(dataLength_Init+4):dataLength for j=1:N z1(i-3,j)=z(N+i-3-j+idenStart,1); u1(i-3,j)=u(N+i-3-j+idenStart,1); end h=[-z1(i-3,1) -z1(i-3,2) u1(i-3,1) u1(i-3,2)]'; K=P*h/(h'*P*h+1); P=(eye(2*N)-K*h')*P; Pa=Pa+K*[z(i,1)-h'*Pa] ; XX(:,i)=Pa; end %=============================检验辨识系统与实际系统比较=========================== checkLength=1200; %验证时所选取的数据长度 checkStart=0; %验证时所选取的数据起点 for i=1:checkLength %得到系统输出的真实值 zTure(i)=Y(i+checkStart,1); end zGu(1)=z(checkStart+1,1)+e(checkStart+1,1); zGu(2)=z(checkStart+2,1)+e(checkStart+2,1)+Pa(1,1)*e(checkStart+1,1); zError(1)=zGu(1)-zTure(1); zError(2)=zGu(2)-zTure(2); for i=3:checkLength %利用辨识得到的模型获得系统输出的估计值 % zGu(i)=-Pa(1,1)*zGu(i-1)-Pa(2,1)*zGu(i-2)+Pa(3,1)*u(i+checkStart-1)+Pa(4,1)*u(i+checkStart-2)+e(checkStart+i,1)+Pa(1,1)*e(checkStart+i-1,1)+Pa(2,1)*e(checkStart+i-2,1); zGu(i)=-Pa(1,1)*zGu(i-1)-Pa(2,1)*zGu(i-2)+Pa(3,1)*u(i+checkStart-1)+Pa(4,1)*u(i+checkStart-2); zError(i)=zGu(i)-zTure(i); end %曲线输出 for i=1:checkLength %设置时间轴变量 t(i)=i/2; end figure(1) subplot(2,1,1); plot(t,zTure,'r',t,zGu,'b:','LineWidth',1.5); xlabel('k'); title('辨识系统(蓝色)与实际系统(红色)的输出比较'); legend('实际系统','辨识系统'); grid on; subplot(2,1,2); plot(t,zError,'r','LineWidth',1.5); xlabel('k'),ylabel('误差'); title('误差曲线'); grid on; figure(2) plot(XX','LineWidth',1.5); legend('a_1','a_2','b_1','b_2'); title('参数辨识曲线'); grid on; xlabel('k'),ylabel('辨识结果'); figure(3) plot(z,'LineWidth',1.5); title('量测信号'); grid on; xlabel('k') XX(:,end)
评论
    相关推荐