Kalman 滤波

1. 简介

Kalman 滤波常用于目标的追踪、预测等任务。滤波器被设计为最小化均方误差。此外,还可以用极大似然的方法得到滤波器。滤波器就是用来从信号中提取出有用的信息,使用一个损失函数评价滤波器的性能。

2. 极大似然估计

使用极大似然的方法得到一个滤波器,最终的目标就是得到一个x^\hat{x} 使得yy的条件概率最大,即
max[P(yx^)] max [P(y|\hat{x})]
假设信号中的噪声是服从高斯分布的N(0,σk)\mathcal{N}(0,\sigma_k)。假设信号为
yk=akxk+nk y_k=a_kx_k+n_k
其中nkn_k是噪声,xkx_k是承载数据的信号,aka_k是系数,那么根据噪声服从高斯分布以及条件概率公式可以得到:
P(ykx^k)=Kke((ykakxk^)22σk2) P(y_k|\hat{x}_k)=K_k \cdot e^{-\left(\frac{(y_k-a_k\hat{x_k})^2}{2\sigma_k^2}\right)}
对上式求对数得到:
logP(yx^)=12k((ykakx^k)2σk2)+C \log P(y|\hat{x})=-\frac{1}{2}\sum_{k}\left(\frac{(y_k-a_k\hat{x}_k)^2}{\sigma_k^2}\right)+C
其中CC是常数项。

3. 状态空间

假设目标是要获得如下过程中变量的值:
xk+1=Φxk+ωk x_{k+1}=\Phi x_k+\omega_k
其中 xkx_ktt时刻的状态向量,Φ\Phi是从时刻 tt到时刻 t+1t+1的状态转移矩阵,并且是被认为时间平稳的,ωk\omega_k是高斯白噪声。

变量的观察量定义为:
zk=Hxk+vk z_k=H x_k+v_k
其中 zkz_k是时刻ttxx的观测量,HH是将状态向量转换为观测向量的矩阵,并且被认为是时间平稳的,vkv_k是度量误差,是高斯白噪声。

两个噪声的协方差被认为是时间平稳的,分别表示为:
Q=E[ωkωkT]R=E[vkvkT] Q=E[\omega_k \omega_k^T]\\ R=E[v_kv_k^T]
xkx_k的估计表示为 x^k\hat{x}_k,使用均方误差衡量滤波器的性能,并表示为
f(ek)=(xkx^k)2 f(e_k)=(x_k-\hat{x}_k)^2

Pk=E[ekekT]=E[(xkx^k)(xkx^k)T]P_k=E[e_ke_k^T]=E\left[(x_k-\hat{x}_k)(x_k-\hat{x}_k)^T\right],并将之前一次的估计记为x^k\hat{x}'_k,那么根据历史估计以及误差情况得到下面这个等式:
x^k=x^k+Kk(zkHx^k) \hat{x}_k=\hat{x}'_k+K_k(z_k-H\hat{x}'_k)
其中 KkK_k是Kalman 增益值,后面给出推导公式,后面一项zkHx^kz_k-H\hat{x}'_k为测量残留(measurement residual)。
zkz_k的定义替换到上式中得到:
x^k=x^k+Kk(Hxk+vkHx^k) \hat{x}_k=\hat{x}'_k+K_k(Hx_k+v_k-H\hat{x}'_k)
再将x^k\hat{x}_k带入到上式PkP_k的等式中得到:
Pk=E[[(IKkH)(xkx^k)Kkvk][(IKkH)(xkx^k)]]=(IKkH)E[(xkx^k)(xkx^k)T](IKkH)+KkE[vkvkT]KkT \begin{aligned} &P_k=E\left[\left[(I-K_kH)(x_k-\hat{x}_k')-K_kv_k\right]\left[(I-K_kH)(x_k-\hat{x}_k')\right]\right]\\ &=(I-K_kH)E\left[(x_k-\hat{x}_k')(x_k-\hat{x}_k')^T\right](I-K_kH)+K_kE[v_kv_k^T]K_k^T \end{aligned}
将之前的预测PkP_k'以及RR替换上面等式中的均方误差项以及噪声的协方差项得到:
Pk=(IKkH)Pk(IKkH)T+KkRKkT P_k=(I-K_kH)P_k'(I-K_kH)^T+K_kRK_k^T

对于矩阵 PkP_k,其对角线上包含均方误差项,因此最小化均方误差的目标可以转换为最小化矩阵 PkP_k的迹(trace)。
首先将上式展开得到

Pk=PkKkHPkPkHTKkT+Kk(HPkHT+R)KkT P_k=P_k'-K_kHP_k'-P_k'H^TK_k^T+K_k(HP_k'H^T+R)K_k^T
T[]T[]表示矩阵的迹,则上式两边表示为
T[Pk]=T[Pk]2T[KkHPk]+T[Kk(HPkHT+R)KkT] T[P_k]=T[P'_k]-2T[K_kHP_k']+T[K_k(HP_k'H^T+R)K_k^T]
KkK_k求导得到:
dT[Pk]dKk=2(HPk)T+2Kk(HPkHT+R) \frac{dT[P_k]}{dK_k}=-2(HP_k')^T+2K_k(HP_k'H^T+R)
并令其等于0,得到:
(HPk)T=Kk(HPkHT+R) (HP'_k)^T=K_k(HP_k'H^T+R)
并最终得到Kalman增益等式:
Kk=PkHT(HPkHT+R)1 K_k=P_k'H^T(HP_k'H^T+R)^{-1}
将该等式带入到上面PkP_k等式中,得到:
Pk=PkPkHT(HPkHT+R)1HPk=PkKkHPk=(IKkH)Pk \begin{aligned} &P_k=P_k'-P_k'H^T(HP_k'H^T+R)^{-1}HP_k'\\ &=P_k'-K_kHP_k'\\ &=(I-K_kH)P_k' \end{aligned}

前面已经定义了关于变量xkx_k从时刻kk到时刻 k+1k+1的转移:
xk+1=Φx^k x_{k+1}'=\Phi\hat{x}_k
对于均方误差中的 eke_k,更新方法为:
ek+1=xk+1x^k+1=(Φxk+ωk)Φx^k=Φek+ωk \begin{aligned} &e_{k+1}'=x_{k+1}-\hat{x}'_{k+1}\\ &=(\Phi x_k+\omega_k)-\Phi \hat{x}_k\\ &=\Phi e_k+\omega_k \end{aligned}

和前面PkP_k等式类似,k+1k+1时刻:
Pk+1=E[ek+1ek+1T]=E[Φek(Φek)T]+E[ωkωkT]=ΦPkΦT+Q \begin{aligned} &P_{k+1}'=E[e^{'}_{k+1} e_{k+1}^{'T}]\\ &= E\left[\Phi e_k(\Phi e_k)^T\right]+E[\omega_k \omega_k^T]\\ &=\Phi P_k\Phi^T+Q \end{aligned}

算法的整体流程如下图所示:
Kalman 滤波

参考

[1] The Kalman filter

相关文章: