状态估计算法


前言

  介绍一些常用的状态估计算法,重点介绍卡尔曼滤波的原理及实现,本文需要一定高等数学线性代数概率论的基础


一、贝叶斯滤波

  贝叶斯滤波(Bayesian filtering) 是一种概率推断的方法,用于估计随时间推移的系统状态。它基于贝叶斯定理和递归贝叶斯估计的概念,通过使用先验概率和观测数据,更新状态的后验概率。
  贝叶斯滤波通常用于在有噪声或不完全观测的情况下,进行对系统状态估计。在如目标跟踪、机器人定位和导航、语音识别等领域有着广泛应用。贝叶斯滤波比较适用于有限状态空间的问题

  1. 对于有限状态空间的问题,贝叶斯滤波是一种非常有效的方法,并且相对容易转换为代码实现。由于状态空间是有限的,我们可以使用离散的概率分布或概率矩阵来表示状态和观测之间的转移概率,其应用方式有离散贝叶斯滤波、静态二值贝叶斯滤波和粒子滤波器。例:判断门是开的还是关的,其状态空间只有两种情况,开和关。
  2. 对于无限状态空间问题,则不适合用贝叶斯来估计,在无限状态空间中,由于状态的数量是无穷的。对对上一时刻的所有状态进行积分是办不到的事情,通常会考虑使用其他类型的滤波器或估计方法,如KF、EKF、UKF、IF、EIF这类高斯滤波器。例:判断某一个变量的值,这个值可以是任意的数,其状态空间就是无限的。

  常见的贝叶斯滤波算法包括卡尔曼滤波(Kalman Filter)和粒子滤波(Particle Filter)。卡尔曼滤波适用于线性系统和高斯噪声,而粒子滤波则适用于非线性系统和非高斯噪声

二、卡尔曼滤波

2.1 KF简介

  卡尔曼滤波(Kalman Filter) 是一种在不确定状况下组合多源信息得到所需状态最优估计的一种方法,你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。

  卡尔曼滤波属于是基于贝叶斯最大后验估计的推论,它假设系统的状态与观测误差都是高斯分布,并且系统的动态模型和测量模型均为线性的。在卡尔曼滤波中预测和更新步骤的计算,可以通过线性方程和协方差矩阵的更新来实现,从而大大简化了计算过程,并且内存占用量低,推理速度快,比较适合资源受限制的场景。卡尔曼滤波算法分为两步:

  1. 预测:根据上一时刻(k-1时刻) 的后验估计值来估计当前时刻(k时刻) 的状态,得到k时刻的先验估计值;

  2. 更新:使用当前时刻的测量值来更正预测阶段估计值,得到当前时刻的后验估计值。

2.2 基本线性模型

  卡尔曼滤波是一种高效率的递归滤波器,其应用基于以下三个假设前提:

  • 当前时刻状态只和上一时刻状态有关
  • 模型和系统均满足线性关系
  • 引入的噪声符合高斯分布

  基于上述假设,我们可以得到一离散线性动态系统的模型如下所示:
x k = F x k − 1 + B u k − 1 + w k (1-1) x_k = Fx_{k-1}+Bu_{k-1}+w_k\tag{1-1} xk=Fxk1+Buk1+wk(1-1)
z k = H x k + v k (1-2) z_k = Hx_k+v_k\tag{1-2} zk=Hxk+vk(1-2)

  式1-1为系统状态方程,式1-2为系统观测方程,其参数如下:

  • 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:表示过程噪声
  • z k z_k zk:表示k时刻的观测值,即测量值
  • v k v_k vk:表示测量噪声
  • F F F:表示状态转移矩阵
  • B B B:表示控制矩阵
  • H H H:表示观测转移矩阵

  由于噪声符合高斯分布,设均值为0,协方差矩阵分别为Q和R,则有 p ( w k ) ∼ N ( 0 , Q ) p(w_k) \thicksim N(0,Q) p(wk)N(0,Q) p ( v k ) ∼ N ( 0 , R ) p(v_k) \thicksim N(0,R) p(vk)N(0,R),关于协方差矩阵下面2.3.2小节介绍

2.3 KF公式推导

2.3.1 预测值

  为了更好的理解上面模型,我们假设状态值 x x x为矢量,这里以运动模型的速度 v v v和位置 p p p为例,则有
x = [ p v ] x = \begin{bmatrix} p \\ v \\ \end{bmatrix} x=[pv]
  当然 x x x并不一定为二维数据,比如在温度系统是一维,只有温度参数,也可以在三维系统。此时再假设加速度为 a a a,根据速度位置计算公式有:
