Kalman Filter (Bayesian Derivation)

Table of Contents

1. Kalman 滤波器描述

Kalman 滤波器是 Bayes 滤波的一个实现。先回顾一下 Bayes 滤波,如图 1 所示。

bf_bayes_filter.png

Figure 1: The general algorithm for Bayes filtering

Kalman 滤波器基于下面三个假设:
(1) 运动方程是线性的,且存在高斯噪声。 即运动方程可以这样表示:
xt=Atxt1+Btut+εt
其中, xt 是状态向量(设它有 n 个分量), ut 是控制量向量(设它有 m 个分量), Atn×n 的矩阵, Btn×m 的矩阵,随机变量 εt 表示运动噪声,它是高斯随机向量,它和状态向量维度相同,它服从均值为零,协方差矩阵为 Qtn 维高斯分布,即 εtN(0,Qt) 。所以:
p(xtut,xt1)N(Atxt1+Btut,Qt)
用公式表达上面这个 n 维高斯分布,就是:
p(xtut,xt1)=det(2πQt)12exp{12(xtAtxt1Btut)TQt1(xtAtxt1Btut)}

(2) 测量方程是线性的,且存在高斯噪声。 即测量方程可以这样表示:
zt=Ctxt+δt
其中, zt 是测量向量(设它有 k 个分量), Ctk×n 的矩阵,随机变量 δt 表示测量噪声,它和测量向量维度相同,它服从均值为零,协方差矩阵为 Rtk 维高斯分布,即 δtN(0,Rt) 。所以:
p(ztxt)N(Ctxt,Rt)
用公式表达上面这个 k 维高斯分布,就是:
p(ztxt)=det(2πRt)12exp{12(ztCtxt)TRt1(ztCtxt)}

(3) 初始分布 bel(x0) 是高斯分布。

基于上面 3 个假设,Kalman 滤波器实现了 Bayes 滤波器。
Kalman 滤波器用均值向量 μt 和协方差矩阵 Σt 来表示后验概率 bel(xt) Kalman 滤波器算法描述如图 2 所示。

kalman_filter_algorithm.png

Figure 2: Kalman Filter Algorithm

说明:这里运动方程的噪声的协方差矩阵用 Qt 表示,而测量方程的噪声的协方差矩阵用 Rt 表示。而 Probabilistic Robotics, by Sebastian Thrun 一书中运动方程的噪声的协方差矩阵用 Rt 表示,而测量方程的噪声的协方差矩阵用 Qt 表示。

2. Kalman 滤波器推导

完整地推导 Kalman 滤波器算法多少有些复杂。下面我们将仅考虑“状态向量和测量向量都是一维时的 Kalman 滤波器”,因为它的推导比较简单。
设一维线性系统如下所示:
xt=atxt1+btut+εtzt=ctxt+δt
其中 at,bt,ct 都是标量,且:
εtN(0,σQ,t2),δtN(0,σR,t2)

本节主要参考:Notes on Univariate Gaussian Distributions and One-Dimensional Kalman Filters (这里是它的一个 pdf backup)。

2.1. 一维高斯分布概率知识

为了顺利推导一维 Kalman 滤波器,我们先介绍一维高斯分布的相关概率知识。

一维高斯分布的概率密度函数为:
p(x)=12πσ2exp{12(xμ)2σ2}
如果随机变量 X 服从高斯分布,则记为 XN(μ,σ2)
其两个参数计算如下:
μ=EX(X)=xp(x)dxσ2=EX[(Xμ)2]=(xμ)2p(x)dx

2.1.1. 两个一维高斯分布的乘积

假设有两个随机变量 X1,X2 分别服从高斯分布。即:
X1N(μ1,σ12)p1(x)=12πσ12exp{12(xμ1)2σ12}X2N(μ2,σ22)p2(x)=12πσ22exp{12(xμ2)2σ22}

