从贝叶斯滤波到卡尔曼滤波

目录

  • 0 前言
  • 1 贝叶斯滤波的三大概率密度函数
  • 2 卡尔曼滤波的假设
  • 3 卡尔曼滤波的公式推导
    • 3.1 预测步的两个公式
    • 3.2 更新步的三个公式
  • 4 矩阵形式的卡尔曼滤波
  • 5 应用实例
  • 6 参考

0 前言

卡尔曼滤波(Kalman Filter,KF)以贝叶斯滤波为理论基础,并通过假设状态量随机变量(以下简称状态量)、观测量均服从正态分布,假设过程噪声、观测噪声均服从均值为 0 的正态分布,以及假设状态转移函数和观测函数均为线性函数,实现对连续型随机过程的递推状态估计。简言之,卡尔曼滤波是在贝叶斯滤波框架下求解线性高斯问题。

1 贝叶斯滤波的三大概率密度函数

在此前的文章《从概率到贝叶斯滤波》中,已经讲到贝叶斯滤波的先验概率密度函数、似然概率密度函数和后验概率密度函数:

(1) 先验概率密度函数
f X k − ( x ) = ∫ − ∞ + ∞ f Q k [ x − f ( v ) ] f X k − 1 + ( v ) d v f_{X_k}^-(x)=\int_{-\infty}^{+\infty}f_{Q_k}[x-f(v)]f_{X_{k-1}}^+(v)\mathrm{d}v fXk(x)=+fQk[xf(v)]fXk1+(v)dv

(2) 似然概率密度函数
f Y k ∣ X k ( y k   ∣   x ) = f R k [ y k − h ( x ) ] f_{Y_k|X_k}(y_k \ | \ x) = f_{R_k}[y_k-h(x)] fYkXk(yk  x)=fRk[ykh(x)]

(3) 后验概率密度函数
f X k + ( x ) = η k ⋅ f R k [ y k − h ( x ) ] ⋅ f X k − ( x ) f_{X_k}^+(x)=\eta_k·f_{R_k}[y_k-h(x)]·f_{X_k}^-(x) fXk+(x)=ηkfRk[ykh(x)]fXk(x)

其中,后验概率密度函数中的归一化常数 η k \eta_k ηk 为:
η k = { ∫ − ∞ + ∞ f R k [ y k − h ( x ) ] f X k − ( x ) d x } − 1 \eta_k=\left\{\int_{-\infty}^{+\infty}f_{R_k}[y_k-h(x)]f_{X_k}^-(x)\mathrm{d}x\right\}^{-1} ηk={+fRk[ykh(x)]fXk(x)dx}1

2 卡尔曼滤波的假设

卡尔曼滤波以贝叶斯滤波为理论基础,并作了六个前提假设:

(1) 假设一:状态量服从正态分布
X ∼ N ( μ X ,   σ X 2 ) X \sim \mathcal{N}(\mu_X, \ \sigma_X^2) XN(μX, σX2)

(2) 假设二:观测量服从正态分布
Y ∼ N ( μ Y ,   σ Y 2 ) Y \sim \mathcal{N}(\mu_Y, \ \sigma_Y^2) YN(μY, σY2)

(3) 假设三:过程噪声服从均值为 0 的正态分布
Q ∼ N ( 0 ,   σ Q 2 ) Q \sim \mathcal{N}(0, \ \sigma_Q^2) QN(0, σQ2)

(4) 假设四:观测噪声服从均值为 0 的正态分布
Q ∼ N ( 0 ,   σ R 2 ) Q \sim \mathcal{N}(0, \ \sigma_R^2) QN(0, σR2)

(5) 假设五:状态转移函数为线性函数
f ( X k ) = F ∗ X k − 1 + B ∗ u k f(X_k)=F*X_{k-1}+B*u_k f(Xk)=FXk1+Buk

其中, F F F 为状态转移比例项,对于单一状态量的卡尔曼滤波中, F F F 为一常数; B B B 为控制比例项, u k u_k uk 为控制量, B B B u k u_k uk 的乘积可视为线性状态转移函数中的截距项。在简单的系统中,常常没有控制项 B B B u k u_k uk

(6) 假设六:观测函数为线性函数
h ( X k ) = H ∗ X k h(X_k)=H*X_k h(Xk)=HXk

H H H 为观测比例项,对于单一状态量的卡尔曼滤波中, H H H 为一常数。

3 卡尔曼滤波的公式推导

3.1 预测步的两个公式

根据假设一, k − 1 k-1 k1 时刻状态量 X k − 1 X_{k-1} Xk1 服从均值为 μ k − 1 + \mu_{k-1}^+ μk1+,方差为 σ k − 1 + 2 {\sigma_{k-1}^+}^2 σk1+2 的正态分布:
X k − 1 ∼ N ( μ k − 1 + ,   σ k − 1 + 2 ) X_{k-1} \sim \mathcal{N}(\mu_{k-1}^+, \ {\sigma_{k-1}^+}^2) Xk1N(μk1+, σk1+2)

