Фильтр Калмана для iOS

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


person santobedi    schedule 05.03.2015    source источник
comment
Core Location уже выполняет фильтрацию Калмана, так что это может быть вам бесполезно. Фильтрация поверх фильтрации обычно работает не очень хорошо.   -  person quellish    schedule 05.03.2015
comment
Значения RSSI от маяков колеблются. Как я могу получить фиксированное значение RSSI, чтобы использовать его в качестве отпечатка пальца в радиокарте?   -  person santobedi    schedule 05.03.2015
comment
Как мы можем быть уверены, что Core Location уже выполняет фильтрацию Калмана? Есть ли какая-либо ссылка на него?   -  person santobedi    schedule 05.03.2015
comment
@santobedi ты нашел какое-нибудь решение?   -  person Akhtar    schedule 10.03.2016
comment
@quellish откуда ты это знаешь? В документах нет упоминания о фильтрации Калмана. Плюс GPS действительно грубый, визуальных признаков фильтрации нет.   -  person PostCodeism    schedule 03.10.2016
comment
Вы когда-нибудь заставляли это работать? Я сетовал на отсутствие фильтрации Калмана для оценок близости iBeacon в течение некоторого времени, но я никогда не пытался реализовать ее самостоятельно. У вас есть приложение в App Store?   -  person hepcat72    schedule 24.09.2019
comment
@ hepcat72 Да, это сработало. Подробности можно найти здесь.   -  person santobedi    schedule 24.09.2019
comment
Поздравляю с бумагой. Есть ли репо? Это с открытым исходным кодом?   -  person hepcat72    schedule 24.09.2019
comment
@ hepcat72 Я сам написал код для исследовательской работы. Извините, репо/открытый исходный код недоступен.   -  person santobedi    schedule 25.09.2019


Ответы (2)


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

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

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

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

person Ben Jackson    schedule 05.03.2015

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

person Noobass    schedule 07.09.2016