Просто цитаты. "стирайте данные и начните с собственного тела. это приказ." "Вам нужно уничтожить все полученные от меня данные и явиться в местный военкомат для получения дальнейших инструкций."
Продолжаю калибровать акселерометр по температуре. Сделал калибровку смещения нуля (Offset) и чувствительности (Gain), но сделал это на float и уперся в производительность (STM32F1@64MHz). Нужно как-то переделать расчеты на целые числа. Непонятно как сделать это для Gain. Алгоритм:
Есть 2 точки температуры. Интерполировать/Экстраполировать Gain по двум точкам для текущей температуры. Умножить значение, полученное от акселерометра на интерполированное значение.
float int_ext_float(float x1, float y1, float x2, float y2, float x) { if(x1!=0 && y1!=0 && x2!=0 && y2!= 0) { return y2 - (x2-x) / ((x2 - x1) / (y2 - y1)); } else {return 0;} } Вот эта функция интерполяции, целиком состоящая из float очень медленная. Но не ясно как её переделать на целые числа, чтобы избежать затыка с производительностью.
Точнее, не так. Как сделать корректировку Gain в целых числах. Например, при 1G акселерометр должен показывать 16384, а он показывает, к примеру, 17500. Значит, при 1G надо вычесть из показателей 1116, при 0,5G вычесть 558, и т.д.
Просто цитаты. "стирайте данные и начните с собственного тела. это приказ." "Вам нужно уничтожить все полученные от меня данные и явиться в местный военкомат для получения дальнейших инструкций."
Продолжаю калибровать акселерометр по температуре. Сделал калибровку смещения нуля (Offset) и чувствительности (Gain), но сделал это на float и уперся в производительность (STM32F1@64MHz). Нужно как-то переделать расчеты на целые числа. Непонятно как сделать это для Gain. Алгоритм:
Есть 2 точки температуры. Интерполировать/Экстраполировать Gain по двум точкам для текущей температуры. Умножить значение, полученное от акселерометра на интерполированное значение.
float int_ext_float(float x1, float y1, float x2, float y2, float x) { if(x1!=0 && y1!=0 && x2!=0 && y2!= 0) { return y2 - (x2-x) / ((x2 - x1) / (y2 - y1)); } else {return 0;} } Вот эта функция интерполяции, целиком состоящая из float очень медленная. Но не ясно как её переделать на целые числа, чтобы избежать затыка с производительностью.
Второе деление замени умножением, и убери скобки, будет проще
Не совсем понял формулу. Допустим, акселерометр показывает при 1G 17500 вместо 16384, разница 1116, А при 0,5G он будет показывать 8750 вместо 8192, разница уже 558, Как расчитывать эти 1116 и 558, и при остальных данных?..