卡尔曼滤波器的定点实现表现奇怪

时间:2017-01-18 14:17:06

标签: filter signal-processing fixed-point kalman-filter

我已经实现了跟踪正弦波的线性卡尔曼滤波器的几种实现。我有一个Python和一个C实现都可以工作。

然而,我还开发了一个使用固定点实现的版本并且它可以工作,但我看到一个奇怪的效果,它最初似乎适合然后偏离其他卡尔曼滤波器代码的输出。

见下图:

Plot of output of Various Implementations of Kalman Filter

我想知道是否有人对定点实施中可能出现的问题有一些直觉?

1 个答案:

答案 0 :(得分:1)

希望你现在已经很久没遇到这个问题了,但是,如果没有 - 这就是我通常要用定点KF做的事情。问题源于有限的价值范围。如果我们设置定点使得初始协方差矩阵可以表示,我们通常在小数点右边没有很多位,并且一旦它开始收敛就表示解的增益和状态更新。

这是一个很长的方式来说明显而易见的 - 我们喜欢滤波器的浮点 - 特别是因为协方差矩阵是平方标准偏差 - 如果你愿意的话,它会迅速踩到数量级的数量级,而国家更新不是平方的 - 所以我们试图选择单个定点位置,允许我们合理地表示平方协方差元素和非平方状态更新。

所以我经常最后换一两个换档 - 我过去常常使用'5速'定点KF。当我到达时间更新步骤结束时 - 我将获得该周期的最大协方差值。测量处理只会降低协方差。如果我的卡尔曼滤波器定点表示比协方差所需的大2位以上,我向左移动并动态改变定点。这为增益和状态更新值保留了合理的位数。

这实际上是一个穷人的浮点,但我只有一个小数点位置用于所有滤镜元素。我使用一些滞后来防止一直移动。当我正确地工作时 - 我无法区分固定和浮点结果 - 这或多或少是我们应该期望的,因为它“浮动点”。