10.卡尔曼滤波之次优滤波器——常增益和解耦


       上一篇讲了卡尔曼滤波器延伸出来的次优滤波器中的一种手段,降阶处理。这回,我就再介绍一些次优滤波器的其他思路,常增益次优滤波和解耦次优滤波。讽刺的是,我的文章虽然把降阶处理放在前面详细讲解了一下,但降阶处理在工程上却用得不多,反而是这篇文章要讲的这两种方法更具有工程应用价值。

常增益次优滤波

       看过前面的文章的朋友应该都了解了,卡尔曼滤波起到关键作用的参数就是那个K,也就是滤波增益,如果设计的合适,滤波器是稳定的。尤其是对于定常系统(也就是状态方程和量测方程里的系数 Φ k , k − 1 \Phi_{k,k-1} Φk,k1 H k H_k Hk啥的都是常量)K随着递推就会收敛到一个值。
       好了,思路来了,既然K会收敛到一个值,那还费这么大劲干嘛!直接把K写成常值不就好了吗,毕竟卡尔曼滤波器中 K k K_k Kk的迭代计算量还是很大的。
       说得没错,这就是常增益滤波的思想来源。把 K k K_k Kk写成一个常值K,这样计算 K k K_k Kk的那个方程就不需要了,尤其是矩阵求逆不需要了,这对减少计算量的贡献可不是一点半点。那么下面的问题就是:这个常值怎么取?
       很好办呐,这个常值就取滤波器稳定状态下的 K k K_k Kk不就好了。说得没错,就这么办。
K = P ‾ H T ( H P ‾ H T + R ) − 1 K=\overline PH^T(H\overline PH^T+R)^{-1} K=PHT(HPHT+R)1
        P ‾ \overline P P就是稳态一步预测方差阵可以从下面这个方程计算出来。
P ‾ = Φ P ‾ Φ T − Φ P ‾ H T [ H P ‾ H T + R ] − 1 H P ‾ Φ T + Γ Q Γ T \overline P=\Phi\overline P\Phi^T-\Phi\overline PH^T[H\overline PH^T + R]^{-1}H\overline P\Phi^T+\Gamma Q\Gamma^T P=ΦPΦTΦPHT[HPHT+R]1HPΦT+ΓQΓT
       K取的常值就是卡尔曼滤波器稳态时的K的最优值,但这个常值却不是滤波器达到稳态前的最优值。这点很好理解吧。所以采用常增益方法的滤波器在达到稳态前,滤波器是次优的。所以,这种滤波方法达到稳态的时间要比最优滤波达到稳态的时间要长。
       好了,常增益次优滤波器讲完了,是的,就是这么简单。。。好吧,还是拿个例子更能说明问题。这个例子,很熟悉。
       系统状态方程:
X k + 1 = X k + W k X_{k+1}=X_k+W_k Xk+1=Xk+Wk
       量测方程:
Z k = X k + V k Z_k=X_k+V_k Zk=Xk+Vk
       所有量都按标量考虑。状态方差 Q k = 1 Q_k=1 Qk=1,量测方差 R k = 1 R_k=1 Rk=1 E [ X 0 ] = 0 E[X_0]=0 E[X0]=0 V a r [ X 0 ] = 10 Var[X_0]=10 Var[X0]=10
       作为对比,先按最优滤波算法来一遍。
K k = P k / k − 1 ( P k / k − 1 + 1 ) − 1 K_k=P_{k/k-1}(P_{k/k-1}+1)^{-1} Kk=Pk/k1(Pk/k1+1)1
P k = ( 1 − K k ) P k / k − 1 = K k P_k=(1-K_k)P_{k/k-1}=K_k Pk=(1Kk)Pk/k1=Kk
P k + 1 / k = ( 1 − K k ) P k / k − 1 + 1 = K k + 1 P_{k+1/k}=(1-K_k)P_{k/k-1}+1=K_k+1 Pk+1/k=(1Kk)Pk/k1+1=Kk+1
       初值也有 X 0 = 0 X_0=0 X0=0 P 0 = 10 P_0=10 P0=10,手算迭代7次。

k1234567
P k / k − 1 P_{k/k-1} Pk/k1111.9171.6571.6241.6191.6181.618
P k = K k P_k=K_k Pk=Kk0.9170.6570.6240.6190.6180.6180.618

       然后按常增益次优滤波器在来一遍。
       套前面的公式就行了。先计算稳态一步预测方差。
P ‾ 2 − P ‾ − 1 = 0 \overline P^2-\overline P-1=0 P2P1=0
P ‾ = 1 2 ( 1 ± 5 ) \overline P=\frac{1}2(1\pm\sqrt5) P=21(1±5 )
       取正值, P ‾ = 1.618 \overline P=1.618 P=1.618。然后是K
K = P ‾ ( P ‾ + 1 ) − 1 = 0.618 K=\overline P(\overline P+1)^{-1}=0.618 K=P(P+1)1=0.618
       还是迭代7次。

