卡尔曼滤波(Kalman Filter, KF)是一种在线递归算法:在带噪声的线性高斯系统(linear Gaussian system)里,用“预测—更新”两步循环,把运动模型和传感器测量融合成对状态的最优估计。
想象你在高速上开车,想知道自己精确位置。车速表告诉你大概走了多远,但有误差;GPS 每隔几秒给一个点,也有噪声。你不会只信任何一个,而是先按车速推算当前位置,这就是预测(predict);再拿到 GPS 后,根据“车速推算有多准”和“GPS 有多准”折中修正,这就是更新(update)。卡尔曼滤波做的就是这件事,并且每一步都带着不确定性。
它把状态(比如位置、速度)和不确定性都表示成高斯分布:均值是估计值,协方差(covariance)是“有多不确定”。预测步用运动模型往前推,协方差通常会变大,因为越推越不确定。更新步拿到测量后,计算卡尔曼增益(Kalman gain),像调权重:测量噪声大,就多信预测;预测很虚,就多信测量。修正后协方差变小,估计更稳。然后进入下一轮。
“最优”有前提:系统近似线性,噪声近似高斯。满足时,卡尔曼滤波在最小均方误差意义下是最优的;不满足时,它仍常是最佳线性估计。它还是递归的:不用保存全部历史,只留上一刻的估计和协方差,所以适合实时跑。
和相邻概念的区别可以看表:
| 方法 | 核心思路 | 适合场景 | 局限 |
|---|---|---|---|
| 卡尔曼滤波 | 递归预测-更新,融合模型与测量 | 线性高斯、实时状态估计 | 非线性非高斯需扩展 |
| 滑动平均(moving average)/低通滤波(low-pass filter) | 对测量做平滑 | 去抖动、简单滤波 | 不建模运动,有滞后 |
| 扩展卡尔曼滤波(EKF)/无迹卡尔曼滤波(UKF) | 对非线性做线性化或采样 | 非线性但近似高斯 | 调参、可能局部最优 |
| 粒子滤波(particle filter) | 用大量粒子表示概率分布 | 强非线性、多峰 | 计算量大 |
对从业者,机器人定位(robot localization)里几乎无处不在:轮式里程计、惯性测量单元(IMU)、激光雷达、摄像头的数据融合,常靠卡尔曼滤波或其变体。自动驾驶的目标跟踪、无人机姿态估计也类似。对普通人,手机导航、扫地机器人、游戏手柄稳定,背后都有它的影子。遇到状态估计问题,先问“是否近似线性高斯”;是,卡尔曼滤波就是可靠基线;不是,再考虑扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)或粒子滤波(particle filter)。模型和噪声参数怎么定,往往比公式本身更影响效果。
