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

Opencv 卡尔曼滤波中的可变时间步长,opencv,kalman-filter,Opencv,Kalman Filter,我正在使用Kalman Filter opencv库来使用Kalman估计器功能 我的程序不执行实时递归。我的问题是,当转移矩阵包含依赖于时间步长的元素时,我是否必须在每次使用转移矩阵(预测或更正)时更新它以反映自上次递归以来经过的时间 编辑:我问这个问题的原因是,滤波器工作良好,没有对过渡矩阵进行校正,但当我更新时间步长时,它就不工作了。许多关于卡尔曼滤波器的描述将过渡矩阵写成F,就好像它是一个常数一样。正如您所发现的,在某些情况下,您必须在每次更新时更新它(以及Q),例如使用可变的时间步长

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

我的程序不执行实时递归。我的问题是,当转移矩阵包含依赖于时间步长的元素时,我是否必须在每次使用转移矩阵(预测或更正)时更新它以反映自上次递归以来经过的时间


编辑:我问这个问题的原因是,滤波器工作良好,没有对过渡矩阵进行校正,但当我更新时间步长时,它就不工作了。

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

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

F = [ 1 1 ] [ x ]
    [ 0 1 ] [ v ]
因此,在每个步骤中,
x=x+v
(位置根据速度更新)和
v=v
(速度没有变化)

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

F = [ 1 dt ] [ x ]
    [ 0 1  ] [ v ]
这意味着您必须在时间步长更改时(或每次,如果没有设置的时间表),为
F
计算一个新值


请记住,每次更新时,您也会在过程中添加噪音
Q
,因此它可能也需要按时间缩放。

过了一段时间,我得出了相同的结论。另一方面,我无法更简洁地解释它。