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

14

我正在使用Kalman Filter opencv库来使用Kalman估计器的功能。

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

编辑:我之所以问这个问题,是因为该滤波器在转移矩阵无需更正时运行良好,但在更新时间步长时则不行。

1个回答

21

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

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

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

因此,在每一步中,x = x + v(位置根据速度更新),v = v(速度不变)。

只要您的速度以长度/时间步长为单位,这是可以的。 如果您的时间步长不同,或者如果您用更典型的单位(如长度/s)表示速度,则需要像这样编写F

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

这意味着每当时间步长发生变化时(如果没有固定的计划,则每次都需要),您必须计算F的新值。

请记住,您还要在每次更新时添加过程噪声Q,因此很可能也需要根据时间进行缩放。


相当长一段时间后,我得出了同样的结论。另一方面,我可能无法更简洁地解释它。 - Paulo Neves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接