Цель статьи не в объяснении принципов Калмановского фильтра, а в его демонстрации на примере реальных (сырых) данных. Желающие могут модифицировать исходники и поэкспериментировать с алгоритмом, я надеюсь что моя работа поможет тем, кто столкнется с подобной задачей.
Используемые данные — c GPS-приемника в формате NMEA-0183, в часности сообщения GGA и VTG.
Фильтрация необходима по причине зашумленности GPS. Причины помех в GPS данных разные. Основные:
- атмосферные помехи.
- препятствия для сигнала.
- положение орбиты GPS. Например, невысокое наклонение орбит GPS (примерно 55°) серьёзно ухудшает точность в приполярных районах Земли.
Все это суммарно приводит к скачкам положения, смещениям курса, и прочим неприятностям. Причем в работе в первую очередь мне нужно было получить именно отфильтрованную скорость.
Дело в том что скорость, измеряемая оборудованием и передаваемая в сообщении VTG давала неправдоподобные показания (скачки и т. д.), которые крайне затрудняли задачи управления.
Поэтому было решено построить модель фильтр в Octave, и получив скорость как производную от GPS данных, представленных сообщением GGA, сравнить с оригинальными данными скорости из сообщения VTG.
Для удобства сравнения данные требуется вывести на один график.
С фильтрацией данных и их производных прекрасно справляется фильтр Калмана.
Применение фильтра для задач автопилота и курсовертикали является «классикой».