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

简介: 多速率感知环境下的状态观测器及其基于l2诱导范数的设计(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代码实现

相关文章
|
17天前
|
传感器 算法
ANC主动降噪理论及Matlab代码实现
ANC主动降噪理论及Matlab代码实现
|
10天前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
8 0
|
2月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
2月前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
2月前
|
算法 调度
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)
|
2月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
2月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
2月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
2月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)

热门文章

最新文章