Фильтр Калмана дискретного времени

На этом занятии рассмотрим принцип работы одного, довольно популярного фильтра, который известен под названием «фильтр Кламана». Чтобы лучше понять этот материал, я решил рассмотреть его с позиций конкретного примера.

Предположим, что производятся наблюдения текущего местоположения координаты x стоящего на одном месте человека, используя два источника информации: ГЛОНАСС и GPS:

В определенный момент времени на входе устройства фиксируются наблюдения от этих систем навигации:

Причем, текущее значение полезного сигнала (координата x) искажаются аддитивными шумами:  - от GPS и  - от ГЛОНАСС. На практике часто такие шумы подчиняются нормальному закону распределения и имеют нулевое МО:

Здесь  - дисперсия (мера разброса значений от истинного значения x) для GPS, а  - для ГЛОНАСС. Причем, эти величины заранее известны из характеристик систем, и для простоты восприятия, можно положить:

Это примерные значения, используемые исключительно для этого занятия. Настоящие нужно смотреть по документации этих систем или из результатов предварительных экспериментов.

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

Здесь возникает две задачи: во-первых, как построить этот алгоритм и, во-вторых, как оценить качество работы этого алгоритма. Начнем со второй задачи, так как именно от критерия качества зависит вид алгоритма. Очевидно, что любой алгоритм будет приводить к ошибкам оценивания:

При наилучшем алгоритме эти ошибки от эксперимента к эксперименту будут, в среднем, колебаться вокруг нулевого значения, то есть, иметь нулевое МО:

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

Но и здесь есть подводный камень: при одном эксперименте эта величина может быть небольшой, а при другом – намного больше. Поэтому логичнее было бы построить алгоритм, который бы минимизировал не конкретный квадрат ошибки, а в среднем давал бы как можно меньшие ошибки. Понятие в среднем – это, фактически, математическое ожидание, то есть, окончательно, наш критерий качества принимает вид:

Таким образом, нам нужно минимизировать дисперсию (разброс) ошибок оценивания.

Отлично, с этим разобрались. Как нам теперь построить алгоритм, который бы минимизировал этот критерий? Было доказано, что в случае гауссовских шумов минимум дисперсии ошибки обеспечивает следующий алгоритм:

где  - некие (пока неизвестные) весовые коэффициенты. И в данном случае от этих коэффициентов зависит величина критерия качества:

Однако, здесь задачу поиска двух коэффициентов можно свести к нахождению всего одного, если заметить, что:

Почему это так? Когда мы с вами определяли величину ошибки:

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

В результате, наш алгоритм обработки наблюдений, принимает вид:

и критерий качества:

Распишем выражение под МО, учитывая, что

получим:

Учитывая независимость наблюдений и шумов, квадрат суммы распадается на сумму квадратов:

В итоге, мы выразили критерий качества непосредственно через дисперсии шумов наблюдений от каждого из источников. Этот критерий в зависимости от параметра α образует параболу с единственной точкой минимума. Из школьного курса математики мы знаем, что для нахождения точки минимума, нужно вычислить производную по параметру альфа и приравнять ее нулю:

откуда

Мы нашли оптимальное значение весового коэффициента, который будет минимизировать квадрат средних ошибок оценивания, а сам алгоритм обработки принимает вид:

или, учитывая, что

приходим к виду:

Что, фактически, означает эта формула? В действительности, мы здесь как бы взвешиваем два наблюдения и большее значение (вес) отдается тому, которое имеет меньшую дисперсию шума. Например, для значений

вес первого наблюдения будет выше второго. И это логично, т.к. первое наблюдение содержит, в среднем, более точную информацию о параметре x, чем второе. А вот если бы их дисперсии были одинаковыми, то оценка строилась бы как среднее арифметическое от наблюдений:

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

Для оценки качества работы этого алгоритма, мы можем в формулу дисперсии ошибки оценивания:

подставить вычисленные значения для  и , получим:

Причем, отсюда видно, что оптимальное значение параметра α также равно отношению дисперсии ошибки оценивания на дисперсию шума второго наблюдения:

Сделаем последний шаг и приведем форму записи фильтра Калмана к рекуррентному виду. Смотрите, вот эту формулу:

можно представить и в таком виде:

или, подставляя вместо α выражение через дисперсию ошибок оценивания:

Именно в таком виде принято записывать фильтр Калмана в научной литературе. Эта формула, фактически, означает, что если наблюдения поступают на вход приемника последовательно друг за другом с определенным интервалом времени, то оценка по первому наблюдению, это просто:

с ошибкой оценивания

Когда приходит второе, с дисперсией шума , сначала пересчитывается дисперсия ошибки оценивания:

а, затем, уточняется оценка:

Получаем алгоритм рекуррентного построения оценок. Далее, когда придет еще одно наблюдение, допустим от GPS в следующий момент времени:

с дисперсией шума , мы можем уточнить ранее полученную оценку. Снова пересчитываем дисперсию ошибки оценивания:

и пересчитываем оценку:

И так далее. Достоинством фильтра Калмана является возможность именно рекуррентного вычисления оптимальных оценок по наблюдениям, непрерывно поступающих на вход некоторого устройства. То есть, для любого k-го наблюдения, получим алгоритм пересчета:

и

Вот это выражение и представляет собой фильтр Калмана в дискретном времени.

То есть, по мере увеличения числа наблюдений мы будем получать все более точную оценку , доходя до определенного предельного уровня точности:

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