如果卡尔曼滤波器无法计算出稳定的卡尔曼增益,可能的原因是啥?

Posted

技术标签:

【中文标题】如果卡尔曼滤波器无法计算出稳定的卡尔曼增益,可能的原因是啥?【英文标题】:What are the possible reasons if Kalman filter can not calculate a stabilizing Kalman gain?如果卡尔曼滤波器无法计算出稳定的卡尔曼增益,可能的原因是什么? 【发布时间】:2016-08-01 21:50:52 【问题描述】:

我有一个关于卡尔曼滤波器的问题。我正在将卡尔曼滤波器用于状态空间模型,如下所示:

X(k+1) = A(k)x(k)+B(k)u(k)+w(k), w(k) ∼ N(0,Q)
Y(k) = C(K)x(k)+D(k)u(k)+v(k), v(k) ∼ N(0,R)

在每个采样时间更新状态空间矩阵(A(k),B(k),C(k),D(k)),但 Q 和 R 矩阵被认为是恒定的。卡尔曼增益(K(k))和协方差P矩阵(P(k))的计算公式如下:

K(k) = (P(k)*C(k)' )/(R + C(k)*P(k)*C(k)');
Pxx(k) = (eye(n)-K(k)*C(k))*P(k)*(eye(n)-K(k)*C (k))'+K(k)*R*K(k)';%Joseph form
P(k) = A(k)*Pxx(k)*A(k)' + Q; 

我面临的问题与(A(k)-K(k)*C(k)) 的稳定性有关。在某些采样时间,计算出的卡尔曼增益不能稳定(A(k)-K(k)*C(k)) 矩阵,(A(k)-K(k)*C(k)) 的特征值在单位圆之外。

你能帮我找出这个问题的原因吗?我期待卡尔曼滤波器为我提供使(A(k)-K(k)*C(k)) 矩阵在单位圆内的特征值稳定的增益。

【问题讨论】:

【参考方案1】:

当系统不可观察时会发生这种情况。检查可观察性矩阵的等级

O = [C(k)
     C(k)A(k)
     C(k)A(k)^2
     ...
     C(k)A(k)^(n-1)]

其中n 是状态空间的维度(即A(k)n X n 矩阵)。如果O的行秩小于n,那么你就有问题了。

在 matlab 中,O = obsv(A,C) 将计算可观察性矩阵,rank(O) 将给出其等级。

希望这会有所帮助。

【讨论】:

如果系统不可控也可能发生这种情况。可观测性和可控性是渐近稳定卡尔曼增益的两个标准。

以上是关于如果卡尔曼滤波器无法计算出稳定的卡尔曼增益,可能的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS 的卡尔曼滤波器

MatLab中的数值不稳定性卡尔曼滤波器

多对象的卡尔曼滤波器:识别问题

如何处理卡尔曼滤波器中的异步数据

具有四个输入参数的卡尔曼滤波器

用于背景/前景分离的卡尔曼滤波器