v t = v t − 1 + a Δ t p t = p t − 1 + v t − 1 Δ t + 1 2 a ( Δ t ) 2 v_t = v_{t-1}+a \Delta t \\ p_t = p_{t-1}+v_{t-1}\Delta t+\frac{1}{2}a(\Delta t)^2 vt=vt1+aΔtpt=pt1+vt1Δt+21a(Δt)2

  则上式1-1可以变为
[ p t v t ] = [ 1 Δ t 0 1 ] [ p t − 1 v t − 1 ] + [ ( Δ t ) 2 2 Δ t ] a t − 1 + w t \begin{bmatrix} p_t \\ v_t \\ \end{bmatrix} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \\ \end{bmatrix}\begin{bmatrix} p_{t-1} \\ v_{t-1} \\ \end{bmatrix}+\begin{bmatrix} \frac{(\Delta t)^2}{2} \\ \Delta t \\ \end{bmatrix}a_{t-1}+w_t [ptvt]=[10Δt1][pt1vt1]+[2(Δt)2Δt]at1+wt
  此时有 F = [ 1 Δ t 0 1 ] F=\begin{bmatrix} 1 & \Delta t \\ 0 & 1 \\ \end{bmatrix} F=[10Δt1] B = [ ( Δ t ) 2 2 Δ t ] B=\begin{bmatrix} \frac{(\Delta t)^2}{2} \\ \Delta t \\ \end{bmatrix} B=[2(Δt)2Δt]

  同理对于式1-2,由于线性关系,我们假设测量与实际值关系为1:1,由于符号冲突,这里设观测误差为 c c c,可变为
[ z t ( p ) z t ( v ) ] = [ 1 0 0 1 ] [ p t v t ] + c t \begin{bmatrix} z_t(p) \\ z_t(v) \\ \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix}\begin{bmatrix} p_t \\ v_t \\ \end{bmatrix}+c_t [zt(p)zt(v)]=[1001][ptvt]+ct
  此时有 H = [ 1 0 0 1 ] H=\begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix} H=[1001]

  在实际情况中,过程噪声 w k w_k wk与测量噪声 v k v_k vk是未知的,所以 x k x_k xk充满了不确定性。此时再回到卡尔曼滤波的递归特性,它可以不停的修正观测值。由于测量值包含噪声,此时我们就可以忽略噪声,而将其融入到转移矩阵中

  我们使用上一时刻的最优估计值 x ˜ k − 1 \~x_{k-1} x˜k1来替代真实值,并将 x ˉ k \bar{x}_k xˉk称为当前时刻通过过程模型得到的预测值,也叫做先验估计值,此时得到我们最终想要的公式:
x ˉ k = F k x ˜ k − 1 + B k u k − 1 (2-1) \bar{x}_k = F_k\~x_{k-1}+B_ku_{k-1} \tag{2-1} xˉk=Fkx˜k1+Bkuk1(2-1)

  同理观测值的预测有
z k = H k x ˜ k z_k = H_k\~x_k zk=Hkx˜k

2.3.2 先验误差协方差矩阵

  首先定义两个变量:我们把真实值和预测值的差叫做先验误差 e ˉ k \bar{e}_k eˉk,并且把真实值和估计值的差叫做后验误差 e ˜ k \~{e}_k e˜k,即
e ˉ k = x k − x ˉ k e ˜ k = x k − x ˜ k \bar{e}_k=x_k-\bar{x}_k \\ \~{e}_k=x_k-\~x_k eˉk=xkxˉke˜k=xkx˜k
  除此之外,我们继续使用上一小节的速度位置模型来帮助理解。卡尔曼滤波假设两个变量(位置和速度在这个例子中)都是随机的,并且服从高斯分布。那么我们可以引入协方差 σ σ σ,来表示速度 v v v与位置 p p p之间相关程度,记为
σ = C o v ( p , v ) \sigma = Cov(p,v) σ=Cov(p,v)
  再将协方差变成协方差矩阵 Σ Σ Σ
C o v ( x ) = Σ = [ σ p p σ p v σ v p σ v v ] Cov(x) = \Sigma = \begin{bmatrix} \sigma_{pp} & \sigma_{pv} \\ \sigma_{vp} & \sigma_{vv} \\ \end{bmatrix} Cov(x)=Σ=[σppσvpσpvσvv]
  由于 σ p v = σ v p \sigma_{pv}=\sigma_{vp} σpv=σvp,很明显有 Σ = Σ T Σ=Σ^T Σ=ΣT。将式1-1式2-1代入到先验误差 e ˉ k \bar{e}_k eˉk里有
