卡尔曼滤波

Kalman Filter
Optimal-Recursive-Data Processing-Algorithm 优化-递归-数据处理-算法

最优的线性滤波器,虽然名称为滤波电路,但实际上也可属于状态观测器(State Observer),用来从输入和输出“重构”系统的状态。

生活中存在大量的不确定性,此算法得以普适地应用

  1. 不存在完美的数学模型
  2. 系统的扰动不可控,较难建模
  3. 测量传感器存在误差

引入例子

估计真实结果,取平均值
第 k 次测量 zk
第 k 次的估计值 x^k

x^k=1k(z1+z2+⋯+zk)=1k(z1+z2+⋯+zk−1)+1kzk=k−1k1k−1(z1+z2+⋯+zk−1)+1kzk=k−1kx^k−1+1kzk=x^k−1+1k(zk−x^k−1)

提炼出:

x^k=x^k−1+Kk(zk−x^k−1)

递归,且只与上一次的有关联

Kk=eESTk−1eESTk−1+eMEAk {eESTk−1≫eMEAkKk→1x^k=zkeESTk−1≪eMEAkKk→0x^k=x^k−1

步骤

Kk=eESTk−1eESTk−1+eMEAk
x^k=x^k−1+Kk(zk−x^k−1)
eESTk=(1−Kk)eESTk−1

数学基础

数据融合

卡尔曼滤波器把不同来源的数据按不同的信噪比加权“整合”起来
Data Fusion

正态分布

X1∼N(μ1,σ12),X2∼N(μ2,σ22)
X^=X1+K(X2−X1)

X^={X1K=0X2K=1

求 K 为何值时,D(X^) 最小

D(X^)=(1−K)2σ12+K2σ22

dD(X^)dX=0 时,K=σ12σ12+σ22

估计的数据:X^∼N(μ1σ22+μ2σ12σ12+σ22,σ12σ22σ12+σ22)

协方差矩阵

协方差矩阵

核心公式

1.预测

状态空间

先验估计值:

X^k−=AX^k−1+Buk−1

先验误差的协方差矩阵:

Pk−=APk−1AT+Q

2.校正/更新

卡尔曼增益:

Kk=Pk−HTHPk−HT+R

后验估计值:

X^k=X^k−+Kk(Zk−HX^k−)

误差的协方差矩阵:

Pk=(I−KkH)Pk−

推导过程

Xk=AXk−1+Buk−1+ωk−1Zk=HXk+νk

自然界中的噪声的概率分布服从正态分布
期望为 0, Q,R 均为协方差矩阵
以 Q 为例,(R 的计算同理):

Q=E[ωωT]=E([ω1ω2][ω1ω2])=E([ω12ω1ω2ω2ω1ω22])=[σω12σω1σω2σω2σω1σω22]

由于存在噪声,而噪声无法被建模,直接通过状态空间方程得到两个不准确的值(估计值):

卡尔曼滤波就是要根据两个不太准确的结果来得出准确的结果
结合数据融合,得到 X^k 后验估计值

X^k=X^k−+G(H−1Zk−X^k−)X^k=X^k−+Kk(Zk−HX^k−)

G∈(0,1)Kk=GH−1∈(0,H−1)

实际值 Xk, 估计值 X^k, 误差 ek=Xk−X^k
ek∼(0,P) P=E(eeT)=[σe12σe1σe2σe2σe1σe22]

寻找 Kk 使得误差协方差矩阵的迹最小 tr(P)=σe12+σe22 有最小值

ek=Xk−X^k=Xk−(X^k−+Kk(Zk−HX^k−))=Xk−(X^k−+Kk(HXk+νk−HX^k−))=Xk−X^k−−KkHXk−Kkνk+KkHX^k−=Xk−X^k−−KkH(Xk−X^k−)−Kkνk=(I−KkH)(Xk−X^k−)−Kkνk=(I−KkH)(ek−)−Kkνk

卡尔曼增益:

Kk=Pk−HTHPk−HT+R

实际使用

实现多传感器的数据融合

理论

预测阶段:
状态预测:使用当前估计状态和系统模型来预测下一个状态。
协方差预测:估计预测状态的不确定性协方差。

更新阶段:
计算卡尔曼增益:基于预测状态的不确定性和实际测量的不确定性来计算。
更新估计:结合预测状态和实际测量来修正状态估计。
更新协方差:更新状态估计的不确定性。

线性动态系统的状态估计算法
一种数学优化技术,主要用于信号处理和控制理论中,以估计未知变量(通常是动态系统的状态)的最优估计。它是基于贝叶斯估计理论的线性滤波器,设计用来从一系列带有噪声的、不完全的观测数据中提取有用的信息。

它能够从一系列包含噪声的测量中估计动态系统的状态。这种滤波器由鲁道夫·卡尔曼(Rudolf E. Kalman)在 1960 年提出,它利用了状态空间模型和贝叶斯估计理论。卡尔曼滤波器的核心思想是使用系统的动态模型和观测数据,通过迭代的方式,对系统的状态进行最优估计。

在一个典型的场景中,卡尔曼滤波器会利用系统动态模型(通过状态方程描述)和观测数据(通过观测方程描述)来迭代地计算系统的状态。状态可以包括位置、速度、加速度等,而观测数据可能是传感器读数,比如雷达测距、GPS 信号等,这些数据往往受到噪声影响而包含误差。

卡尔曼滤波器的关键步骤包括预测(Predictor)和更新(Updater)两个阶段:

  1. 预测阶段:基于系统的运动学模型和前一时刻的最佳状态估计,预测当前状态及其协方差矩阵。
  2. 更新阶段:结合新的观测数据,通过计算卡尔曼增益,将预测结果与实际观测结果进行最优融合,得到更精确的状态估计。

卡尔曼滤波的优点在于它能够实时工作,每次接收到新的观测数据时都会更新并优化其内部的估计。这种方法考虑了观测噪声和过程噪声的统计特性,力求在统计意义下达到最小均方误差的估计效果。

卡尔曼滤波广泛应用于多个领域,包括但不限于航空航天导航、自动驾驶、机器人定位、信号处理、金融建模、天气预报等。

卡尔曼滤波器的基本工作原理包括两个步骤:预测(Predict)和更新(Update)。在预测阶段,滤波器根据系统的动态模型预测下一状态的可能性;在更新阶段,滤波器利用新的观测数据来更新预测,从而获得更准确的估计。

卡尔曼滤波器的关键优势在于其能够处理系统内部和外部的不确定性,如噪声和干扰。它适用于广泛的应用场景,包括航空航天、导航系统、信号处理、机器人定位、经济时间序列分析等。

在实际应用中,卡尔曼滤波器需要根据系统的具体情况来设计,包括确定系统的状态转移矩阵、观测矩阵、过程噪声协方差和观测噪声协方差等参数。此外,卡尔曼滤波器还有多种变体,如扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF)和粒子滤波器(PF),它们适用于不同类型的非线性系统。

卡尔曼滤波器的实现通常需要一定的数学背景,包括线性代数和概率统计知识。在工程实践中,卡尔曼滤波器可以通过编程语言如MATLAB、Python等进行实现。


AI 结构化补充(2026-05-02)

Kalman Filter
Optimal-Recursive-Data Processing-Algorithm 优化-递归-数据处理-算法

最优的线性滤波器,虽然名称为滤波电路,但实际上也可属于状态观测器(State Observer),用来从输入和输出“重构”系统的状态。

生活中存在大量的不确定性,此算法得以普适地应用

  1. 不存在完美的数学模型
  2. 系统的扰动不可控,较难建模
  3. 测量传感器存在误差

引入例子

估计真实结果,取平均值
第 k 次测量 zk
第 k 次的估计值 x^k

x^k=1k(z1+z2+⋯+zk)=1k(z1+z2+⋯+zk−1)+1kzk=k−1k1k−1(z1+z2+⋯+zk−1)+1kzk=k−1kx^k−1+1kzk=x^k−1+1k(zk−x^k−1)

提炼出:

x^k=x^k−1+Kk(zk−x^k−1)

递归,且只与上一次的有关联

Kk=eESTk−1eESTk−1+eMEAk {eESTk−1≫eMEAkKk→1x^k=zkeESTk−1≪eMEAkKk→0x^k=x^k−1

步骤

Kk=eESTk−1eESTk−1+eMEAk
x^k=x^k−1+Kk(zk−x^k−1)
eESTk=(1−Kk)eESTk−1

数学基础

数据融合

卡尔曼滤波器把不同来源的数据按不同的信噪比加权“整合”起来
Data Fusion

正态分布

X1∼N(μ1,σ12),X2∼N(μ2,σ22)
X^=X1+K(X2−X1)

X^={X1K=0X2K=1

求 K 为何值时,D(X^) 最小

D(X^)=(1−K)2σ12+K2σ22

dD(X^)dX=0 时,K=σ12σ12+σ22

估计的数据:X^∼N(μ1σ22+μ2σ12σ12+σ22,σ12σ22σ12+σ22)

协方差矩阵

协方差矩阵

核心公式

1.预测

状态空间

先验估计值:

X^k−=AX^k−1+Buk−1

先验误差的协方差矩阵:

Pk−=APk−1AT+Q

2.校正/更新

卡尔曼增益:

Kk=Pk−HTHPk−HT+R

后验估计值:

X^k=X^k−+Kk(Zk−HX^k−)

误差的协方差矩阵:

Pk=(I−KkH)Pk−

推导过程

Xk=AXk−1+Buk−1+ωk−1Zk=HXk+νk

自然界中的噪声的概率分布服从正态分布
期望为 0, Q,R 均为协方差矩阵
以 Q 为例,(R 的计算同理):

Q=E[ωωT]=E([ω1ω2][ω1ω2])=E([ω12ω1ω2ω2ω1ω22])=[σω12σω1σω2σω2σω1σω22]

由于存在噪声,而噪声无法被建模,直接通过状态空间方程得到两个不准确的值(估计值):

卡尔曼滤波就是要根据两个不太准确的结果来得出准确的结果
结合数据融合,得到 X^k 后验估计值

X^k=X^k−+G(H−1Zk−X^k−)X^k=X^k−+Kk(Zk−HX^k−)

G∈(0,1)Kk=GH−1∈(0,H−1)

实际值 Xk, 估计值 X^k, 误差 ek=Xk−X^k
ek∼(0,P) P=E(eeT)=[σe12σe1σe2σe2σe1σe22]

寻找 Kk 使得误差协方差矩阵的迹最小 tr(P)=σe12+σe22 有最小值

ek=Xk−X^k=Xk−(X^k−+Kk(Zk−HX^k−))=Xk−(X^k−+Kk(HXk+νk−HX^k−))=Xk−X^k−−KkHXk−Kkνk+KkHX^k−=Xk−X^k−−KkH(Xk−X^k−)−Kkνk=(I−KkH)(Xk−X^k−)−Kkνk=(I−KkH)(ek−)−Kkνk

卡尔曼增益:

Kk=Pk−HTHPk−HT+R

实际使用

实现多传感器的数据融合

理论

预测阶段:
状态预测:使用当前估计状态和系统模型来预测下一个状态。
协方差预测:估计预测状态的不确定性协方差。

更新阶段:
计算卡尔曼增益:基于预测状态的不确定性和实际测量的不确定性来计算。
更新估计:结合预测状态和实际测量来修正状态估计。
更新协方差:更新状态估计的不确定性。

线性动态系统的状态估计算法
一种数学优化技术,主要用于信号处理和控制理论中,以估计未知变量(通常是动态系统的状态)的最优估计。它是基于贝叶斯估计理论的线性滤波器,设计用来从一系列带有噪声的、不完全的观测数据中提取有用的信息。

它能够从一系列包含噪声的测量中估计动态系统的状态。这种滤波器由鲁道夫·卡尔曼(Rudolf E. Kalman)在 1960 年提出,它利用了状态空间模型和贝叶斯估计理论。卡尔曼滤波器的核心思想是使用系统的动态模型和观测数据,通过迭代的方式,对系统的状态进行最优估计。

在一个典型的场景中,卡尔曼滤波器会利用系统动态模型(通过状态方程描述)和观测数据(通过观测方程描述)来迭代地计算系统的状态。状态可以包括位置、速度、加速度等,而观测数据可能是传感器读数,比如雷达测距、GPS 信号等,这些数据往往受到噪声影响而包含误差。

卡尔曼滤波器的关键步骤包括预测(Predictor)和更新(Updater)两个阶段:

  1. 预测阶段:基于系统的运动学模型和前一时刻的最佳状态估计,预测当前状态及其协方差矩阵。
  2. 更新阶段:结合新的观测数据,通过计算卡尔曼增益,将预测结果与实际观测结果进行最优融合,得到更精确的状态估计。

卡尔曼滤波的优点在于它能够实时工作,每次接收到新的观测数据时都会更新并优化其内部的估计。这种方法考虑了观测噪声和过程噪声的统计特性,力求在统计意义下达到最小均方误差的估计效果。

卡尔曼滤波广泛应用于多个领域,包括但不限于航空航天导航、自动驾驶、机器人定位、信号处理、金融建模、天气预报等。

卡尔曼滤波器的基本工作原理包括两个步骤:预测(Predict)和更新(Update)。在预测阶段,滤波器根据系统的动态模型预测下一状态的可能性;在更新阶段,滤波器利用新的观测数据来更新预测,从而获得更准确的估计。

卡尔曼滤波器的关键优势在于其能够处理系统内部和外部的不确定性,如噪声和干扰。它适用于广泛的应用场景,包括航空航天、导航系统、信号处理、机器人定位、经济时间序列分析等。

在实际应用中,卡尔曼滤波器需要根据系统的具体情况来设计,包括确定系统的状态转移矩阵、观测矩阵、过程噪声协方差和观测噪声协方差等参数。此外,卡尔曼滤波器还有多种变体,如扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF)和粒子滤波器(PF),它们适用于不同类型的非线性系统。

卡尔曼滤波器的实现通常需要一定的数学背景,包括线性代数和概率统计知识。在工程实践中,卡尔曼滤波器可以通过编程语言如MATLAB、Python等进行实现。

动态最小二乘视角

卡尔曼滤波可以看成动态加权最小二乘的递推求解:新测量 bk 持续到来,最佳估计 x^k 随之更新,但历史观测不会被遗忘。一般动态链同时包含观测方程与状态更新方程:

A0x0=b0,x1=F0x0,A1x1=b1,x2=F1x1,A2x2=b2,…

每条观测方程用误差协方差 Vk 加权,状态更新误差也可由 Ck 描述。于是 x^k 并不只是由最新 bk 决定,而是综合了 b0,…,bk 以及全部状态更新约束。

如果暂时去掉状态转移 Fk 和过程误差 Ck,只估计同一个静态 x,核心更新退化为

x^1=x^0+K1(b1−A1x^0),

其中括号内是新测量与旧估计预测之间的残差。协方差与增益更新为

W1−1=W0−1+A1TV1−1A1,K1=W1A1TV1−1.

Wk 度量整个估计过程的可靠性,Vk−1 决定第 k 条观测的权重。这个静态递推与递归最小二乘法同构,但它只是卡尔曼滤波的测量校正子问题。

平均值更新例子

若 x^k 是 b1,…,bk 的平均值,新测量 bk+1 到来时

x^k+1=x^k+1k+1(bk+1−x^k).

这说明 Kalman 型更新并不神秘:旧平均值加上“新测量残差”的一部分。随着样本数增加,增益 1k+1 变小,因为历史信息越来越多。

完整动态滤波的边界

完整卡尔曼滤波不能只写成上面的静态 RLS 公式。动态系统必须先预测:

x^k|k−1=Fk−1x^k−1|k−1,Pk|k−1=Fk−1Pk−1|k−1Fk−1T+Qk−1,

其中 Qk−1 或 Ck 描述过程噪声和状态更新误差。随后才用观测 bk 或 Zk 做校正。若没有这个预测和过程协方差,算法只是静态在线加权最小二乘,而不是完整的动态 Kalman filter。

动态最小二乘把所有 x0,…,xk 联立时,法方程具有块三对角结构,因为每个状态只和相邻状态更新方程相连。Kalman 递推可以理解为对这个块三对角系统做逐步消元,并用矩阵求逆引理或 Schur 补更新协方差,而不显式求解不断增长的整体系统。