卡尔曼滤波【Kalman Filter】详解

参考:深入浅出理解卡尔曼滤波【实例、公式、代码和图】

卡尔曼滤波

基本概念

(线性)卡尔曼滤波的应用基于以下三个假设前提:

  1. 当前时刻状态只和上一时刻状态有关。
  2. 模型和系统均满足线性关系。
  3. 引入的噪声符合高斯分布。
    基于上述假设,我们可以得到如下两个表征过程模型和测量模型的公式:
    x k = F x k − 1 + B u k − 1 + w k . . . . . . ① z k = H x k + v k . . . . . . ② \begin{aligned} &x_{k}=Fx_{k-1}+Bu_{k-1}+w_{k} ......① \\&z_{k}=Hx_{k}+v_{k}...... ② \end{aligned} xk=Fxk1+Buk1+wk......①zk=Hxk+vk......②

公式①表示过程模型,公式②表示测量模型,其中:

  • x k x_{k} xk 表示 k 时刻的真实值,是待估计的值,例如位置、速度
  • x k − 1 x_{k-1} xk1 表示 k-1 时刻的真实值
  • u k − 1 u_{k-1} uk1 表示 k-1 时刻的控制输入量,例如加速度等等
  • w k w_{k} wk 表示过程噪声,且符合均值为 0,协方差矩阵为 Q Q Q 的高斯噪声分布
  • z k z_k zk 表示 k 时刻的观测值,例如雷达或者 GPS 测量结果,它可能和 x k x_{k} xk 保持相同维度,也可能不同维度。
  • v k v_{k} vk 表示测量噪声
  • F 、 B 、 H F、B、H FBH 分别表示状态转移矩阵、控制矩阵、观测转移矩阵。

先验估计值

由于过程模型噪声以及真实值未知,不妨忽略噪声,并假设:
x k − = F x ~ k − 1 + B u k − 1 x_k^-=F\tilde{x}_{k-1}+Bu_{k-1} xk=Fx~k1+Buk1
我们使用上一时刻的最优估计值 x ~ k − 1 \tilde{x}_{k-1} x~k1 来替代真实值,并将 x k − x_k^- xk 称为当前时刻通过过程模型得到的预测值,也叫做先验估计值

后验(最优)估计值

显然,这是一个误差较大的预估值,我们使用观测值来进行修正
x ~ k = x k − + K ( z k − H x k − ) . . . . . . ③ \tilde{x}_{k}=x_{k}^{-}+K(z_{k}-Hx_{k}^{-})......③ x~k=xk+K(zkHxk)......③
K K K 表示卡尔曼增益,当前为未知量, x ~ k \tilde{x}_{k} x~k最优估计值,由于和当前时刻的观测量有关系,也称为后验估计值。因此我们希望求解一个合适的 K K K,使得最优估计值最接近真实值

目标函数的建立与转化

e k = x k − x ~ k e_k=x_k-\tilde{x}_k ek=xkx~k,表示最优值和真实值的误差。求解最优目标函数 min ⁡ K ∣ e k ∣ \min_{K}|e_{k}| minKek
将③带入公式②,并且设 e k − = x k − x k − e_k^-=x_k-x_k^- ek=xkxk e k − e_k^- ek 表示预测值和真实值的误差,得到:
e k = ( I − K H ) e k − − K v k . . . . . . ④ e_k=(I-KH)e_k^--Kv_k......④ ek=(IKH)ekKvk......④
直接通过随机变量的关系式来求解最优目标函数显然不可行,我们通过表征随机变量的特征值来进行求解,最简单的特征值就是数学期望。不妨设:

  • P k = E [ e k e k t ] P_k=E[e_ke_k^t] Pk=E[ekekt]表示的是真实值和最优值的后验误差协方差矩阵,更新后作为下一次迭代的输入。
  • P k − = E [ e k − e k − t ] P_{k}^{-}=E[e_{k}^{-}e_{k}^{-t}] Pk=E[ekekt]表示的是真实值和预测值的先验误差协方差矩阵,通过使它的迹最小(方差和最小)使得误差最小,以此求出卡尔曼增益。

