Алгоритм фильтрации / нормализации плохого сигнала - PullRequest
6 голосов
/ 26 января 2009

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

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

Ответы [ 3 ]

8 голосов
/ 26 января 2009

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

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

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

FilteredValue = FilteredValue * 0,75 + NewValue * 0,25

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

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

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

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

-Adam

3 голосов
/ 26 января 2009

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

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

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 и ограничивает чрезмерно большие изменения в вводе. Возможно, есть более эффективные способы подавления этого типа шума, но они более сложные, и тот, который я упомянул, довольно прост.

2 голосов
/ 26 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...