关于线性连续系统转换到离散系统的方法
虽然通常在分析设计控制器时,总是针对连续系统设计的。但是若要将其在实际工程中应用起来,则免不了需要将它转换为离散的形式。本文主要对连续系统转换到离散系统的几种方法进行了汇总,便于之后的翻阅。
参考资料:
- 状态空间方程的离散化 - 知乎 (zhihu.com)
- (55条消息) 如何将连续系统状态空间方程离散化_Let’sCode的博客-CSDN博客_连续状态空间方程离散化
- Optimal State Estimation Kalman, H Infinity, and Nonlinear Approaches (Dan Simon)
1.传递函数
线性连续系统的一种重要的表示形式为传递函数。将传递函数进行离散化的方法就是z变换,将传递函数中的"s"变量全部用"z"替换即可。
G
(
s
)
⟶
G
(
z
)
G(s) \longrightarrow G(z)
G(s)⟶G(z)
常见的三种"s"与"z"的对应关系分别如下所示,其中
T
T
T表示采样时间。
-
前项差分变换
z = 1 + T s (1) z=1+Ts \tag{1} z=1+Ts(1) -
后项差分变换
z = 1 1 − T s (2) z=\frac{1}{1-Ts} \tag{2} z=1−Ts1(2) -
双线性变换(Tustin变换)
z = 1 + T s / 2 1 − T s / 2 (3) z=\frac{1+Ts/2}{1-Ts/2} \tag{3} z=1−Ts/21+Ts/2(3)
2.状态空间方程
线性连续系统的另一种重要的表示形式为状态空间方程。一般来说,将状态空间方程进行离散化的方法有两种,分别为欧拉法和零阶保持法。下面分别进行介绍。
{
x
˙
=
A
x
+
B
u
y
=
C
x
+
D
u
⟶
{
x
(
k
+
1
)
=
A
z
x
(
k
)
+
B
z
u
(
k
)
y
(
k
)
=
C
z
x
(
k
)
+
D
z
u
(
k
)
\begin{cases} \dot{x}=Ax+Bu \\ y=Cx+Du \end{cases} \longrightarrow \begin{cases} x(k+1)=A_zx(k)+B_zu(k) \\ y(k)=C_zx(k)+D_zu(k) \end{cases}
{x˙=Ax+Buy=Cx+Du⟶{x(k+1)=Azx(k)+Bzu(k)y(k)=Czx(k)+Dzu(k)
2.1.欧拉法
欧拉法利用了泰勒展开式的一阶近似,将状态导数表示为了如下形式
x
˙
=
x
(
k
+
1
)
−
x
(
k
)
T
(4)
\dot{x}=\frac{x(k+1)-x(k)}{T} \tag{4}
x˙=Tx(k+1)−x(k)(4)
将上式代入状态空间方程,可以得到离散化状态空间方程
{
x
(
k
+
1
)
=
A
z
x
(
k
)
+
B
z
u
(
k
)
y
(
k
)
=
C
z
x
(
k
)
+
D
z
u
(
k
)
(5)
\begin{cases} x(k+1)=A_zx(k)+B_zu(k) \\ y(k)=C_zx(k)+D_zu(k) \end{cases} \tag{5}
{x(k+1)=Azx(k)+Bzu(k)y(k)=Czx(k)+Dzu(k)(5)
上式中,
A
z
=
I
+
T
A
,
B
z
=
T
B
,
C
z
=
C
,
D
z
=
D
A_z=I+TA,B_z=TB,C_z=C,D_z=D
Az=I+TA,Bz=TB,Cz=C,Dz=D。
2.2.零阶保持法
我们知道,线性系统的状态空间方程的解可以表示为
x
(
t
)
=
e
A
(
t
−
t
0
)
x
(
t
0
)
+
∫
t
0
t
e
A
(
t
−
τ
)
B
u
(
τ
)
d
τ
(6)
x(t)=e^{A(t-t_0)}x(t_0)+\int_{t_0}^t{e^{A(t-\tau)}Bu(\tau)d\tau} \tag{6}
x(t)=eA(t−t0)x(t0)+∫t0teA(t−τ)Bu(τ)dτ(6)
上式中,
e
A
(
t
−
t
0
)
e^{A(t-t_0)}
eA(t−t0)表示系统的状态转移矩阵,
e
A
e^A
eA的形式称为矩阵指数。
定义时间间隔为
T
=
t
k
+
1
−
t
k
T=t_{k+1}-t_{k}
T=tk+1−tk,且假设在时间间隔内
A
(
t
)
,
B
(
t
)
,
u
(
t
)
A(t),B(t),u(t)
A(t),B(t),u(t)保持不变。则式(6)可以写成
x
(
t
k
+
1
)
=
e
A
T
x
(
t
k
)
+
∫
0
T
e
A
(
T
−
τ
)
d
τ
B
u
(
t
k
)
=
e
A
T
x
(
t
k
)
+
e
A
T
∫
0
T
e
−
A
τ
d
τ
B
u
(
t
k
)
(7)
\begin{aligned} x(t_{k+1})&=e^{AT}x(t_k)+\int_{0}^T{e^{A(T-\tau)}d\tau}Bu(t_k) \\ &=e^{AT}x(t_k)+e^{AT}\int_{0}^T{e^{-A\tau}d\tau}Bu(t_k) \end{aligned} \tag{7}
x(tk+1)=eATx(tk)+∫0TeA(T−τ)dτBu(tk)=eATx(tk)+eAT∫0Te−AτdτBu(tk)(7)
由式(7)可以确定,
A
z
=
e
A
T
,
B
z
=
e
A
T
∫
0
T
e
−
A
τ
d
τ
B
A_z=e^{AT},B_z=e^{AT}\int_{0}^T{e^{-A\tau}d\tau}B
Az=eAT,Bz=eAT∫0Te−AτdτB。
在计算矩阵
B
z
B_z
Bz时,由于存在矩阵指数的积分运算,在实际使用时可能会比较麻烦。当矩阵
A
A
A可逆时,矩阵指数的积分运算可以进行简化,如式(8)所示。具体推导过程详见Optimal State Estimation Kalman, H Infinity, and Nonlinear Approaches。
∫
0
T
e
−
A
τ
d
τ
=
[
I
−
e
−
A
T
]
A
−
1
(8)
\int_{0}^T{e^{-A\tau}d\tau}=[I-e^{-AT}]A^{-1} \tag{8}
∫0Te−Aτdτ=[I−e−AT]A−1(8)
以上介绍的两种离散化方法中,零阶保持法在精确度和稳定性方面优于欧拉法。