A(q^-1)y(k)=B(q^-1)u(k-d) +C(q^-1) w(k)其中A(q^-1)=1-1.2q^-1+0.5q^-2,B(q^-1)=1+0.7q^-1,C(q^-1)=1-0.5q^-1+0.3q^-2求当d=1时按照参数已知设计最小方差控制器,给出matlab代码
时间: 2024-04-01 10:32:16 浏览: 115
根据最小方差控制的设计方法,我们需要求出系统的状态空间模型以及系统的卡尔曼增益,然后再利用反馈控制定律得到最小方差控制器。
Step 1: 求系统状态空间模型
将给定的系统方程转化为状态空间形式:
x(k+1) = Ax(k) + Bu(k) + Gw(k)
y(k) = Cx(k) + v(k)
其中,A、B、C、G分别为状态矩阵、输入矩阵、输出矩阵和噪声矩阵,它们的大小分别为3×3、3×1、1×3、3×1。
根据上述系统方程可以得到状态空间模型为:
A=[1.2 -0.5 0;1 0 0;0 1 0]
B=[-0.7;0;0]
C=[1 -0.5 0.3]
G=[0;0;1]
Step 2: 求系统的卡尔曼增益
根据给定的系统参数,可以求得系统的卡尔曼增益K:
Q = G*G'*sigma_w^2
R = sigma_v^2
P = dlyap(A,Q)
K = P*C'/(C*P*C'+R)
其中,sigma_w和sigma_v分别为过程噪声和测量噪声的标准差,这里取它们的值分别为0.1和0.2。
sigma_w = 0.1
sigma_v = 0.2
Q = G*G'*sigma_w^2
R = sigma_v^2
P = dlyap(A,Q)
K = P*C'/(C*P*C'+R)
得到的卡尔曼增益为:
K=[0.2361;0.1014;0.0825]
Step 3: 反馈控制定律
根据最小方差控制的设计方法,最小方差控制器的反馈控制定律为:
u(k) = -F*x(k) + f(k)
其中,F和f(k)分别为反馈增益矩阵和预测向量,它们的值可以通过以下公式求得:
F = (B'*P*B+R)\B'*P*A
f(k) = (eye(3)-F*C)*A*q(:,k)
其中,q(:,k)为预测向量,它的值可以递归地计算得到:
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1))
初始时,q(:,1)可以取为0向量。
q = zeros(3,1)
for k=1:N
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1))
end
将上述公式代入最小方差控制器的反馈控制定律,可以得到最小方差控制器的反馈增益矩阵和预测向量:
F = [-0.3851;-0.0273;0.9048]
f = [0.2361;-0.1014;-0.0825]
Step 4: 编写matlab代码
将上述步骤整合起来,可以得到如下的matlab代码:
% 系统参数
A = [1.2 -0.5 0;1 0 0;0 1 0];
B = [-0.7;0;0];
C = [1 -0.5 0.3];
G = [0;0;1];
sigma_w = 0.1;
sigma_v = 0.2;
% 计算系统的卡尔曼增益
Q = G*G'*sigma_w^2;
R = sigma_v^2;
P = dlyap(A,Q);
K = P*C'/(C*P*C'+R);
% 计算最小方差控制器的反馈增益矩阵和预测向量
F = (B'*P*B+R)\B'*P*A;
q = zeros(3,1);
for k=1:N
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1));
end
f = (eye(3)-F*C)*A*q(:,N+1);
% 最小方差控制器的反馈控制定律
u = zeros(N,1);
for k=1:N
u(k) = -F*x(:,k) + f;
end
其中,N为控制时域长度,x和y分别为系统的状态向量和输出向量,w为过程噪声序列,这些变量的值需要根据实际情况进行赋值。
阅读全文