卡尔曼滤波
我们可以有多种手段采集得到数据,传感器采集温度、GPS定位、压力传感器采集压力等等,但是传感器采集得到的数据只是“采集数据”,并不一定是真实数据。
算法原理
对于一个时间序列的数据,假设t时刻的真实数据为
X
(
t
)
X(t)
X(t),测量数据为
X
m
(
t
)
X_m(t)
Xm(t)。那么
X
m
(
t
)
=
X
(
t
)
+
ξ
1
,
t
(1)
X_m(t)=X(t)+\xi_{1,t}\tag{1}
Xm(t)=X(t)+ξ1,t(1)
当
ξ
t
\xi_t
ξt的方差较大时,尤其是当传感器数据发生漂移时,测量数据对真实状态的估计效果不佳。为了提升对真实状态的估计效果。基于原理,假设t时刻的真实数据可以由t-1时刻的真实数据计算得到,即
X
(
t
)
=
f
(
X
(
t
−
1
)
)
+
ξ
2
,
t
(2)
X(t)=f(X(t-1))+\xi_{2,t}\tag{2}
X(t)=f(X(t−1))+ξ2,t(2)
方程(1)和方程(2)都可以用于估计真实状态。自然的,可以结合方程(1)和方程(2)来的估计结果来得到最终的估计结果。
为了优化计算,我们现在做出假设:
- (a) ξ 1 , t \xi_{1,t} ξ1,t的期望为0,方差为 Σ 1 , t \Sigma_{1,t} Σ1,t
- (b)
ξ
2
,
t
\xi_{2,t}
ξ2,t的期望为0,方差为
Σ
2
,
t
\Sigma_{2,t}
Σ2,t
为了简化方程,我们假设f(X(t-1))为线性的,且假设: - (c) f ( X ( t − 1 ) ) = A X ( t − 1 ) + B u ( t − 1 ) f(X(t-1))=AX(t-1)+Bu(t-1) f(X(t−1))=AX(t−1)+Bu(t−1)
也就是
X
(
t
)
=
A
X
(
t
−
1
)
+
B
u
(
t
−
1
)
+
ξ
2
,
t
(3)
X(t)=AX(t-1)+Bu(t-1)+\xi_{2,t}\tag{3}
X(t)=AX(t−1)+Bu(t−1)+ξ2,t(3)
其中u(t-1)为偏置项。
现在,再次回看整个估计过程。我们的目的是为了估计真实的状态序列X(t),但是我们实际只能采集得到测量序列 X m ( t ) X_m(t) Xm(t),以及经验方程(1)、(2)。
假设t-1时刻关于真实状态
X
(
t
−
1
)
X(t-1)
X(t−1)的最优估计为
X
∗
(
t
−
1
)
X^*(t-1)
X∗(t−1)。令
X
p
(
t
)
=
A
X
∗
(
t
−
1
)
+
B
u
(
t
−
1
)
=
A
(
X
∗
(
t
−
1
)
−
X
(
t
−
1
)
)
+
A
X
(
t
−
1
)
+
B
u
(
t
−
1
)
=
A
(
X
∗
(
t
−
1
)
−
X
(
t
−
1
)
)
+
X
(
t
)
−
ξ
2
,
t
(4)
X_p(t)=AX^*(t-1)+Bu(t-1)=A(X^*(t-1)-X(t-1))+AX(t-1)+Bu(t-1)=A(X^*(t-1)-X(t-1))+X(t)- \xi_{2,t}\tag{4}
Xp(t)=AX∗(t−1)+Bu(t−1)=A(X∗(t−1)−X(t−1))+AX(t−1)+Bu(t−1)=A(X∗(t−1)−X(t−1))+X(t)−ξ2,t(4)
由假设(a)可知 X m ( t ) X_m(t) Xm(t)是真实状态的无偏估计,假设:
- (d) X ∗ ( t − 1 ) X^*(t-1) X∗(t−1)为 X ( t − 1 ) X(t-1) X(t−1)的无偏估计
则 X p ( t ) X_p(t) Xp(t)为真实状态 X ( t ) X(t) X(t)的无偏估计。
不妨设 X ∗ ( t − 1 ) X^*(t-1) X∗(t−1)方差为 Σ ∗ ( t − 1 ) \Sigma^*(t-1) Σ∗(t−1)。假设:
- (e) X ∗ ( t − 1 ) X^*(t-1) X∗(t−1)与 ξ 2 , t \xi_{2,t} ξ2,t相互独立
则
X
p
(
t
)
X_p(t)
Xp(t)的方差满足
v
a
r
(
X
p
(
t
)
)
=
A
Σ
∗
(
t
−
1
)
A
T
+
Σ
2
,
t
(5)
var(X_p(t))=A\Sigma^*(t-1)A^T + \Sigma_{2,t} \tag{5}
var(Xp(t))=AΣ∗(t−1)AT+Σ2,t(5)
即 X p ( t ) X_p(t) Xp(t)的期望为0,方差为 Σ + , t = A Σ ∗ ( t − 1 ) A T + Σ 2 , t \Sigma_{+,t}=A\Sigma^*(t-1)A^T + \Sigma_{2,t} Σ+,t=AΣ∗(t−1)AT+Σ2,t。
至此,我们得到了真实状态 X ( t ) X(t) X(t)的两个无偏估计 X p ( t ) X_p(t) Xp(t), X m ( t ) X_m(t) Xm(t)。现在有两个思路来解决思考这个问题。
思路一
现在假设 X ∗ ( t ) = g ( X p ( t ) , X m ( t ) ) X^*(t)=g(X_p(t),X_m(t)) X∗(t)=g(Xp(t),Xm(t)),为了简化计算,做出如下线性假设:
- (f) g ( X p ( t ) , X m ( t ) ) = X p ( t ) + λ ( t ) ∗ ( X m ( t ) − X p ( t ) ) g(X_p(t),X_m(t))=X_p(t)+\lambda(t)*(X_m(t)-X_p(t)) g(Xp(t),Xm(t))=Xp(t)+λ(t)∗(Xm(t)−Xp(t))
即
X
∗
(
t
)
=
X
p
(
t
)
+
λ
(
t
)
(
X
m
(
t
)
−
X
p
(
t
)
)
(6)
X^*(t)=X_p(t)+\lambda(t)(X_m(t)-X_p(t)) \tag{6}
X∗(t)=Xp(t)+λ(t)(Xm(t)−Xp(t))(6)
将(1)、(4)带入公式(6),得到
X
∗
(
t
)
=
(
I
−
λ
(
t
)
)
X
(
t
)
+
λ
(
t
)
X
(
t
)
+
(
I
−
λ
(
t
)
)
ξ
t
+
+
λ
(
t
)
ξ
1
,
t
=
X
(
t
)
+
(
I
−
λ
(
t
)
)
ξ
t
+
+
λ
(
t
)
ξ
1
,
t
X^*(t)=(I-\lambda(t))X(t)+\lambda(t)X(t)+(I-\lambda(t))\xi^+_t+\lambda(t)\xi_{1,t}=X(t)+(I-\lambda(t))\xi^+_t+\lambda(t)\xi_{1,t}
X∗(t)=(I−λ(t))X(t)+λ(t)X(t)+(I−λ(t))ξt++λ(t)ξ1,t=X(t)+(I−λ(t))ξt++λ(t)ξ1,t
估计
X
∗
(
t
)
X^*(t)
X∗(t)的协方差为
h
(
λ
(
t
)
)
=
v
a
r
(
X
∗
(
t
)
)
=
E
(
X
∗
(
t
)
−
E
(
X
∗
(
t
)
)
(
X
∗
(
t
)
−
E
(
X
∗
(
t
)
)
)
T
(7)
h(\lambda(t))=var(X^*(t))=E(X^*(t)-E(X^*(t))(X^*(t)-E(X^*(t)))^T \tag{7}
h(λ(t))=var(X∗(t))=E(X∗(t)−E(X∗(t))(X∗(t)−E(X∗(t)))T(7)
为使
X
∗
(
t
)
X^*(t)
X∗(t)为最优估计,即使协方差阵的对角线元素之和最小。即求
t
r
(
h
(
λ
(
t
)
)
)
=
t
r
(
E
(
X
∗
(
t
)
−
E
(
X
∗
(
t
)
)
(
X
∗
(
t
)
−
E
(
X
∗
(
t
)
)
)
T
)
(7’)
tr(h(\lambda(t)))=tr(E(X^*(t)-E(X^*(t))(X^*(t)-E(X^*(t)))^T) \tag{7'}
tr(h(λ(t)))=tr(E(X∗(t)−E(X∗(t))(X∗(t)−E(X∗(t)))T)(7’)
的最小值。令
Σ
1
,
+
(
t
)
\Sigma_{1,+}(t)
Σ1,+(t)为
ξ
1
,
t
\xi_{1,t}
ξ1,t与
ξ
t
+
\xi^+_t
ξt+的协方差。假设:
- (g) Σ 1 , + ( t ) = 0 \Sigma_{1,+}(t)=0 Σ1,+(t)=0
公式(7’)关于
λ
(
t
)
\lambda(t)
λ(t)求偏导,并另其等于0,得到:
−
2
Σ
+
,
t
+
2
λ
(
t
)
Σ
+
,
t
+
2
λ
(
t
)
Σ
1
(
t
)
=
0
(8)
-2\Sigma_{+,t}+2\lambda(t)\Sigma_{+,t}+2\lambda(t)\Sigma_1(t)=0 \tag{8}
−2Σ+,t+2λ(t)Σ+,t+2λ(t)Σ1(t)=0(8)
则由公式(7)可以得到:
λ
(
t
)
=
Σ
+
,
t
(
Σ
+
,
t
+
Σ
1
(
t
)
)
−
1
(9)
\lambda(t)=\Sigma_{+,t}(\Sigma_{+,t}+\Sigma_1(t))^{-1} \tag{9}
λ(t)=Σ+,t(Σ+,t+Σ1(t))−1(9)
其中
(
(
Σ
+
,
t
+
Σ
1
(
t
)
)
−
1
((\Sigma_{+,t}+\Sigma_1(t))^{-1}
((Σ+,t+Σ1(t))−1表示
Σ
+
,
t
(
t
)
+
Σ
1
(
t
)
\Sigma_{+,t}(t)+\Sigma_1(t)
Σ+,t(t)+Σ1(t)的逆。
将公式(9)带入(6)得到
X
∗
(
t
)
X^*(t)
X∗(t)的更新值,带入公式(7)可以得到
X
∗
(
t
)
X^*(t)
X∗(t)的方差的
v
a
r
(
X
∗
(
t
)
)
=
Σ
+
,
t
−
λ
(
t
)
Σ
+
,
t
(10)
var(X^*(t))=\Sigma_{+,t} - \lambda(t)\Sigma_{+,t} \tag{10}
var(X∗(t))=Σ+,t−λ(t)Σ+,t(10)
思路二
对于真实状态
X
(
t
)
X(t)
X(t)的两个无偏估计
X
p
(
t
)
X_p(t)
Xp(t),
X
m
(
t
)
X_m(t)
Xm(t),方差分别为
Σ
+
,
t
\Sigma_{+,t}
Σ+,t,
Σ
1
,
t
\Sigma_{1,t}
Σ1,t。假设
X
p
(
t
)
X_p(t)
Xp(t)、
X
m
(
t
)
X_m(t)
Xm(t)都服从正态分布,假设
X
p
(
t
)
X_p(t)
Xp(t)和
X
m
(
t
)
X_m(t)
Xm(t)相互独立。那么似然函数为
L
(
X
(
t
)
∣
X
p
(
t
)
,
X
m
(
t
)
)
=
C
e
−
1
/
2
∗
(
X
p
(
t
)
−
X
(
t
)
)
T
Σ
+
,
t
(
X
p
(
t
)
−
X
(
t
)
)
−
1
/
2
∗
(
X
m
(
t
)
−
X
(
t
)
)
T
Σ
1
,
t
(
X
m
(
t
)
−
X
(
t
)
)
(11)
L(X(t)|X_p(t), X_m(t))=Ce^{-1/2*(X_p(t)-X(t))^T\Sigma_{+,t}(X_p(t)-X(t))-1/2*(X_m(t)-X(t))^T\Sigma_{1,t}(X_m(t)-X(t))} \tag{11}
L(X(t)∣Xp(t),Xm(t))=Ce−1/2∗(Xp(t)−X(t))TΣ+,t(Xp(t)−X(t))−1/2∗(Xm(t)−X(t))TΣ1,t(Xm(t)−X(t))(11)
对似然函数取对数,关于
X
(
t
)
X(t)
X(t)求偏导,令偏导等于0,求解得到
X
(
t
)
=
(
Σ
+
,
t
−
1
+
Σ
1
,
t
−
1
)
−
1
(
Σ
+
,
t
−
1
X
p
(
t
)
+
Σ
1
,
t
−
1
X
m
(
t
)
)
=
(
Σ
+
,
t
−
1
+
Σ
1
,
t
−
1
)
−
1
Σ
+
,
t
−
1
X
p
(
t
)
+
(
Σ
+
,
t
−
1
+
Σ
1
,
t
−
1
)
−
1
Σ
1
,
t
−
1
X
m
(
t
)
X(t)=(\Sigma_{+,t}^{-1}+\Sigma_{1,t}^{-1})^{-1}(\Sigma_{+,t}^{-1}X_p(t)+\Sigma_{1,t}^{-1}X_m(t))=(\Sigma_{+,t}^{-1}+\Sigma_{1,t}^{-1})^{-1}\Sigma_{+,t}^{-1}X_p(t)+(\Sigma_{+,t}^{-1}+\Sigma_{1,t}^{-1})^{-1}\Sigma_{1,t}^{-1}X_m(t)
X(t)=(Σ+,t−1+Σ1,t−1)−1(Σ+,t−1Xp(t)+Σ1,t−1Xm(t))=(Σ+,t−1+Σ1,t−1)−1Σ+,t−1Xp(t)+(Σ+,t−1+Σ1,t−1)−1Σ1,t−1Xm(t)
因为
Σ
+
,
t
−
1
+
Σ
1
,
t
−
1
=
Σ
+
,
t
−
1
(
Σ
+
,
t
+
Σ
1
,
t
)
Σ
1
,
t
−
1
=
Σ
1
,
t
−
1
(
Σ
+
,
t
+
Σ
1
,
t
)
Σ
+
,
t
−
1
\Sigma_{+,t}^{-1}+\Sigma_{1,t}^{-1}=\Sigma_{+,t}^{-1}(\Sigma_{+,t}+\Sigma_{1,t})\Sigma_{1,t}^{-1}=\Sigma_{1,t}^{-1}(\Sigma_{+,t}+\Sigma_{1,t})\Sigma_{+,t}^{-1}
Σ+,t−1+Σ1,t−1=Σ+,t−1(Σ+,t+Σ1,t)Σ1,t−1=Σ1,t−1(Σ+,t+Σ1,t)Σ+,t−1
所以
X
(
t
)
=
Σ
1
,
t
(
Σ
+
,
t
+
Σ
1
,
t
)
−
1
X
p
(
t
)
+
Σ
+
,
t
(
Σ
+
,
t
+
Σ
1
,
t
)
−
1
X
m
(
t
)
(12)
X(t)=\Sigma_{1,t}(\Sigma_{+,t}+\Sigma_{1,t})^{-1}X_p(t)+\Sigma_{+,t}(\Sigma_{+,t}+\Sigma_{1,t})^{-1}X_m(t) \tag{12}
X(t)=Σ1,t(Σ+,t+Σ1,t)−1Xp(t)+Σ+,t(Σ+,t+Σ1,t)−1Xm(t)(12)
取
X
∗
(
t
)
=
Σ
1
,
t
(
Σ
+
,
t
+
Σ
1
,
t
)
−
1
X
p
(
t
)
+
Σ
+
,
t
(
Σ
+
,
t
+
Σ
1
,
t
)
−
1
X
m
(
t
)
X^*(t)=\Sigma_{1,t}(\Sigma_{+,t}+\Sigma_{1,t})^{-1}X_p(t)+\Sigma_{+,t}(\Sigma_{+,t}+\Sigma_{1,t})^{-1}X_m(t)
X∗(t)=Σ1,t(Σ+,t+Σ1,t)−1Xp(t)+Σ+,t(Σ+,t+Σ1,t)−1Xm(t)为
X
(
t
)
X(t)
X(t)的最优估计。令
λ
(
t
)
=
Σ
+
,
t
(
Σ
+
,
t
+
Σ
1
(
t
)
)
−
1
\lambda(t)=\Sigma_{+,t}(\Sigma_{+,t}+\Sigma_1(t))^{-1}
λ(t)=Σ+,t(Σ+,t+Σ1(t))−1
即可得到思路一中的公式(6)和公式(10)
算法小结
假设方程
X
m
(
t
)
=
X
(
t
)
+
ξ
1
,
t
X_m(t)=X(t)+\xi_{1,t}
Xm(t)=X(t)+ξ1,t
X
(
t
)
=
A
X
(
t
−
1
)
+
B
u
(
t
−
1
)
+
ξ
2
,
t
X(t)=AX(t-1)+Bu(t-1)+\xi_{2,t}
X(t)=AX(t−1)+Bu(t−1)+ξ2,t
相关的更新方程
X
p
(
t
)
=
A
X
∗
(
t
−
1
)
+
B
u
(
t
−
1
)
X_p(t)=AX^*(t-1)+Bu(t-1)
Xp(t)=AX∗(t−1)+Bu(t−1)
Σ
+
,
t
=
v
a
r
(
X
p
(
t
)
)
=
A
Σ
∗
(
t
−
1
)
A
T
+
Σ
2
,
t
\Sigma_{+,t}=var(X_p(t))=A\Sigma^*(t-1)A^T + \Sigma_{2,t}
Σ+,t=var(Xp(t))=AΣ∗(t−1)AT+Σ2,t
X
∗
(
t
)
=
X
p
(
t
)
+
λ
(
t
)
(
X
m
(
t
)
−
X
p
(
t
)
)
X^*(t)=X_p(t)+\lambda(t)(X_m(t)-X_p(t))
X∗(t)=Xp(t)+λ(t)(Xm(t)−Xp(t))
Σ
∗
(
t
)
=
Σ
+
,
t
−
λ
(
t
)
Σ
+
,
t
\Sigma^*(t)=\Sigma_{+,t} - \lambda(t)\Sigma_{+,t}
Σ∗(t)=Σ+,t−λ(t)Σ+,t
λ
(
t
)
=
Σ
+
,
t
(
Σ
+
,
t
+
Σ
1
(
t
)
)
−
1
\lambda(t)=\Sigma_{+,t}(\Sigma_{+,t}+\Sigma_1(t))^{-1}
λ(t)=Σ+,t(Σ+,t+Σ1(t))−1
算法回顾
卡尔曼滤波中有四条数据序列
- 客观真实的数据序列 X ( t ) X(t) X(t),无法得到,是我们需要估计的
- 测量序列 X m ( t ) X_m(t) Xm(t),通过传感器采集得到的, e m ( t ) = X m ( t ) − X ( t ) e_m(t)=X_m(t)-X(t) em(t)=Xm(t)−X(t)的分布由采集设备决定
- 原理预测序列
X
p
(
t
)
X_p(t)
Xp(t),原理本身是基于真实值的方程。因为真实值无法得到,所以
X
p
(
t
)
X_p(t)
Xp(t)只能是基于预测值
X
∗
(
t
−
1
)
X^*(t-1)
X∗(t−1)得到。所以
e p ( t ) = X p ( t ) − X ( t ) = f ( X ∗ ( t − 1 ) ) − X ( t ) = f ( X ∗ ( t − 1 ) − X ( t − 1 ) + X ( t − 1 ) ) − X ( t ) e_p(t)=X_p(t)-X(t)=f(X^*(t-1))-X(t)=f(X^*(t-1)-X(t-1)+X(t-1))-X(t) ep(t)=Xp(t)−X(t)=f(X∗(t−1))−X(t)=f(X∗(t−1)−X(t−1)+X(t−1))−X(t)
当f为线性变换时
e p ( t ) = f ( X ∗ ( t − 1 ) − X ( t − 1 ) ) + f ( X ( t − 1 ) ) − X ( t ) e_p(t)=f(X^*(t-1)-X(t-1))+f(X(t-1))-X(t) ep(t)=f(X∗(t−1)−X(t−1))+f(X(t−1))−X(t)
也就是说 e p ( t ) e_p(t) ep(t)由 f ( X ∗ ( t − 1 ) − X ( t − 1 ) ) f(X^*(t-1)-X(t-1)) f(X∗(t−1)−X(t−1))和 f ( X ( t − 1 ) ) − X ( t ) f(X(t-1))-X(t) f(X(t−1))−X(t)两部分得到。 - 最终的预测序列,也就是滤波序列或修正序列 X ∗ ( t ) X^*(t) X∗(t), X ∗ ( t ) = g ( X p ( t ) , X m ( t ) ) X^*(t)=g(X_p(t),X_m(t)) X∗(t)=g(Xp(t),Xm(t)), e ∗ ( t ) = X ∗ ( t ) − X ( t ) e^*(t)=X^*(t)-X(t) e∗(t)=X∗(t)−X(t)
回归之前出现的所有假设:
- 假设(a)不成立,测量值不是真实值的无偏估计。此时需要假设 ξ 1 , t \xi_{1,t} ξ1,t的期望是个常数,然后通过添加偏置项来得到 X m ( t ) X_m(t) Xm(t),否则无法计算。
- 假设(b)不成立,此时可以通过添加偏置项来使得(b)成立,这也是 B u ( t − 1 ) Bu(t-1) Bu(t−1)的作用。当 B u ( t − 1 ) Bu(t-1) Bu(t−1)添加的不合理时, X p ( t ) X_p(t) Xp(t)不是真实值 X ( t ) X(t) X(t)的无偏估计,那么最终的滤波结果也不是真实值的无偏估计,滤波并没有效果。不过换一个角度,可以以此作为时间序列的异常诊断依据。
- 假设©不成立,模型难以迭代计算。需要有新的函数f。
- 假设(d)不成立,那么 X p ( t ) X_p(t) Xp(t)也不是真实值的无偏估计。根据迭代公式,当 A n A^n An不收敛的时候, X p ( t ) − X ( t ) X_p(t)-X(t) Xp(t)−X(t)的可能没有界。所以必须控制 X ∗ ( t − 1 ) − X ( t − 1 ) X^*(t-1)-X(t-1) X∗(t−1)−X(t−1)的期望。
- 假设(e)的目的是为了更新方差,在假设(e)成立的情况下,方差才能准确计算。换个角度,当假设(e)出现问题的时候,方差的计算结果是有误的,但是如果这个错误的程度是较小的,那也可以计算,假设条件不成立对结果的影响可能是可控的。
- 假设(f)不成立,这很正常,只是在两个随机变量都服从正态分布时,(f)的效果最好。在不是正态分布时,并不一定是最好的。但是在给定数据条件下,假设(f)成立的情况下得到的滤波总是有一定效果的。
- 假设(g)几乎不可能不成立。
新息探讨
新息:测量值与预测值之差。
当所有假设都成立的时候,新息的期望为0。虽然t时刻的新息和t+1时刻的新息的方差是不同的,但是新息还是一条在0附近抖动的序列。
当假设(b)不成立:
- 若 ξ 2 , t \xi_{2,t} ξ2,t为一恒定的大于0的常数 μ 1 \mu1 μ1,此时t时刻的新息的期望为 μ 1 \mu1 μ1,t+1时刻的新息的期望为 μ 1 + Δ μ \mu1+\Delta\mu μ1+Δμ,其中 Δ μ \Delta\mu Δμ会小于 μ 1 \mu1 μ1
参考文献
- http://www.doc88.com/p-2008731504229.html
- https://blog.youkuaiyun.com/qq_31589695/article/details/80330126