参数设置
$\hat{x}^- = F\hat{x},\quad P^- = P + Q$
更新步骤
$K = P^- H^T / (HP^-H^T + R)$
$\hat{x}= \hat{x}^- + K(z - H\hat{x}^-)$
$P = (1-KH)P^-$
F=H=1(一维等速模型)
从含噪声的观测数据中推估真实状态,卡尔曼滤波器可视化。调整过程噪声Q与观测噪声R,直观理解滤波特性。
GPS导航与位置追踪:卫星信号因多径效应和电离层影响而含有噪声。单纯GPS位置信息精度仅有数米级。将卡尔曼滤波器与车速传感器、陀螺仪等信息融合(结合车辆运动模型),可实现亚米级精度的平滑位置推估。
飞机与航天器姿态和轨道控制:陀螺仪有漂移误差,加速度计有瞬态噪声,星敏感器有冲击干扰。融合多种传感器信息(传感器融合),参考机体运动模型,用卡尔曼滤波器得到最优的姿态与位置估计。这是自动导航稳定的基础。
机器人自主定位(SLAM):移动机器人用内部的轮式测距法计算位置(累积误差),同时用激光雷达或摄像头观测环境。卡尔曼滤波器融合这两种信息,在地图内长时间保持高精度的自身位置估计。
经济与金融数据分析:股票价格、汇率等时间序列含有随机波动。用卡尔曼滤波器从市场观测值中提取"趋势"和"周期性"等潜在状态。平衡观测值变动(R)与经济学模型预测的不确定性(Q),推估潜在的真实价值。
首先要明确,"卡尔曼滤波器不是万能魔法"。最常见的误解是认为任何数据扔进去都会自动处理好。这个模拟器用的"匀速直线运动模型"只是示例而已。实际应用中,你必须自己设计符合物理规律的"状态转移模型"和"观测模型"。比如要估计弹簧-质量-阻尼系统的振动,状态量要包含速度和加速度,模型要基于运动方程。
其次,参数Q和R的确定方法。在模拟器中可以用滑块随意调节,但实际问题中呢?这很困难。R(观测噪声)比较好决定——通常可以查看传感器数据表,如果标注"误差±几毫米",就能算出方差。难的是Q(过程噪声)。"模型与现实的偏差"怎么量化?一个实用方法是估算最坏情况下的模型误差。例如,用匀速模型估计汽车位置,假设车辆最大加速度可能达到0.3G(约3 m/s²),就以这个加速度的方差作为Q的参考。最初可设大一些,然后观察滤波器响应特性逐步调优。
最后是发散(Divergence)问题。这是一个陷阱:滤波器的误差协方差P计算时变得过小,导致它完全不信任新的观测值,推估值偏离真值后再也追不上。原因通常是模型误差或Q设得不当。在模拟器里可以把R设得极小,Q接近零,然后让真实轨迹(红线)突然弯曲,观察推估值(绿线)是否无法跟上,这就是发散现象。实现中需要加"协方差下限限制"等防护措施。
以GPS配备无人机的位置估计为例。设Q=0.05(过程噪声)、R=2.0(GPS误差)、P0=1.0、频率0.5Hz运行,卡尔曼增益会收敛到约0.87,能将±3m的实测误差降低到±0.4m以下。若将Q增加到0.5,增益上升到0.95,系统对模型不确定性的适应性增强,对突风等外部干扰的反应加快。以编码器+加速度计为基础的汽车速度估计中,设R=0.8时,推估延迟约50ms,控制系统的响应性能随之改善。