我对卡尔曼滤波器有疑问。我使用卡尔曼滤波器作为状态空间模型如下:
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))
矩阵与单位圆内的特征值保持稳定。
答案 0 :(得分:0)
当系统不可观察时,可能会发生这种情况。检查可观察性矩阵
的排名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)
将给出其排名。
希望这有帮助。