2. 状态空间模型:线性动态系统的数学描述
好,咱们进入第二章。状态空间模型,这个名字听起来有点唬人,对吧?
其实说白了,它就是一套描述系统怎么随时间演变的数学框架。你想想看,我们做多传感器融合,核心问题是什么?就是系统当前在哪儿、未来会到哪儿,以及我们怎么用观测数据去修正这个认知。状态空间模型,就是回答这三个问题的标准语言。
2.1 为什么需要状态空间模型?
我记得刚入行那会儿,处理一个简单的GPS+IMU融合问题。我直接用原始数据做加权平均,结果一塌糊涂。为什么?因为IMU有漂移,GPS有延迟,这两个传感器的误差特性完全不同,简单加权根本处理不了。
后来我意识到,我们需要一个统一的数学框架,把系统的运动规律和传感器的观测规律分开建模。这就是状态空间模型的价值——它把问题拆成了两个部分:
- 状态方程:描述系统内部状态如何随时间变化
- 观测方程:描述传感器观测值与状态之间的关系
这两个方程,就是卡尔曼滤波的基石。没有它们,滤波无从谈起。
2.2 状态方程:系统是怎么动的?
先看状态方程。对于一个线性动态系统,它的标准形式是:
x(k) = A * x(k-1) + B * u(k-1) + w(k-1)
这里每个符号都有明确的物理含义:
- x(k):k时刻的状态向量。比如位置、速度、姿态角
- A:状态转移矩阵。它描述了上一时刻的状态如何影响当前时刻
- B:控制输入矩阵。它描述了外部控制量(比如油门、转向)如何影响状态
- u(k-1):控制输入向量
- w(k-1):过程噪声。它代表了模型的不确定性
我个人习惯把A矩阵叫做「预测核心」。为什么?因为它决定了系统在没有外部输入和噪声时的演化规律。
举个简单的例子:一个匀速直线运动的物体
状态向量:x = [位置, 速度]^T
状态转移矩阵:A = [[1, dt], [0, 1]]
你看,位置 = 上一时刻位置 + 速度 * dt,速度保持不变。就这么简单。
2.3 观测方程:传感器看到了什么?
状态方程描述了「真实世界」的演化,但真实状态我们是不知道的。我们只能通过传感器去观测。观测方程就是连接真实状态和传感器读数的桥梁:
z(k) = H * x(k) + v(k)
这里:
- z(k):k时刻的观测向量。比如GPS给出的位置读数
- H:观测矩阵。它把状态空间映射到观测空间
- v(k):观测噪声。它代表了传感器的测量误差
嗯,这里要注意。H矩阵的设计直接决定了你的传感器能不能「看到」状态。比如你只有GPS测位置,那H就是[1, 0],只能观测到位置,看不到速度。如果你有雷达测距,那H就得根据几何关系来设计。
避坑指南:我曾经在一个项目中,把观测矩阵H写错了维度。结果卡尔曼滤波收敛得特别慢,折腾了两天才发现是H矩阵少了一行。所以,每次写H矩阵,我都会在纸上先画一遍维度匹配关系。
2.4 噪声的数学描述
过程噪声w和观测噪声v,是卡尔曼滤波里最容易被忽视的部分。很多人随便给个协方差矩阵就完事了,结果滤波效果一塌糊涂。
这两个噪声的假设是:
- 零均值高斯白噪声
- 互不相关
- 各自协方差矩阵已知:Q = E[w w^T],R = E[v v^T]
Q和R的取值,说白了就是你对模型和传感器的信任程度。Q越大,说明你越不相信模型预测;R越大,说明你越不相信传感器读数。
我记得有一次做无人机高度融合,气压计和加速度计融合。我一开始把R设得很小,结果气压计一有波动,滤波就跟着剧烈抖动。后来我把R调大了一些,滤波就平滑多了。这就是调参的艺术。
2.5 完整的线性动态系统模型
把状态方程和观测方程放在一起,就构成了完整的线性动态系统模型:
状态方程:x(k) = A * x(k-1) + B * u(k-1) + w(k-1)
观测方程:z(k) = H * x(k) + v(k)
其中:
w ~ N(0, Q)
v ~ N(0, R)
E[w v^T] = 0
这个模型,就是卡尔曼滤波的输入。你给它这个模型,它就能告诉你最优的状态估计。
核心要点:
- 状态方程描述「系统怎么动」
- 观测方程描述「传感器怎么看」
- 噪声协方差Q和R决定了滤波器的行为
- A、B、H矩阵必须正确设计,否则滤波必败
2.6 一个完整的例子
咱们来看一个实际例子。假设你要做一维运动物体的位置和速度估计,传感器只有位置测量。
系统参数:
- 采样时间 dt = 0.1秒
- 过程噪声标准差 q = 0.1 m/s²
- 观测噪声标准差 r = 0.5 m
模型建立:
状态向量:x = [位置, 速度]^T
状态转移矩阵:A = [[1, 0.1], [0, 1]]
观测矩阵:H = [1, 0] // 只能观测到位置
过程噪声协方差:Q = [[0.01, 0], [0, 0.01]] // 简化处理
观测噪声协方差:R = [0.25] // 0.5²
你看,这个模型很简单,但它已经能描述一个基本的运动估计问题了。卡尔曼滤波就是基于这个模型,不断地做预测和更新。
警告:实际项目中,Q矩阵的设计远比这个复杂。它需要根据系统的物理特性来推导。比如加速度噪声如何影响位置和速度的协方差,这涉及到连续系统离散化的问题。我建议初学者先用简化模型跑通流程,再逐步精细化。
2.7 小结
状态空间模型,说白了就是两句话:系统怎么动,传感器怎么看。把这两句话用数学公式写出来,卡尔曼滤波就能工作了。
我个人觉得,这个模型是卡尔曼滤波里最重要的一步。模型建得好,滤波就成功了一半。模型建得差,后面再怎么调参也救不回来。
下一章,咱们就基于这个模型,推导卡尔曼滤波的五个核心公式。准备好了吗?