卡尔曼滤波
文章目录
1. 问题引入
我们研究的问题一般都是从观测数据入手。我们观测的对象是一组随机变量,我们需要用这组随机变量与估计另外一个随机变量
O b s e r v a t i o n : ( Z 1 , . . . , Z n ) − > Y Observation:(Z_1,...,Z_n) -> Y Observation:(Z1,...,Zn)−>Y
我们以前学习到的估计方法,都是一些直接的方法。我们试图构造一个估计,直接通过我们的观测数据,去逼近我们的随机变量。我们通常会构造一个滤波器,输入就是我们的观测数据,输出就是我们得到的近似值。而维纳滤波器就是最优的线性估计
g ( Z 1 , . . , Z n ) = > Y → H → Y ^ Direct Method g(Z_1,..,Z_n)=> Y \rightarrow \boxed{H} \rightarrow \hat Y \text{ Direct Method} g(Z1,..,Zn)=>Y→H→Y^ Direct Method
但是使用这种估计的思路是有一些问题的。因为这是一种黑箱的思想。一般来说,我们估计的对象对观测数据是有影响的,但是我们的观测数据是怎么来的,我们并不关心,我们把观测数据和估计变量之间的关系当做黑箱,我们只关心输入和输出。
我们是采用这样的思路在进行信号处理
Y → H 1 → Z ↖ H 2 ↙ \begin{matrix} Y & \rightarrow & \boxed{H_1} & \rightarrow & Z \\ \\ & \nwarrow & \boxed{H_2}& \swarrow & \end{matrix} Y→↖H1H2→↙Z
本来有一个随机变量Y,会通过某种规律产生观测数据Z。这是一个系统,但是我们并不需要关心这个系统是怎么样的。我们的处理方法是这样的,我们根据观测数据,重新构造了一个系统H2,然后把输入和输出联系在了一起。
这种方法的缺陷在于,通常我们研究某个问题的时候是有先验知识的,比如物理规律,化学反应等等。我们的估计方法直接把输入和输出关联在了一起,但是并不需要使用先验知识,只是通过统计学规律实现的。
但是现在,我们希望从观测数据出发,了解引起观测数据变化的系统到底是怎么样子的,我们希望能够使用我们的先验知识做点什么。
2. Kalman Filter
2.1 模型建立–状态空间
我们现在希望从黑箱入手,找到具体的系统结构,不仅仅满足于把输入和输出关系当做着眼点,把变量Y对观测数据Z的影响当做黑箱。我们想要了解这个具体的影响是什么,我们要对黑箱进行建模。
我们要建立的模型就是状态空间模型。我们在学习信号与系统的时候,其实就有状态空间的概念了。状态空间和传递函数都是对系统描述的方法。
状态空间和传递函数是有本质区别的。传递函数关注的是输入和输出的关系,对系统内部结构视而不见,只是把系统看成了黑箱。状态空间关注的是系统内部的结构。状态空间的建立能够用上我们的先验知识,不然统计信号处理就与科学和工程脱节了。
建立状态空间模型涉及到两个方程。第一个方程叫做状态方程,第二个方程叫做观测方程。
State Space Model
{
Z
n
+
1
=
f
(
Z
n
,
V
n
)
State Equation
Y
n
=
g
(
Z
n
,
W
n
)
Observation Equation
\text{State Space Model} \\ \begin{cases} Z_{n+1} = f(Z_n,V_n) & \text{State Equation} \\ Y_n = g(Z_n,W_n) & \text{Observation Equation} \end{cases}
State Space Model{Zn+1=f(Zn,Vn)Yn=g(Zn,Wn)State EquationObservation Equation
其中Vn是状态噪声,Wn是观测噪声
{
Z
n
+
1
=
f
(
Z
n
,
V
n
,
I
n
)
State Equation
Y
n
=
g
(
Z
n
,
W
n
)
Observation Equation
\begin{cases} Z_{n+1} = f(Z_n,V_n,I_n) & \text{State Equation} \\ Y_n = g(Z_n,W_n) & \text{Observation Equation} \end{cases}
{Zn+1=f(Zn,Vn,In)Yn=g(Zn,Wn)State EquationObservation Equation
一般来说,状态方程会有一个输入变量。但是很多时候会把输入变量给忽略。我们认为决定系统输出的关键,也许并不在输入上,而是状态Z。这是系统内部的属性。
状态Z具有两个特性
- 真正的决定了系统的性质,状态有自己的运行发展规律,随着时间变化,状态也发生变化,影响系统的发生机制。状态有自身的运行发展规律。状态的演化决定了系统内部的运行机制。
- 状态往往不能直接被观测到
状态从外部看不到,但是又很重要,我们怎么得到状态呢?我们有一个观测,观测代表一个过程,可以通过状态得到我们的观测。这个过程就是窥探系统内部结构的窗口,就能够获得关于系统内部的某种认识。
状态是不可观测的,但是又说状态能够被看到,我们看到的是什么?
我们实际上是在对系统进行建模,我们对系统进行建模的时候,就能够用上我们的先验知识(自然界基本运行规律,专业知识等)。但是,我们在建模的同时,尽管状态是按照模型在演化,但是我们不能直接观测到这个状态。我们观测到的仅仅是一个侧面
现在我们对信号处理的任务就改变了,我们希望能够通过得到的观测数据,找到系统的状态变化。一旦系统状态变化找到了,我们就把系统内部变化的规律给找到了。
{ Y 1 , . . . , Y n } → { Z 1 , . . . , Z n } \{Y_1,...,Y_n\} \rightarrow \{Z_1,...,Z_n \} {Y1,...,Yn}→{Z1,...,Zn}
一般来说,状态空间模型中是有噪声的,我们在做信号处理的时候,一方面要注重,通过观测数据进行逆运算,得到状态;另一方面也要克服噪声的影响
现在,我们想对状态空间模型进行简化。开始的时候,我们建立的状态和观测方程是个通常的非线性模型。现在我们建立一个线性的模型,简化问题。
{
Z
n
+
1
=
F
n
Z
n
+
V
n
Y
n
=
H
n
Z
n
+
W
n
\begin{cases} Z_{n+1} = F_n Z_n +V_n\\ Y_n = H_n Z_n + W_n \end{cases}
{Zn+1=FnZn+VnYn=HnZn+Wn
需要注意一点,在这个线性模型中,系统参数F和H是时变的,我们允许系统参数随着时间变化。这就是意味着,我们允许我们的系统是非平稳的。
我们在维纳滤波,莱文森迭代,前向后向预测的时候,都需要平稳性的条件。这里的非平稳性,能够让模型的应用更加广泛。
现在我们对噪声进行假设。我们假设噪声的均值为0,并且噪声是白噪声。而且状态噪声和观测噪声之间没有相关性。
{
Z
n
+
1
=
F
n
Z
n
+
V
n
Y
n
=
H
n
Z
n
+
W
n
\begin{cases} Z_{n+1} = F_n Z_n +V_n\\ Y_n = H_n Z_n + W_n \end{cases}
{Zn+1=FnZn+VnYn=HnZn+Wn
E
(
V
n
)
=
E
(
W
n
)
=
0
E
(
V
n
∗
W
n
T
)
=
0
E
(
V
n
V
m
T
)
=
Q
n
δ
m
n
E
(
W
n
W
m
T
)
=
R
n
δ
m
n
E(V_n) = E(W_n) = 0 \quad E(V_n*W_n^T) = 0 \\ E(V_n V_m^T) = Q_n \delta_{mn} \quad E(W_n W_m^T) = R_n \delta_{mn}
E(Vn)=E(Wn)=0E(Vn∗WnT)=0E(VnVmT)=QnδmnE(WnWmT)=Rnδmn
这里我们建立的模型非常具有一般性,因为我们的Z和Y都是矢量,F和H都是矩阵
2.2 处理流程–预测校正
我们完成了系统建模之后,后面进行的处理流程就叫做卡尔曼滤波。
其实卡尔曼滤波一共包含了两种思想,第一种就是前面状态空间,第二种就是这里要介绍的预测校正了。Prediction-Correection。
预测校正是一种递推。这种递推是沿着时间进行递推,而不是系统的阶数。
我们首先要得到一个估计,就是基于观测数据Y1,…,Yn来对Z进行估计的结果。我们假设这种估计是线性的。也就是估计值就是Zn投影到Y张成的子空间上
Z ^ n ∣ n = E ( Z n ∣ Y 1 , . . . , Y n ) = P r o j { Y 1 , . . . , Y n } Z n \hat Z_{n|n} = E(Z_n |Y_1,...,Y_n) = Proj_{\{Y_1,...,Y_n \} }Z_n Z^n∣n=E(Zn∣Y1,...,Yn)=Proj{Y1,...,Yn}Zn
根据对时间的递推,我们还可以得到两个新的估计。
Z ^ n + 1 ∣ n = P r o j { Y 1 , . . . , Y n } Z n + 1 Z ^ n + 1 ∣ n + 1 = P r o j { Y 1 , . . . , Y n + 1 } Z n + 1 \hat Z_{n+1|n} =Proj_{\{Y_1,...,Y_n \} }Z_{n+1} \\ \hat Z_{n+1|n+1} =Proj_{\{Y_1,...,Y_n+1 \} }Z_{n+1} Z^n+1∣n=Proj{Y1,...,Yn}Zn+1Z^n+1∣n+1=Proj{Y1,...,Yn+1}Zn+1
前者是通过1~n的观测数据对Z的新状态进行预测。但是预测就一定不是很准确,需要进行校正,因此我们还需要第二个方程,用新材料进行校正。也就是用1~n+1 的数据对Z的n+1状态进行估计。第二步的校正就是基于预测的结果进行线性变换
Prediction-Correction Z ^ n ∣ n = E ( Z n ∣ Y 1 , . . . , Y n ) = P r o j { Y 1 , . . . , Y n } Z n ⇓ P r e d i c t i o n Z ^ n + 1 ∣ n = P r o j { Y 1 , . . . , Y n } Z n + 1 ⇓ C o r r e c t i o n Z ^ n + 1 ∣ n + 1 = P r o j { Y 1 , . . . , Y n + 1 } Z n + 1 \text{Prediction-Correction} \\ \hat Z_{n|n} = E(Z_n |Y_1,...,Y_n) = Proj_{\{Y_1,...,Y_n \} }Z_n \\ \Downarrow Prediction \\ \hat Z_{n+1|n} =Proj_{\{Y_1,...,Y_n \} }Z_{n+1} \\ \Downarrow Correction \\ \hat Z_{n+1|n+1} =Proj_{\{Y_1,...,Y_n+1 \} }Z_{n+1} Prediction-CorrectionZ^n∣n=E(Zn∣Y1,...,Yn)=Proj{Y1,...,Yn}Zn⇓PredictionZ^n+1∣n=Proj{Y1,...,Yn}Zn+1⇓CorrectionZ^n+1∣n+1=Proj{Y1,...,Yn+1}Zn+1
我们可以大概来猜测一个
Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + g ( Y n + 1 − Y ^ n + 1 ) \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + g(Y_{n+1} - \hat Y_{n+1}) Z^n+1∣n+1=Z^n+1∣n+g(Yn+1−Y^n+1)
我们做的校正可能与新数据的偏差有关系,是新数据偏差的一个函数,但是我们希望尽可能简单一点,我们把它做成线性的。同时因为系统是时变的,因此这个系数我们也让他是时变的
Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + K n ( Y n + 1 − Y ^ n + 1 ) \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + K_n(Y_{n+1} - \hat Y_{n+1}) Z^n+1∣n+1=Z^n+1∣n+Kn(Yn+1−Y^n+1)
2.3 求解
2.3.1 预测
现在我们可以做Kalman Filter了
首先我们要对新的状态Z进行预测
( 1 ) Z ^ n ∣ n ⇒ Z ^ n + 1 ∣ n Z ^ n + 1 ∣ n = P r o j { Y 1 , . . . , Y n } Z n + 1 = P r o j { Y 1 , . . . , Y n } ( F n Z n + V n ) = P r o j { Y 1 , . . . , Y n } ( F n Z n ) + P r o j { Y 1 , . . . , Y n } ( V n ) = P r o j { Y 1 , . . . , Y n } ( F n Z n ) (1) \quad \hat Z{n|n} \Rightarrow \hat Z_{n+1|n} \\ \hat Z_{n+1|n} = Proj_{\{Y_1,...,Y_n\}}Z_{n+1} = Proj_{\{Y_1,...,Y_n\}}(F_n Z_n + V_n) \\ = Proj_{\{Y_1,...,Y_n\}}(F_n Z_n)+ Proj_{\{Y_1,...,Y_n\}}(V_n) \\ = Proj_{\{Y_1,...,Y_n\}}(F_n Z_n) (1)Z^n∣n⇒Z^n+1∣nZ^n+1∣n=Proj{Y1,...,Yn}Zn+1=Proj{Y1,...,Yn}(FnZn+Vn)=Proj{Y1,...,Yn}(FnZn)+Proj{Y1,...,Yn}(Vn)=Proj{Y1,...,Yn}(FnZn)
我们可以看到Yn这组观测数据是与Zn有关系的,而Zn与前一个状态的状态噪声Vn-1有关,因此可以判断Yn这组数据和Vn是无关的,因此投影为0
根据投影公式
P r o j { Y } Z = E ( Z Y T ) [ E ( Y Y T ) ] − 1 Y Proj_{\{Y\}} Z = E(ZY^T)[E(YY^T)]^{-1}Y Proj{Y}Z=E(ZYT)[E(YYT)]−1Y
如果前面有系数矩阵
P r o j { Y } A ∗ Z = A ∗ E ( Z Y T ) [ E ( Y Y T ) ] − 1 Y Proj_{\{Y\}} A*Z = A*E(ZY^T)[E(YY^T)]^{-1}Y Proj{Y}A∗Z=A∗E(ZYT)[E(YYT)]−1Y
因此
Z ^ n + 1 ∣ n = P r o j { Y 1 , . . . , Y n } ( F n Z n ) = F n ∗ P r o j { Y 1 , . . . , Y n } ( Z n ) = F n ∗ Z ^ n ∣ n \hat Z_{n+1|n} = Proj_{\{Y_1,...,Y_n\}}(F_n Z_n) \\ = F_n * Proj_{\{Y_1,...,Y_n\}}(Z_n) = F_n * \hat Z_{n|n} Z^n+1∣n=Proj{Y1,...,Yn}(FnZn)=Fn∗Proj{Y1,...,Yn}(Zn)=Fn∗Z^n∣n
2.3.2 校正
得到了预测值之后,我们还需要计算校正值
Z ^ n + 1 ∣ n ⇒ Z ^ n + 1 ∣ n + 1 \hat Z_{n+1|n} \Rightarrow \hat Z_{n+1|n+1} Z^n+1∣n⇒Z^n+1∣n+1
Z ^ n + 1 ∣ n + 1 = P r o j { Y 1 , . . . , Y n , Y n + 1 } Z n + 1 \hat Z_{n+1|n+1} = Proj_{\{Y_1,...,Y_n,Y_{n+1}\}}Z_{n+1} Z^n+1∣n+1=Proj{Y1,...,Yn,Yn+1}Zn+1
我们已经得到了Y1,…Yn对Zn+1的估计,如果我们要得到了Y1,…Yn+1对Zn+1的估计,我们只需要让Yn+1投影在前n个观测数据张成的向量空间即可
Z
^
n
+
1
∣
n
+
1
=
P
r
o
j
{
Y
1
,
.
.
.
,
Y
n
,
Y
n
+
1
}
Z
n
+
1
=
P
r
o
j
{
Y
1
,
.
.
.
,
Y
n
}
Z
n
+
1
+
P
r
o
j
{
Y
ˉ
n
+
1
}
Z
n
+
1
\hat Z_{n+1|n+1} = Proj_{\{Y_1,...,Y_n,Y_{n+1}\}}Z_{n+1} \\ = Proj_{\{Y_1,...,Y_n\}}Z_{n+1} + Proj_{\{\bar Y_{n+1}\}}Z_{n+1}
Z^n+1∣n+1=Proj{Y1,...,Yn,Yn+1}Zn+1=Proj{Y1,...,Yn}Zn+1+Proj{Yˉn+1}Zn+1
其中
Y ˉ n + 1 = Y n + 1 − P r o j { Y 1 , . . . , Y n } Y n + 1 \bar Y_{n+1} = Y_{n+1}-Proj_{\{Y_1,...,Y_n\}}Y_{n+1} \\ Yˉn+1=Yn+1−Proj{Y1,...,Yn}Yn+1
则
Z ^ n + 1 ∣ n + 1 = P r o j { Y 1 , . . . , Y n } Z n + 1 + P r o j { Y ˉ n + 1 } Z n + 1 = Z ^ n + 1 ∣ n + E ( Z n + 1 Y ˉ n + 1 T ) [ E ( Y ˉ n + 1 Y ˉ n + 1 T ) ] − 1 Y ˉ n + 1 ( i ) \hat Z_{n+1|n+1}=Proj_{\{Y_1,...,Y_n\}}Z_{n+1} + Proj_{\{\bar Y_{n+1}\}}Z_{n+1} \\ = \hat Z_{n+1|n} + E(Z_{n+1}\bar Y_{n+1}^T)[E(\bar Y_{n+1}\bar Y_{n+1}^T)]^{-1}\bar Y_{n+1} \quad\quad(i) Z^n+1∣n+1=Proj{Y1,...,Yn}Zn+1+Proj{Yˉn+1}Zn+1=Z^n+1∣n+E(Zn+1Yˉn+1T)[E(Yˉn+1Yˉn+1T)]−1Yˉn+1(i)
我们继续来看
Y ˉ n + 1 = Y n + 1 − P r o j { Y 1 , . . . , Y n , Y n + 1 } Y n + 1 = Y n + 1 − P r o j { Y 1 , . . . , Y n } ( H n + 1 Z n + 1 + W n + 1 ) = Y n + 1 − P r o j { Y 1 , . . . , Y n } ( H n + 1 Z n + 1 ) = Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ( i i ) \bar Y_{n+1} = Y_{n+1}-Proj_{\{Y_1,...,Y_n,Y_{n+1}\}}Y_{n+1} \\ = Y_{n+1}-Proj_{\{Y_1,...,Y_n\}}(H_{n+1}Z_{n+1}+W_{n+1}) \\ = Y_{n+1}-Proj_{\{Y_1,...,Y_n\}}(H_{n+1}Z_{n+1}) \\ = Y_{n+1}-H_{n+1} \hat Z_{n+1|n} \quad\quad(ii) Yˉn+1=Yn+1−Proj{Y1,...,Yn,Yn+1}Yn+1=Yn+1−Proj{Y1,...,Yn}(Hn+1Zn+1+Wn+1)=Yn+1−Proj{Y1,...,Yn}(Hn+1Zn+1)=Yn+1−Hn+1Z^n+1∣n(ii)
由于Yn数据的观测噪声是Wn,因此Wn+1和Yn时间上对不上,因此这个噪声也与Yn不相关是0
把(ii)代入(i)中得
Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + K n + 1 ∗ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) K n + 1 = E ( Z n + 1 Y ˉ n + 1 T ) [ E ( Y ˉ n + 1 Y ˉ n + 1 T ) ] − 1 \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + K_{n+1}*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n}) \\ K_{n+1} = E(Z_{n+1}\bar Y_{n+1}^T)[E(\bar Y_{n+1}\bar Y_{n+1}^T)]^{-1} Z^n+1∣n+1=Z^n+1∣n+Kn+1∗(Yn+1−Hn+1Z^n+1∣n)Kn+1=E(Zn+1Yˉn+1T)[E(Yˉn+1Yˉn+1T)]−1
所以我们推测的与实际的是一致的
2.3.3 计算卡尔曼增益
我们要把k计算出来,我们把k叫做卡尔曼增益 kalman gain。k在实际应用中是要调节的
卡尔曼增益是把估计的残差做转化,然后来校正预测值。卡尔曼增益决定了,你在多大程度上信任你原来的预测值,和在多大程度上信息新的观测。
我们以雷达跟踪为例。
比如我们对数据进行预测,得到一个预测值,但是跟观测值相差很大,计算机就需要猜测,观测值到底是真的还是野数据。如果我们认为他是野数据,就会让卡尔曼增益减小,不考虑新值
但是我们后面发现,往后的观测值全部在偏差很大,那我们就需要继续考虑卡尔曼增益。雷达跟踪最困难的就是如何把控这个gain
下面来计算增益矩阵
K n + 1 = E ( Z n + 1 Y ˉ n + 1 T ) [ E ( Y ˉ n + 1 Y ˉ n + 1 T ) ] − 1 K_{n+1} = E(Z_{n+1}\bar Y_{n+1}^T)[E(\bar Y_{n+1}\bar Y_{n+1}^T)]^{-1} Kn+1=E(Zn+1Yˉn+1T)[E(Yˉn+1Yˉn+1T)]−1
先计算前半部分
E ( Z n + 1 Y ˉ n + 1 T ) = E ( Z n + 1 ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) T ) = E ( Z n + 1 ( H n + 1 Z n + 1 + W n + 1 − H n + 1 Z ^ n + 1 ∣ n ) T ) = E ( Z n + 1 ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ∗ H n + 1 T ) E(Z_{n+1}\bar Y_{n+1}^T) = E(Z_{n+1}(Y_{n+1}-H_{n+1} \hat Z_{n+1|n})^T) \\ =E(Z_{n+1}(H_{n+1}Z_{n+1}+W_{n+1}-H_{n+1} \hat Z_{n+1|n})^T) \\ = E(Z_{n+1} * (Z_{n+1}-\hat Z_{n+1|n})^T *H_{n+1}^T) E(Zn+1Yˉn+1T)=E(Zn+1(Yn+1−Hn+1Z^n+1∣n)T)=E(Zn+1(Hn+1Zn+1+Wn+1−Hn+1Z^n+1∣n)T)=E(Zn+1∗(Zn+1−Z^n+1∣n)T∗Hn+1T)
因为估计的残差肯定与原材料正交,而 \hat Zn+1|n是 Z1,…,Zn的线性组合,就是估计的原材料,所以我们可以补一项。同时,这里面H是个确定值,没有随机性,可以放到期望外面
E ( Z n + 1 Y ˉ n + 1 T ) = E ( Z n + 1 ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ∗ H n + 1 T ) = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ∗ H n + 1 T ) = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) ∗ H n + 1 T = P n + 1 ∣ n ∗ H n + 1 T E(Z_{n+1}\bar Y_{n+1}^T) = E(Z_{n+1} * (Z_{n+1}-\hat Z_{n+1|n})^T *H_{n+1}^T) \\ = E((Z_{n+1} - \hat Z_{n+1|n}) * (Z_{n+1}-\hat Z_{n+1|n})^T *H_{n+1}^T) \\ = E((Z_{n+1} - \hat Z_{n+1|n}) * (Z_{n+1}-\hat Z_{n+1|n})^T) * H_{n+1}^T \\ = P_{n+1|n} * H_{n+1}^T E(Zn+1Yˉn+1T)=E(Zn+1∗(Zn+1−Z^n+1∣n)T∗Hn+1T)=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T∗Hn+1T)=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)∗Hn+1T=Pn+1∣n∗Hn+1T
其中
P n + 1 ∣ n = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) P_{n+1|n} = E((Z_{n+1} - \hat Z_{n+1|n}) * (Z_{n+1}-\hat Z_{n+1|n})^T) Pn+1∣n=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)
得到的就是预测误差的协方差矩阵
再计算后半部分
E ( Y ˉ n + 1 Y ˉ n + 1 T ) = E [ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) ∗ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) T ] = E [ ( H n + 1 Z n + 1 + W n + 1 − H n + 1 Z ^ n + 1 ∣ n ) ∗ ( H n + 1 Z n + 1 + W n + 1 − H n + 1 Z ^ n + 1 ∣ n ) T ] = E [ ( W n + 1 + H n + 1 ( Z n + 1 − Z ^ n + 1 ∣ n ) ) ∗ ( W n + 1 + H n + 1 ( Z n + 1 − Z ^ n + 1 ∣ n ) ) T ] = H n + 1 ∗ E [ ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ] ∗ H n + 1 T + E ( W n + 1 ∗ W n + 1 T ) = H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 E(\bar Y_{n+1}\bar Y_{n+1}^T) = E[(Y_{n+1}-H_{n+1} \hat Z_{n+1|n})*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n})^T] \\ = E[(H_{n+1}Z_{n+1}+W_{n+1}-H_{n+1} \hat Z_{n+1|n})*(H_{n+1}Z_{n+1}+W_{n+1}-H_{n+1} \hat Z_{n+1|n})^T] \\ = E[(W_{n+1}+H_{n+1}(Z_{n+1}-\hat Z_{n+1|n}))*(W_{n+1}+H_{n+1}(Z_{n+1}-\hat Z_{n+1|n}))^T] \\ = H_{n+1}*E[(Z_{n+1}-\hat Z_{n+1|n})*(Z_{n+1}-\hat Z_{n+1|n})^T]*H_{n+1}^T + E(W_{n+1}*W_{n+1}^T) \\ = H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1} E(Yˉn+1Yˉn+1T)=E[(Yn+1−Hn+1Z^n+1∣n)∗(Yn+1−Hn+1Z^n+1∣n)T]=E[(Hn+1Zn+1+Wn+1−Hn+1Z^n+1∣n)∗(Hn+1Zn+1+Wn+1−Hn+1Z^n+1∣n)T]=E[(Wn+1+Hn+1(Zn+1−Z^n+1∣n))∗(Wn+1+Hn+1(Zn+1−Z^n+1∣n))T]=Hn+1∗E[(Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T]∗Hn+1T+E(Wn+1∗Wn+1T)=Hn+1∗Pn+1∣n∗Hn+1T+Rn+1
其中
P n + 1 ∣ n = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) R n + 1 = E ( W n + 1 ∗ W n + 1 T ) P_{n+1|n} = E((Z_{n+1} - \hat Z_{n+1|n}) * (Z_{n+1}-\hat Z_{n+1|n})^T) \\ R_{n+1} = E(W_{n+1}*W_{n+1}^T) Pn+1∣n=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)Rn+1=E(Wn+1∗Wn+1T)
计算得到卡尔曼增益]
K n + 1 = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 K_{n+1} = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1} Kn+1=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1
整理一下目前的结果
- 预测:在原有估计的基础上,通过状态方程进行预测
- 校正:在预测的基础上,通过卡尔曼增益,实现校正
- 卡尔曼增益:也算出来结果了
Z ^ n + 1 ∣ n = F n ∗ Z ^ n ∣ n ( 1 ) Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + K n + 1 ∗ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) ( 2 ) K n + 1 = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 ( 3 ) \hat Z_{n+1|n} = F_n * \hat Z_{n|n} \quad\quad(1) \\ \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + K_{n+1}*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n}) \quad\quad(2) \\ K_{n+1} = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1} \quad\quad(3) Z^n+1∣n=Fn∗Z^n∣n(1)Z^n+1∣n+1=Z^n+1∣n+Kn+1∗(Yn+1−Hn+1Z^n+1∣n)(2)Kn+1=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1(3)
这里有个问题,我们并没有计算清楚协方差矩阵P,因此我们还需要继续计算
2.3.4 计算协方差矩阵
我们依旧采用递推的方法进,我们类比状态的递推
Z ^ n ∣ n → Z ^ n + 1 ∣ n → Z ^ n + 1 ∣ n + 1 P n ∣ n → P n + 1 ∣ n → P n + 1 ∣ n + 1 \hat Z_{n|n} \rightarrow \hat Z_{n+1|n} \rightarrow \hat Z_{n+1|n+1} \\ P_{n|n} \rightarrow P_{n+1|n} \rightarrow P_{n+1|n+1} \\ Z^n∣n→Z^n+1∣n→Z^n+1∣n+1Pn∣n→Pn+1∣n→Pn+1∣n+1
先完成第一步
P n ∣ n → P n + 1 ∣ n P_{n|n} \rightarrow P_{n+1|n} Pn∣n→Pn+1∣n
P n + 1 ∣ n = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) = E ( ( F n Z n + V n − F n Z ^ n ∣ n ) ( F n Z n + V n − F n Z ^ n ∣ n ) T ) = E ( ( F n ( Z n − Z ^ n ∣ n ) + V n ) ∗ ( F n ( Z n − Z ^ n ∣ n ) + V n ) T ) = F n ∗ E ( ( Z n − Z ^ n ∣ n ) ∗ ( Z n − Z ^ n ∣ n ) T ) ∗ F n T + E ( V n ∗ V n T ) = F n P n ∣ n F n T + Q n ( 9 ) P_{n+1|n} = E((Z_{n+1} - \hat Z_{n+1|n}) * (Z_{n+1}-\hat Z_{n+1|n})^T) \\ = E((F_n Z_n +V_n - F_n \hat Z_{n|n})(F_n Z_n +V_n - F_n \hat Z_{n|n})^T) \\ = E((F_n(Z_n-\hat Z_{n|n})+V_n)*(F_n(Z_n-\hat Z_{n|n})+V_n)^T) \\ = F_n*E((Z_n-\hat Z_{n|n})*(Z_n-\hat Z_{n|n})^T)*F_n^T + E(V_n*V_n^T) \\ = F_n P_{n|n} F_n^T + Q_n \quad\quad(9) Pn+1∣n=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)=E((FnZn+Vn−FnZ^n∣n)(FnZn+Vn−FnZ^n∣n)T)=E((Fn(Zn−Z^n∣n)+Vn)∗(Fn(Zn−Z^n∣n)+Vn)T)=Fn∗E((Zn−Z^n∣n)∗(Zn−Z^n∣n)T)∗FnT+E(Vn∗VnT)=FnPn∣nFnT+Qn(9)
其中
P n ∣ n = E ( ( Z n − Z ^ n ∣ n ) ∗ ( Z n − Z ^ n ∣ n ) T ) Q n = E ( V n ∗ V n T ) P_{n|n} = E((Z_n-\hat Z_{n|n})*(Z_n-\hat Z_{n|n})^T)\\ Q_n = E(V_n*V_n^T) Pn∣n=E((Zn−Z^n∣n)∗(Zn−Z^n∣n)T)Qn=E(Vn∗VnT)
再完成第二步
P n + 1 ∣ n → P n + 1 ∣ n + 1 P_{n+1|n} \rightarrow P_{n+1|n+1} Pn+1∣n→Pn+1∣n+1
P n + 1 ∣ n + 1 = E ( ( Z n + 1 − Z ^ n + 1 ∣ n + 1 ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n + 1 ) T ) P_{n+1|n+1} = E((Z_{n+1} - \hat Z_{n+1|n+1}) * (Z_{n+1}-\hat Z_{n+1|n+1})^T) Pn+1∣n+1=E((Zn+1−Z^n+1∣n+1)∗(Zn+1−Z^n+1∣n+1)T)
我们前面已经计算过了校正结果
Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + K n + 1 ∗ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + K_{n+1}*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n}) Z^n+1∣n+1=Z^n+1∣n+Kn+1∗(Yn+1−Hn+1Z^n+1∣n)
所以,代入(2)式
Z
n
+
1
−
Z
^
n
+
1
∣
n
+
1
=
Z
n
+
1
−
Z
^
n
+
1
∣
n
−
K
n
+
1
∗
(
Y
n
+
1
−
H
n
+
1
Z
^
n
+
1
∣
n
)
=
Z
n
+
1
−
Z
^
n
+
1
∣
n
−
K
n
+
1
∗
(
H
n
+
1
∗
Z
n
+
1
+
W
n
+
1
−
H
n
+
1
Z
^
n
+
1
∣
n
)
=
(
Z
n
+
1
−
Z
^
n
+
1
∣
n
)
−
H
n
+
1
∗
K
n
+
1
∗
(
Z
n
+
1
−
Z
^
n
+
1
∣
n
)
−
K
n
+
1
∗
W
n
+
1
=
(
I
−
H
n
+
1
)
(
Z
n
+
1
−
Z
^
n
+
1
∣
n
)
−
K
n
+
1
∗
W
n
+
1
Z_{n+1} - \hat Z_{n+1|n+1} = Z_{n+1} - \hat Z_{n+1|n} - K_{n+1}*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n}) \\ = Z_{n+1} - \hat Z_{n+1|n} - K_{n+1}*(H_{n+1}*Z_{n+1}+W_{n+1}-H_{n+1} \hat Z_{n+1|n}) \\ = (Z_{n+1} - \hat Z_{n+1|n}) - H_{n+1}*K_{n+1}*(Z_{n+1}- \hat Z_{n+1|n}) - K_{n+1}*W_{n+1} \\ = (I-H_{n+1})(Z_{n+1} - \hat Z_{n+1|n})- K_{n+1}*W_{n+1}
Zn+1−Z^n+1∣n+1=Zn+1−Z^n+1∣n−Kn+1∗(Yn+1−Hn+1Z^n+1∣n)=Zn+1−Z^n+1∣n−Kn+1∗(Hn+1∗Zn+1+Wn+1−Hn+1Z^n+1∣n)=(Zn+1−Z^n+1∣n)−Hn+1∗Kn+1∗(Zn+1−Z^n+1∣n)−Kn+1∗Wn+1=(I−Hn+1)(Zn+1−Z^n+1∣n)−Kn+1∗Wn+1
代入
P n + 1 ∣ n + 1 = E ( ( Z n + 1 − Z ^ n + 1 ∣ n + 1 ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n + 1 ) T ) = ( I − K n + 1 H n + 1 ) ∗ E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) ∗ ( I − K n + 1 H n + 1 ) T − K n + 1 ∗ E ( W n + 1 W n + 1 T ) ∗ K n + 1 T = ( I − K n + 1 H n + 1 ) ∗ P n + 1 ∣ n ∗ ( I − K n + 1 H n + 1 ) T + K n + 1 ∗ R n + 1 ∗ K n + 1 T P_{n+1|n+1} = E((Z_{n+1} - \hat Z_{n+1|n+1}) * (Z_{n+1}-\hat Z_{n+1|n+1})^T) \\ = (I-K_{n+1}H_{n+1})*E((Z_{n+1} - \hat Z_{n+1|n})*(Z_{n+1} - \hat Z_{n+1|n})^T) * (I-K_{n+1}H_{n+1})^T - K_{n+1}*E(W_{n+1}W_{n+1}^T)*K_{n+1}^T \\ = (I-K_{n+1}H_{n+1})*P_{n+1|n}*(I-K_{n+1}H_{n+1})^T + K_{n+1}*R_{n+1}*K_{n+1}^T Pn+1∣n+1=E((Zn+1−Z^n+1∣n+1)∗(Zn+1−Z^n+1∣n+1)T)=(I−Kn+1Hn+1)∗E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)∗(I−Kn+1Hn+1)T−Kn+1∗E(Wn+1Wn+1T)∗Kn+1T=(I−Kn+1Hn+1)∗Pn+1∣n∗(I−Kn+1Hn+1)T+Kn+1∗Rn+1∗Kn+1T
其中
P n + 1 ∣ n = E ( ( Z n + 1 − Z ^ n + 1 ∣ n ) ∗ ( Z n + 1 − Z ^ n + 1 ∣ n ) T ) R n + 1 = E ( W n + 1 W n + 1 T ) P_{n+1|n} = E((Z_{n+1} - \hat Z_{n+1|n})*(Z_{n+1} - \hat Z_{n+1|n})^T) \\ R_{n+1} = E(W_{n+1}W_{n+1}^T) Pn+1∣n=E((Zn+1−Z^n+1∣n)∗(Zn+1−Z^n+1∣n)T)Rn+1=E(Wn+1Wn+1T)
继续化简
( I − K n + 1 H n + 1 ) ∗ P n + 1 ∣ n ∗ ( I − K n + 1 H n + 1 ) T + K n + 1 ∗ R n + 1 ∗ K n + 1 T = P n + 1 ∣ n − K n + 1 H n + 1 ∗ P n + 1 ∣ n − P n + 1 ∣ n ∗ H n + 1 T K n + 1 T + K n + 1 H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T K n + 1 T + K n + 1 ∗ R n + 1 ∗ K n + 1 T = P n + 1 ∣ n − K n + 1 H n + 1 ∗ P n + 1 ∣ n − P n + 1 ∣ n ∗ H n + 1 T K n + 1 T + K n + 1 ∗ ( H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ) ∗ K n + 1 T ( 4 ) (I-K_{n+1}H_{n+1})*P_{n+1|n}*(I-K_{n+1}H_{n+1})^T + K_{n+1}*R_{n+1}*K_{n+1}^T \\ = P_{n+1|n} - K_{n+1}H_{n+1}*P_{n+1|n} -P_{n+1|n} *H_{n+1}^T K_{n+1}^T \\ +K_{n+1}H_{n+1}* P_{n+1|n}*H_{n+1}^T K_{n+1}^T +K_{n+1}*R_{n+1}*K_{n+1}^T \\ = P_{n+1|n} - K_{n+1}H_{n+1}*P_{n+1|n} -P_{n+1|n} *H_{n+1}^T K_{n+1}^T \\ +K_{n+1}*(H_{n+1}* P_{n+1|n}*H_{n+1}^T+R_{n+1})*K_{n+1}^T \quad\quad(4) \\ (I−Kn+1Hn+1)∗Pn+1∣n∗(I−Kn+1Hn+1)T+Kn+1∗Rn+1∗Kn+1T=Pn+1∣n−Kn+1Hn+1∗Pn+1∣n−Pn+1∣n∗Hn+1TKn+1T+Kn+1Hn+1∗Pn+1∣n∗Hn+1TKn+1T+Kn+1∗Rn+1∗Kn+1T=Pn+1∣n−Kn+1Hn+1∗Pn+1∣n−Pn+1∣n∗Hn+1TKn+1T+Kn+1∗(Hn+1∗Pn+1∣n∗Hn+1T+Rn+1)∗Kn+1T(4)
计算一下最后一步
K n + 1 ∗ ( H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ) ∗ K n + 1 T ( 5 ) K_{n+1}*(H_{n+1}* P_{n+1|n}*H_{n+1}^T+R_{n+1})*K_{n+1}^T \quad\quad(5) Kn+1∗(Hn+1∗Pn+1∣n∗Hn+1T+Rn+1)∗Kn+1T(5)
K n + 1 = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 ( 3 ) K_{n+1} = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1} \quad\quad(3) Kn+1=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1(3)
(5)代入(3)式
这里需要注意一下,协方差矩阵R是对称的,然后Hn+1Pn+1|nHn+1^T是个合同矩阵,也是对称的,因此这部分的转置是他本身。P也是协方差矩阵,转置是他本身
K n + 1 ∗ ( H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ) ∗ K n + 1 T = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 ∗ ( H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ) ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 ∗ H n + 1 ∗ P n + 1 ∣ n = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n H n + 1 T + R n + 1 ] − 1 ∗ H n + 1 ∗ P n + 1 ∣ n = K n + 1 ∗ H n + 1 ∗ P n + 1 ∣ n ( 6 ) K_{n+1}*(H_{n+1}* P_{n+1|n}*H_{n+1}^T+R_{n+1})*K_{n+1}^T \\ = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1} *\\ (H_{n+1}* P_{n+1|n}*H_{n+1}^T+R_{n+1}) * \\ [H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1}*H_{n+1}* P_{n+1|n} \\ = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n}H_{n+1}^T +R_{n+1}]^{-1} \\ *H_{n+1}* P_{n+1|n} \\ = K_{n+1}*H_{n+1}* P_{n+1|n} \quad\quad(6) Kn+1∗(Hn+1∗Pn+1∣n∗Hn+1T+Rn+1)∗Kn+1T=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1∗(Hn+1∗Pn+1∣n∗Hn+1T+Rn+1)∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1∗Hn+1∗Pn+1∣n=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣nHn+1T+Rn+1]−1∗Hn+1∗Pn+1∣n=Kn+1∗Hn+1∗Pn+1∣n(6)
然后我们发现(5)式子是对称的,因此化简得到的矩阵(6)也是对称的,所以根据转置相等,可以得到(7)
K n + 1 ∗ H n + 1 ∗ P n + 1 ∣ n = P n + 1 ∣ n ∗ H n + 1 T ∗ K n + 1 T ( 7 ) K_{n+1}*H_{n+1}* P_{n+1|n} = P_{n+1|n}*H_{n+1}^T*K_{n+1}^T \quad\quad(7) Kn+1∗Hn+1∗Pn+1∣n=Pn+1∣n∗Hn+1T∗Kn+1T(7)
(7)代入(4)中
P n + 1 ∣ n + 1 = ( I − K n + 1 H n + 1 ) ∗ P n + 1 ∣ n ∗ ( I − K n + 1 H n + 1 ) T + K n + 1 ∗ R n + 1 ∗ K n + 1 T = P n + 1 ∣ n − K n + 1 H n + 1 ∗ P n + 1 ∣ n − P n + 1 ∣ n ∗ H n + 1 T K n + 1 T + K n + 1 ∗ ( H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ) ∗ K n + 1 T = P n + 1 ∣ n − K n + 1 H n + 1 ∗ P n + 1 ∣ n − P n + 1 ∣ n ∗ H n + 1 T K n + 1 T + P n + 1 ∣ n ∗ H n + 1 T ∗ K n + 1 T = P n + 1 ∣ n − K n + 1 H n + 1 ∗ P n + 1 ∣ n = ( I − K n + 1 H n + 1 ) ∗ P n + 1 ∣ n ( 8 ) P_{n+1|n+1} \\ = (I-K_{n+1}H_{n+1})*P_{n+1|n}*(I-K_{n+1}H_{n+1})^T + K_{n+1}*R_{n+1}*K_{n+1}^T \\ = P_{n+1|n} - K_{n+1}H_{n+1}*P_{n+1|n} -P_{n+1|n} *H_{n+1}^T K_{n+1}^T \\ +K_{n+1}*(H_{n+1}* P_{n+1|n}*H_{n+1}^T+R_{n+1})*K_{n+1}^T \\ = P_{n+1|n} - K_{n+1}H_{n+1}*P_{n+1|n} -P_{n+1|n} *H_{n+1}^T K_{n+1}^T \\+ P_{n+1|n}*H_{n+1}^T*K_{n+1}^T \\ = P_{n+1|n} - K_{n+1}H_{n+1}*P_{n+1|n} \\ =(I -K_{n+1}H_{n+1} )*P_{n+1|n} \quad\quad(8) Pn+1∣n+1=(I−Kn+1Hn+1)∗Pn+1∣n∗(I−Kn+1Hn+1)T+Kn+1∗Rn+1∗Kn+1T=Pn+1∣n−Kn+1Hn+1∗Pn+1∣n−Pn+1∣n∗Hn+1TKn+1T+Kn+1∗(Hn+1∗Pn+1∣n∗Hn+1T+Rn+1)∗Kn+1T=Pn+1∣n−Kn+1Hn+1∗Pn+1∣n−Pn+1∣n∗Hn+1TKn+1T+Pn+1∣n∗Hn+1T∗Kn+1T=Pn+1∣n−Kn+1Hn+1∗Pn+1∣n=(I−Kn+1Hn+1)∗Pn+1∣n(8)
2.3.5 卡尔曼滤波完整方程式
模型
{
Z
n
+
1
=
F
n
Z
n
+
V
n
Y
n
=
H
n
Z
n
+
W
n
\begin{cases} Z_{n+1} = F_n Z_n +V_n\\ Y_n = H_n Z_n + W_n \end{cases}
{Zn+1=FnZn+VnYn=HnZn+Wn
E ( V n ) = E ( W n ) = 0 E ( V n ∗ W n T ) = 0 E ( V n V m T ) = Q n δ m n E ( W n W m T ) = R n δ m n E(V_n) = E(W_n) = 0 \quad E(V_n*W_n^T) = 0 \\ E(V_n V_m^T) = Q_n \delta_{mn} \quad E(W_n W_m^T) = R_n \delta_{mn} E(Vn)=E(Wn)=0E(Vn∗WnT)=0E(VnVmT)=QnδmnE(WnWmT)=Rnδmn
我们得到了卡尔曼滤波的完整方程
- 预测:在原有估计的基础上,通过状态方程进行预测
- 校正:在预测的基础上,通过卡尔曼增益,实现校正
- 卡尔曼增益:也算出来结果了
- 协方差矩阵的递推
Z ^ n + 1 ∣ n = F n ∗ Z ^ n ∣ n ( 1 ) Z ^ n + 1 ∣ n + 1 = Z ^ n + 1 ∣ n + K n + 1 ∗ ( Y n + 1 − H n + 1 Z ^ n + 1 ∣ n ) ( 2 ) K n + 1 = P n + 1 ∣ n ∗ H n + 1 T ∗ [ H n + 1 ∗ P n + 1 ∣ n ∗ H n + 1 T + R n + 1 ] − 1 ( 3 ) P n + 1 ∣ n = F n P n ∣ n F n T + Q n ( 9 ) P n + 1 ∣ n + 1 = ( I − K n + 1 H n + 1 ) ∗ P n + 1 ∣ n ( 8 ) \hat Z_{n+1|n} = F_n * \hat Z_{n|n} \quad\quad(1) \\ \hat Z_{n+1|n+1} = \hat Z_{n+1|n} + K_{n+1}*(Y_{n+1}-H_{n+1} \hat Z_{n+1|n}) \quad\quad(2) \\ K_{n+1} = P_{n+1|n} * H_{n+1}^T *[H_{n+1}*P_{n+1|n} * H_{n+1}^T +R_{n+1}]^{-1} \quad\quad(3) \\ P_{n+1|n} = F_n P_{n|n} F_n^T + Q_n \quad\quad(9) \\ P_{n+1|n+1} =(I -K_{n+1}H_{n+1} )*P_{n+1|n} \quad\quad(8) Z^n+1∣n=Fn∗Z^n∣n(1)Z^n+1∣n+1=Z^n+1∣n+Kn+1∗(Yn+1−Hn+1Z^n+1∣n)(2)Kn+1=Pn+1∣n∗Hn+1T∗[Hn+1∗Pn+1∣n∗Hn+1T+Rn+1]−1(3)Pn+1∣n=FnPn∣nFnT+Qn(9)Pn+1∣n+1=(I−Kn+1Hn+1)∗Pn+1∣n(8)
卡尔曼滤波非常有意思的地方在于,除了递推状态方程以外,还需要递推误差,也就是协方差矩阵。这个递推误差非常重要,这是一个性能评估。
卡尔曼在信号处理领域,首先实现了在线误差评估。
我们一开始需要有一个初值,这个初值可以随便设置,卡尔曼滤波会随着数据的增多慢慢学习。初值给的很离谱都无所谓,随着时间的变化会慢慢的接近真实值。
3. 举例
假设我们要对空中飞行目标进行建模,我们假设状态包括,位置,速度,加速度三个量
( X n , X n ′ , X n ′ ′ ) (X_n,X_n',X_n'') (Xn,Xn′,Xn′′)
我们要计算我们的状态方程
X n + 1 = X n + X n ′ ∗ Δ t + 1 2 X n ′ ′ ( Δ t ) 2 X_{n+1} = X_n + X_n' *\Delta t + \frac{1}{2}X_n''(\Delta t)^2 Xn+1=Xn+Xn′∗Δt+21Xn′′(Δt)2
X n + 1 ′ = X n ′ + X n ′ ′ Δ t X'_{n+1} = X_n' + X_n'' \Delta t Xn+1′=Xn′+Xn′′Δt
X n ′ ′ = X n ′ ′ X_n'' = X_n'' Xn′′=Xn′′
建立矩阵方程。我们建模是通过先验知识建立的
(
X
n
+
1
X
n
+
1
′
X
n
+
1
′
′
)
=
(
1
Δ
t
1
2
(
Δ
t
)
2
0
1
Δ
t
0
0
1
)
∗
(
X
n
X
n
′
X
n
′
′
)
+
V
n
\begin{pmatrix} X_{n+1} \\ X'_{n+1} \\ X_{n+1}'' \end{pmatrix} = \begin{pmatrix} 1 & \Delta t &\frac{1}{2}(\Delta t)^2 \\ 0 &1 &\Delta t\\ 0& 0& 1 \end{pmatrix}* \begin{pmatrix} X_{n} \\ X'_{n} \\ X_{n}'' \end{pmatrix} +V_n
⎝⎛Xn+1Xn+1′Xn+1′′⎠⎞=⎝⎛100Δt1021(Δt)2Δt1⎠⎞∗⎝⎛XnXn′Xn′′⎠⎞+Vn
F
=
(
1
Δ
t
1
2
(
Δ
t
)
2
0
1
Δ
t
0
0
1
)
F = \begin{pmatrix} 1 & \Delta t &\frac{1}{2}(\Delta t)^2 \\ 0 &1 &\Delta t\\ 0& 0& 1 \end{pmatrix}
F=⎝⎛100Δt1021(Δt)2Δt1⎠⎞
我们的观测方程就是位置
y n = X n + W n = ( 1 0 0 ) ∗ ( X n X n ′ X n ′ ′ ) + W n y_n = X_n + W_n = \begin{pmatrix} 1 &0 &0 \end{pmatrix}*\begin{pmatrix} X_{n} \\ X'_{n} \\ X_{n}'' \end{pmatrix} +W_n yn=Xn+Wn=(100)∗⎝⎛XnXn′Xn′′⎠⎞+Wn
H = ( 1 0 0 ) H = \begin{pmatrix} 1 &0 &0 \end{pmatrix} H=(100)
我们要明确一个事情,没有一个模型是完美无缺的。也没有一个模型是一无是处的。我们建立的这个模型,在时间足够小的时候,可以近似认为加速度是不变的。
不过模型确实可能建立错误。卡尔曼滤波最怕的就是模型失配–Model Miswatch。
比如。矢量喷管技术能够让飞机横向平移,虽然这是违背牛顿力学的。因此矢量喷管技术能够让飞机加速度突变,让牛顿力学失效,也就能让飞机躲避导弹追踪。
因此,模型建立的准确性对卡尔曼滤波有着决定性作用。比如看看弹道学去估计导弹飞行轨迹的建模。卡尔曼滤波写于1960年,卡尔曼滤波最成功的应用,就是在航空航天上。