协方差矩阵是什么

方差是用来度量单个随机变量离散程度,而协方差则一般用来刻画两个随机变量相似程度,协方差的计算公式被定义为:
σ ( x , y ) = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) \sigma\left(x,y\right)=\frac{1}{n-1}\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right) σ(x,y)=n11i=1n(xixˉ)(yiyˉ)
方差可视作随机变量关于其自身的协方差。
协方差矩阵为:
Σ = [ σ ( x 1 , x 1 ) ⋯ σ ( x 1 , x d ) ⋮ ⋱ ⋮ σ ( x d , x 1 ) ⋯ σ ( x d , x d ) ] ∈ R d × d \Sigma=\begin{bmatrix}\sigma(x_1,x_1)&\cdots&\sigma\left(x_1,x_d\right)\\\vdots&\ddots&\vdots\\\sigma\left(x_d,x_1\right)&\cdots&\sigma(x_d,x_d)\end{bmatrix}\in\mathbb{R}^{d\times d} Σ= σ(x1,x1)σ(xd,x1)σ(x1,xd)σ(xd,xd) Rd×d
其中,对角线上的元素为各个随机变量的方差,非对角线上的元素为两两随机变量之间的协方差,根据协方差的定义,我们可以认定:矩阵 Σ 为对称矩阵(symmetric matrix),其大小为 d d d × d d d

可以得到
P k = ( I − K H ) P k − ( I − K H ) t + K E [ v k v k t ] K t = ( I − K H ) P k − ( I − H t K t ) + K R K t = P k − − K H P k − − P k − H t K t + K ( H P k − H t + R ) K t \begin{aligned} P_{k}& =(I-KH)P_{k}^{-}(I-KH)^{t}+KE[v_{k}v_{k}^{t}]K^{t} \\ &=(I-KH)P_k^-(I-H^tK^t)+KRK^t \\ &=P_k^--KHP_k^--P_k^-H^tK^t+K(HP_k^-H^t+R)K^t \end{aligned} Pk=(IKH)Pk(IKH)t+KE[vkvkt]Kt=(IKH)Pk(IHtKt)+KRKt=PkKHPkPkHtKt+K(HPkHt+R)Kt
至此,我们将随机变量的最优化问题转化成为了纯数量问题。

但还不够,很多文章在此直接对 P k P_k Pk然后对卡尔曼增益 K K K 求导,然后获得使 t r ( P k ) tr(P_k) tr(Pk) 最小的 K K K 值。 t r ( P k ) tr(P_k) tr(Pk) 表示的是 P k P_k Pk 主对角线之和,恰好为所有待估计量的方差之和,根据最小二乘法求解最小化 MSE 问题,存在最优解 K K K,使得 min ⁡ K t r ( P k ) \min_{K}tr(P_{k}) minKtr(Pk) 最小。

卡尔曼增益求解

我们求解最优卡尔曼增益 K K K,有
∂ t r ( P k ) ∂ K = ∂ t r ( P k − ) ∂ K − ∂ t r ( K H P k − ) ∂ K − ∂ t r ( P k − H t K t ) ∂ K + ∂ t r ( K ( H P k − H t + R ) K t ) ∂ K = 0 − ( H P k − ) t − ( H P k − t ) t + K [ ( H P k − H t + R ) + ( H P k − H t + R ) t ] = − 2 P k − H t + 2 K ( H P k − H t + R ) = 0 \begin{aligned} \frac{\partial tr(P_{k})}{\partial K}& =\frac{\partial tr(P_{k}^{-})}{\partial K}-\frac{\partial tr(KHP_{k}^{-})}{\partial K}-\frac{\partial tr(P_{k}^{-}H^{t}K^{t})}{\partial K}+\frac{\partial tr(K(HP_{k}^{-}H^{t}+R)K^{t})}{\partial K} \\ &=0-(HP_k^-)^t-(HP_k^{-t})^t+K[(HP_k^-H^t+R)+(HP_k^-H^t+R)^t] \\ &=-2P_k^-H^t+2K(HP_k^-H^t+R) \\ &=0 \end{aligned} Ktr(Pk)=Ktr(Pk)Ktr(KHPk)Ktr(PkHtKt)+Ktr(K(HPkHt+R)Kt)=0(HPk)t(HPkt)t+K[(HPkHt+R)+(HPkHt+R)t]=2PkHt+2K(HPkHt+R)=0
总之,得到:
K = P k − H t ( H P k − H t + R ) − 1 K=P_k^-H^t(HP_k^-H^t+R)^{-1} K=PkHt(HPkHt+R)1

