3. 降维观测器设计

全维观测器咱们聊完了。说白了,它就是把系统的所有状态都估计一遍。但你想想看,有些状态我们明明可以直接测量到,干嘛还要费劲去估计它?

这就是降维观测器出场的理由。我当年第一次接触这个概念时,心里想的是:「这不就是偷懒吗?」后来真做了项目才发现,这哪是偷懒,这是工程智慧。

3.1 降维观测器的核心思想

降维观测器,英文叫 Reduced-Order Observer。它的思路很简单:

  • 可测的状态:直接拿传感器读数,不用估计
  • 不可测的状态:只对这些状态设计观测器

假设系统有 n 个状态,其中 m 个可以直接测量。那么全维观测器要估计 n 个状态,而降维观测器只需要估计 n-m 个状态。

核心结论:降维观测器的阶数 = n - m,比全维观测器低了 m 阶。

阶数低了,计算量就小了,硬件实现也更省资源。我在一个嵌入式电机控制项目里用过这个,当时 DSP 的资源吃紧,换成降维观测器后,运算周期从 120μs 降到了 75μs。效果很明显。

3.2 降维观测器的结构

咱们先看系统模型。假设状态方程是:

ẋ = Ax + Bu
y = Cx

把状态分成两部分:

  • x₁:可测的状态(m 维)
  • x₂:不可测的状态(n-m 维)

对应的矩阵也要分块:

[ẋ₁]   [A₁₁  A₁₂] [x₁]   [B₁]
[ẋ₂] = [A₂₁  A₂₂] [x₂] + [B₂] u

y = [I  0] [x₁]
           [x₂]

这里 y = x₁,因为 x₁ 直接可测。

降维观测器的结构长这样:

ẋ̂₂ = (A₂₂ - L A₁₂) x̂₂ + (A₂₁ - L A₁₁) y + (B₂ - L B₁) u + L ẏ

嗯,这里要注意。公式里出现了 ẏ,也就是输出的导数。实际工程中我们不会直接对信号求导——噪声会被放大得一塌糊涂。

避坑指南:我曾经在早期的一个项目中直接对传感器信号求导,结果观测器输出全是毛刺,根本没法用。后来改用变量替换法,才把问题解决。

变量替换法是这样的:

定义一个新变量:

z = x̂₂ - L y

这样就能消掉 ẏ 项。新的观测器方程变成:

ż = (A₂₂ - L A₁₂) z + (A₂₁ - L A₁₁ + (A₂₂ - L A₁₂)L) y + (B₂ - L B₁) u
x̂₂ = z + L y

你看,现在只需要积分 ż,不需要对 y 求导了。这就是工程上的小技巧。

3.3 设计步骤

降维观测器的设计步骤,我习惯这么走:

  1. 分块:把状态分成可测和不可测两组
  2. 重写方程:按分块重新整理 A、B、C 矩阵
  3. 确定极点:根据系统要求,选定观测器的极点位置
  4. 计算增益 L:用极点配置法,算出 L 矩阵
  5. 构建观测器:用变量替换法,写出最终的观测器方程

举个例子。假设系统是:

A = [-2  1]    B = [1]    C = [1  0]
    [ 0 -3]        [0]

这里 x₁ 可测,x₂ 不可测。分块后:

A₁₁ = -2,  A₁₂ = 1
A₂₁ = 0,   A₂₂ = -3
B₁ = 1,    B₂ = 0

假设我们希望观测器极点在 -5 处。那么:

A₂₂ - L A₁₂ = -3 - L·1 = -5
解得:L = 2

观测器方程:

ż = (-3 - 2·1)z + (0 - 2·(-2) + (-3 - 2·1)·2)y + (0 - 2·1)u
  = -5z + (4 - 5·2)y - 2u
  = -5z - 6y - 2u

x̂₂ = z + 2y

搞定。就这么简单。

3.4 与全维观测器的对比

咱们用表格来对比一下:

对比项 全维观测器 降维观测器
阶数 n n - m
估计的状态 全部 n 个 仅不可测的 n-m 个
计算量 较大 较小
收敛速度 可任意配置 可任意配置
对噪声敏感度 较低 较高(因为用到 y 的导数)
实现复杂度 简单直接 需要变量替换

我个人习惯是:如果系统状态不多(比如 2-3 个),直接用全维观测器,省事。如果状态多或者硬件资源紧张,就用降维观测器。

小提示:降维观测器的极点可以比全维观测器设得快一些。因为它的阶数低,同样的极点位置,收敛速度会更快。但别设太快,否则对噪声太敏感。

3.5 知识体系图

下面这张图展示了降维观测器的核心逻辑:

降维观测器知识体系 系统模型 ẋ = Ax + Bu, y = Cx 状态分块 x₁: 可测状态 (m维) x₂: 不可测状态 (n-m维) 核心设计 极点配置求增益 L 变量替换消去 ẏ 降维观测器方程 ż = (A₂₂-LA₁₂)z + ... 对比 全维观测器 阶数: n vs 降维观测器 阶数: n-m 计算量更小 工程实现 嵌入式代码实现 注意事项 避免直接对 y 求导 总结:降维观测器 = 只估计不可测状态 + 变量替换 + 极点配置

3.6 工程中的选择建议

到底用全维还是降维?我给大家几个参考:

  • 状态数 n ≤ 3:直接用全维观测器,代码简单,调试方便
  • 状态数 n ≥ 6:强烈建议用降维观测器,节省计算资源
  • 传感器噪声大:优先考虑全维观测器,降维观测器对噪声更敏感
  • 硬件资源紧张:降维观测器是更好的选择

我记得有一次做无人机姿态估计,IMU 的角速度可以直接测量,但姿态角需要估计。系统有 6 个状态,3 个可测。用全维观测器的话,DSP 的负载率飙到了 85%。换成降维观测器后,负载率降到了 55%,还多出了资源做其他控制算法。

这就是降维观测器的价值——不是它比全维观测器「更好」,而是在合适的场景下,它更「经济」。


公众号:蓝海资料掘金营,微信deep3321