Объединение датчиков на основе целых чисел/фильтр Калмана

Кто-нибудь знает о реализации слияния датчиков, которая использует только целочисленные операции вместо всех операций с плавающей запятой, накапливающих/делящих/умножающих в большинстве реализаций с открытым исходным кодом?

На моем процессоре выполнение повторяющихся вычислений с плавающей запятой обходится дорого, и я хочу максимально их сократить. Я могу потерять некоторую точность, но мое приложение не требует очень точного вывода.

Есть ли проблема с преобразованием всех переменных в целые числа и просто с точностью? Буду рад любому совету, спасибо всем.


person Community    schedule 05.11.2015    source источник
comment
Попробуйте использовать целочисленную арифметику с фиксированной точкой, например 1000 для представления 1.000   -  person Weather Vane    schedule 05.11.2015
comment
Что сказал @WeatherVane. Проще говоря - увеличьте количество в разумных пределах. Или используйте специальную библиотеку Fixed Point.   -  person Eugene Sh.    schedule 05.11.2015
comment
@WeatherVane: фиксированная точка - хорошее решение, но вы должны использовать двоичное представление с плавающей запятой для повышения производительности (т. Е. Ваш множитель должен быть степенью 2, а не степенью 10)   -  person Clifford    schedule 07.11.2015


Ответы (1)


Использование фиксированной точки — лучшее решение для гибких математических операций на устройстве без FPU.

математическая библиотека Энтони Уильямса с фиксированной точкой подходит, он использует 64-битный целочисленный тип для предоставления типа с плавающей запятой формата 34Q28 (34 целых бита, 28 дробных битов) с обширными математическими функциями, операторами и функциями преобразования. Он написан на C++ для создания типа fixed в виде класса с обширной перегрузкой операторов и стандартными математическими функциями, так что он в значительной степени взаимозаменяем с float или double в существующем коде.

Я понимаю, что вопрос помечен как C, но вам не нужно широко использовать синтаксис C++, просто скомпилируйте свой код C как C++, включите заголовок fixed.hpp, замените float или double на fixed и скомпилируйте/свяжите файл fixed.cpp с вашим проектом. .

person Clifford    schedule 06.11.2015