第3章:线性系统模型——状态空间模型、状态转移矩阵、观测矩阵、过程噪声与观测噪声
做目标跟踪这些年,我越来越觉得一个道理:你建的模型有多贴近真实物理世界,你的跟踪效果就有多稳。说白了,状态估计不是凭空猜,而是用数学模型去描述目标怎么动、传感器怎么看。
这一章,咱们就聊聊线性系统模型。这是整个状态估计的基石。你想想看,卡尔曼滤波为什么能工作?就是因为它假设系统是线性的。虽然现实世界没那么多完美线性,但搞懂这个基础,后面学非线性滤波才不慌。
3.1 状态空间模型——把问题装进数学框里
先问个问题:什么叫“状态”?
我个人习惯这么理解——状态就是能完整描述系统当前情况的最小变量集合。比如跟踪一辆车,它的位置、速度就是状态。有了这两个量,你就能预测它下一秒在哪。
状态空间模型长这样:
x(k) = A·x(k-1) + B·u(k-1) + w(k-1) // 状态方程
z(k) = H·x(k) + v(k) // 观测方程
这里:
- x(k):k时刻的状态向量
- A:状态转移矩阵
- B:控制输入矩阵(很多时候没有控制量,B=0)
- u(k-1):控制输入
- w(k-1):过程噪声
- z(k):观测向量
- H:观测矩阵
- v(k):观测噪声
我在项目中遇到过不少新手,上来就写代码,结果状态向量里该放什么、不该放什么完全没想清楚。嗯,这里要提醒你:状态变量的选择直接影响滤波器的收敛速度和精度。
3.2 状态转移矩阵——时间推移的引擎
状态转移矩阵A,说白了就是描述状态如何随时间演化的数学工具。它把上一时刻的状态映射到当前时刻。
举个最简单的例子——匀速运动模型:
位置:p(k) = p(k-1) + v(k-1)·Δt
速度:v(k) = v(k-1)
写成矩阵形式:
[p(k)] = [1 Δt] [p(k-1)] + 噪声
[v(k)] [0 1 ] [v(k-1)]
所以状态转移矩阵就是:
A = [[1, Δt],
[0, 1]]
你看,就这么简单。但实际项目中,A的推导往往没那么直接。我记得有一次做雷达目标跟踪,目标做匀加速运动,我一开始用了匀速模型,结果跟踪误差越来越大。后来改成匀加速模型,A变成3x3矩阵,效果立马好了。
3.3 观测矩阵——传感器怎么“看”世界
观测矩阵H,描述的是状态空间到观测空间的映射关系。说白了,就是告诉你:目标在真实世界里的状态,到了传感器眼里变成了什么样子。
举个例子:
- 如果传感器直接测量位置,那H = [1, 0](假设状态是位置+速度)
- 如果传感器测量距离和角度(比如雷达),那H就是非线性函数了(这属于后面章节的内容)
我建议你记住一点:H矩阵的维度由观测量的个数决定。比如你只有位置观测,H就是1×n的行向量;如果你同时观测位置和速度,H就是2×n的矩阵。
曾经有个项目,同事把观测矩阵写错了,导致滤波器发散。排查了两天才发现——H矩阵里把速度观测写成了位置观测。这种低级错误,其实很常见。
3.4 过程噪声与观测噪声——不确定性从哪来?
这两个噪声,是状态估计里最容易被忽视、却又最关键的部分。
过程噪声 w(k):描述模型的不确定性。你用的模型再完美,也不可能100%描述真实运动。比如风阻、路面摩擦、驾驶员随机操作……这些都会引入不确定性。
观测噪声 v(k):描述传感器测量误差。任何传感器都有噪声,雷达有热噪声,摄像头有量化误差,IMU有漂移。
在卡尔曼滤波里,这两个噪声用协方差矩阵表示:
- Q:过程噪声协方差矩阵
- R:观测噪声协方差矩阵
Q和R的取值,直接影响滤波器的性能。Q设太大,滤波器会过于相信观测,导致估计值抖动;Q设太小,滤波器反应迟钝,跟不上目标机动。
我曾经踩过一个坑:做无人机跟踪时,把Q设得太小,结果无人机突然转弯,滤波器完全跟不上,目标直接丢了。后来我把Q调大了一些,虽然稳态误差大了点,但至少不会跟丢。
3.5 知识体系总览
下面这张图,帮你把本章的核心逻辑串起来:
3.6 本章小结
这一章的内容,说白了就是三件事:
- 状态空间模型:把跟踪问题装进数学框架
- 状态转移矩阵A:描述目标怎么动
- 观测矩阵H:描述传感器怎么看
- 过程噪声Q和观测噪声R:描述不确定性有多大
搞懂这些,你就掌握了线性卡尔曼滤波的骨架。后面学扩展卡尔曼、无迹卡尔曼,都是在这个骨架上做文章。
嗯,这一章就到这。记住:模型是基础,噪声是关键。模型选对了,噪声调好了,滤波器就成功了一大半。
可可精品资料库