协方差矩阵化简

P k = ( I − K H ) P k − P_k=(I-KH)P_k^- Pk=(IKH)Pk
P k − = F P k − 1 F t + Q P_k^-=FP_{k-1}F^t+Q Pk=FPk1Ft+Q

总结

状态方程

x k = F x k − 1 + B u k − 1 + w k . . . . . . ① z k = H x k + v k . . . . . . ② \begin{aligned} &x_{k}=Fx_{k-1}+Bu_{k-1}+w_{k} ......① \\&z_{k}=Hx_{k}+v_{k}...... ② \end{aligned} xk=Fxk1+Buk1+wk......①zk=Hxk+vk......②

预测

先验估计:根据上一次最优估计的结果,预测当前时刻的估计值,由于缺失过程噪声,所以是不完整的,先验的。
x k − = F x ~ k − 1 + B u k − 1 x_k^-=F\tilde{x}_{k-1}+Bu_{k-1} xk=Fx~k1+Buk1
先验估计协方差:
P k − = F P k − 1 F t + Q P_k^-=FP_{k-1}F^t+Q Pk=FPk1Ft+Q

更新

kalman 增益:先验估计值与实际值存在误差,该误差也假设符合正太分布,为了使误差最小,即求误差方差最小,通过对K求导等于0,求出K值,此时误差最小。根据调整测量误差R,可以调整增益是更相信观测还是更相信预测。
K = P k − H t ( H P k − H t + R ) − 1 K=P_k^-H^t(HP_k^-H^t+R)^{-1} K=PkHt(HPkHt+R)1
后验估计:
x ~ k = x k − + K ( z k − H x k − ) \tilde{x}_{k}=x_{k}^{-}+K(z_{k}-Hx_{k}^{-}) x~k=xk+K(zkHxk)
后验估计协方差:
P k = ( I − K H ) P k − P_k=(I-KH)P_k^- Pk=(IKH)Pk

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡尔曼滤波是一种用来估计系统状态的递归滤波算法,适用于线性系统且满足高斯分布的噪声。该滤波器是由R. E. Kalman提出的。 卡尔曼滤波的原理是基于两个假设:系统动态方程能由线性方程描述,测量方程能由线性方程描述。在每个时间步,卡尔曼滤波器通过两个步骤进行估计和更新:预测步骤和校正步骤。预测步骤是根据系统动态方程和上一个时间步的估计状态预测当前状态的均值和方差。校正步骤是根据测量方程和当前观测得到的测量值以及预测的状态,利用贝叶斯定理更新状态的均值和方差,得到最终的估计值。 推导卡尔曼滤波算法的公式如下: 预测步骤: 预测状态: $ x^- = A \cdot x + B \cdot u $ 预测状态协方差矩阵: $ P^- = A \cdot P \cdot A^T + Q $ 校正步骤: 卡尔曼增益: $ K = P^- \cdot H^T \cdot (H \cdot P^- \cdot H^T + R)^{-1} $ 修正后的状态: $ x = x^- + K \cdot (z - H \cdot x^-) $ 修正后的状态协方差矩阵: $ P = (I - K \cdot H) \cdot P^- $ 其中,x是系统状态向量,A是状态转移矩阵,B是输入矩阵,u是输入向量,P是后验状态的误差协方差矩阵,Q是预测误差协方差矩阵,H是测量矩阵,R是测量误差的协方差矩阵,z是观测向量。 通过上述公式的迭代,卡尔曼滤波器可以递归地估计系统的状态,并通过校正步骤利用最新的观测值来更新估计值。这种算法在估计方差较大的实时系统中具有优势,可以去除噪声和不确定性,提高系统的估计精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值