k1234567
P k / k − 1 P_{k/k-1} Pk/k1112.9871.8181.6471.6221.6191.618
P k P_k Pk1.9870.8180.6470.6220.6190.6180.618

       看出来了没?次优滤波器的收敛速度要慢一些。但是最终两种滤波器会重合。
       常增益滤波是一种最简单的次优滤波方法。而且,它还可以灵活应用。比如分段常增益,也就是在不同的时间段选用不同的K。这样的效果是几乎跟最优滤波的效果一样的。

系统解耦次优滤波

       还是回想一下卡尔曼滤波器所使用的模型。有关于 X k X_k Xk状态方程的状态方程,还有关于 Z k Z_k Zk的量测方程。还记得我们在聊序贯处理时说过,量测量 Z k Z_k Zk的每一个量如果都是不相关的,那么可以把高维 Z k Z_k Zk看成多次独立的低维量测量。这样虽然计算的次数增加了,但是总体的计算量却下降了。那如果 X k X_k Xk里每个状态量也是独立的呢。说实话,这基本不可能。更有可能的是 X k X_k Xk里面可以分成几组,每组内部的状态量相互影响,但是不同组之间的关系却很小。这时就可以考虑解耦了。
       如果两组之间完全没有联系,那么问题就简单了,可以建立两个状态方程,分别设计滤波器就可以了。而如果还是有那么一点联系,但是联系很弱呢,那就要具体问题具体分析了。
       怎么来判断两组状态量之间的联系是紧密还是稀疏呢?方便讨论就按两组来讨论吧。状态方程和量测方程为:
( X k + 1 1 X k + 1 2 ) = ( Φ k + 1 , k 11 Φ k + 1 , k 12 Φ k + 1 , k 21 Φ k + 1 , k 22 ) ( X k 1 X k 2 ) + ( Γ k 1 0 0 Γ k 2 ) ( W k 1 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}\\\Phi_{k+1,k}^{21}&\Phi_{k+1,k}^{22}\end{pmatrix}\begin{pmatrix}X_{k}^1\\X_{k}^2\end{pmatrix}+\begin{pmatrix}\Gamma_k^1&0\\0&\Gamma_k^2\end{pmatrix}\begin{pmatrix}W_{k}^1\\W_{k}^2\end{pmatrix} (Xk+11Xk+12)=(Φk+1,k11Φk+1,k21Φk+1,k12Φk+1,k22)(Xk1Xk2)+(Γk100Γk2)(Wk1Wk2)
( Z k 1 Z k 2 ) = ( H k 1 0 0 H k 2 ) ( X k 1 X k 2 ) + ( V k 1 V k 2 ) \begin{pmatrix}Z_{k}^1\\Z_{k}^2\end{pmatrix}=\begin{pmatrix}H_k^1&0\\0&H_k^2\end{pmatrix}\begin{pmatrix}X_{k}^1\\X_{k}^2\end{pmatrix}+\begin{pmatrix}V_{k}^1\\V_{k}^2\end{pmatrix} (Zk1Zk2)=(Hk100Hk2)(Xk1Xk2)+(Vk1Vk2)
       状态方程里面的 Φ k + 1 , k 12 \Phi_{k+1,k}^{12} Φk+1,k12 Φ k + 1 , k 21 \Phi_{k+1,k}^{21} Φk+1,k21就是 X k 1 X_{k}^1 Xk1 X k 2 X_{k}^2 Xk2之间的耦合矩阵。如果 X k 1 X_{k}^1 Xk1 X k 2 X_{k}^2 Xk2完全不相关,那么 Φ k + 1 , k 12 \Phi_{k+1,k}^{12} Φk+1,k12 Φ k + 1 , k 21 \Phi_{k+1,k}^{21} Φk+1,k21就等于0。如果 Φ k + 1 , k 12 \Phi_{k+1,k}^{12} Φk+1,k12 Φ k + 1 , k 21 \Phi_{k+1,k}^{21} Φk+1,k21中的每个元素都非常小,那么就意味着 X k 1 X_{k}^1 Xk1 X k 2 X_{k}^2 Xk2之间的耦合非常弱,可以忽略。这样原系统就会编程1和2两个系统,就可以分别针对两个系统设计两个独立的滤波器了。虽然滤波器数量多了,但是每个滤波器的阶数其实是降低了的。实际的计算量通常会降下来。
       耦合弱也是有耦合的,解耦就是忽略了弱耦合的状态量,这显然是做了近似的,所以这样处理的滤波方法不是最优,也只能是次优滤波器。
       最后要说的是,系统能否解耦成若干个子系统,以及如何解耦,不但与系统的结构和估计性能的要求有关,而且还要对系统物理过程有充分了解,并且还需要进行必要的误差分析和实际工程实践才能确定下来。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值