卡尔曼滤波kalman全流程详细推导
1. 应用场景
对于任何状态连续性变化的系统,比如无人车运动中的速度和位置、车道线的位置等,均可以考虑使用kalman进行状态估计和优化。
2. 算法
本文举无人车的例子对kalman算法进行详细推导。
2.1. 状态变量构建
用
x
k
⃗
\vec {x_k}
xk表示无人车当前时刻的一个状态,只包括位置和速度:
x
k
⃗
=
(
p
⃗
,
v
⃗
)
\vec {x_k} = (\vec {p}, \vec {v})
xk=(p,v)
虽然我们可以通过传感器获得当前时刻无人车位置和速度的一个值。但是由于传感器误差的存在,我们并不知道无人车实际的位置和速度,它们之间有很多种可能正确的组合,但其中一些组合的可能性要大于另一些。基于这一点可以假设状态变量符合高斯分布,则可以基于高斯分布对状态进行表示,由两部分组成:包括最佳估计
x
k
^
\hat {x_k}
xk^和状态协方差矩阵
P
k
{P_k}
Pk。
x
k
^
=
[
p
o
s
i
t
i
o
n
v
e
l
o
c
i
t
y
]
,
P
k
=
[
Σ
p
p
Σ
p
v
Σ
v
p
Σ
v
v
]
(
1
)
\hat {x_k}=\begin{bmatrix} position\\ velocity\\ \end{bmatrix}, \ {P_k}=\begin{bmatrix} \Sigma_{pp} & \Sigma_{pv} \\ \Sigma_{vp} & \Sigma_{vv} \\ \end{bmatrix}\qquad (1)
xk^=[positionvelocity], Pk=[ΣppΣvpΣpvΣvv](1)
初始的
x
k
^
\hat {x_k}
xk^可用传感器的观测值直接表示,但是状态协方差矩阵
P
k
{P_k}
Pk则要自己指定,指定的依据为,如果变量之间的变化趋势一致,即如果一个变量大于自身的期望时,另一个变量也大于自身的期望,则协方差为正,如果两个变量相互独立,则协方差为0。
2.2. 预测
之后就可以根据当前状态
(
k
−
1
)
(k-1)
(k−1)时刻来预测下一状态
(
k
)
(k)
(k)。初始预测时的输入
x
k
^
\hat {x_k}
xk^即为初始的
x
k
^
\hat {x_k}
xk^,虽然我们并不知道对下一状态的所有预测中哪个是真值,但是预测函数并不在乎,因为它对所有的可能性进行预测,并给出了新的高斯分布。用状态转移矩阵
F
k
\ {F_k}
Fk来表示这一预测过程,
F
k
\ {F_k}
Fk根据运动方程人为指定,用公式表示为:
{
p
k
=
p
k
−
1
+
Δ
t
v
k
−
1
v
k
=
v
k
−
1
⇒
x
k
^
=
[
1
Δ
t
0
1
]
x
k
−
1
^
=
F
k
x
k
−
1
^
(
2
)
\begin{cases} p_k=p_{k-1}+\Delta tv_{k-1} \\ v_k=v_{k-1} \end{cases} \Rightarrow\ \ {\hat {x_k}}=\begin{bmatrix} \ 1& \Delta t \\ \ 0 & \ 1 \\ \end{bmatrix} \hat {x_{k-1}}=\ {F_k}\hat {x_{k-1}}\qquad (2)
{pk=pk−1+Δtvk−1vk=vk−1⇒ xk^=[ 1 0Δt 1]xk−1^= Fkxk−1^(2)
此时有了最佳状态估计,但是还没有对应的协方差矩阵,下面为更新协方差矩阵的公式:
P
k
=
F
k
P
k
−
1
F
k
T
(
3
)
\ {P_k}=\ F_kP_{k-1}F_k^T\qquad (3)
Pk= FkPk−1FkT(3)
证明如下:
假设
X
X
X是以
n
n
n个标量随机变量组成的列向量,
X
=
[
X
1
⋮
X
n
]
X=\begin{bmatrix} \ X_1 \\ \vdots \\ \ X_n \end{bmatrix}
X=
X1⋮ Xn
并且
μ
i
\mu_i
μi是其第i个元素的期望,即
μ
i
=
E
(
X
i
)
\mu_i=E(X_i)
μi=E(Xi)。协方差矩阵被定义的第
i
i
i,
j
j
j项为:
Σ
i
j
=
c
o
v
(
X
i
,
X
j
)
=
E
[
(
X
i
−
μ
i
)
(
X
j
−
μ
j
)
]
\Sigma_{ij}=cov(X_i,X_j)=E[(X_i-\mu_i)(X_j-\mu_j)]
Σij=cov(Xi,Xj)=E[(Xi−μi)(Xj−μj)]
又因
X
X
X的期望由其中每一个元素的期望决定,即:
E
(
X
)
=
E
[
X
1
⋮
X
n
]
=
[
E
(
X
1
)
⋮
E
(
X
n
)
]
E(X)=E\begin{bmatrix} \ X_1 \\ \vdots \\ \ X_n \end{bmatrix}=\begin{bmatrix} \ E(X_1) \\ \vdots \\ \ E(X_n) \end{bmatrix}
E(X)=E
X1⋮ Xn
=
E(X1)⋮ E(Xn)
所以向量
X
X
X的协方差矩阵可以表示为:
Σ
=
E
[
(
X
−
E
(
X
)
)
(
X
−
E
(
X
)
)
T
]
=
[
E
[
(
X
1
−
μ
1
)
(
X
1
−
μ
1
)
]
⋯
E
[
(
X
1
−
μ
1
)
(
X
n
−
μ
n
)
]
⋮
⋮
⋮
E
[
(
X
n
−
μ
n
)
(
X
1
−
μ
1
)
]
⋯
E
[
(
X
n
−
μ
n
)
(
X
n
−
μ
n
)
]
]
\Sigma=E[(X-E(X))(X-E(X))^T]\\=\begin{bmatrix} \ E[(X_1-\mu_1)(X_1-\mu_1)] & \cdots & E[(X_1-\mu_1)(X_n-\mu_n)]\\ \vdots & \vdots& \vdots \\ E[(X_n-\mu_n)(X_1-\mu_1)] & \cdots & E[(X_n-\mu_n)(X_n-\mu_n)] \end{bmatrix}
Σ=E[(X−E(X))(X−E(X))T]=
E[(X1−μ1)(X1−μ1)]⋮E[(Xn−μn)(X1−μ1)]⋯⋮⋯E[(X1−μ1)(Xn−μn)]⋮E[(Xn−μn)(Xn−μn)]
假设向量
X
X
X的协方差矩阵为
c
o
v
(
X
)
cov(X)
cov(X)
则有
c
o
v
(
X
)
=
E
[
(
X
−
E
(
X
)
)
(
X
−
E
(
X
)
)
T
]
cov(X)=E[(X-E(X))(X-E(X))^T]
cov(X)=E[(X−E(X))(X−E(X))T]
令
Y
=
A
X
+
a
Y=AX+a
Y=AX+a
E
Y
=
E
(
A
X
+
a
)
=
A
E
X
+
a
EY=E(AX+a)=AEX+a
EY=E(AX+a)=AEX+a
Y
−
E
Y
=
A
(
X
−
E
X
)
Y-EY=A(X-EX)
Y−EY=A(X−EX)
所以
c
o
v
(
Y
)
=
E
[
(
Y
−
E
(
Y
)
)
(
Y
−
E
(
Y
)
)
T
]
=
E
[
A
(
X
−
E
(
X
)
)
(
X
−
E
(
X
)
)
T
A
T
]
=
A
(
E
(
X
−
E
(
X
)
)
(
X
−
E
(
X
)
)
T
)
A
T
=
A
c
o
v
(
X
)
A
T
cov(Y)=E[(Y-E(Y))(Y-E(Y))^T]\\=E[A(X-E(X))(X-E(X))^TA^T]\\=A(E(X-E(X))(X-E(X))^T)A^T\\=Acov(X)A^T
cov(Y)=E[(Y−E(Y))(Y−E(Y))T]=E[A(X−E(X))(X−E(X))TAT]=A(E(X−E(X))(X−E(X))T)AT=Acov(X)AT
所以可证
P
k
=
F
k
P
k
−
1
F
k
T
\ {P_k}=\ F_kP_{k-1}F_k^T
Pk= FkPk−1FkT
考虑外部控制量
接下来就是看我们是否知道一些外部控制量,比如假设由于油门的设置或控制指令,可以知道
a
a
a,根据基本的运动学方程可得
{
p
k
=
p
k
−
1
+
Δ
t
v
k
−
1
+
1
2
a
Δ
t
2
v
k
=
v
k
−
1
+
a
Δ
t
⇒
F
k
x
k
−
1
^
+
[
Δ
t
2
2
Δ
t
]
a
=
F
k
x
k
−
1
^
+
B
k
u
k
⃗
(
4
)
\begin{cases} p_k=p_{k-1}+\Delta tv_{k-1}+ \cfrac{1}{2}a\Delta t^2\\ v_k=v_{k-1}+a\Delta t \end{cases} \Rightarrow\ \ \ {F_k}\hat {x_{k-1}}+\begin{bmatrix} \cfrac{\Delta t^2}{2}\\ \Delta t\\ \end{bmatrix}a\\= {F_k}\hat {x_{k-1}}+ {B_k}\vec {u_{k}}\qquad (4)
⎩
⎨
⎧pk=pk−1+Δtvk−1+21aΔt2vk=vk−1+aΔt⇒ Fkxk−1^+
2Δt2Δt
a=Fkxk−1^+Bkuk(4)
其中,
B
k
B_k
Bk称为控制矩阵,
u
⃗
k
\vec u_k
uk称为控制向量。
考虑外部干扰
这些状态量除了受系统自身性质的属性和外部控制作用的影响外,有可能还会受到一些未知因素的影响,比如轮胎打滑或者斜坡,需要再添加一些新的不确定性来跟踪这些不确定性的干扰,可以将这些没有被跟踪的干扰当做协方差为
Q
k
Q_k
Qk的噪声来处理。通过简单地添加
Q
k
Q_k
Qk可以得到扩展的协方差,公式如下:
P
k
=
F
k
P
k
−
1
F
k
T
+
Q
k
(
5
)
\ {P_k}=\ F_kP_{k-1}F_k^T+Q_k\qquad (5)
Pk= FkPk−1FkT+Qk(5)
由公式(4)和(5)可知,新的最优估计是根据上一最优估计预测得到的,并加上已知外部控制量的修正。而新的不确定性由上一不确定性预测得到,并加上外部环境的干扰。
到此为止,我们对系统可能的动向有了一个模糊的估计,用
x
k
^
\hat {x_k}
xk^和
P
k
{P_k}
Pk来表示。接下来再结合当前帧的测量结果可以进一步提升当前帧的系统状态估计结果。
2.3. 融合测量值更新状态估计结果
传感器读取的数据的单位和尺度有可能与我们要跟踪的状态的单位和尺度不一样,所以需要用矩阵
H
k
H_k
Hk将前面的状态估计结果转换为与传感器的单位和尺度一致,公式如下:
{
μ
e
x
c
e
p
t
e
d
⃗
=
H
k
x
k
^
Σ
e
x
c
e
p
t
e
d
=
H
k
P
k
H
k
T
(
6
)
\begin{cases} \ {\vec {\mu_{excepted}}}= {H_k}\hat {x_{k}}\\ \Sigma_{excepted}=\ H_kP_{k}H_k^T \end{cases}\qquad (6)
{ μexcepted=Hkxk^Σexcepted= HkPkHkT(6)
从测量到的传感器数据中,我们大致能猜到系统当前处于什么状态。但是由于存在不确定性,某些状态可能比我们得到的读数更接近真实状态。
我们将这种不确定性(例如传感器噪声)用协防差
R
k
R_k
Rk表示,该分布的均值就是我们读取到的传感器数据,称之为
z
k
⃗
\vec {z_k}
zk。
现在我们有了两个高斯分布,一个在预测值附近,一个在传感器读数附近。两种情况同时发生的概率即是我们想要的状态,只需要将两个高斯分布相乘即可。
融合高斯分布的理论推导如下(以一维高斯分布为例):
一维高斯分布的概率密度函数:
f
(
x
)
=
1
2
π
δ
e
−
(
x
−
μ
)
2
2
δ
2
f(x)= \cfrac{1}{\sqrt {2\pi}\delta}e^{-\cfrac{(x-\mu)^2}{2\delta^2}}\qquad
f(x)=2πδ1e−2δ2(x−μ)2
其本质问题可抽象为:已知两个独立高斯分布
N
1
~
(
μ
1
,
δ
1
2
)
,
N
2
~
(
μ
2
,
δ
2
2
)
N_1~(\mu_1,\delta_1^2),N_2~(\mu_2,\delta_2^2)
N1~(μ1,δ12),N2~(μ2,δ22),求新的概率分布
N
=
N
1
×
N
2
~
(
?
,
?
)
N=N_1×N_2~(?,?)
N=N1×N2~(?,?)
N
1
N_1
N1的概率分布函数为
f
1
(
x
)
f_1(x)
f1(x),
N
2
N_2
N2的概率分布函数为
f
2
(
x
)
f_2(x)
f2(x),则:
f
1
(
x
)
f
2
(
x
)
=
1
2
π
δ
1
e
−
(
x
−
μ
1
)
2
2
δ
1
2
⋅
1
2
π
δ
2
e
−
(
x
−
μ
2
)
2
2
δ
2
2
=
1
2
π
δ
1
δ
2
e
−
(
(
x
−
μ
1
)
2
2
δ
1
2
+
(
x
−
μ
2
)
2
2
δ
2
2
)
f_1(x)f_2(x)= \cfrac{1}{\sqrt {2\pi}\delta_1}e^{-\cfrac{(x-\mu_1)^2}{2\delta_1^2}} \cdot \cfrac{1}{\sqrt {2\pi}\delta_2}e^{-\cfrac{(x-\mu_2)^2}{2\delta_2^2}} \\ = \cfrac{1}{{2\pi}\delta_1\delta_2}e^{-(\cfrac{(x-\mu_1)^2}{2\delta_1^2}+\cfrac{(x-\mu_2)^2}{2\delta_2^2})}\qquad
f1(x)f2(x)=2πδ11e−2δ12(x−μ1)2⋅2πδ21e−2δ22(x−μ2)2=2πδ1δ21e−(2δ12(x−μ1)2+2δ22(x−μ2)2)
可以直接先单独分析指数部分,设:
β
=
(
x
−
μ
1
)
2
2
δ
1
2
+
(
x
−
μ
2
)
2
2
δ
2
2
=
(
δ
1
2
+
δ
2
2
)
x
2
−
2
(
μ
2
δ
1
2
+
μ
1
δ
2
2
)
x
+
(
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
)
2
δ
1
2
δ
2
2
=
x
2
−
2
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
x
+
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
δ
1
2
+
δ
2
2
2
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
\beta=\cfrac{(x-\mu_1)^2}{2\delta_1^2}+\cfrac{(x-\mu_2)^2}{2\delta_2^2}\\=\cfrac{(\delta_1^2+\delta_2^2)x^2-2(\mu_2\delta_1^2+\mu_1\delta_2^2)x+(\mu_1^2\delta_2^2+\mu_2^2\delta_1^2)}{2\delta_1^2\delta_2^2}\\=\cfrac{x^2-2\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2}x+\cfrac{\mu_1^2\delta_2^2+\mu_2^2\delta_1^2}{\delta_1^2+\delta_2^2}}{\cfrac{2\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}}
β=2δ12(x−μ1)2+2δ22(x−μ2)2=2δ12δ22(δ12+δ22)x2−2(μ2δ12+μ1δ22)x+(μ12δ22+μ22δ12)=δ12+δ222δ12δ22x2−2δ12+δ22μ2δ12+μ1δ22x+δ12+δ22μ12δ22+μ22δ12
构造新的正态分布=
(
x
−
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
)
2
+
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
δ
1
2
+
δ
2
2
−
(
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
)
2
2
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
=
(
x
−
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
)
2
2
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
⏟
γ
+
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
δ
1
2
+
δ
2
2
−
(
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
)
2
2
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
⏟
λ
\cfrac{(x-\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2})^2+\cfrac{\mu_1^2\delta_2^2+\mu_2^2\delta_1^2}{\delta_1^2+\delta_2^2}-(\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2})^2}{\cfrac{2\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}}\\=\underbrace{\cfrac{(x-\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2})^2}{\cfrac{2\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}}}_{\rm{\gamma}}+\underbrace{\cfrac{\cfrac{\mu_1^2\delta_2^2+\mu_2^2\delta_1^2}{\delta_1^2+\delta_2^2}-(\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2})^2}{\cfrac{2\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}}}_{\rm{\lambda}}
δ12+δ222δ12δ22(x−δ12+δ22μ2δ12+μ1δ22)2+δ12+δ22μ12δ22+μ22δ12−(δ12+δ22μ2δ12+μ1δ22)2=γ
δ12+δ222δ12δ22(x−δ12+δ22μ2δ12+μ1δ22)2+λ
δ12+δ222δ12δ22δ12+δ22μ12δ22+μ22δ12−(δ12+δ22μ2δ12+μ1δ22)2
设
λ
\lambda
λ如上所示,则
β
=
γ
+
λ
\beta=\gamma+\lambda
β=γ+λ,其中
γ
\gamma
γ为一个
N
~
(
μ
,
δ
2
)
N~(\mu,\delta^2)
N~(μ,δ2)的正态分布,
λ
\lambda
λ是一个常数值。继续简化
λ
\lambda
λ,如下:
λ
=
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
δ
1
2
+
δ
2
2
−
(
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
)
2
2
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
=
(
μ
1
2
δ
2
2
+
μ
2
2
δ
1
2
)
(
δ
1
2
+
δ
2
2
)
−
(
μ
2
δ
1
2
+
μ
1
δ
2
2
)
2
2
δ
1
2
δ
2
2
(
δ
1
2
+
δ
2
2
)
=
(
μ
1
2
δ
2
2
δ
1
2
+
μ
2
2
δ
1
4
+
μ
2
2
δ
2
2
δ
1
2
+
μ
1
2
δ
2
4
)
−
(
μ
2
2
δ
1
4
+
2
μ
1
μ
2
δ
2
2
δ
1
2
+
μ
1
2
δ
2
4
)
2
δ
1
2
δ
2
2
(
δ
1
2
+
δ
2
2
)
=
δ
1
2
δ
2
2
(
μ
1
2
+
μ
1
2
−
2
μ
1
μ
2
)
2
δ
1
2
δ
2
2
(
δ
1
2
+
δ
2
2
)
=
(
μ
1
−
μ
2
)
2
2
(
δ
1
2
+
δ
2
2
)
\lambda=\cfrac{\cfrac{\mu_1^2\delta_2^2+\mu_2^2\delta_1^2}{\delta_1^2+\delta_2^2}-(\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2})^2}{\cfrac{2\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}}\\=\cfrac{(\mu_1^2\delta_2^2+\mu_2^2\delta_1^2)(\delta_1^2+\delta_2^2)-(\mu_2\delta_1^2+\mu_1\delta_2^2)^2}{2\delta_1^2\delta_2^2(\delta_1^2+\delta_2^2)}\\=\cfrac{(\mu_1^2\delta_2^2\delta_1^2+\mu_2^2\delta_1^4+\mu_2^2\delta_2^2\delta_1^2+\mu_1^2\delta_2^4)-(\mu_2^2\delta_1^4+2\mu_1\mu_2\delta_2^2\delta_1^2+\mu_1^2\delta_2^4)}{2\delta_1^2\delta_2^2(\delta_1^2+\delta_2^2)}\\=\cfrac{\delta_1^2\delta_2^2(\mu_1^2+\mu_1^2-2\mu_1\mu_2)}{2\delta_1^2\delta_2^2(\delta_1^2+\delta_2^2)}\\=\cfrac{(\mu_1-\mu_2)^2}{2(\delta_1^2+\delta_2^2)}
λ=δ12+δ222δ12δ22δ12+δ22μ12δ22+μ22δ12−(δ12+δ22μ2δ12+μ1δ22)2=2δ12δ22(δ12+δ22)(μ12δ22+μ22δ12)(δ12+δ22)−(μ2δ12+μ1δ22)2=2δ12δ22(δ12+δ22)(μ12δ22δ12+μ22δ14+μ22δ22δ12+μ12δ24)−(μ22δ14+2μ1μ2δ22δ12+μ12δ24)=2δ12δ22(δ12+δ22)δ12δ22(μ12+μ12−2μ1μ2)=2(δ12+δ22)(μ1−μ2)2
则可得两个高斯分布相乘为:
f
1
(
x
)
f
2
(
x
)
=
1
2
π
δ
1
δ
2
e
−
β
=
1
2
π
δ
1
δ
2
e
−
(
γ
+
λ
)
=
1
2
π
δ
1
δ
2
e
−
γ
⋅
e
−
λ
=
1
2
π
δ
1
δ
2
e
−
(
x
−
μ
)
2
2
δ
2
⋅
e
−
(
μ
1
−
μ
2
)
2
2
(
δ
1
2
+
δ
2
2
)
f_1(x)f_2(x)= \cfrac{1}{2\pi\delta_1\delta_2}e^{-\beta}=\cfrac{1}{2\pi\delta_1\delta_2}e^{-(\gamma+\lambda)}\\=\cfrac{1}{2\pi\delta_1\delta_2}e^{-\gamma}\cdot e^{-\lambda}\\=\cfrac{1}{2\pi\delta_1\delta_2}e^{-\cfrac{(x-\mu)^2}{2\delta^2}}\cdot e^{-\cfrac{(\mu_1-\mu_2)^2}{2(\delta_1^2+\delta_2^2)}}
f1(x)f2(x)=2πδ1δ21e−β=2πδ1δ21e−(γ+λ)=2πδ1δ21e−γ⋅e−λ=2πδ1δ21e−2δ2(x−μ)2⋅e−2(δ12+δ22)(μ1−μ2)2
其中:
μ
=
μ
2
δ
1
2
+
μ
1
δ
2
2
δ
1
2
+
δ
2
2
,
δ
2
=
δ
1
2
δ
2
2
δ
1
2
+
δ
2
2
\mu=\cfrac{\mu_2\delta_1^2+\mu_1\delta_2^2}{\delta_1^2+\delta_2^2}, \delta^2=\cfrac{\delta_1^2\delta_2^2}{\delta_1^2+\delta_2^2}
μ=δ12+δ22μ2δ12+μ1δ22,δ2=δ12+δ22δ12δ22
把常数项综合为
S
g
S_g
Sg可得其直观表达方式:
f
1
(
x
)
f
2
(
x
)
=
S
g
⋅
1
2
π
δ
e
−
(
x
−
μ
)
2
2
δ
2
f_1(x)f_2(x)= S_g\cdot \cfrac{1}{\sqrt {2\pi}\delta}e^{-\cfrac{(x-\mu)^2}{2\delta^2}}
f1(x)f2(x)=Sg⋅2πδ1e−2δ2(x−μ)2
S
g
=
1
2
π
(
δ
1
2
+
δ
2
2
)
e
−
(
μ
1
−
μ
2
)
2
2
(
δ
1
2
+
δ
2
2
)
S_g=\cfrac{1}{\sqrt {2\pi(\delta_1^2+\delta_2^2)}}e^{-\cfrac{(\mu_1-\mu_2)^2}{2(\delta_1^2+\delta_2^2)}}
Sg=2π(δ12+δ22)1e−2(δ12+δ22)(μ1−μ2)2
到此,两个高斯分布相乘的分布函数即推导出来,即相乘后的分布函数为一个被压缩或被放大的高斯分布,
S
g
S_g
Sg为缩放因子,相乘后的概率密度的积分不等于1,但其方差和均值性质不变,所以
N
=
N
1
×
N
2
~
(
μ
,
δ
2
)
N=N_1×N_2~(\mu,\delta^2)
N=N1×N2~(μ,δ2),也就是我们常说的两个高斯分布相乘同样服从高斯分布。
则
μ
\mu
μ和
δ
2
\delta^2
δ2变量替换和变形处理后有卡尔曼滤波算法中的:
{
μ
′
=
μ
0
+
δ
0
2
(
μ
1
−
μ
0
)
δ
0
2
+
δ
1
2
δ
′
2
=
δ
0
2
−
δ
0
4
δ
0
2
+
δ
1
2
(
7
)
\begin{cases} \mu^\prime=\mu_0+\cfrac{\delta_0^2(\mu_1-\mu_0)}{\delta_0^2+\delta_1^2}\\ \delta^{\prime 2}=\delta_0^2-\cfrac{\delta_0^4}{\delta_0^2+\delta_1^2} \end{cases}\qquad (7)
⎩
⎨
⎧μ′=μ0+δ02+δ12δ02(μ1−μ0)δ′2=δ02−δ02+δ12δ04(7)
将式(7)中的两个式子相同的部分用k表示:
k
=
δ
0
2
δ
0
2
+
δ
1
2
(
8
)
k=\cfrac{\delta_0^2}{\delta_0^2+\delta_1^2}\qquad (8)
k=δ02+δ12δ02(8)
{
μ
′
=
μ
0
+
k
(
μ
1
−
μ
0
)
δ
′
2
=
δ
0
2
−
k
δ
0
2
(
9
)
\begin{cases} \mu^\prime=\mu_0+k(\mu_1-\mu_0)\\ \delta^{\prime 2}=\delta_0^2-k\delta_0^2 \end{cases}\qquad (9)
{μ′=μ0+k(μ1−μ0)δ′2=δ02−kδ02(9)
进一步推广到多维高斯分布,则可以将公式(8)和(9)写成矩阵的形式,如果
Σ
\Sigma
Σ表示高斯分布的协方差,
μ
⃗
\vec \mu
μ表示每个维度的均值,则:
K
=
Σ
0
(
Σ
0
+
Σ
1
)
−
1
(
10
)
K=\Sigma_0(\Sigma_0+\Sigma_1)^{-1}\qquad (10)
K=Σ0(Σ0+Σ1)−1(10)
{
μ
⃗
′
=
μ
⃗
0
+
K
(
μ
⃗
1
−
μ
⃗
0
)
Σ
′
=
Σ
0
−
K
Σ
0
(
11
)
\begin{cases} \vec \mu^\prime=\vec \mu_0+K(\vec \mu_1-\vec \mu_0)\\ \Sigma^{\prime}=\Sigma_0-K\Sigma_0 \end{cases}\qquad (11)
{μ′=μ0+K(μ1−μ0)Σ′=Σ0−KΣ0(11)
矩阵
K
K
K称为卡尔曼增益,下面将会用到。
将所有公式整合起来
我们有两个高斯分布,预测部分
(
μ
0
,
Σ
0
)
=
(
H
k
x
k
^
,
H
k
P
k
H
k
T
)
(\mu_0,\Sigma_0)=(H_k\hat {x_k},H_kP_kH_k^T)
(μ0,Σ0)=(Hkxk^,HkPkHkT),和测量部分
(
μ
1
,
Σ
1
)
=
(
z
⃗
k
,
R
k
)
(\mu_1,\Sigma_1)=(\vec z_k,R_k)
(μ1,Σ1)=(zk,Rk),将它们放到式(11)中算出它们之间的重叠部分:
{
H
k
x
^
k
′
=
H
k
x
^
k
+
K
(
z
⃗
k
−
H
k
x
^
k
)
H
k
P
k
′
H
k
T
=
H
k
P
k
H
k
T
−
K
H
k
P
k
H
k
T
(
12
)
\begin{cases} H_k\hat x_k^\prime=H_k\hat x_k+K(\vec z_k-H_k\hat x_k)\\ H_kP_k^\prime H_k^T=H_kP_kH_k^T-KH_kP_kH_k^T \end{cases}\qquad (12)
{Hkx^k′=Hkx^k+K(zk−Hkx^k)HkPk′HkT=HkPkHkT−KHkPkHkT(12)
由式(10)可得卡尔曼增益为:
K
=
H
k
P
k
H
k
T
(
H
k
P
k
H
k
T
+
R
k
)
−
1
(
13
)
K=H_kP_kH_k^T(H_kP_kH_k^T+R_k)^{-1}\qquad (13)
K=HkPkHkT(HkPkHkT+Rk)−1(13)
将式(12)和式(13)的两边同时左乘矩阵的逆(注意
K
K
K里面包含了
H
k
H_k
Hk)将其约掉,再将式(12)的第二个等式两边同时右乘矩阵
H
k
T
H_k^T
HkT的逆得到以下等式:
{
x
^
k
′
=
x
^
k
+
K
′
(
z
⃗
k
−
H
k
x
^
k
)
P
k
′
=
P
k
−
K
′
H
k
P
k
(
14
)
\begin{cases} \hat x_k^\prime=\hat x_k+K^\prime(\vec z_k-H_k\hat x_k)\\ P_k^\prime =P_k-K^\prime H_kP_k \end{cases}\qquad (14)
{x^k′=x^k+K′(zk−Hkx^k)Pk′=Pk−K′HkPk(14)
K
′
=
P
k
H
k
T
(
H
k
P
k
H
k
T
+
R
k
)
−
1
(
15
)
K^\prime=P_kH_k^T(H_kP_kH_k^T+R_k)^{-1}\qquad (15)
K′=PkHkT(HkPkHkT+Rk)−1(15)
上式给出了完整的更新步骤方程。
x
^
k
′
\hat x_k^\prime
x^k′就是新的最优估计,我们可以将它和
P
k
′
P_k^\prime
Pk′放到下一个预测和更新方程中不断迭代。
算法-卡尔曼滤波kalman全流程详细推导
于 2020-10-19 19:46:25 首次发布