Вопрос

Работаю над приложением для отслеживания с использованием GPS.Все бы хорошо, но иногда из-за закрытых территорий или плохой погоды я получаю неточные баллы.Когда вы их рисуете, они выглядят неправильно, с множеством прыжков/прыжков.

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

Это было полезно?

Решение

Есть несколько вариантов:

  1. Выбросьте выбросы
  2. Фильтр
  3. Используйте лучший GPS
  4. Использовать внешний источник данных (привязка к дороге)
  5. Сочетание вышеперечисленного

Мне нравится использовать фильтры. Типичным (и часто лучшим) решением является фильтр Калмана. Он использует такое количество прогнозируемого усреднения, которое лучше, чем дешевый БИХ-фильтр (бесконечная импульсная характеристика):

ФильтрованноеЗначение = ФильтрованноеЗначение * 0,75 + НовоеЗначение * 0,25

Вы можете приобрести модули GPS, которые выдают 4-5 точек в секунду, что позволит вам использовать вышеупомянутый «дешевый» фильтр с разумным временем отклика.

Вы также можете просто приобрести более качественный GPS (SiRF III или лучше), который не такой шумный и имеет лучший прием в помещении (где это возможно).

Бытовые GPS-устройства «привязываются к дороге», где это возможно, поэтому потребитель не видит ошибок за пределами дороги, а также некоторые другие методы.

Кальман непросто реализовать, но без внешнего набора данных или датчиков (например, скорости дороги) это лучший вариант.Проверить http://www.google.com/search?q=open%20source%20kalman%20filter для кода и руководств по нему.

-Адам

Другие советы

ре:фильтрация при наличии «попсового» шума--

Один из самых простых способов, которые я нашел, это:

delta = newValue - filteredValue;
delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA
     : (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta);
filteredValue += alpha*delta;

где альфа = 1/тау и тау — постоянная времени рассматриваемого фильтра нижних частот, выраженная в кратных времени между итерациями приведенного выше кода.Значение LARGEST_SANE_DELTA представляет собой большое возможное изменение в newValue и отсекает слишком большие различия во входных данных.Возможно, есть более эффективные способы подавления этого типа шума, но они более сложны, а тот, который я упомянул, довольно прост.

Использовать Фильтр Калмана.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top