基于整数的传感器融合/卡尔曼滤波器

Posted

技术标签:

【中文标题】基于整数的传感器融合/卡尔曼滤波器【英文标题】:Integer Based Sensor Fusion/Kalman Filter 【发布时间】:2015-11-05 17:41:34 【问题描述】:

是否有人知道在大多数开源实现中仅使用整数运算而不是所有浮点累加/除法/乘法的传感器融合实现?

在我的处理器上执行重复的浮点计算很昂贵,我想尽可能减少它们。我可能会失去一些精度,但我的应用程序不需要高精度的输出。

将所有变量都转换为整数并仅以精度为目标有什么问题吗?任何建议都会很棒,谢谢大家。

【问题讨论】:

尝试使用定点整数运算,例如1000来表示1.000 @WeatherVane 说了什么。简而言之 - 将数量扩大到合理的数量。或者使用专用的定点库。 @WeatherVane :定点是一个很好的解决方案,但你应该使用二进制浮点表示来提高性能(即你的乘数应该是 2 的幂而不是 10 的幂) 【参考方案1】:

使用定点是在没有 FPU 的设备上进行灵活数学运算的最佳解决方案。

Anthony Williams 的fixed point maths library 很适合,它使用 64 位整数类型来提供 34Q28(34 整数位,28 小数位)格式的浮点类型,具有广泛的数学、运算符和转换功能。它是用 C++ 编写的,用于将 fixed 类型创建为一个类,具有广泛的运算符重载和标准数学函数,因此它在很大程度上可以与现有代码中的 floatdouble 互换。

我意识到这个问题被标记为 C,但您不需要广泛使用 C++ 语法,只需将您的 C 代码编译为 C++,包括 fixed.hpp 标头,将 floatdouble 替换为 fixed 并编译/将 fixed.cpp 文件与您的项目链接。

【讨论】:

以上是关于基于整数的传感器融合/卡尔曼滤波器的主要内容,如果未能解决你的问题,请参考以下文章

EKF定位基于传感器信息融合的EKF扩展卡尔曼滤波定位算法matlab仿真

数据融合基于扩展卡尔曼滤波器实现三维数据融合matlab源码

卡尔曼滤波器 - 两个相等传感器的融合

在传感器融合的情况下使用哪种滤波器?

扩展卡尔曼滤波EKF与多传感器融合

扩展卡尔曼滤波EKF与多传感器融合