e ˉ k = x k − x ˉ t = F x k − 1 + B u k − 1 + w k − F x ˜ k − 1 − B u k − 1 = F ( x k − 1 − x ˜ k − 1 ) + w k = F e ˜ k − 1 + w k \begin{split} \bar{e}_k &= x_k-\bar{x}_t \\ &= Fx_{k-1}+Bu_{k-1}+w_k- F\~x_{k-1}-Bu_{k-1} \\ &= F(x_{k-1}-\~x_{k-1})+w_k \\ &=F\~{e}_{k-1}+w_k \end{split} eˉk=xkxˉt=Fxk1+Buk1+wkFx˜k1Buk1=F(xk1x˜k1)+wk=Fe˜k1+wk
  恰好得到先验误差 e ˉ k \bar{e}_k eˉk与后验误差 e ˜ k \~{e}_k e˜k的关系,再将上式代入到公式 C o v ( A x ) = A Σ A T Cov(Ax)=AΣA^T Cov(Ax)=AΣAT,由于 w k w_k wk的协方差矩阵为Q(2.2小节有设),此时我们假设 e k e_k ek的协方差矩阵为P,那么有
P k = C o v ( e ˉ k ) = C o v ( F e ˜ k − 1 + w k ) = C o v ( F e ˜ k − 1 ) + C o v ( w k ) = F P k − 1 F T + Q \begin{split} P_k &= Cov(\bar{e}_k) \\ &=Cov(F\~{e}_{k-1}+w_k) \\ &=Cov(F\~{e}_{k-1})+Cov(w_k) \\ &=FP_{k-1}F^T+Q \end{split} Pk=Cov(eˉk)=Cov(Fe˜k1+wk)=Cov(Fe˜k1)+Cov(wk)=FPk1FT+Q
  此时得到先验误差协方差矩阵 P ˉ k \bar{P}_k Pˉk公式
P ˉ k = F k P k − 1 F k T + Q k (2-2) \bar{P}_k=F_kP_{k-1}F_k^T+Q_k \tag{2-2} Pˉk=FkPk1FkT+Qk(2-2)

2.3.3 卡尔曼增益

  先介绍两种误差:估计误差 e e s t e_{est} eest和测量误差 e m e a e_{mea} emea,假设卡尔曼增益用 K K K来标示,则有
K k = e e s t k − 1 e e s t k − 1 + e m e a k − 1 K_k = \frac{e_{est_{k-1}}}{e_{est_{k-1}}+e_{mea_{k-1}}} Kk=eestk1+emeak1eestk1
  这里我们用一维高斯分布来帮助理解,每个变量都有一个均值 μ μ μ,表示随机分布的中心(最可能的状态),以及方差 σ 2 σ^2 σ2,表示不确定性,有
N ( x , μ , σ ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 N(x,μ,σ)=\frac 1 {σ\sqrt{2π}}e^{-\frac{(x-μ)^2}{2σ^2}} N(x,μ,σ)=σ2π 1e2σ2(xμ)2
  假设预测值符合分布 N ( x , μ 0 , σ 0 ) N(x,μ_0,σ_0) N(x,μ0,σ0),测量值符合分布 N ( x , μ 1 , σ 1 ) N(x,μ_1,σ_1) N(x,μ1,σ1),那么最优估计值就是两个分布相融合的地方
在这里插入图片描述

  这里我们直接将两个分布函数相乘,即 N ( x , μ 0 , σ 0 ) ⋅ N ( x , μ 1 , σ 1 ) N(x,μ_0,σ_0) ⋅ N(x,μ_1,σ_1) N(x,μ0,σ0)N(x,μ1,σ1),可以得到分布 N ( x , μ ′ , σ ′ ) N(x,μ^\prime,σ^\prime) N(x,μ,σ),有
μ ′ = μ 0 + σ 0 2 ( μ 1 − μ 0 ) σ 0 2 + σ 1 2 σ ′ 2 = σ 0 2 − σ 0 4 σ 0 2 + σ 1 2 μ^\prime = μ_0 + \frac {σ_0^2(μ_1-μ_0)}{σ_0^2+σ_1^2} \\ σ^{\prime 2} = σ_0^2 - \frac{σ_0^4}{σ_0^2+σ_1^2} μ=μ0+σ02+σ12σ02(μ1μ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别问,问就是全会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值