Вопрос: Фильтр Kalman для iOS


Я пытаюсь получить плавное значение rssi от низкочастотных маяков Bluetooth, развернутых на потолке моей лаборатории. Я использовал средневзвешенный фильтр и фильтр скользящей средней, но не смог получить хороший результат. Через различные журналы я узнал, что фильтр Калмана может быть использован для этой цели. Но я не мог получить правильное математическое уравнение для кода с объективом-с. Может ли кто-нибудь дать какой-либо намек на математическое уравнение или реализацию фильтра Калмана? Большое спасибо.


3


источник


Ответы:


Одномерный случай, подобный этому, означает, что все матрицы фактически являются просто скалярными значениями. Вам нужно знать две вещи:

  1. R, дисперсия измерения. Вы можете непосредственно измерить это, записав ряд значений RSSI (в фиксированном месте) точно так, как вы обычно, а затем измеряете их дисперсию. Вы можете сделать это легко с помощью Excel или python или даже написать свой собственный код с нуля.
  2. Q, дисперсия процесса. Это то, как вы ожидаете, что RSSI действительно изменится за тот же промежуток времени (между измерениями). Вы также можете измерить это, или вы можете рассуждать об этом.

Если вы посмотрите на уравнения фильтра Калмана, вы заметите, что P не зависит от ваших фактических измерений, а только от двух значений выше. В результате, поскольку они являются постоянными, P будет сходиться к фиксированному значению. И с тех пор K (прирост Кальмана) зависит только от этих ценностей, он также будет сходиться. Для приложения, подобного вашему, обычно достаточно найти стационарный K и использовать его все время.

Теперь это просто сложный (но оптимальный в смысле наименьших квадратов) способ создания простого фильтра скользящей средней.


4



Если вы ищете быструю реализацию Kalman Filter, то стоит посмотреть на эта структура , Это общая реализация алгоритма обычного фильтра, а также структура Matrix и все необходимые операции над матрицами, которые используются в фильтрах Калмана


2