Может ли кто-нибудь объяснить и / или опубликовать C-код для алгоритма предварительного фильтра Калмана? - PullRequest
6 голосов
/ 06 января 2010

Мне нужно объяснение алгоритма предварительного фильтра Калмана. Желательно для меня будет работать код на C, но только алгоритм.

1 Ответ

15 голосов
/ 06 января 2010

Фильтры Kalman являются специализированными версиями фильтров Wiener. В частности, фильтры Калмана получают информацию о проблемной области и улучшают фильтр Винера, применяя знания, специфичные для этой области. Я нашел страницу Википедии отличным справочным источником для понимания особенностей алгоритма.

Не повторяя здесь конкретные детали (без функций отображения линейной алгебры), фильтры Калмана постепенно оценивают будущее состояние (как, впрочем, и фильтры Винера). В частности, мы оцениваем состояние, применяем оценки шума, характерные для проблемной области, и аппроксимации изменения состояния, а затем выполняем итерацию. То есть мы берем текущие наблюдения за состоянием, фильтруем эти наблюдения, прогнозируем следующее состояние, затем объединяем эти выходные данные, чтобы произвести какое-то новое наблюдение следующего состояния.

Я нашел фильтры Калмана весьма полезными для прогнозирования траекторий движения. Поскольку траектории движения гладкие, фильтры Калмана работают особенно хорошо - движение можно легко предсказать, используя прошлые известные наблюдения состояния. Итак, предположим, что вы едете по дороге, вы записываете текущие координаты автомобиля в текущем состоянии. Затем вы фильтруете прошлые наблюдения за состоянием (ваши предыдущие местоположения), чтобы предсказать следующую точку, в которой автомобиль будет (вовремя). Обратите внимание, что вы можете применить законы физики (скажем, импульса), чтобы настроить этот фильтр и получить вполне обоснованные результаты. Случайные изменения скорости или направления оказывают некоторое влияние на прогнозы.

Взгляните на эту C реализацию , вы можете видеть, что у нас есть две основные функции при запуске фильтра Калмана estimate и update (статья Википедии говорит об этих , но звонит estimate "predict").

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

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