卡尔曼滤波算法的核心,是把预测和观测这两件事儿巧妙结合,适合那种数据有点噪但又不至于乱成一锅粥的场景。状态预测、协方差更新这些公式,乍一看挺数学,但配合具体例子,比如追踪房间温度,理解起来就简单多了。
线性系统的状态预测靠的是前一时刻的数据再加上点控制输入,像X(k|k-1) = A X(k-1|k-1) + B U(k)
这种公式,写起来顺手,看着也不累。协方差预测那一步,更新了不确定性的判断,用的是P(k|k-1) = A P(k-1|k-1) A' + Q
,其实也就考虑了点过程噪声。
观测更新挺关键的一步,比如你测了个温度值,得结合预测值来算当前估计嘛。核心就在X(k|k) = X(k|k-1) + Kg(k)(Z(k) - H X(k|k-1))
这行。卡尔曼增益就是那个平衡点,算它得用点矩阵运算:Kg(k) = P(k|k-1) H' / (H P(k|k-1) H' + R)
。
用 MATLAB 实现也不难,设置好A
、H
、Q
、R
这些基本参数,再把上面几个公式套进去就行。初学者可以从房间温度估计这个例子入手,理解比较快。代码逻辑清晰,调试也方便,像plot
一下结果图,容易就能看到滤波效果。
如果你是刚接触信号或者控制系统的前端开发者,想找个通俗易懂又实用的数学算法练手,卡尔曼滤波是个不错的起点。想看下完整实现,可以参考这篇:卡尔曼滤波的 MATLAB 实现。