1.状态反馈
1.1状态反馈原理
若一个控制系统的状态方程模型可以写成如下形式:
X
˙
=
A
X
+
B
u
Y
=
C
X
+
D
u
\dot X = AX+Bu\\ Y=CX+Du
X˙=AX+BuY=CX+Du
该模型可以描述为以下的框图形式:
在引入状态反馈之后,系统的输入信号 u = r − K X u=r-KX u=r−KX, K K K为反馈矩阵。
引入了状态反馈后方程可以变成以下形式:
X
˙
=
(
A
−
B
K
)
X
+
B
r
Y
=
(
C
−
D
K
)
X
+
D
r
\dot X = (A-BK)X+Br\\ Y = (C-DK)X+Dr
X˙=(A−BK)X+BrY=(C−DK)X+Dr
1.2.Gura-Bass算法
function K = bass_pp(A,B,P)
n = length(B);
a = poly(A);alpha = [a(n:-1:2),1];
b = poly(P);beta = [b(n:-1:2),1];
L = hankel(alpha);Q = ctrb(A,B);
K = (b(n+1:-1:2)-a(n+1:-1:2))*inv(L)*inv(Q);
end
2.状态反馈的增益补偿
3.实例
-
(1)建立系统状态空间模型
-
(2)判断系统能控性:
Matlab命令行输入:
>> A = [-768.4,-14.1;2336.4,-4]; >> B = [565;0]; >> M = ctrb(A,B);rank(M)
得到:
ans = 2
故系统是可控的。
-
(3)根据性能指标要求 ζ \zeta ζ和 t s t_s ts计算闭环极点位置得到 s 1 , 2 = − 80 + 81.6163 i , − 80 − 81.6163 i s_{1,2}=-80+81.6163i,-80-81.6163i s1,2=−80+81.6163i,−80−81.6163i。
-
(4)分别计算 K K K与增益 Z ˉ \bar Z Zˉ,绘图比较阶跃响应曲线:
clc,clear; A = [-768.4,-14.1;2336.4,-4]; B = [565;0];C = [0 1];D = [0]; P = [-80 + 81.6163i;-80 - 81.6163i]; t = [0:0.005:0.1]; sys1 = ss(A,B,C,D); y1 = step(sys1,t); K = bass_pp(A,B,P); sys2 = ss(A - B*K,B,C - D*K,D); y2 = step(sys2,t); Z_bar = Yanjie_sun(A,B,C,D,K); sys3 = ss(A - B*K,B*Z_bar,C - D*K,D); y3 = step(sys3,t); box on;hold on;grid on; plot(t,y1,'k-',t,y2,'r--',t,y3,'b.-'); xlabel('时间t');ylabel('响应'); title('不同阶跃响应对比'); legend('原模型','仅状态反馈后','增益补偿后'); %状态反馈函数 function K = bass_pp(A,B,P) n = length(B); a = poly(A);alpha = [a(n:-1:2),1]; b = poly(P);beta = [b(n:-1:2),1]; L = hankel(alpha);Q = ctrb(A,B); K = (b(n+1:-1:2)-a(n+1:-1:2))*inv(L)*inv(Q); end %增益调整函数 function Z_bar = Yanjie_sun(A,B,C,D,K) s = size(A,1); Z = [zeros(1,s) 1]; N = inv([A,B;C,D])*Z'; Nx = N(1:s);Nu = N(1+s); Z_bar = Nu + K*Nx; end
-
(5)结果