X k − 1 X_{k-1} Xk1 的后验概率密度函数为:
f X k − 1 + = 1 σ k − 1 + 2 π e − ( x − μ k − 1 + ) 2 2 σ k − 1 + 2 f_{X_{k-1}}^+=\frac{1}{\sigma_{k-1}^+\sqrt{2\pi}}e^{-\frac{(x-\mu_{k-1}^+)^2}{2{\sigma_{k-1}^+}^2}} fXk1+=σk1+2π 1e2σk1+2(xμk1+)2

结合假设三与假设五,k 时刻状态量 X k X_k Xk 的先验概率密度函数为:
f X k − ( x ) = ∫ − ∞ + ∞ f Q k [ x − f ( v ) ] f X k − 1 + ( v ) d v = ∫ − ∞ + ∞ 1 σ Q k 2 π e − ( x − F ∗ v − B ∗ u k ) 2 2 σ Q k 2 ∗ 1 σ k − 1 + 2 π e − ( v − μ k − 1 + ) 2 2 σ k − 1 + 2 d v \begin{aligned} f_{X_k}^-(x) & = \int_{-\infty}^{+\infty}f_{Q_k}[x-f(v)]f_{X_{k-1}}^+(v)\mathrm{d}v \\ & = \int_{-\infty}^{+\infty}\frac{1}{\sigma_{Q_k}\sqrt{2\pi}}e^{-\frac{(x-F*v-B*u_k)^2}{2{\sigma_{Q_k}}^2}}*\frac{1}{\sigma_{k-1}^+\sqrt{2\pi}}e^{-\frac{(v-\mu_{k-1}^+)^2}{2{\sigma_{k-1}^+}^2}}\mathrm{d}v \end{aligned} fXk(x)=+fQk[xf(v)]fXk1+(v)dv=+σQk2π 1e2σQk2(xFvBuk)2σk1+2π 1e2σk1+2(vμk1+)2dv

对于 f X k − ( x ) f_{X_k}^-(x) fXk(x) 的推导,有三种方法:

  • Mathematica 软件做符号推导
  • 复变函数留数定理
  • 傅里叶变换 + 卷积

这里使用 Mathematica 软件做符号推导,创建 WolframScript(.wls)脚本文件,创建 f X k − ( x ) f_{X_k}^-(x) fXk(x) 公式:

从贝叶斯滤波到卡尔曼滤波_第1张图片

其中, σ Q k 2 {\sigma_{Q_k}}^2 σQk2 表示 k 时刻过程噪声的方差; μ k − o n e + \mu_{k-one}^+ μkone+ 表示 k − 1 k-1 k1 时刻状态量的后验概率密度函数均值; σ k − o n e + 2 {\sigma_{k-one}^+}^2 σkone+2 表示 k − 1 k-1 k1 时刻状态量的后验概率密度函数方差。

运行代码进行化简,得到如下条件表达式结果:

卡尔曼滤波先验概率密度函数wls脚本化简结果

条件表达式中的条件显然成立,整理表达式形式可知,先验概率密度函数 f X k − ( x ) f_{X_k}^-(x) fXk(x) 为正态分布函数,均值和方差分别为:
μ k − = F ∗ μ k − 1 + + B ∗ u k (3.1) \mu_k^- = F*\mu_{k-1}^++B*u_k \tag{3.1} μk=Fμk1++Buk(3.1)

σ k − 2 = F 2 ∗ σ k − 1 + 2 + σ Q k 2 (3.2) {\sigma_k^-}^2 = F^2*{\sigma_{k-1}^+}^2+{\sigma_{Q_k}}^2 \tag{3.2} σk2=F2σk1+2+σQk2(3.2)

3.2 更新步的三个公式

结合假设四、假设六、公式 (3.1)、公式 (3.2),可知,k 时刻状态量 X k X_k Xk 的后验概率密度函数为:
f X k + ( x ) = η k ⋅ f R k [ y k − h ( x ) ] ⋅ f X k − ( x ) = η k ∗ 1 σ R k 2 π e − ( y k − H ∗ x ) 2 2 σ R k 2 ∗ 1 σ k − 2 π e − ( x − μ k − ) 2 2 σ k − 2 \begin{aligned} f_{X_k}^+(x) & = \eta_k·f_{R_k}[y_k-h(x)]·f_{X_k}^-(x) \\ & = \eta_k*\frac{1}{\sigma_{R_k}\sqrt{2\pi}}e^{-\frac{(y_k-H*x)^2}{2{\sigma_{R_k}}^2}}*\frac{1}{\sigma_{k}^-\sqrt{2\pi}}e^{-\frac{(x-\mu_{k}^-)^2}{2{\sigma_{k}^-}^2}} \end{aligned} fXk+(x)=ηkfRk[ykh(x)]fXk(x)=ηkσRk2π 1e2σRk2(ykHx)2σk2π 1e2σk2(xμk)2

