1. 卡尔曼滤波器的核心思想
卡尔曼滤波器本质上是一个递归算法,它通过融合预测和测量两个信息源,在存在不确定性的情况下对系统状态进行最优估计。这个算法之所以强大,是因为它能够动态调整对预测和测量两方面的信任程度。
1.1 预测与测量的动态平衡
想象你在雾天驾驶汽车,GPS显示你在某条路上,但视线模糊不清。这时你会:
- 根据当前车速和方向预测车辆位置(预测)
- 偶尔看到路边的标志牌确认位置(测量)
- 综合这两方面信息形成最佳位置判断
卡尔曼滤波器正是模拟了这个决策过程。它通过数学方式量化预测和测量的不确定性,并根据两者的可靠性自动调整权重。当测量精度高时,更相信测量数据;当预测模型准确时,更依赖预测结果。
1.2 状态估计的基本框架
卡尔曼滤波器处理的问题通常可以表述为:
code复制x_k = F_k * x_{k-1} + B_k * u_k + w_k
z_k = H_k * x_k + v_k
其中:
- x_k 是k时刻的状态向量(如位置、速度等)
- F_k 是状态转移矩阵
- u_k 是控制输入
- w_k 是过程噪声
- z_k 是测量值
- H_k 是观测矩阵
- v_k 是测量噪声
这个框架涵盖了大多数线性动态系统的建模需求,从简单的匀速运动到复杂的多变量系统。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 一维卡尔曼滤波的详细实现
2.1 数学原理深度解析
一维情况下,卡尔曼滤波的核心是两个高斯分布的乘积。假设:
- 预测分布:N(μ₁, σ₁²)
- 测量分布:N(μ₂, σ₂²)
融合后的后验分布为:
code复制μ = (μ₁/σ₁² + μ₂/σ₂²)/(1/σ₁² + 1/σ₂²)
σ² = 1/(1/σ₁² + 1/σ₂²)
这个结果有几点重要启示:
- 最终估计是预测和测量的加权平均,权重与各自方差的倒数成正比
- 融合后的方差比原来的两个方差都小
- 当一方方差趋近于0时,结果完全倾向于另一方
2.2 Python实现与参数调优
python复制class OneDKalmanFilter:
def __init__(self, process_variance, measurement_variance):
self.process_variance = process_variance
self.measurement_variance = measurement_variance
self.posteri_estimate = 0.0
self.posteri_error = 1.0
def update(self, measurement):
# 预测步骤
priori_estimate = self.posteri_estimate
priori_error = self.posteri_error + self.process_variance
