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

Pau*_*ves 8 opencv kalman-filter

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

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

编辑:我问这个的原因是因为过滤器运行良好而没有对转换矩阵进行修正,但是当我更新时间步骤时它不会.

Ben*_*son 16

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

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

F = [ 1 1 ] [ x ]
    [ 0 1 ] [ v ]
Run Code Online (Sandbox Code Playgroud)

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

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

F = [ 1 dt ] [ x ]
    [ 0 1  ] [ v ]
Run Code Online (Sandbox Code Playgroud)

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

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