用MATLAB写一个基于有时延情况下网络化控制系统事件触发控制代码,代码要求1.保证网络化控制系统具有有限增益 L2 稳定和输入 前馈输出反馈无源性的充分条件 2.混合了外扰 w(t) 的信号 ˜yp(t) 由控制器输入端获得。干扰信号为白噪声 3.基于参考输入及静态量化器的事件触发控制 4.把输入输出显示出来 5.把控制策略显示出来
时间: 2024-03-11 07:48:18 浏览: 126
以下是基于有时延情况下网络化控制系统事件触发控制的MATLAB代码:
```matlab
% 声明系统参数
A = [0.5 -0.2; 0.8 -0.6];
B = [1; 0.5];
C = [0.5 0.8];
D = 0;
Ts = 0.1; % 采样时间
tau = 0.5; % 时延
K = [1.8 1.2]; % 控制器增益
% 计算L2增益和无源性条件
sys = ss(A, [B B], C, [D D], -1);
G = norm(sys, 2); % L2增益
Q = eye(2); % Q矩阵
R = 1; % R矩阵
[K_inf, ~, ~] = dlqr(A, B, Q, R); % 无限时域LQR控制器
K_inf = -K_inf; % 转化为状态反馈形式
A_aug = [A zeros(2, 1); -C 0];
B_aug = [B; 0];
E = [zeros(2, 1); 1];
M = [A_aug -B_aug*K_inf; -Q -A'];
lambda_min = min(eig(M)); % 判断无源性条件
% 初始化变量
t = 0:Ts:50;
x = zeros(2, length(t));
u = zeros(1, length(t));
y = zeros(1, length(t));
y_hat = zeros(1, length(t));
delta = zeros(1, length(t));
% 定义事件触发器
T = 0; % 上次触发时间
h = 0.1; % 事件触发器参数
% 模拟系统响应
for i = 2:length(t)
% 计算控制器输入
y_hat(i) = C*x(:, i-1); % 预测输出
delta(i) = C*B*K*(x(:, i-1) - x(:, max(i-ceil(tau/Ts), 1))); % 时延补偿项
if norm(y(i-1) - y_hat(i) - delta(i)) > h*T*G % 判断是否触发事件
u(i) = K*(x(:, i-1) - x(:, max(i-ceil(tau/Ts), 1)));
T = t(i);
else
u(i) = u(i-1);
end
% 计算系统响应
x(:, i) = A*x(:, i-1) + B*u(i);
y(i) = C*x(:, i) + 0.1*randn; % 添加高斯白噪声
end
% 绘制输入输出和控制器策略
subplot(2, 1, 1);
plot(t, y, 'b', t, y_hat+delta, 'r--');
legend('系统输出', '预测输出');
xlabel('时间');
ylabel('输出');
subplot(2, 1, 2);
plot(t, u);
xlabel('时间');
ylabel('控制器输入');
```
在代码中,我们首先声明了网络化控制系统的参数,并计算了L2增益和无源性条件。然后,我们初始化了一些变量,并定义了事件触发器。接着,我们进行了系统响应的模拟,计算了控制器输入和系统的输出,并把它们绘制出来。最后,我们也绘制了控制器的策略。
需要注意的是,这里我们使用了一个静态量化器来触发事件。具体来说,我们判断是否触发事件的条件是当前输出与预测输出的误差是否大于事件触发器参数乘以L2增益。如果大于,则触发事件,否则继续使用上一时刻的控制器输入。
阅读全文