1、降阶滤波的推导
思路
所谓卡尔曼滤波的降阶处理,就是想办法把状态量的数量少,当然这是有条件的。减少就意味着要忽略一些量,但那些量可以忽略是值得研究的。最直观的想法是忽略我们不关心的量,而且忽略后还得对滤波不会造成太大的影响。什么量可以忽略呢?当然是噪声。
还记得前面提到的有色噪声处理问题吧。当状态方程的噪声有色噪声时,我们把有色噪声当成状态量,放到状态方程里一起估计。也就是我们把状态方程和量测方程进行了扩展,扩展成这个样子:
(
X
k
+
1
W
k
+
1
)
=
(
Φ
k
+
1
,
k
Γ
k
0
Π
k
+
1
,
k
)
(
X
k
W
k
)
+
(
0
I
)
ζ
k
\begin{pmatrix}X_{k+1}\\W_{k+1}\end{pmatrix}=\begin{pmatrix}\Phi_{k+1,k}&\Gamma_k\\0&\Pi_{k+1,k}\end{pmatrix}\begin{pmatrix}X_k\\W_k\end{pmatrix}+\begin{pmatrix}0\\I\end{pmatrix}\zeta_k
(Xk+1Wk+1)=(Φk+1,k0ΓkΠk+1,k)(XkWk)+(0I)ζk
Z
k
=
(
H
k
0
)
(
X
k
W
k
)
+
V
k
Z_k=\begin{pmatrix}H_k&0\end{pmatrix}\begin{pmatrix}X_k\\W_k\end{pmatrix}+V_k
Zk=(Hk0)(XkWk)+Vk
我们其实对有色噪声里的有色的部分并不感兴趣,也就是说
W
k
W_k
Wk是多少我们并不想知道。但是滤波的时候是把
W
k
W_k
Wk一起进行最优估计的。我这里就讨论一种在一定约束条件下,忽略
W
k
W_k
Wk来实现对滤波器进行降阶的处理思路。
上面两个方程我们把参数名换一下,以便描述更直接一些。方程写成下面这个样子:
(
X
k
+
1
1
X
k
+
1
2
)
=
(
Φ
k
+
1
,
k
11
Φ
k
+
1
,
k
12
0
Φ
k
+
1
,
k
22
)
(
X
k
1
X
k
2
)
+
(
0
0
0
Γ
k
2
)
(
0
W
k
2
)
\begin{pmatrix}X_{k+1}^1\\X_{k+1}^2\end{pmatrix}=\begin{pmatrix}\Phi_{k+1,k}^{11}&\Phi_{k+1,k}^{12}\\0&\Phi_{k+1,k}^{22}\end{pmatrix}\begin{pmatrix}X_k^1\\X_k^2\end{pmatrix}+\begin{pmatrix}0&0\\0&\Gamma_k^2\end{pmatrix}\begin{pmatrix}0\\W_k^2\end{pmatrix}
(Xk+11Xk+12)=(Φk+1,k110Φk+1,k12Φk+1,k22)(Xk1Xk2)+(000Γk2)(0Wk2)
Z
k
=
(
H
k
1
0
)
(
X
k
1
X
k
2
)
+
V
k
Z_k=\begin{pmatrix}H_k^1&0\end{pmatrix}\begin{pmatrix}X_k^1\\X_k^2\end{pmatrix}+V_k
Zk=(Hk10)(Xk1Xk2)+Vk
注意哦!上标的1和2可不是1次方和平方,而是单纯的编号,都写下标太长了。
其实上面两个方程和状态方程是有色噪声的扩展方程是一回事。我只是把变量名给统一了一下。
推导过程
按刚才咱们提到的思路,我们滤波是不考虑或者尽量少考虑
X
k
2
X_k^2
Xk2的影响。也就是在计算
X
k
+
1
1
X_{k+1}^1
Xk+11的估值
X
^
k
+
1
1
\hat X_{k+1}^1
X^k+11时不考虑
X
k
2
X_k^2
Xk2。那么根据卡尔曼滤波器的基本方程:
X
^
k
+
1
1
=
Φ
k
+
1
,
k
11
X
^
k
1
+
K
k
+
1
(
Z
k
+
1
−
H
k
+
1
1
Φ
k
+
1
,
k
11
X
^
k
1
)
\hat X_{k+1}^1=\Phi_{k+1,k}^{11}\hat X_k^1+K_{k+1}(Z_{k+1}-H_{k+1}^1\Phi_{k+1,k}^{11}\hat X_k^1)
X^k+11=Φk+1,k11X^k1+Kk+1(Zk+1−Hk+11Φk+1,k11X^k1)
好了,我们来看一看这个估值的误差
X
k
+
1
1
−
X
^
k
+
1
1
X_{k+1}^1-\hat X_{k+1}^1
Xk+11−X^k+11。把上面的那些关系都带进去,直接减就好了,适当化简一下
X
~
k
+
1
1
=
X
k
+
1
1
−
X
^
k
+
1
1
\widetilde X_{k+1}^1=X_{k+1}^1-\hat X_{k+1}^1
X
k+11=Xk+11−X^k+11
X
~
k
+
1
1
=
(
I
−
K
k
+
1
H
k
+
1
1
)
(
Φ
k
+
1
,
k
11
X
~
k
1
+
Φ
k
+
1
,
k
12
X
k
2
)
−
K
k
+
1
V
k
+
1
\widetilde X_{k+1}^1=(I-K_{k+1}H_{k+1}^1)(\Phi_{k+1,k}^{11}\widetilde X_k^1+\Phi_{k+1,k}^{12}X_k^2)-K_{k+1}V_{k+1}
X
k+11=(I−Kk+1Hk+11)(Φk+1,k11X
k1+Φk+1,k12Xk2)−Kk+1Vk+1
发现了吧。这个估值的误差跟
X
k
2
X_k^2
Xk2有关了,当然会这样了,因为
X
k
2
X_k^2
Xk2本身就是噪声的一部分。增益矩阵是啥来着,表征估计误差的协方差矩阵,所以,在计算滤波增益矩阵的时候,我们还是需要考虑
X
k
2
X_k^2
Xk2的影响的。
好吧,看来那个估计方差阵
P
k
P_k
Pk的方程要重写一下了。推导过程可能繁琐了写,但其实只是单纯的计算,直接写结果了:
P
k
+
1
1
=
(
I
−
K
k
+
1
H
k
+
1
T
)
Σ
k
+
1
/
k
(
I
−
K
k
+
1
H
k
+
1
1
)
T
+
K
k
+
1
R
k
+
1
K
k
+
1
T
P_{k+1}^1=(I-K_{k+1}H_{k+1}^T)\Sigma_{k+1/k}(I-K_{k+1}H_{k+1}^1)^T+K_{k+1}R_{k+1}K_{k+1}^T
Pk+11=(I−Kk+1Hk+1T)Σk+1/k(I−Kk+1Hk+11)T+Kk+1Rk+1Kk+1T
或者:
P
k
+
1
1
=
(
I
−
K
k
+
1
H
k
+
1
)
Σ
k
+
1
/
k
P_{k+1}^1=(I-K_{k+1}H_{k+1})\Sigma_{k+1/k}
Pk+11=(I−Kk+1Hk+1)Σk+1/k
那个
Σ
k
+
1
/
k
\Sigma_{k+1/k}
Σk+1/k跟预测协方差阵
P
k
+
1
/
k
P_{k+1/k}
Pk+1/k是一个性质。不过因为
X
k
2
X_k^2
Xk2的存在,所以它的方程要比
P
k
+
1
/
k
P_{k+1/k}
Pk+1/k的方程复杂些。
Σ
k
+
1
/
k
=
Φ
k
+
1
,
k
11
P
k
1
Φ
k
+
1
,
k
11
T
+
Φ
k
+
1
,
k
12
C
k
Φ
k
+
1
,
k
11
T
+
Φ
k
+
1
,
k
11
C
k
T
Φ
k
+
1
,
k
12
T
+
Φ
k
+
1
,
k
12
A
k
Φ
k
+
1
,
k
12
T
\Sigma_{k+1/k}=\Phi_{k+1,k}^{11}P_k^1\Phi_{k+1,k}^{11T}+\Phi_{k+1,k}^{12}C_k\Phi_{k+1,k}^{11T}+\Phi_{k+1,k}^{11}C_k^T\Phi_{k+1,k}^{12T}+\Phi_{k+1,k}^{12}A_k\Phi_{k+1,k}^{12T}
Σk+1/k=Φk+1,k11Pk1Φk+1,k11T+Φk+1,k12CkΦk+1,k11T+Φk+1,k11CkTΦk+1,k12T+Φk+1,k12AkΦk+1,k12T
A
k
A_k
Ak是
X
k
2
X_k^2
Xk2的自相关矩阵,也就是
X
k
2
X
k
2
T
X_k^2X_k^{2T}
Xk2Xk2T,它也有递推关系:
A
k
+
1
=
Φ
k
+
1
,
k
22
A
k
Φ
k
+
1
,
k
22
T
+
Γ
k
2
Q
k
2
Γ
k
2
T
A_{k+1}=\Phi_{k+1,k}^{22}A_k\Phi_{k+1,k}^{22T}+\Gamma_k^2Q_k^2\Gamma_k^{2T}
Ak+1=Φk+1,k22AkΦk+1,k22T+Γk2Qk2Γk2T
C
k
C_k
Ck是
X
~
k
1
\widetilde X_{k}^1
X
k1和
X
k
2
X_k^2
Xk2的协方差矩阵,也就是
X
~
k
1
X
k
2
T
\widetilde X_{k}^1X_k^{2T}
X
k1Xk2T,也有递推关系:
C
k
+
1
T
=
I
f
Φ
k
+
1
,
k
11
C
k
T
Φ
k
+
1
,
k
22
T
+
I
f
Φ
k
+
1
,
k
12
A
k
Φ
k
+
1
,
k
22
T
C_{k+1}^T=I_f\Phi_{k+1,k}^{11}C_k^T\Phi_{k+1,k}^{22T}+I_f\Phi_{k+1,k}^{12}A_k\Phi_{k+1,k}^{22T}
Ck+1T=IfΦk+1,k11CkTΦk+1,k22T+IfΦk+1,k12AkΦk+1,k22T
I
f
=
I
−
K
k
+
1
H
k
+
1
1
I_f=I-K_{k+1}H_{k+1}^1
If=I−Kk+1Hk+11
同样,增益矩阵
K
k
K_k
Kk也跟着重写一下。
K
k
+
1
=
Σ
k
+
1
/
k
H
k
+
1
T
(
H
k
+
1
Σ
k
+
1
/
k
H
k
+
1
T
+
R
k
+
1
)
−
1
K_{k+1}=\Sigma_{k+1/k}H_{k+1}^T(H_{k+1}\Sigma_{k+1/k}H_{k+1}^T+R_{k+1})^{-1}
Kk+1=Σk+1/kHk+1T(Hk+1Σk+1/kHk+1T+Rk+1)−1
总结一下,降阶处理的次优滤波器全套方程如下:
Σ
k
+
1
/
k
=
Φ
k
+
1
,
k
11
P
k
1
Φ
k
+
1
,
k
11
T
+
Φ
k
+
1
,
k
12
C
k
Φ
k
+
1
,
k
11
T
+
Φ
k
+
1
,
k
11
C
k
T
Φ
k
+
1
,
k
12
T
+
Φ
k
+
1
,
k
12
A
k
Φ
k
+
1
,
k
12
T
\Sigma_{k+1/k}=\Phi_{k+1,k}^{11}P_k^1\Phi_{k+1,k}^{11T}+\Phi_{k+1,k}^{12}C_k\Phi_{k+1,k}^{11T}+\Phi_{k+1,k}^{11}C_k^T\Phi_{k+1,k}^{12T}+\Phi_{k+1,k}^{12}A_k\Phi_{k+1,k}^{12T}
Σk+1/k=Φk+1,k11Pk1Φk+1,k11T+Φk+1,k12CkΦk+1,k11T+Φk+1,k11CkTΦk+1,k12T+Φk+1,k12AkΦk+1,k12T
K
k
+
1
=
Σ
k
+
1
/
k
H
k
+
1
T
(
H
k
+
1
Σ
k
+
1
/
k
H
k
+
1
T
+
R
k
+
1
)
−
1
K_{k+1}=\Sigma_{k+1/k}H_{k+1}^T(H_{k+1}\Sigma_{k+1/k}H_{k+1}^T+R_{k+1})^{-1}
Kk+1=Σk+1/kHk+1T(Hk+1Σk+1/kHk+1T+Rk+1)−1
X
^
k
+
1
1
=
Φ
k
+
1
,
k
11
X
^
k
1
+
K
k
+
1
(
Z
k
+
1
−
H
k
+
1
1
Φ
k
+
1
,
k
11
X
^
k
1
)
\hat X_{k+1}^1=\Phi_{k+1,k}^{11}\hat X_k^1+K_{k+1}(Z_{k+1}-H_{k+1}^1\Phi_{k+1,k}^{11}\hat X_k^1)
X^k+11=Φk+1,k11X^k1+Kk+1(Zk+1−Hk+11Φk+1,k11X^k1)
P
k
+
1
1
=
(
I
−
K
k
+
1
H
k
+
1
)
Σ
k
+
1
/
k
P_{k+1}^1=(I-K_{k+1}H_{k+1})\Sigma_{k+1/k}
Pk+11=(I−Kk+1Hk+1)Σk+1/k
I
f
=
I
−
K
k
+
1
H
k
+
1
1
I_f=I-K_{k+1}H_{k+1}^1
If=I−Kk+1Hk+11
C
k
+
1
T
=
I
f
Φ
k
+
1
,
k
11
C
k
T
Φ
k
+
1
,
k
22
T
+
I
f
Φ
k
+
1
,
k
12
A
k
Φ
k
+
1
,
k
22
T
C_{k+1}^T=I_f\Phi_{k+1,k}^{11}C_k^T\Phi_{k+1,k}^{22T}+I_f\Phi_{k+1,k}^{12}A_k\Phi_{k+1,k}^{22T}
Ck+1T=IfΦk+1,k11CkTΦk+1,k22T+IfΦk+1,k12AkΦk+1,k22T
A
k
+
1
=
Φ
k
+
1
,
k
22
A
k
Φ
k
+
1
,
k
22
T
+
Γ
k
2
Q
k
2
Γ
k
2
T
A_{k+1}=\Phi_{k+1,k}^{22}A_k\Phi_{k+1,k}^{22T}+\Gamma_k^2Q_k^2\Gamma_k^{2T}
Ak+1=Φk+1,k22AkΦk+1,k22T+Γk2Qk2Γk2T
顺序计算递推即可。注意
H
k
H_k
Hk和
H
k
1
H_k^1
Hk1的区别。
再次强调一下,这个估计是次优估计,不是最优估计。这个推导过程难道不能保证估值最优吗。很遗憾,不能。从前面的文章中,我说过了,
K
k
K_k
Kk时根据
P
k
P_k
Pk最优而选择的,从而保证了卡尔曼滤波是最优估计。但在这套降阶处理的过程中,
K
k
K_k
Kk的选择并不是根据
P
k
P_k
Pk最优进行选择,而是根据
P
k
1
P_k^1
Pk1最优而进行的选择。但却不保证
C
k
C_k
Ck最优。也就是说,选择
K
k
K_k
Kk时虽然考虑了
X
k
2
X_k^2
Xk2的影响,但
X
k
2
X_k^2
Xk2的影响并没有完全消除,因此并不能保证
P
k
1
P_k^1
Pk1。所以这种滤波方法是一种次优滤波。不过话说回来,它毕竟在一定程度上考虑了一下
X
k
2
X_k^2
Xk2,所以在一般情况下,滤波的精度还是可以的。
实例分析
还是举个例子说明一下把。有个系统,状态方程和量测方程长下面的样子:
(
X
k
+
1
1
X
k
+
1
2
)
=
(
1
1
0
0.5
)
(
X
k
1
X
k
2
)
+
(
0
W
k
2
)
\begin{pmatrix}X_{k+1}^1\\X_{k+1}^2\end{pmatrix}=\begin{pmatrix}1&1\\0&0.5\end{pmatrix}\begin{pmatrix}X_k^1\\X_k^2\end{pmatrix}+\begin{pmatrix}0\\W_k^2\end{pmatrix}
(Xk+11Xk+12)=(1010.5)(Xk1Xk2)+(0Wk2)
Z
k
=
(
1
0
)
(
X
k
1
X
k
2
)
+
V
k
Z_k=\begin{pmatrix}1&0\end{pmatrix}\begin{pmatrix}X_k^1\\X_k^2\end{pmatrix}+V_k
Zk=(10)(Xk1Xk2)+Vk
X
k
1
X_k^1
Xk1和
X
k
2
X_k^2
Xk2不相关,
W
k
2
W_k^2
Wk2和
V
k
V_k
Vk的方差分别为:
Q
k
2
=
1
Q_k^2=1
Qk2=1
R
k
=
1
R_k=1
Rk=1
而且:
E
[
X
0
1
]
=
E
[
X
0
2
]
=
0
E[X_0^1]=E[X_0^2]=0
E[X01]=E[X02]=0
E
{
(
X
~
0
1
X
0
2
)
(
X
~
0
1
X
0
2
)
}
=
(
10
0
0
10
)
E\{\begin{pmatrix}\widetilde X_0^1\\X_0^2\end{pmatrix}\begin{pmatrix}\widetilde X_0^1&X_0^2\end{pmatrix}\}=\begin{pmatrix}10&0\\0&10\end{pmatrix}
E{(X
01X02)(X
01X02)}=(100010)
初始条件都有了,咱们为了做对比,先用标准的卡尔曼滤波方程估一下。那么,就带公式,然后得到。
X
^
k
+
1
1
=
X
^
k
1
+
X
^
k
2
+
K
k
+
1
1
(
Z
k
+
1
−
X
^
k
1
−
X
^
k
2
)
\hat X_{k+1}^1=\hat X_k^1+\hat X_k^2+K_{k+1}^1(Z_{k+1}-\hat X_k^1-\hat X_k^2)
X^k+11=X^k1+X^k2+Kk+11(Zk+1−X^k1−X^k2)
X
^
k
+
1
2
=
X
^
k
2
+
K
k
+
1
2
(
Z
k
+
1
−
X
^
k
1
−
X
^
k
2
)
\hat X_{k+1}^2=\hat X_k^2+K_{k+1}^2(Z_{k+1}-\hat X_k^1-\hat X_k^2)
X^k+12=X^k2+Kk+12(Zk+1−X^k1−X^k2)
P
k
/
k
−
1
11
=
P
k
−
1
11
+
2
P
k
−
1
12
+
P
k
−
1
22
P_{k/k-1}^{11}=P_{k-1}^{11}+2P_{k-1}^{12}+P_{k-1}^{22}
Pk/k−111=Pk−111+2Pk−112+Pk−122
P
k
/
k
−
1
12
=
0.5
(
P
k
−
1
12
+
P
k
−
1
22
)
P_{k/k-1}^{12}=0.5(P_{k-1}^{12}+P_{k-1}^{22})
Pk/k−112=0.5(Pk−112+Pk−122)
P
k
/
k
−
1
22
=
0.25
P
k
−
1
22
+
1
P_{k/k-1}^{22}=0.25P_{k-1}^{22}+1
Pk/k−122=0.25Pk−122+1
K
k
1
=
P
k
11
=
P
k
/
k
−
1
11
P
k
/
k
−
1
11
+
1
K_k^1=P_k^{11}=\frac {P_{k/k-1}^{11}}{P_{k/k-1}^{11}+1}
Kk1=Pk11=Pk/k−111+1Pk/k−111
K
k
2
=
P
k
12
=
P
k
/
k
−
1
12
P
k
/
k
−
1
11
+
1
K_k^2=P_k^{12}=\frac {P_{k/k-1}^{12}}{P_{k/k-1}^{11}+1}
Kk2=Pk12=Pk/k−111+1Pk/k−112
P
k
22
=
P
k
/
k
−
1
22
−
P
k
12
P
k
/
k
−
1
12
P_k^{22}=P_{k/k-1}^{22}-P_k^{12}P_{k/k-1}^{12}
Pk22=Pk/k−122−Pk12Pk/k−112
初值也有
P
0
11
=
10
P_0^{11}=10
P011=10,
P
0
12
=
0
P_0^{12}=0
P012=0,
P
0
22
=
10
P_0^{22}=10
P022=10。手动迭代7次,看一下
P
k
P_k
Pk的收敛情况。
k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
P k P_k Pk | 0.952 | 0.815 | 0.736 | 0.700 | 0.693 | 0.693 | 0.693 |
然后,我们在用前面讲的降阶后的次优滤波方法在滤一次。
Σ
k
+
1
/
k
=
P
k
+
2
C
k
+
A
k
\Sigma_{k+1/k}=P_k+2C_k+A_k
Σk+1/k=Pk+2Ck+Ak
K
k
+
1
=
Σ
k
+
1
/
k
(
Σ
k
+
1
/
k
+
1
)
−
1
K_{k+1}=\Sigma_{k+1/k}(\Sigma_{k+1/k}+1)^{-1}
Kk+1=Σk+1/k(Σk+1/k+1)−1
P
k
+
1
=
(
1
−
K
k
+
1
)
Σ
k
+
1
/
k
P_{k+1}=(1-K_{k+1})\Sigma_{k+1/k}
Pk+1=(1−Kk+1)Σk+1/k
A
k
+
1
=
0.25
A
k
+
1
A_{k+1}=0.25A_k+1
Ak+1=0.25Ak+1
C
k
+
1
=
0.5
(
1
−
K
k
+
1
)
(
C
k
+
A
k
)
C_{k+1}=0.5(1-K_{k+1})(C_k+A_k)
Ck+1=0.5(1−Kk+1)(Ck+Ak)
X
^
k
+
1
1
=
X
^
k
1
+
K
k
+
1
(
Z
k
+
1
−
X
^
k
1
)
\hat X_{k+1}^1=\hat X_k^1+K_{k+1}(Z_{k+1}-\hat X_k^1)
X^k+11=X^k1+Kk+1(Zk+1−X^k1)
前面推导得到的方程看着复杂一些,但是真正用起来时却发现比基本方程要计算简单。
初值也有。
P
0
=
10
P_0=10
P0=10,
C
0
=
0
C_0=0
C0=0,
A
0
=
10
A_0=10
A0=10。还是迭代七次,看估值方差的变化。
k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
P k P_k Pk | 0.952 | 0.831 | 0.799 | 0.735 | 0.719 | 0.715 | 0.714 |
看来两种方法的估计精度还是比较接近的。
最后。想不想看看完全不考虑
X
k
2
X_k^2
Xk2的影响,直接将方程退化,会是什么效果?
试一下就知道了。
X
^
k
+
1
1
=
X
^
k
1
+
K
k
+
1
1
(
Z
k
+
1
−
X
^
k
1
)
\hat X_{k+1}^1=\hat X_k^1+K_{k+1}^1(Z_{k+1}-\hat X_k^1)
X^k+11=X^k1+Kk+11(Zk+1−X^k1)
K
k
1
=
P
k
/
k
−
1
1
P
k
/
k
−
1
1
+
1
K_k^1=\frac {P_{k/k-1}^1}{P_{k/k-1}^1+1}
Kk1=Pk/k−11+1Pk/k−11
P
k
/
k
−
1
1
=
P
k
−
1
1
P_{k/k-1}^1=P_{k-1}^1
Pk/k−11=Pk−11
P
k
1
=
K
k
P_k^1=K_k
Pk1=Kk
然后
P
0
1
=
10
P_0^1=10
P01=10,还是迭代7次,看
P
k
P_k
Pk。
k | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
P k P_k Pk | 0.909 | 0.476 | 0.323 | 0.244 | 0.196 | 0.164 | 0.141 |
P k r P_k^r Pkr | 0.938 | 1.248 | 2.215 | 3.200 | 4.157 | 5.150 | 7.810 |
上表的第三行是实际误差的均方差(也就是简化后的系统跟原系统之间的误差),竟然发散了!
小结
这个例子说明了,降阶处理的次优滤波效果其实也不错,至少比单纯的删去状态量要好。但是要注意,这种方法并不能保证任意删去多少状态都可以的。另外,这种方法其实相比卡尔曼滤波基本方程计算量减少的并不多。这套方法还有一种另类用途,就是尝试可能降阶的状态变量来分析哪些状态对系统影响较小。