多速率感知环境下的状态观测器及其基于l2诱导范数的设计(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

提升技术已成为采样系统设计的主要工具,但提升变换不能保证频率响应不变,故不适用于加权(函数)H∞设计。为此,针对采样控制系统的结构特点,将频率响应分为两个通道进行计算,采用经典的多速率感知环境下的状态观测器,既可以得到频率响应,又可以求得系统的L2诱导范数。方法简单直观,物理概念清楚。讨论了一类不确定时变时滞切换系统基于状态观测器的非脆弱H∞控制问题。首先,给出基于观测器的非脆弱H∞控制器形式,在同时限定时滞上界和时滞导数上界的条件下,利用单李雅普诺夫函数方法和凸组合技术,构造李雅普诺夫泛函和其对应的切换规则;其次,利用不等式引理对求导后的李雅普诺夫泛函进行不等式放缩进而消除不等式中的时变时滞项;再次,引入J函数得到满足H∞性能指标的非线性矩阵不等式,并利用Schur补引理将非线性矩阵不等式转化为等价的2个线性矩阵不等式,得到一类不确定变时滞切换系统存在基于状态观测器的H∞控制器且满足H∞性能指标的充分条件;最后,给出由2个子系统构成的一个切换系统,利用LMI工具箱进行数值例子仿真说明定理的有效性和实用性。

📚2 运行结果

 

 部分代码:

set(0,'DefaultAxesLinewidth',2,'DefaultLineLineWidth',2);
set(0,'defaultAxesFontSize',14);
set(0,'defaultAxesFontName','arial');
set(0,'defaultTextFontName','arial');

%close all
%clear

al1 = 0.01;
al2 = 0.01;

A = [0.95 0.5 0.2;-0.1 0.9 -0.2;0 0.1 0.85]; % Stable Plant
%A = [1.2 0.5 0.2;-0.1 1 -0.2;0 0.1 1]; % Unstable Plant

B = [1;1.5;2];
C = [1 1 0;0 1 1];
D = [1 0;0 1];

S0 = [1 0;0 1];
S1 = [0 0;0 0];
S2 = [1 0;0 0];
S3 = [0 0;0 1];
S4 = [1 0;0 0];
S5 = [0 0;0 0];

C0 = S0*C;
C1 = S1*C;
C2 = S2*C;
C3 = S3*C;
C4 = S4*C;
C5 = S5*C;
D0 = S0*D;
D1 = S1*D;
D2 = S2*D;
D3 = S3*D;
D4 = S4*D;
D5 = S5*D;

setlmis([])

[gamma2,n,sgamma2] = lmivar(1,[1 1]);

[P1,n,sP1] = lmivar(1,[3 1]);
[P2,n,sP2] = lmivar(1,[3 1]);
[P3,n,sP3] = lmivar(1,[3 1]);
[P4,n,sP4] = lmivar(1,[3 1]);
[P5,n,sP5] = lmivar(1,[3 1]);
[P0,n,sP0] = lmivar(1,[3 1]);

[Y1,n,sY1] = lmivar(2,[3 2]);
[Y2,n,sY2] = lmivar(2,[3 2]);
[Y3,n,sY3] = lmivar(2,[3 2]);
[Y4,n,sY4] = lmivar(2,[3 2]);
[Y5,n,sY5] = lmivar(2,[3 2]);
[Y0,n,sY0] = lmivar(2,[3 2]);


S1 = newlmi;
lmiterm([-S1 1 1 P1],1,1)
lmiterm([-S1 1 2 P1],1,A)
lmiterm([-S1 1 2 Y1],1,C1)
lmiterm([-S1 2 2 P0],1,1)
lmiterm([-S1 2 2 0],-1)
lmiterm([-S1 1 3 P1],1,B)
lmiterm([-S1 3 3 gamma2],1,eye(1,1))
lmiterm([-S1 1 4 Y1],1,D1)
lmiterm([-S1 4 4 gamma2],1,eye(2,2))
S2 = newlmi;
lmiterm([-S2 1 1 P2],1,1)
lmiterm([-S2 1 2 P2],1,A)
lmiterm([-S2 1 2 Y2],1,C2)
lmiterm([-S2 2 2 P1],1,1)
lmiterm([-S2 2 2 0],-1)
lmiterm([-S2 1 3 P2],1,B)
lmiterm([-S2 3 3 gamma2],1,eye(1,1))
lmiterm([-S2 1 4 Y2],1,D2)
lmiterm([-S2 4 4 gamma2],1,eye(2,2))
S3 = newlmi;
lmiterm([-S3 1 1 P3],1,1)
lmiterm([-S3 1 2 P3],1,A)
lmiterm([-S3 1 2 Y3],1,C3)
lmiterm([-S3 2 2 P2],1,1)
lmiterm([-S3 2 2 0],-1)
lmiterm([-S3 1 3 P3],1,B)
lmiterm([-S3 3 3 gamma2],1,eye(1,1))
lmiterm([-S3 1 4 Y3],1,D3)
lmiterm([-S3 4 4 gamma2],1,eye(2,2))
S4 = newlmi;
lmiterm([-S4 1 1 P4],1,1)
lmiterm([-S4 1 2 P4],1,A)
lmiterm([-S4 1 2 Y4],1,C4)
lmiterm([-S4 2 2 P3],1,1)
lmiterm([-S4 2 2 0],-1)
lmiterm([-S4 1 3 P4],1,B)
lmiterm([-S4 3 3 gamma2],1,eye(1,1))
lmiterm([-S4 1 4 Y4],1,D4)
lmiterm([-S4 4 4 gamma2],1,eye(2,2))
S5 = newlmi;
lmiterm([-S5 1 1 P5],1,1)
lmiterm([-S5 1 2 P5],1,A)
lmiterm([-S5 1 2 Y5],1,C5)
lmiterm([-S5 2 2 P4],1,1)
lmiterm([-S5 2 2 0],-1)
lmiterm([-S5 1 3 P5],1,B)
lmiterm([-S5 3 3 gamma2],1,eye(1,1))
lmiterm([-S5 1 4 Y5],1,D5)
lmiterm([-S5 4 4 gamma2],1,eye(2,2))
S6 = newlmi;
lmiterm([-S6 1 1 P0],1,1)
lmiterm([-S6 1 2 P0],1,A)
lmiterm([-S6 1 2 Y0],1,C0)
lmiterm([-S6 2 2 P5],1,1)
lmiterm([-S6 2 2 0],-1)
lmiterm([-S6 1 3 P0],1,B)
lmiterm([-S6 3 3 gamma2],1,eye(1,1))
lmiterm([-S6 1 4 Y0],1,D0)
lmiterm([-S6 4 4 gamma2],1,eye(2,2))

LMIs = getlmis;
c = [1 zeros(1,72)];

[copt,xopt] = mincx(LMIs,c);
P0opt = dec2mat(LMIs,xopt,P0);
Y0opt = dec2mat(LMIs,xopt,Y0);
P1opt = dec2mat(LMIs,xopt,P1);
Y1opt = dec2mat(LMIs,xopt,Y1);
P2opt = dec2mat(LMIs,xopt,P2);
Y2opt = dec2mat(LMIs,xopt,Y2);
P3opt = dec2mat(LMIs,xopt,P3);
Y3opt = dec2mat(LMIs,xopt,Y3);
P4opt = dec2mat(LMIs,xopt,P4);
Y4opt = dec2mat(LMIs,xopt,Y4);
P5opt = dec2mat(LMIs,xopt,P5);
Y5opt = dec2mat(LMIs,xopt,Y5);

L0 = -P0opt^(-1)*Y0opt;
L1 = -P1opt^(-1)*Y1opt;
L2 = -P2opt^(-1)*Y2opt;
L3 = -P3opt^(-1)*Y3opt;
L4 = -P4opt^(-1)*Y4opt;
L5 = -P5opt^(-1)*Y5opt;

x(1,1) = 0;
x(2,1) = 0;
x(3,1) = 0;
xp(1,1) = 0;
xp(2,1) = 0;
xp(3,1) = 0;

Ts = 0.01;
t = 0:1:600;
a = 0:0.01:2*pi;
u = sin(a);

u_proposed = 0;
y_proposed = 0;
uy_proposed_sum = 0;
e_proposed_sum = 0;

for k = 1:600;
    if k <= 600
    u_proposed = al1*randn;
    y_proposed = al2*[randn;randn];
    else
        u_proposed = 0;
        y_proposed = 0;
    end
    xp(:,k+1) = A * xp(:,k) + B * u(:,k) + B *u_proposed;
    yp(:,k) = C * xp(:,k) + D * y_proposed ;
    if rem(k,6) == 0
    x(:,k+1) = (A - L0*C) * x(:,k) + B * u(:,k) + L0*yp(:,k);
    y(:,k) = C * x(:,k);
    elseif rem(k,6) == 1
    x(:,k+1) = (A - L1*C) * x(:,k) + B * u(:,k) + L1*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 2
    x(:,k+1) = (A - L2*C) * x(:,k) + B * u(:,k) + L2*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 3
    x(:,k+1) = (A - L3*C) * x(:,k) + B * u(:,k) + L3*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 4
    x(:,k+1) = (A - L4*C) * x(:,k) + B * u(:,k) + L4*yp(:,k);
    y(:,k) = C * x(:,k);
        elseif rem(k,6) == 5
    x(:,k+1) = (A - L5*C) * x(:,k) + B * u(:,k) + L5*yp(:,k);
    y(:,k) = C * x(:,k);
    end
    
    uy_proposed_sum = uy_proposed_sum + u_proposed^2 + norm(y_proposed)^2; 
    e_proposed_sum = e_proposed_sum + norm(x(:,k)-xp(:,k))^2; 
end

figure(1),stairs(t,xp(1,:),'k','LineStyle','--'),hold on,stairs(t,xp(2,:),'k','LineStyle','--'),hold on,stairs(t,xp(3,:),'k','LineStyle','--')
figure(1),stairs(t,x(1,:),'k'),hold on,stairs(t,x(2,:),'k'),hold on,stairs(t,x(3,:),'k')


ylabel('x,x_{ob}')
xlabel('k')

%figure(4),stairs(t,xp(1,:)-x(1,:),'k'),hold on,stairs(t,xp(2,:)-x(2,:),'k'),hold on,stairs(t,xp(3,:)-x(3,:),'k'),axis([0 500 -5 5]);
%
%ylabel('e')
%xlabel('k')

figure(2) %z,zQ1
subplot(3,1,1);
hold on; %grid on
stairs(t,xp(1,:)-x(1,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_1')
box on
%
%figure(12) %v1
subplot(3,1,2);
hold on; %grid on
stairs(t,xp(2,:)-x(2,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_2')
box on

subplot(3,1,3);
hold on; %grid on
stairs(t,xp(3,:)-x(3,:),'k','LineWidth',0.5);
axis([0 500 -0.5 0.5])
%set(gca,'fontsize',14);
xlabel('k')
ylabel('e_3')
box on


gamma_proposed = sqrt(copt)

gamma_proposed_sim = sqrt(e_proposed_sum/uy_proposed_sum)

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]刘彦文,王广雄,何朕.采样系统的频率响应和L_2诱导范数[J].控制与决策,2005(10):1133-1136.DOI:10.13195/j.cd.2005.10.55.liuyw.011.

[2]Hiroshi Okajima (2023) State Observer under Multi-rate Sensing Environment and Its Design using l2-Induced Norm [Source Code]. 

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值