其中,归一化常数 η k \eta_k ηk 为:
η k = ∫ − ∞ ∞ 1 σ R k 2 π e − ( y k − H ∗ x ) 2 2 σ R k 2 ∗ 1 σ k − 2 π e − ( x − μ k − ) 2 2 σ k − 2 d x \eta_k=\int_{-\infty}^{\infty}\frac{1}{\sigma_{R_k}\sqrt{2\pi}}e^{-\frac{(y_k-H*x)^2}{2{\sigma_{R_k}}^2}}*\frac{1}{\sigma_{k}^-\sqrt{2\pi}}e^{-\frac{(x-\mu_{k}^-)^2}{2{\sigma_{k}^-}^2}}\mathrm{d}x ηk=σRk2π 1e2σRk2(ykHx)2σk2π 1e2σk2(xμk)2dx

创建 WolframScript(.wls)脚本文件,创建 f X k + ( x ) f_{X_k}^+(x) fXk+(x) 公式:

卡尔曼滤波后验概率密度函数wls脚本公式

其中, σ R k 2 {\sigma_{R_k}}^2 σRk2 表示 k 时刻观测噪声的方差; y k y_k yk 表示 k 时刻观测量的取值。Simplify[] 函数的使用是为了简化结果。

运行代码进行化简,得到如下条件表达式结果:

卡尔曼滤波后验概率密度函数wls脚本化简结果

条件表达式中的条件显然成立,整理表达式形式可知后验概率密度函数 f X k + ( x ) f_{X_k}^+(x) fXk+(x) 的均值和方差分别为:
μ k + = μ k − + K ∗ ( y k − H ∗ μ k − ) (3.3) \mu_k^+ = \mu_k^-+K*(y_k-H*\mu_k^-) \tag{3.3} μk+=μk+K(ykHμk)(3.3)

σ k + 2 = ( 1 − K ∗ H ) ∗ σ k − 2 (3.4) {\sigma_k^+}^2 = (1-K*H)*{\sigma_k^-}^2 \tag{3.4} σk+2=(1KH)σk2(3.4)

μ k + \mu_k^+ μk+ 即 k 时刻状态量 X k X_k Xk 的后验估计 x ^ k + \hat{x}_k^+ x^k+。其中, K K K 被称为卡尔曼增益系数:
K = H ∗ σ k − 2 H 2 ∗ σ k − 2 + σ R k 2 (3.5) K=\frac{H*{\sigma_k^-}^2}{H^2*{\sigma_k^-}^2+{\sigma_{R_k}}^2} \tag{3.5} K=H2σk2+σRk2Hσk2(3.5)

卡尔曼增益系数 K K K 可变形为:
K = H ∗ σ k − 2 H 2 ∗ σ k − 2 + σ R k 2 = H H 2 + σ R k 2 / σ k − 2 K=\frac{H*{\sigma_k^-}^2}{H^2*{\sigma_k^-}^2+{\sigma_{R_k}}^2} = \frac{H}{H^2+{\sigma_{R_k}}^2/{\sigma_k^-}^2} K=H2σk2+σRk2Hσk2=H2+σRk2/σk2H

σ R k 2 ≫ σ k − 2 {\sigma_{R_k}}^2 \gg {\sigma_k^-}^2 σRk2σk2 时, K → 0 K\to0 K0,故
μ k + = μ k − + K ∗ ( y k − H ∗ μ k − ) → μ k − \mu_k^+ = \mu_k^-+K*(y_k-H*\mu_k^-) \to \mu_k^- μk+=μk+K(ykHμk)μk

此时,后验估计结果倾向于预测;

σ R k 2 ≪ σ k − 2 {\sigma_{R_k}}^2 \ll {\sigma_k^-}^2 σRk2σk2 时, K → 1 H K\to\frac{1}{H} KH1,故
μ k + = μ k − + K ∗ ( y k − H ∗ μ k − ) → y k H \mu_k^+ = \mu_k^-+K*(y_k-H*\mu_k^-) \to \frac{y_k}{H} μk+=μk+K(ykHμk)Hyk

此时,后验估计结果倾向于观测。

点击这里下载我的 WolframScript(.wls)脚本文件。

4 矩阵形式的卡尔曼滤波

