Открыть сервис

Фильтр Калмана

Фильтр Калмана — это рекурсивный алгоритм оценки состояния динамической системы по серии неполных и зашумлённых измерений. Он относится к классу байесовских фильтров и широко применяется в задачах навигации, слежения, управления и обработки сигналов. Фильтр Калмана обеспечивает оптимальную (в смысле минимума среднеквадратической ошибки) оценку для линейных систем с гауссовским шумом.

История

Основы фильтрации были заложены в 1940-х годах Андреем Колмогоровым и Норбертом Винером (фильтр Винера). Однако их подход требовал обработки всей предыстории измерений, что делало его непригодным для рекурсивного применения в реальном времени.

В 1960 году венгерско-американский математик Рудольф Калман опубликовал статью «A New Approach to Linear Filtering and Prediction Problems», в которой предложил рекурсивный алгоритм оценки состояния системы, использующий только текущее измерение и предыдущую оценку. В том же году Калман совместно с Ричардом Бьюси разработал версию фильтра для непрерывного времени (фильтр Калмана — Бьюси).

Первое практическое применение фильтра Калмана связано с программой «Аполлон» (NASA): алгоритм использовался для оценки траектории космического корабля при полёте к Луне. Впоследствии фильтр стал стандартным инструментом в авионике, робототехнике и экономике.

Математическая постановка

Фильтр Калмана решает задачу оценки состояния x ∈ ℝⁿ линейной динамической системы, описываемой уравнениями:

xₖ = Fₖ·xₖ₋₁ + Bₖ·uₖ + wₖ где Fₖ — матрица перехода состояния, Bₖ — матрица управления, uₖ — вектор управления, wₖ — шум процесса (гауссовский с нулевым средним и ковариацией Qₖ).

zₖ = Hₖ·xₖ + vₖ где Hₖ — матрица измерений, vₖ — шум измерения (гауссовский с нулевым средним и ковариацией Rₖ).

Шумы wₖ и vₖ предполагаются независимыми друг от друга и от начального состояния.

Алгоритм работы

Фильтр Калмана работает в два этапа: предсказание (прогноз) и коррекция (обновление).

Этап предсказания (прогноз)

На этом этапе вычисляется априорная оценка состояния x̂ₖ|ₖ₋₁ и априорная ковариация ошибки Pₖ|ₖ₋₁ на основе предыдущего состояния и модели процесса:

Этап коррекции (обновление)

На этом этапе априорная оценка корректируется с учётом текущего измерения zₖ:

  1. Вычисляется инновация (невязка): yₖ = zₖ − Hₖ·x̂ₖ|ₖ₋₁
  2. Вычисляется ковариация инновации: Sₖ = Hₖ·Pₖ|ₖ₋₁·Hₖᵀ + Rₖ
  3. Вычисляется коэффициент Калмана (оптимальное усиление): Kₖ = Pₖ|ₖ₋₁·Hₖᵀ·Sₖ⁻¹
  4. Обновляется апостериорная оценка состояния: x̂ₖ|ₖ = x̂ₖ|ₖ₋₁ + Kₖ·yₖ
  5. Обновляется апостериорная ковариация ошибки: Pₖ|ₖ = (I − Kₖ·Hₖ)·Pₖ|ₖ₋₁

Коэффициент Калмана Kₖ определяет, насколько сильно фильтр доверяет новому измерению по сравнению с прогнозом. Если шум измерения мал (Rₖ мала), Kₖ велик — фильтр больше корректирует оценку по измерению. Если шум процесса мал (Qₖ мала), Kₖ мал — фильтр больше доверяет прогнозу.

Свойства и ограничения

Достоинства

Ограничения

Разновидности

Расширенный фильтр Калмана (EKF)

Применяется для нелинейных систем. Нелинейные функции состояния и измерения линеаризуются в окрестности текущей оценки с помощью разложения в ряд Тейлора первого порядка. EKF широко используется в навигации (например, GPS/ИНС) и робототехнике, но может быть чувствителен к сильной нелинейности.

Сигма-точечный фильтр Калмана (UKF)

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

Ансамблевый фильтр Калмана (EnKF)

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

Информационный фильтр

Двойственная форма фильтра Калмана, оперирующая информационной матрицей (обратной к ковариационной) и информационным вектором. Удобен для задач слияния данных от множества сенсоров.

Применение

Навигация и управление

Робототехника

Обработка сигналов

Метеорология и геофизика

Биомедицина

Пример: одномерный фильтр Калмана

Рассмотрим задачу оценки постоянной температуры T в комнате по зашумлённым показаниям термометра. Пусть T = 20 °C, шум измерения имеет дисперсию R = 4, начальная оценка T̂₀ = 10 °C с ковариацией P₀ = 100. Модель процесса: Tₖ = Tₖ₋₁ (F = 1, Q = 0.01).

Шаг 1: прогноз T̂₁|₀ = T̂₀ = 10, P₁|₀ = P₀ + Q = 100.01

Шаг 2: измерение z₁ = 22 y₁ = 22 − 10 = 12 S₁ = 100.01 + 4 = 104.01 K₁ = 100.01 / 104.01 ≈ 0.961 T̂₁|₁ = 10 + 0.961·12 ≈ 21.53 P₁|₁ = (1 − 0.961)·100.01 ≈ 3.90

На втором шаге с измерением z₂ = 19: Прогноз: T̂₂|₁ = 21.53, P₂|₁ = 3.90 + 0.01 = 3.91 y₂ = 19 − 21.53 = −2.53 S₂ = 3.91 + 4 = 7.91 K₂ = 3.91 / 7.91 ≈ 0.494 T̂₂|₂ = 21.53 + 0.494·(−2.53) ≈ 20.28 P₂|₂ = (1 − 0.494)·3.91 ≈ 1.98

После нескольких шагов оценка сходится к истинному значению 20 °C, а ковариация ошибки уменьшается.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →