卡尔曼滤波器中的可变时间步长

时间:2014-08-05 22:09:16

标签: opencv kalman-filter

我正在使用卡尔曼滤波器opencv库来使用卡尔曼估计器功能。

我的程序不强制实时递归。我的问题是,当转换矩阵具有依赖于时间步长的元素时,我是否必须每次使用它时(在预测或正确中)更新转换矩阵以反映自上次递归以来经过的时间?

编辑:我之所以这么说是因为过滤器效果很好,没有对转换矩阵进行修正,但是当我更新时间步骤时它没有。

1 个答案:

答案 0 :(得分:13)

卡尔曼滤波器的许多描述将转移矩阵写为F,就好像它是常数一样。正如您所发现的,在某些情况下,您必须在每次更新时更新它(以及Q),例如使用可变的时间步长。

考虑一个简单的位置和速度系统,

F = [ 1 1 ] [ x ]
    [ 0 1 ] [ v ]

所以在每一步x = x + v(根据速度更新位置)和v = v(速度没有变化)。

这很好,只要您的速度以长度 / 时间步长为单位。如果你的时间步长不同,或者你用一个更典型的单位表示你的速度,比如 length / s ,你需要这样写F

F = [ 1 dt ] [ x ]
    [ 0 1  ] [ v ]

这意味着您必须在时间步改变时(或每次,如果没有设定的时间表)计算F的新值。

请注意,您还要在每次更新时添加流程噪音Q,因此也可能需要按时间缩放。