Я пытаюсь получить плавное значение rssi от маяков Bluetooth с низким энергопотреблением, развернутых на потолке моей лаборатории. Я использовал фильтр взвешенного среднего и фильтр скользящего среднего, но не смог получить хороший результат. Из различных журнальных статей я узнал, что для этой цели можно использовать фильтр Калмана. Но я не мог получить правильное математическое уравнение для кода с target-c. Может ли кто-нибудь дать какой-нибудь совет относительно математического уравнения или реализации фильтра Калмана? Большое спасибо.
Фильтр Калмана для iOS
Ответы (2)
Подобный одномерный случай означает, что все матрицы на самом деле являются просто скалярными значениями. Вам нужно знать две вещи:
R
, дисперсия измерения. Вы можете напрямую измерить это, записав серию значений RSSI (в фиксированном месте) точно так, как вы это обычно делаете, а затем измерив их дисперсию. Вы можете легко сделать это с помощью Excel или Python или даже написать свой собственный код с нуля.Q
, отклонение процесса. Это то, насколько вы ожидаете, что RSSI фактически изменится за то же время (между измерениями). Вы также можете измерить это, или вы можете рассуждать об этом.
Если вы посмотрите на уравнения фильтра Калмана, вы заметите, что P
не зависит от ваших фактических измерений, а только от двух значений выше. В результате, поскольку они постоянны, P
будет сходиться к фиксированному значению. А так как K
(выигрыш Калмана) зависит только от этих значений, он также будет сходиться. Для такого приложения, как ваше, обычно достаточно найти стационарное состояние K
и использовать его все время.
Теперь это всего лишь сложный (но оптимальный в смысле метода наименьших квадратов) способ создания простого фильтра скользящего среднего.
Если вам нужна быстрая реализация фильтра Калмана, вам стоит взглянуть на эту структуру. Это общая реализация обычного алгоритма фильтрации, а также предоставляет структуру Matrix и все необходимые операции с матрицами, которые используются в фильтре Калмана.