我正在使用卡尔曼滤波器opencv库来使用卡尔曼估计器功能。
我的程序不强制实时递归。我的问题是,当转换矩阵具有依赖于时间步长的元素时,我是否必须每次使用它时(在预测或正确中)更新转换矩阵以反映自上次递归以来经过的时间?
编辑:我之所以这么说是因为过滤器效果很好,没有对转换矩阵进行修正,但是当我更新时间步骤时它没有。
答案 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
,因此也可能需要按时间缩放。