Luenberger Observer
一句话概括:
Luenberger Observer 是一种针对线性动态系统的状态估计器。
当系统内部状态 $x(t)$ 无法全部测量时,我们利用已知输入 $u(t)$、可测输出 $y(t)$ 和系统模型,构造一个“模拟系统”,并通过输出误差不断修正它,使估计状态 $\hat{x}(t)$ 收敛到真实状态 $x(t)$。
问题从哪里来?
在控制系统中,我们经常希望根据系统状态来设计控制律。
比如经典状态反馈:
$$
u(t) = -Kx(t)
$$
其中:
- $x(t)$ 是系统状态;
- $u(t)$ 是控制输入;
- $K$ 是反馈增益矩阵。
如果我们知道完整状态 $x(t)$,很多控制问题会变得很清楚。
但是现实中,很多状态无法直接测量。
例如:
- 电机系统中,位置可以测,速度未必方便测;
- 加速器束流系统中,某些束流相空间变量无法直接实时测量;
- 飞行器中,有些姿态角速度需要估计;
- 电路系统中,有些电容电压、电感电流无法直接测。
于是问题来了:
如果我们只能测到输出 $y(t)$,能不能估计出完整状态 $x(t)$?
Luenberger Observer 就是为这个问题设计的。
线性系统的基本模型
先考虑连续时间线性时不变系统:
$$
\dot{x}(t) = Ax(t) + Bu(t)
$$
$$
y(t) = Cx(t)
$$
其中:
- $x(t) \in \mathbb{R}^n$:系统状态;
- $u(t) \in \mathbb{R}^m$:输入;
- $y(t) \in \mathbb{R}^p$:输出;
- $A \in \mathbb{R}^{n \times n}$:系统矩阵;
- $B \in \mathbb{R}^{n \times m}$:输入矩阵;
- $C \in \mathbb{R}^{p \times n}$:输出矩阵。
暂时先不考虑直接传递项 $D u(t)$,即:
$$
y(t) = Cx(t)
$$
如果有 $D$,模型就是:
$$
y(t) = Cx(t) + Du(t)
$$
这并不会改变核心思想。
最天真的想法:复制一个系统
既然系统模型是:
$$
\dot{x} = Ax + Bu
$$
那我们可以构造一个“估计系统”:
$$
\dot{\hat{x}} = A\hat{x} + Bu
$$
其中 $\hat{x}$ 是对真实状态 $x$ 的估计。
如果初始值刚好相同:
$$
\hat{x}(0) = x(0)
$$
那么显然:
$$
\hat{x}(t) = x(t)
$$
但现实中我们通常不知道 $x(0)$,所以 $\hat{x}(0)$ 往往不等于 $x(0)$。
定义估计误差:
$$
e(t) = x(t) - \hat{x}(t)
$$
真实系统:
$$
\dot{x} = Ax + Bu
$$
估计系统:
$$
\dot{\hat{x}} = A\hat{x} + Bu
$$
所以误差动态为:
$$
\dot{e}
= \dot{x} - \dot{\hat{x}}
$$
代入:
$$
\dot{e}
= (Ax + Bu) - (A\hat{x} + Bu)
$$
得到:
$$
\dot{e} = A(x - \hat{x})
$$
因此:
$$
\dot{e} = Ae
$$
误差是否会衰减,完全取决于 $A$ 的特征值。
如果 $A$ 本身稳定,那么误差会自然衰减。
但如果系统本身不稳定,误差会发散。
这说明:
仅仅复制一个系统是不够的。
我们需要利用测量输出 $y$ 来不断纠正估计值。
输出误差:我们到底能知道什么?
真实输出是:
$$
y = Cx
$$
估计输出是:
$$
\hat{y} = C\hat{x}
$$
两者之差为:
$$
y - \hat{y}
= Cx - C\hat{x}
$$
即:
$$
y - \hat{y} = C(x - \hat{x})
$$
因此:
$$
y - \hat{y} = Ce
$$
这个量非常关键。
虽然我们不知道完整的误差 $e = x - \hat{x}$,但我们能通过输出差看到它的一部分:
$$
y - C\hat{x}
$$
这个量告诉我们:
当前估计状态产生的输出,与真实测量输出之间相差多少。
如果这个差不为零,说明估计状态有问题。
于是自然想到:
能不能把输出误差反馈回估计系统,用来修正 $\hat{x}$?
这就是 Luenberger Observer 的核心思想。
Luenberger Observer 的构造
我们在简单复制系统的基础上加入修正项:
$$
\dot{\hat{x}} = A\hat{x} + Bu + L(y - \hat{y})
$$
其中:
$$
\hat{y} = C\hat{x}
$$
所以:
$$
\dot{\hat{x}} = A\hat{x} + Bu + L(y - C\hat{x})
$$
这就是连续时间 Luenberger Observer:
$$
\boxed{
\dot{\hat{x}} = A\hat{x} + Bu + L(y - C\hat{x})
}
$$
其中 $L$ 称为 observer gain,观测器增益矩阵。
维度为:
$$
L \in \mathbb{R}^{n \times p}
$$
因为:
- $y - C\hat{x} \in \mathbb{R}^{p}$;
- $\dot{\hat{x}} \in \mathbb{R}^{n}$;
所以 $L$ 要把输出误差映射成状态修正量。
误差动力学推导
现在我们推导估计误差 $e = x - \hat{x}$ 的动态。
真实系统:
$$
\dot{x} = Ax + Bu
$$
观测器:
$$
\dot{\hat{x}}
= A\hat{x} + Bu + L(y - C\hat{x})
$$
因为:
$$
y = Cx
$$
所以:
$$
\dot{\hat{x}}
= A\hat{x} + Bu + L(Cx - C\hat{x})
$$
即:
$$
\dot{\hat{x}}
= A\hat{x} + Bu + LC(x - \hat{x})
$$
也就是:
$$
\dot{\hat{x}}
= A\hat{x} + Bu + LCe
$$
误差为:
$$
e = x - \hat{x}
$$
所以:
$$
\dot{e} = \dot{x} - \dot{\hat{x}}
$$
代入:
$$
\dot{e}
= (Ax + Bu)
(A\hat{x} + Bu + LC(x - \hat{x}))
$$
展开:
$$
\dot{e}
= Ax + Bu - A\hat{x} - Bu - LC(x - \hat{x})
$$
消去 $Bu$:
$$
\dot{e}
= A(x - \hat{x}) - LC(x - \hat{x})
$$
所以:
$$
\dot{e}
= (A - LC)(x - \hat{x})
$$
即:
$$
\boxed{
\dot{e} = (A - LC)e
}
$$
这就是 Luenberger Observer 最核心的公式。
关键目标:让误差收敛到零
我们希望:
$$
\lim_{t \to \infty} e(t) = 0
$$
也就是说:
$$
\lim_{t \to \infty} \hat{x}(t) = x(t)
$$
误差系统是:
$$
\dot{e} = (A - LC)e
$$
其解为:
$$
e(t) = e^{(A - LC)t} e(0)
$$
因此,只要矩阵 $A - LC$ 是稳定的,误差就会收敛。
连续时间系统中,稳定意味着:
$$
\operatorname{Re}(\lambda_i(A - LC)) < 0
$$
也就是说,$A - LC$ 的所有特征值都必须在复平面的左半平面。
所以设计 observer 的问题变成:
选择 $L$,使得 $A - LC$ 的特征值位于我们希望的位置。
这与状态反馈控制很像。
状态反馈中,我们选择 $K$,使:
$$
A - BK
$$
稳定。
观测器中,我们选择 $L$,使:
$$
A - LC
$$
稳定。
二者具有对偶关系。
一个直观类比
状态反馈控制:
$$
u = -Kx
$$
闭环系统:
$$
\dot{x} = (A - BK)x
$$
通过 $K$ 改变系统极点。
Luenberger Observer:
$$
\dot{\hat{x}} = A\hat{x} + Bu + L(y - C\hat{x})
$$
误差系统:
$$
\dot{e} = (A - LC)e
$$
通过 $L$ 改变误差系统极点。
所以:
| 问题 | 控制器 | 观测器 |
|---|---|---|
| 目标 | 让状态稳定 | 让估计误差稳定 |
| 设计矩阵 | $K$ | $L$ |
| 闭环矩阵 | $A - BK$ | $A - LC$ |
| 需要条件 | $(A,B)$ 可控 | $(A,C)$ 可观 |
什么是可观测性?
我们不能凭空估计状态。
如果某些状态完全不会影响输出 $y$,那无论观测器怎么设计,都不可能估计它。
例如:
$$
\dot{x}_1 = x_1
$$
$$
\dot{x}_2 = x_2
$$
$$
y = x_1
$$
这里 $x_2$ 完全不影响输出。
你只能看到 $x_1$,永远看不到 $x_2$ 的任何痕迹。
因此 $x_2$ 不可观测。
可观测矩阵
对于系统:
$$
\dot{x} = Ax
$$
$$
y = Cx
$$
输出的导数包含更多状态信息。
首先:
$$
y = Cx
$$
一阶导数:
$$
\dot{y} = C\dot{x} = CAx
$$
二阶导数:
$$
\ddot{y} = CA\dot{x} = CA^2x
$$
继续下去:
$$
y^{(k)} = CA^k x
$$
如果我们能从:
$$
y, \dot{y}, \ddot{y}, \cdots, y^{(n-1)}
$$
中恢复出 $x$,系统就是可观测的。
把这些方程堆叠起来:
$$
\begin{bmatrix}
y \
\dot{y} \
\ddot{y} \
\vdots \
y^{(n-1)}
\end{bmatrix}
\begin{bmatrix}
C \
CA \
CA^2 \
\vdots \
CA^{n-1}
\end{bmatrix}
x
$$
定义可观测矩阵:
$$
\mathcal{O}
\begin{bmatrix}
C \
CA \
CA^2 \
\vdots \
CA^{n-1}
\end{bmatrix}
$$
如果:
$$
\operatorname{rank}(\mathcal{O}) = n
$$
那么系统完全可观测。
也就是说:
$$
\boxed{
(A,C) \text{ observable}
\iff
\operatorname{rank}
\begin{bmatrix}
C \
CA \
\vdots \
CA^{n-1}
\end{bmatrix}
= n
}
$$
只有在这个条件满足时,我们才能任意配置 $A-LC$ 的极点。
为什么 $L$ 能改变误差系统的极点?
误差系统是:
$$
\dot{e} = (A - LC)e
$$
我们希望配置:
$$
\lambda(A - LC)
$$
这里 $L$ 的作用类似控制增益。
使用对偶性可以更清楚地看。
矩阵 $A - LC$ 的转置为:
$$
(A - LC)^T = A^T - C^T L^T
$$
令:
$$
\tilde{A} = A^T
$$
$$
\tilde{B} = C^T
$$
$$
\tilde{K} = L^T
$$
那么:
$$
A^T - C^T L^T
\tilde{A} - \tilde{B}\tilde{K}
$$
这就是一个状态反馈极点配置问题。
因此观测器极点配置问题:
$$
A - LC
$$
等价于控制问题:
$$
A^T - C^T L^T
$$
所以只要 $(A^T, C^T)$ 可控,就能配置极点。
而:
$$
(A^T, C^T) \text{ controllable}
\iff
(A,C) \text{ observable}
$$
这就是控制与观测的对偶性。
一个二阶例子:从位置估计速度
考虑一个最经典的二阶系统。
状态:
$$
x =
\begin{bmatrix}
x_1 \
x_2
\end{bmatrix}
$$
其中:
- $x_1$ 是位置;
- $x_2$ 是速度。
系统为:
$$
\dot{x}_1 = x_2
$$
$$
\dot{x}_2 = u
$$
写成矩阵:
$$
\dot{x}
\begin{bmatrix}
0 & 1 \
0 & 0
\end{bmatrix}
x
+
\begin{bmatrix}
0 \
1
\end{bmatrix}
u
$$
输出只测位置:
$$
y = x_1
$$
因此:
$$
C =
\begin{bmatrix}
1 & 0
\end{bmatrix}
$$
也就是:
$$
A =
\begin{bmatrix}
0 & 1 \
0 & 0
\end{bmatrix},
\quad
B =
\begin{bmatrix}
0 \
1
\end{bmatrix},
\quad
C =
\begin{bmatrix}
1 & 0
\end{bmatrix}
$$
我们只能测位置 $x_1$,不能直接测速度 $x_2$。
目标:
通过位置测量 $y$ 和输入 $u$,估计速度 $x_2$。
检查可观测性
可观测矩阵为:
$$
\mathcal{O}
\begin{bmatrix}
C \
CA
\end{bmatrix}
$$
计算:
$$
C =
\begin{bmatrix}
1 & 0
\end{bmatrix}
$$
$$
CA =
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
0 & 1 \
0 & 0
\end{bmatrix}
\begin{bmatrix}
0 & 1
\end{bmatrix}
$$
所以:
$$
\mathcal{O}
\begin{bmatrix}
1 & 0 \
0 & 1
\end{bmatrix}
$$
显然:
$$
\operatorname{rank}(\mathcal{O}) = 2
$$
所以系统可观测。
这说明:
虽然速度 $x_2$ 没有直接测量,但它会影响位置变化,因此可以从位置历史中估计出来。
构造观测器
设:
$$
L =
\begin{bmatrix}
l_1 \
l_2
\end{bmatrix}
$$
观测器为:
$$
\dot{\hat{x}}
A\hat{x} + Bu + L(y - C\hat{x})
$$
展开:
$$
\begin{bmatrix}
\dot{\hat{x}}_1 \
\dot{\hat{x}}_2
\end{bmatrix}
\begin{bmatrix}
0 & 1 \
0 & 0
\end{bmatrix}
\begin{bmatrix}
\hat{x}_1 \
\hat{x}_2
\end{bmatrix}
+
\begin{bmatrix}
0 \
1
\end{bmatrix}
u
+
\begin{bmatrix}
l_1 \
l_2
\end{bmatrix}
(y - \hat{x}_1)
$$
因此:
$$
\dot{\hat{x}}_1
\hat{x}_2 + l_1(y - \hat{x}_1)
$$
$$
\dot{\hat{x}}_2
u + l_2(y - \hat{x}_1)
$$
这非常直观。
- 如果估计位置 $\hat{x}_1$ 比真实测量 $y$ 小,那么 $y-\hat{x}_1>0$;
- 观测器会调整位置估计和速度估计;
- $l_1$ 决定位置估计修正强度;
- $l_2$ 决定速度估计修正强度。
误差系统
误差系统为:
$$
\dot{e} = (A - LC)e
$$
计算:
$$
LC
\begin{bmatrix}
l_1 \
l_2
\end{bmatrix}
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
l_1 & 0 \
l_2 & 0
\end{bmatrix}
$$
因此:
$$
A - LC
\begin{bmatrix}
0 & 1 \
0 & 0
\end{bmatrix}
\begin{bmatrix}
l_1 & 0 \
l_2 & 0
\end{bmatrix}
$$
得到:
$$
A - LC
\begin{bmatrix}
-l_1 & 1 \
-l_2 & 0
\end{bmatrix}
$$
其特征方程为:
$$
\det(sI - (A-LC)) = 0
$$
先写:
$$
sI - (A-LC)
\begin{bmatrix}
s & 0 \
0 & s
\end{bmatrix}
\begin{bmatrix}
-l_1 & 1 \
-l_2 & 0
\end{bmatrix}
$$
所以:
$$
sI - (A-LC)
\begin{bmatrix}
s+l_1 & -1 \
l_2 & s
\end{bmatrix}
$$
行列式:
$$
\det
\begin{bmatrix}
s+l_1 & -1 \
l_2 & s
\end{bmatrix}
(s+l_1)s - (-1)l_2
$$
即:
$$
s^2 + l_1s + l_2
$$
所以观测误差特征方程为:
$$
\boxed{
s^2 + l_1s + l_2 = 0
}
$$
如果我们希望观测器极点为:
$$
s = -\alpha, \quad s = -\beta
$$
则目标特征多项式为:
$$
(s+\alpha)(s+\beta)
s^2 + (\alpha+\beta)s + \alpha\beta
$$
比较系数:
$$
l_1 = \alpha + \beta
$$
$$
l_2 = \alpha\beta
$$
例如希望极点在:
$$
-5,\ -6
$$
则:
$$
l_1 = 11
$$
$$
l_2 = 30
$$
于是:
$$
L =
\begin{bmatrix}
11 \
30
\end{bmatrix}
$$
观测器为:
$$
\dot{\hat{x}}_1
\hat{x}_2 + 11(y-\hat{x}_1)
$$
$$
\dot{\hat{x}}_2
u + 30(y-\hat{x}_1)
$$
估计误差将按照极点 $-5$ 和 $-6$ 对应的速度衰减。
极点应该放在哪里?
一个常见经验是:
观测器极点通常比控制器极点快 2 到 10 倍。
原因是:
- 如果观测器太慢,状态估计滞后,控制器会用错误状态;
- 如果观测器太快,会放大测量噪声;
- 太快的极点会让 $L$ 很大,导致噪声敏感和数值问题。
假设控制闭环极点大约在:
$$
-1,\ -2
$$
可以把观测器极点放在:
$$
-5,\ -6
$$
或者:
$$
-10,\ -12
$$
但不是越快越好。
噪声问题:为什么不能把 $L$ 取得无限大?
观测器修正项是:
$$
L(y - C\hat{x})
$$
如果测量中有噪声:
$$
y = Cx + v
$$
其中 $v$ 是测量噪声。
那么修正项变成:
$$
L(Cx + v - C\hat{x})
$$
即:
$$
LC(x-\hat{x}) + Lv
$$
噪声会被 $L$ 放大。
如果 $L$ 很大,那么即使 $v$ 很小,$Lv$ 也可能很大。
所以:
- 大 $L$:收敛快,但噪声敏感;
- 小 $L$:噪声不敏感,但收敛慢。
这就是 observer 设计的基本权衡。
如果要系统地处理噪声,通常会进一步引入 Kalman Filter。
可以粗略理解为:
Luenberger Observer 是确定性状态观测器;
Kalman Filter 是在随机噪声假设下最优选择 $L$ 的观测器。
离散时间 Luenberger Observer
很多实际控制系统是数字控制,因此需要离散时间形式。
离散系统:
$$
x_{k+1} = Ax_k + Bu_k
$$
$$
y_k = Cx_k
$$
构造观测器:
$$
\boxed{
\hat{x}_{k+1}
A\hat{x}_k + Bu_k + L(y_k - C\hat{x}_k)
}
$$
误差:
$$
e_k = x_k - \hat{x}_k
$$
则:
$$
e_{k+1}
x_{k+1} - \hat{x}_{k+1}
$$
代入:
$$
e_{k+1}
(Ax_k + Bu_k)
(A\hat{x}_k + Bu_k + L(Cx_k - C\hat{x}_k))
$$
得到:
$$
e_{k+1}
(A - LC)(x_k-\hat{x}_k)
$$
即:
$$
\boxed{
e_{k+1} = (A - LC)e_k
}
$$
离散时间稳定条件为:
$$
|\lambda_i(A - LC)| < 1
$$
也就是说,所有观测器误差极点必须在单位圆内。
带直接传递项 $D$ 的情况
如果系统为:
$$
\dot{x} = Ax + Bu
$$
$$
y = Cx + Du
$$
那么估计输出为:
$$
\hat{y} = C\hat{x} + Du
$$
观测器为:
$$
\dot{\hat{x}}
A\hat{x} + Bu + L(y - \hat{y})
$$
也就是:
$$
\boxed{
\dot{\hat{x}}
A\hat{x} + Bu + L(y - C\hat{x} - Du)
}
$$
误差动态仍然是:
$$
\dot{e} = (A - LC)e
$$
因为真实输出和估计输出中的 $Du$ 会相互抵消。
与状态反馈组合:Observer-Based Control
如果我们本来希望用状态反馈:
$$
u = -Kx
$$
但测不到 $x$,则可以使用估计状态:
$$
u = -K\hat{x}
$$
于是系统变成:
$$
\dot{x} = Ax + Bu
$$
$$
u = -K\hat{x}
$$
观测器:
$$
\dot{\hat{x}} = A\hat{x} + Bu + L(y - C\hat{x})
$$
这就是基于观测器的控制。
一个重要结论叫 分离原理。
分离原理
对于线性系统,如果:
- $(A,B)$ 可控;
- $(A,C)$ 可观;
那么可以分别设计:
- 状态反馈增益 $K$,使 $A-BK$ 稳定;
- 观测器增益 $L$,使 $A-LC$ 稳定。
二者可以分开设计。
闭环整体系统的极点由两部分组成:
$$
\lambda(A-BK)
\quad \text{和} \quad
\lambda(A-LC)
$$
因此控制器和观测器可以相对独立地调参。
分离原理的简单推导
系统:
$$
\dot{x} = Ax + Bu
$$
控制律:
$$
u = -K\hat{x}
$$
所以:
$$
\dot{x} = Ax - BK\hat{x}
$$
由于:
$$
e = x - \hat{x}
$$
所以:
$$
\hat{x} = x - e
$$
代入:
$$
\dot{x}
Ax - BK(x-e)
$$
得到:
$$
\dot{x}
(A-BK)x + BKe
$$
另一方面,误差动态仍然是:
$$
\dot{e} = (A-LC)e
$$
于是组合系统为:
$$
\frac{d}{dt}
\begin{bmatrix}
x \
e
\end{bmatrix}
\begin{bmatrix}
A-BK & BK \
0 & A-LC
\end{bmatrix}
\begin{bmatrix}
x \
e
\end{bmatrix}
$$
这个矩阵是上三角块矩阵。
因此整体特征值为:
$$
\lambda(A-BK)
\cup
\lambda(A-LC)
$$
这说明控制极点和观测器极点可以分开设计。
Luenberger Observer 的本质
从本质上看,Luenberger Observer 做了两件事:
第一,模型预测
如果没有测量误差修正,它只是根据系统模型往前推:
$$
A\hat{x} + Bu
$$
这叫 model prediction。
第二,输出误差校正
它计算:
$$
y - C\hat{x}
$$
然后用:
$$
L(y - C\hat{x})
$$
修正估计状态。
所以可以把它理解成:
$$
\text{估计更新}
\text{模型预测}
+
\text{测量校正}
$$
这和 Kalman Filter 的结构非常像。
为什么不是直接用 $C^{-1}y$?
有人可能会问:
既然:
$$
y = Cx
$$
那能不能直接:
$$
x = C^{-1}y
$$
通常不行。
原因有三点。
第一,$C$ 往往不是方阵
如果状态维度 $n=4$,输出只有 $p=1$,那么:
$$
C \in \mathbb{R}^{1 \times 4}
$$
根本不可逆。
第二,瞬时输出不包含完整状态
虽然某一时刻 $y$ 不足以恢复 $x$,但一段时间内的输出变化可能包含状态信息。
这就是可观测性的思想。
第三,噪声会让直接反演很糟糕
直接求逆通常对噪声极其敏感。
Observer 相当于利用动态模型对噪声进行了一定滤波。
和 Kalman Filter 的关系
Luenberger Observer:
$$
\dot{\hat{x}}
A\hat{x} + Bu + L(y - C\hat{x})
$$
Kalman Filter 的结构也类似:
$$
\dot{\hat{x}}
A\hat{x} + Bu + K_f(y - C\hat{x})
$$
区别在于:
- Luenberger Observer 中 $L$ 通常通过极点配置等方法人工设计;
- Kalman Filter 中 $K_f$ 根据过程噪声和测量噪声统计特性计算得到。
如果系统噪声模型为:
$$
\dot{x} = Ax + Bu + w
$$
$$
y = Cx + v
$$
其中:
- $w$ 是过程噪声;
- $v$ 是测量噪声;
Kalman Filter 会在给定噪声协方差 $Q, R$ 的情况下,选择一个最优增益,使估计误差协方差最小。
因此可以说:
Kalman Filter 是带随机最优意义的 Luenberger Observer。
常见设计步骤
设计 Luenberger Observer 的一般流程如下。
Step 1:建立状态空间模型
写出:
$$
\dot{x} = Ax + Bu
$$
$$
y = Cx
$$
Step 2:检查可观测性
构造:
$$
\mathcal{O}
\begin{bmatrix}
C \
CA \
\vdots \
CA^{n-1}
\end{bmatrix}
$$
检查:
$$
\operatorname{rank}(\mathcal{O}) = n
$$
Step 3:选择观测器极点
选择目标极点:
$$
p_1, p_2, \cdots, p_n
$$
连续系统要求:
$$
\operatorname{Re}(p_i) < 0
$$
离散系统要求:
$$
|p_i| < 1
$$
Step 4:求解 $L$
使:
$$
\lambda(A-LC) = {p_1,p_2,\cdots,p_n}
$$
Step 5:实现观测器
连续时间:
$$
\dot{\hat{x}} = A\hat{x} + Bu + L(y-C\hat{x})
$$
离散时间:
$$
\hat{x}_{k+1}
A\hat{x}_k + Bu_k + L(y_k-C\hat{x}_k)
$$
Python 小例子:位置测量估计速度
下面是一个简单仿真,展示如何用 Luenberger Observer 从位置测量估计速度。
系统:
$$
\dot{x}_1 = x_2
$$
$$
\dot{x}_2 = u
$$
测量:
$$
y = x_1
$$
观测器极点选:
$$
-5, -6
$$
所以:
$$
L =
\begin{bmatrix}
11 \
30
\end{bmatrix}
$$
1 | import numpy as np |
你会看到,即使初始估计是错的,$\hat{x}_1$ 和 $\hat{x}_2$ 也会逐渐追上真实状态。
这个例子的物理直觉
真实系统是:
$$
\dot{x}_1 = x_2
$$
如果只能测 $x_1$,那么速度其实隐藏在位置变化率里。
观测器做的事情类似于:
- 根据当前速度估计 $\hat{x}_2$ 预测位置变化;
- 发现预测位置 $\hat{x}_1$ 和真实测量位置 $y$ 有差;
- 用这个差反过来修正速度估计 $\hat{x}_2$。
如果预测位置总是落后真实位置,说明速度估计可能偏小;
如果预测位置总是超前真实位置,说明速度估计可能偏大。
因此即使速度没被直接测量,也能通过位置误差逐渐估计出来。
Luenberger Observer 的局限
Luenberger Observer 非常优雅,但也有局限。
1. 依赖模型准确性
如果 $A,B,C$ 模型误差很大,估计也会偏。
2. 对噪声没有最优处理
它可以处理一定噪声,但 $L$ 的设计不是统计最优。
3. 标准形式主要针对线性系统
非线性系统需要扩展形式,比如:
- Extended Kalman Filter;
- Extended Luenberger Observer;
- High-gain Observer;
- Sliding Mode Observer;
- Moving Horizon Estimator。
4. 必须满足可观测性
不可观测状态无法被估计。
一个更抽象的理解
Luenberger Observer 可以看成是在状态空间中运行的一个动态滤波器。
它不是简单地从当前输出 $y(t)$ 算出 $x(t)$,而是利用整个动态过程:
$$
u(\tau), y(\tau), \quad 0 \le \tau \le t
$$
来逐渐恢复状态。
更深一点说:
- 输出 $y$ 是状态 $x$ 的投影;
- 系统矩阵 $A$ 会让状态在不同方向之间耦合;
- 随着时间演化,不可直接测量的状态会通过动力学影响可测输出;
- 观测器利用这种影响,把隐藏状态“反推”出来。
这就是“观测”的本质。
最核心公式总结
系统:
$$
\dot{x} = Ax + Bu
$$
$$
y = Cx
$$
观测器:
$$
\boxed{
\dot{\hat{x}}
A\hat{x}
+
Bu
+
L(y-C\hat{x})
}
$$
估计误差:
$$
e = x - \hat{x}
$$
误差动态:
$$
\boxed{
\dot{e}
(A-LC)e
}
$$
收敛条件:
$$
\boxed{
\operatorname{Re}(\lambda_i(A-LC)) < 0
}
$$
可观测性条件:
$$
\boxed{
\operatorname{rank}
\begin{bmatrix}
C \
CA \
CA^2 \
\vdots \
CA^{n-1}
\end{bmatrix}
= n
}
$$
离散时间观测器:
$$
\boxed{
\hat{x}_{k+1}
A\hat{x}_k
+
Bu_k
+
L(y_k-C\hat{x}_k)
}
$$
离散误差动态:
$$
\boxed{
e_{k+1}
(A-LC)e_k
}
$$
离散稳定条件:
$$
\boxed{
|\lambda_i(A-LC)| < 1
}
$$
最后用一句话重新理解
Luenberger Observer 的思想可以压缩成一句话:
用系统模型预测状态,用输出误差修正预测,使估计误差按照人为设计的稳定动态衰减。
或者更口语一点:
我先根据模型猜系统内部现在是什么状态;
再看这个猜测产生的输出和真实测量差多少;
然后按一定增益把这个差反馈回去修正猜测;
只要系统可观测、增益设计合理,猜测就会越来越接近真实状态。
这就是 Luenberger Observer。