卡尔曼滤波
基本概念
(线性)卡尔曼滤波的应用基于以下三个假设前提:
- 当前时刻状态只和上一时刻状态有关。
- 模型和系统均满足线性关系。
- 引入的噪声符合高斯分布。
基于上述假设,我们可以得到如下两个表征过程模型和测量模型的公式:
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=Fxk−1+Buk−1+wk......①zk=Hxk+vk......②
公式①表示过程模型,公式②表示测量模型,其中:
- x k x_{k} xk 表示 k 时刻的真实值,是待估计的值,例如位置、速度
- x k − 1 x_{k-1} xk−1 表示 k-1 时刻的真实值
- u k − 1 u_{k-1} uk−1 表示 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 F、B、H 分别表示状态转移矩阵、控制矩阵、观测转移矩阵。
先验估计值
由于过程模型噪声以及真实值未知,不妨忽略噪声,并假设:
x
k
−
=
F
x
~
k
−
1
+
B
u
k
−
1
x_k^-=F\tilde{x}_{k-1}+Bu_{k-1}
xk−=Fx~k−1+Buk−1
我们使用上一时刻的最优估计值
x
~
k
−
1
\tilde{x}_{k-1}
x~k−1 来替代真实值,并将
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(zk−Hxk−)......③
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=xk−x~k,表示最优值和真实值的误差。求解最优目标函数
min
K
∣
e
k
∣
\min_{K}|e_{k}|
minK∣ek∣。
将③带入公式②,并且设
e
k
−
=
x
k
−
x
k
−
e_k^-=x_k-x_k^-
ek−=xk−xk−,
e
k
−
e_k^-
ek− 表示预测值和真实值的误差,得到:
e
k
=
(
I
−
K
H
)
e
k
−
−
K
v
k
.
.
.
.
.
.
④
e_k=(I-KH)e_k^--Kv_k......④
ek=(I−KH)ek−−Kvk......④
直接通过随机变量的关系式来求解最优目标函数显然不可行,我们通过表征随机变量的特征值来进行求解,最简单的特征值就是数学期望。不妨设:
- ⭐ 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[ek−ek−t],表示的是真实值和预测值的先验误差协方差矩阵,通过使它的迹最小(方差和最小)使得误差最小,以此求出卡尔曼增益。
协方差矩阵是什么:
方差是用来度量单个随机变量的离散程度,而协方差则一般用来刻画两个随机变量的相似程度,协方差的计算公式被定义为:
σ ( 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)=n−11i=1∑n(xi−xˉ)(yi−yˉ)
方差可视作随机变量关于其自身的协方差。
协方差矩阵为:
Σ = [ σ ( 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=(I−KH)Pk−(I−KH)t+KE[vkvkt]Kt=(I−KH)Pk−(I−HtKt)+KRKt=Pk−−KHPk−−Pk−HtKt+K(HPk−Ht+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}
∂K∂tr(Pk)=∂K∂tr(Pk−)−∂K∂tr(KHPk−)−∂K∂tr(Pk−HtKt)+∂K∂tr(K(HPk−Ht+R)Kt)=0−(HPk−)t−(HPk−t)t+K[(HPk−Ht+R)+(HPk−Ht+R)t]=−2Pk−Ht+2K(HPk−Ht+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=Pk−Ht(HPk−Ht+R)−1
协方差矩阵化简
P
k
=
(
I
−
K
H
)
P
k
−
P_k=(I-KH)P_k^-
Pk=(I−KH)Pk−
P
k
−
=
F
P
k
−
1
F
t
+
Q
P_k^-=FP_{k-1}F^t+Q
Pk−=FPk−1Ft+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=Fxk−1+Buk−1+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~k−1+Buk−1
先验估计协方差:
P
k
−
=
F
P
k
−
1
F
t
+
Q
P_k^-=FP_{k-1}F^t+Q
Pk−=FPk−1Ft+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=Pk−Ht(HPk−Ht+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(zk−Hxk−)
后验估计协方差:
P
k
=
(
I
−
K
H
)
P
k
−
P_k=(I-KH)P_k^-
Pk=(I−KH)Pk−