上文内容所描述的是一维的卡尔曼滤波,当状态量和观测量不再是单一的随机变量而是由多个随机变量组成的序列时,卡尔曼滤波中各个量的维数也将随之改变:

  • 状态量 X X X 由随机变量演变为随机向量,随机向量中的每一个分量为一个状态量随机变量。维数为 n X × 1 n_X \times 1 nX×1
  • 状态转移比例项 F F F 演变为矩阵,维数为 n X × n X n_X \times n_X nX×nX
  • 控制量 u k u_k uk 演变为矩阵,维数为 n u × 1 n_u \times 1 nu×1
  • 控制比例项 B B B 演变为矩阵,维数为 n X × n u n_X \times n_u nX×nu
  • 状态量概率密度函数均值 μ \mu μ 演变为矩阵,维数为 n X × 1 n_X \times 1 nX×1
  • 状态量概率密度函数方差 σ 2 \sigma^2 σ2 演变为协方差矩阵,用 Σ \Sigma Σ 表示,维数为 n X × n X n_X \times n_X nX×nX
  • 过程噪声方差 σ Q 2 {\sigma_Q}^2 σQ2 演变为协方差矩阵,用 Σ Q \Sigma_Q ΣQ 表示,维数为 n X × n X n_X \times n_X nX×nX
  • 观测量 Y Y Y 由随机变量演变为随机向量,随机向量中的每一个分量为一个观测量随机变量。维数为 n Y × 1 n_Y \times 1 nY×1
  • 观测值 y k y_k yk 由单一值演变为由单一值组成的值矩阵,维数为 n Y × 1 n_Y \times 1 nY×1
  • 观测比例项 H H H 演变为矩阵,维数为 n Y × n X n_Y \times n_X nY×nX
  • 观测噪声方差 σ R 2 {\sigma_R}^2 σR2 演变为协方差矩阵,用 Σ R \Sigma_R ΣR 表示,维数为 n Y × n Y n_Y \times n_Y nY×nY
  • 卡尔曼增益系数 K K K 演变为矩阵,维数为 n X × n Y n_X \times n_Y nX×nY

对应的五个公式演变为:
μ k − = F ∗ μ k − 1 + + B ∗ u k (4.1) \mu_k^- = F*\mu_{k-1}^++B*u_k \tag{4.1} μk=Fμk1++Buk(4.1)

Σ k − = F ∗ Σ k − 1 + ∗ F T + Σ Q k (4.2) \Sigma_k^- = F*\Sigma_{k-1}^+*F^T+{\Sigma_{Q_k}} \tag{4.2} Σk=FΣk1+FT+ΣQk(4.2)

μ k + = μ k − + K ∗ ( y k − H ∗ μ k − ) (4.3) \mu_k^+ = \mu_k^-+K*(y_k-H*\mu_k^-) \tag{4.3} μk+=μk+K(ykHμk)(4.3)

Σ k + = ( I − K ∗ H ) ∗ Σ k − (4.4) \Sigma_k^+ = (I-K*H)*\Sigma_k^- \tag{4.4} Σk+=(IKH)Σk(4.4)

K = Σ k − ∗ H T ∗ ( H ∗ Σ k − ∗ H T + Σ R k ) − 1 (4.5) K=\Sigma_k^-*H^T*(H*\Sigma_k^-*H^T+{\Sigma_{R_k}})^{-1} \tag{4.5} K=ΣkHT(HΣkHT+ΣRk)1(4.5)

公式 (4.3) 中 μ k + \mu_k^+ μk+ 即 k 时刻状态量 X k X_k Xk 的后验估计 x ^ k + \hat{x}_k^+ x^k+ y k − H ∗ μ k − y_k-H*\mu_k^- ykHμk 常被称为残差(Residual)或新息(Innovation);公式 (4.4) 中的 I I I 代表单位矩阵,维数为 n X × n X n_X \times n_X nX×nX

从结果中还可以发现,外部控制项 B ∗ u k B*u_k Buk 通过影响先验估计均值间接影响了后验估计均值,但对后验估计方差没有影响。

5 应用实例

卡尔曼滤波的应用实例可参考此前的学习文章《(十三)手把手教你写卡尔曼滤波器》,文章中的应用场景是使用激光雷达(Lidar)对匀速直线运动(Constant Velocity,CV)目标的测距过程。

博主工作中使用卡尔曼滤波对路口前的停止线(来自单目前向视觉)纵向距离进行了估计,系统模型抽象为匀加速直线运动(Constant Acceleration,CA),此时的状态转移函数 f ( x ) f(x) f(x) 中存在外部控制项 B ∗ u k B*u_k Buk,停止线纵向距离估计结果用于下游规划控制模块的纵向速度规划输入参考。

6 参考

  1. b站忠实的王大头《贝叶斯滤波与卡尔曼滤波》第七讲:卡尔曼滤波
  2. 无人驾驶技术入门(十三)| 手把手教你写卡尔曼滤波器
  3. How a Kalman filter works, in pictures
  4. 详解卡尔曼滤波原理
  5. Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation

你可能感兴趣的:(多传感器信息融合,概率论,机器学习,算法)