那么他们的乘积 p^(x)=p1(x)p2(x) 的分布是什么呢?
我们计算:
p1(x)p2(x)=ηexp{12((xμ1)2σ12+(xμ2)2σ22)}
上式中, η 是归一化因子(确保 p1(x)p2(x)x 积分为 1 即可)。
我们接着把上式中指数部分写为 x 的降幂形式:
(xμ1)2σ12+(xμ2)2σ22=σ22(xμ1)2+σ12(xμ2)2σ12σ22=σ12+σ22σ12σ22x22σ22μ12+σ12μ22σ12σ22x+σ22μ12+σ12μ22σ12σ22
我们考虑一个均值为 μ^ ,方差为 σ^2 的高斯分布,其密度函数中对应指数部分也写为 x 的降幂形式:
(xμ^)2σ^2=1σ^2x22μ^σ^2x+μ^2σ^2
如果把上面两个式子中,对应部分划等号后求解 μ^,σ^
{1σ^2=σ12+σ22σ12σ22μ^σ^2=σ22μ12+σ12μ22σ12σ22μ^2σ^2=σ22μ12+σ12μ22σ12σ22
上面方程组是无解的,其实我们可以不考虑和 x 无关的常数项部分(即方程组中第 3 个方程)。因为这个部分可以计入到归一化因子 η 中。即只需求解下面的方程组:
{1σ^2=σ12+σ22σ12σ22μ^σ^2=σ22μ12+σ12μ22σ12σ22
求解得:
{μ^=σ22μ12+σ12μ22σ12+σ22σ^2=σ12σ22σ12+σ22
所以:两个一维高斯分布的乘积还是高斯分布,它的参数如上式所述。

2.1.2. 两个一维高斯分布的卷积

假设有两个随机变量 X,Y 分别满足下面约束:
XN(μX,σX2)pX(x)=12πσX2exp{12(xμX)2σX2}YxN(ax+b,σr2)pYX(x)=12πσr2exp{12(yaxb)2σr2}
那么随机变量 Y 满足什么分布呢?
由全概率公式有:
pY(y)=pYX(yx)pX(x)dx
所以 Y 可以看作是两个高斯分布的卷积(说明:卷积有不同形式的定义)。
结论是: Y 也是高斯分布,其均值和方差计算如下:
{μY=aμX+bσY2=σr2+a2σX2
其证明略。证明过程可参考:http://ais.informatik.uni-freiburg.de/teaching/ss15/robotics/etc/gaussian_notes.pdf

2.2. 一维 Kalman 滤波器推导过程

Kalman 滤波器算法共有五个公式。
一维 Kalman 滤波器预测阶段两个公式为:
μt=atμt1+btutσt2=at2σt12+σQ,t2
一维 Kalman 滤波器更新阶段三个公式为:
Kt=σt2ctσt2ct2+σR,t2μt=μt+Kt(ztctμt)σt2=(1Ktct)σt2
下面分别推导它们。

2.2.1. 预测阶段两公式的推导

Bayes 滤波器的预测阶段为:
bel(xt)=p(xtxt1,ut)bel(xt1)dxt1
由于 Kalman 滤波器中假设“运动方程是线性的,且存在高斯噪声”,所以有:
p(xtut,xt1)N(atxt1+btut,σQ,t2)
又由于 Kalman 滤波器中假设“初始分布是高斯分布”,所以有:
bel(xt1)N(μt1,σt12)
从而 bel(xt) 是两个一维高斯分布的卷积,利用之前介绍过的“两个一维高斯分布的卷积”一节给出的结论可知 bel(xt) 也服从高斯分布,且:
bel(xt)N(μt,σt2)μt=atμt1+btutσt2=at2σt12+σQ,t2

至此,一维 Kalman 滤波器算法中预测阶段两公式推导完毕。

2.2.2. 更新阶段三公式的推导

Bayes 滤波器的更新阶段为:
bel(xt)=ηp(ztxt)bel(xt)
由于 Kalman 滤波器中假设“测量方程是线性的,且存在高斯噪声”,所以有:
p(ztxt)N(ctxt,σR,t2)
在前一节中,已经推导出:
bel(xt)N(μt,σt2)
从而 bel(xt) 是两个一维高斯分布的乘积,但我们却无法直接利用之前介绍过的“两个一维高斯分布的乘积”一节给出的结论。因为 p(ztxt)N(ctxt,σR,t2)xt 出现在高斯分布的参数中。不过,我们可以利用介绍“两个一维高斯分布的乘积”时类似的思路来推导 bel(xt) 的分布。

bel(xt)=ηexp{12((ztctxt)2σR,t2+(xtμt)2σt2)}
把上式中指数部分写为 xt 的降幂形式:
(ztctxt)2σR,t2+(xtμt)2σt2=σt2ct2+σR,t2σt2σR,t2xt22σR,t2μt+σt2ctztσt2σR,t2xt+σR,t2μt2+σt2zt2σt2σR,t2

我们考虑一个均值为 μ ,方差为 σ2 的高斯分布,其密度函数中对应指数部分也写为 x 的降幂形式:
(xμ)2σ2=1σ2x22μσ2x+μ2σ2
和“两个一维高斯分布的乘积”一节类似,联立下面方程组:
{1σ2=σt2ct2+σR,t2σt2σR,t2μσ2=σR,t2μt+σt2ctztσt2σR,t2
求解后,得:
{μt=σR,t2μt+σt2ctztσt2ct2+σR,t2σt2=σt2σR,t2σt2ct2+σR,t2
bel(xt) 服从均值和方差如上式所示的高斯分布, bel(xt)N(μt,σt2)

至此,我们已经计算出了 bel(xt) 的均值和方差。但是,它们和一维 Kalman 滤波器算法中更新阶段的三个公式是等价的吗?
答案是肯定的。因为,令:
Kt=σt2ctσt2ct2+σR,t2
容易验证 μt+Kt(ztctμt) 可以化为 σR,t2μt+σt2ctztσt2ct2+σR,t2 (即 μt )。类似地,容易验证 (1Ktct)σt2 可以化为 σt2σR,t2σt2ct2+σR,t2 (即 σt2 )。

至此,一维 Kalman 滤波器算法中更新阶段三公式推导完毕。

3. Kalman 滤波器的其它推导方法

前面介绍的 Kalman 滤波器的推导过程,是基于 Bayes 滤波器的。Kalman 滤波器还有其它形式的推导,如基于最小二乘估计法,这里不详细介绍。

参考:
http://stats.stackexchange.com/questions/86075/kalman-filter-equation-derivation
http://blog.csdn.net/xcq2000/article/details/11129189

Author: cig01

Created: <2016-06-12 Sun>

Last updated: <2016-08-11 Thu>

Creator: Emacs 27.1 (Org mode 9.4)