论文仿真:基于广义扩张状态观测器的干扰不匹配离散系统状态反馈控制

今天看扩张观测器,根据文献[1]的模型和控制算法,自己写了一份仿真代码。

% 2021.7.16 基于广义扩张状态观测器的干扰不匹配离散系统状态反馈控制
clc; clear all; close all;
set(0,'defaultfigurecolor','w');

%% 建模
% 连续模型(1)
nx=2; % x的维度
Ac=[0 1; -0.0011 -40;];
buc=[0 39005.6]';
bdc=[0 -55248.6]';
% 离散化(2)
T0=0.001;
[Phi, Gamma_u]=c2d(Ac,buc,T0);
[~, Gamma_d]=c2d(Ac,bdc,T0);
C=[1 0];
% 增广(4)
Theta=[Phi, Gamma_d; zeros(1, nx) 1];
Delta_u=[Gamma_u; 0];
Delta_h=[zeros(2,1); 1];
H=[C, 0];

%% 观测器
% Qo=obsv(Theta, H);
% rank(Qo) % 3
po=[0.1 0.1 0.1];
L=acker(Theta', H',po)';
%% 控制器
% Qcx=ctrb(Theta(1:2,1:2), Delta_u(1:2));
% rank(Qcx) % 2
pcx=[0.2 0.3];
Kx=-acker(Theta(1:2,1:2), Delta_u(1:2),pcx);
Kd=-Gamma_u'*Gamma_d/(norm(Gamma_u,2)^2);

%% 仿真
span=0.2;
N=floor(span/T0)+1;

x=zeros(nx,N); x(:,1)=randn(2,1);
x_hat=zeros(nx,N);
d=zeros(1,N);
d_hat=zeros(1,N);
u=zeros(1,N);
y=zeros(1,N); y(1)=C*x(:,1);
h=0.1*T0^3*ones(1,N);
xi_hat=zeros(nx+1,N);

for k=1:N-1
    % 真实系统
    x(:,k+1)=Phi*x(:,k)+Gamma_u*u(k)+Gamma_d*d(k);
    d(k+1)=d(k)+h(k);
    if k==floor(N/2)
        d(k+1)=d(k+1)+0.1;
    end
    y(:,k+1)=C*x(:,k+1);
    % 估计器
    xi_hat(:,k+1)=Theta*xi_hat(:,k)+Delta_u*u(k)+Delta_h*h(k)+L*(y(k)-H*xi_hat(:,k));
    x_hat(:,k+1)=xi_hat(1:nx,k+1);
    d_hat(k+1)=xi_hat(end,k+1);
    u(k+1)=Kx*x_hat(:,k+1)+Kd*d_hat(:,k+1);
end

ex=x-x_hat;
ed=d-d_hat;

%% 画图
figure(); hold on; grid on;
subplot(3,1,1); plot(0:T0:span, x(1,:), 'LineWidth',1);
xlabel('time/s'),ylabel('x_1');
subplot(3,1,2); plot(0:T0:span, x(2,:), 'LineWidth',1);
xlabel('time/s'),ylabel('x_2');
subplot(3,1,3); plot(0:T0:span, d, 'LineWidth',1);
xlabel('time/s'),ylabel('d');
suptitle('状态与干扰变化');

figure(); hold on; grid on; 
subplot(3,1,1); plot(0:T0:span, ex(1,:), 'LineWidth',1);
xlabel('time/s'),ylabel('e_{x1}');
subplot(3,1,2); plot(0:T0:span, ex(2,:), 'LineWidth',1);
xlabel('time/s'),ylabel('e_{x2}');
subplot(3,1,3); plot(0:T0:span, ed, 'LineWidth',1);
xlabel('time/s'),ylabel('e_d');
suptitle('估计误差');

figure(); hold on; grid on;
plot(0:T0:span, y, 'LineWidth',1);
xlabel('time/s'),ylabel('y'); title('输出值');

figure(); hold on; grid on;
plot(0:T0:span, u, 'LineWidth',1);
xlabel('time/s'),ylabel('u'); title('控制量');

采样时间设为0.005s时的结果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
突加幅值为0.1的阶跃扰动后:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
控制效果很好。

参考文献

[1] 张文安,马剑,刑科新.基于广义扩张状态观测器的干扰不匹配离散系统状态反馈控制[J].控制与决策,2016,31(06):1128-1132.

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百把人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值