Чтобы максимально точно управлять любой динамической системой, нужны две вещи одновременно. Первая — её математическое описание: закон, по которому система меняется во времени. Вторая — мониторинг её состояния: измерения, которые говорят, где система оказалась на самом деле в данный момент времени. Проблема в том, что ни модели, ни измерениям нельзя верить абсолютно.
Модель всегда врёт — хоть немного. Она не знает всех особенностей конкретного объекта: трения, люфтов, износа, случайных толчков извне. Она предсказывает идеальную систему, а управляем мы настоящей. Измерения врут тоже. Датчик подвержен помехам, дрожит, ошибается.
Вот было бы круто соединить бульдога с носорогом — взять от модели её предсказательную силу, а от датчиков их привязку к реальности — и получить оценку лучше, чем даёт каждый источник по отдельности. Ровно это и делает фильтр Калмана: на каждом шаге он взвешивает доверие к прогнозу модели и к свежему измерению и выдаёт оптимальную по среднеквадратичному критерию оценку состояния.
Начнём с общего описания линейной динамической системы:
где — матрица системы, — вектор состояния, — матрица входа, а — управляющее воздействие (вход системы).
Запишем систему (1) в дискретном виде: разобьём время на шаги с интервалом и приблизим производную методом Эйлера — отношением приращений за шаг
выразив отсюда , получаем рекуррентную формулу — состояние на следующем шаге через состояние на текущем
то есть непрерывные матрицы сворачиваются в дискретную матрицу перехода и дискретную матрицу управления
и формула принимает окончательный вид
здесь — управляющее воздействие на шаге .
Реальная система не следует уравнению (3). Добавим к нему случайный вектор — то, что модель не описывает
шум процесса считаем случайным с нулевым средним; меру его разброса — ковариационную матрицу , матрицу погрешности модели — определим ниже, при выводе прогноза ковариации.
Один цикл фильтра — это два такта: прогноз по модели и коррекция по измерению. Сначала прогноз. По формуле (3) сдвигаем предыдущую оценку на шаг вперёд и получаем априорную оценку (значок «минус» — «до учёта измерения»)
вместе с оценкой прогнозируем и её недостоверность. Введём ошибку оценивания — разницу между истинным состоянием и оценкой, — а мерой недостоверности будет её ковариационная матрица (по диагонали — дисперсии ошибок по каждой компоненте состояния)
здесь — оператор усреднения (математическое ожидание): он берёт случайную величину и возвращает её среднее по всем возможным реализациям. Одиночная ошибка случайна и непредсказуема, но усреднение матрицы по ансамблю сглаживает случайность и оставляет устойчивую характеристику разброса — ковариацию.
Посмотрим, во что превращается эта ошибка за шаг прогноза. Истинное состояние идёт по уравнению (4) со сдвигом индекса, , а наша оценка — по формуле (5); вычтем вторую из первой. Одинаковые члены сокращаются, и остаётся
то есть априорная ошибка — это ошибка на предыдущем шаге , пропущенная через динамику , плюс свежая погрешность модели . Возьмём ковариацию обеих частей. Прошлая ошибка и новый шум независимы, поэтому перекрёстные члены обнуляются, а два оставшихся — это и по их определениям
подставив и , получаем формулу прогноза ковариации: старая неопределённость проносится через , к ней добавляется погрешность модели
по диагонали стоят дисперсии погрешности по каждой компоненте состояния, вне диагонали — их взаимные ковариации. Большая означает «модели не верю, она грубая»; маленькая — «модель точна». Аналитически вывести из первых принципов почти никогда не удаётся, поэтому её выбирают эмпирически — подбором по поведению фильтра на реальных или смоделированных данных. Это главная настроечная ручка, и обычно берут диагональной, лишь бы не гадать про ковариации.
Пара слов про саму : маленькая означает «оценке доверяю», большая — «оценка ненадёжна». Фильтр ведёт её сам — на прогнозе она растёт (формула (6) добавляет ), а на шаге коррекции уменьшится, когда измерение принесёт информацию. Стартовое берут заведомо большим: начальное состояние известно плохо, поэтому первым шагам фильтр не доверяет — быстро подтягивается к измерениям и «прогревается».
Обычно мы не наблюдаем весь вектор состояния целиком. Наблюдаются лишь некоторые величины — вектор измерений , и его размерность меньше размерности состояния. Связь измерения с состоянием задаёт матрица наблюдения
роль — согласовать размерности: она отображает -мерное состояние в -мерное измерение (число строк ), выбирая и линейно комбинируя те компоненты состояния, которые реально измеряются. Это и есть главный смысл наблюдателя: восстанавливать то, что не измеряется.
Датчик не выдаёт точно — измерение искажено помехой
про шум удобно предполагать нормальное (гауссово) распределение с нулевым средним — тогда фильтр Калмана оказывается ещё и оптимальной байесовской оценкой. Но это не обязательное условие: при любом другом распределении с конечной дисперсией фильтр остаётся наилучшей линейной оценкой по среднеквадратичному критерию. Разброс помех задаёт ковариационная матрица шума измерений
строится она из дисперсий датчиков. Если помехи разных датчиков независимы, диагональна: на диагонали — квадраты стандартных отклонений (паспортная точность прибора), вне диагонали — нули
чем точнее датчик, тем меньше его и тем сильнее фильтр будет доверять этому каналу измерения.
Теперь всё готово, чтобы сформулировать сам фильтр. К шагу у нас два независимых источника сведений об искомом состоянии . Первый — прогноз модели с ковариацией ошибки : истинное лежит где-то вокруг с разбросом . Второй — измерение с ковариацией шума : оно указывает на с точностью . Оба неточны — ищем состояние, наиболее правдоподобное сразу для обоих.
Будем считать ошибки обоих источников гауссовыми (для шума измерений мы это уже предположили). Тогда каждый источник задаёт плотность вероятности вида , где — его ошибка, а — ковариация. Обратная ковариация играет роль веса: чем надёжнее источник (меньше разброс), тем сильнее он тянет оценку к себе. Правдоподобие состояния — произведение двух таких плотностей
наиболее правдоподобное максимизирует это произведение. Логарифм превращает произведение в сумму показателей, а максимум отвечает минимуму ; отбросив константы, получаем ровно сумму двух квадратичных форм — это и есть наш функционал
оптимальная оценка минимизирует . Возьмём производную по и приравняем к нулю
раскрыв скобки и собрав в левой части, получаем нормальное уравнение
матрица в квадратных скобках — это в точности обратная апостериорная ковариация (информационная форма: информация прогноза плюс информация измерения). Отсюда сразу видно и правило обновления неопределённости
Обращать матрицы размера состояния дорого. Применив лемму об обращении матриц, перепишем решение (13)–(14) в вычислительно удобной форме через коэффициент усиления Калмана
тогда коррекция оценки — это прогноз плюс поправка, пропорциональная невязке — расхождению между тем, что предсказала модель, и тем, что показал датчик
а ковариация ошибки после коррекции уменьшается
смысл — регулятор доверия. Если измерение точное ( мала), велик и оценка тянется к датчику; если прогноз надёжен ( мала), мал и фильтр держится модели. Тот самый компромисс между бульдогом и носорогом, только вычисленный оптимально.