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

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Фи́льтр Ка́лмана — эффективный рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Назван в честь Рудольфа Калмана.

Фильтр Калмана широко используется в инженерных и эконометрических приложениях: от радаров и систем технического зрения до оценок параметров макроэкономических моделей[1][2]. Калмановская фильтрация является важной частью теории управления, играет большую роль в создании систем управления. Совместно с линейно-квадратичным регулятором фильтр Калмана позволяет решить задачу линейно-квадратичного гауссовского управления. Фильтр Калмана и линейно-квадратичный регулятор — возможное решение большинства фундаментальных задач в теории управления.

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

Фильтр Калмана предназначен для рекурсивного дооценивания вектора состояния априорно известной динамической системы, то есть для расчёта текущего состояния системы необходимо знать текущее измерение, а также предыдущее состояние самого фильтра. Таким образом, фильтр Калмана, подобно другим рекурсивным фильтрам, реализован во временно́м, а не в частотном представлении, но в отличие от других подобных фильтров, фильтр Калмана оперирует не только оценками состояния, а еще и оценками неопределенности (плотности распределения) вектора состояния, опираясь на формулу Байеса условной вероятности.

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

Бытует ошибочное мнение, что для правильной работы фильтра Калмана якобы требуется гауссовское распределение входных данных. В исходной работе Калмана результаты о минимуме ковариации фильтра были получены на базе ортогональных проекций, без предположений о гауссовости ошибок измерений. [3] Затем просто было показано, что для специального случая распределения ошибок по Гауссу фильтр дает точную оценку условной вероятности распределения состояния системы.

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

Введение[править | править вики-текст]

Фильтр Калмана оперирует понятием вектора состояния системы (набором параметров, описывающих состояние системы на некоторый момент времени) и его статистическим описанием. В общем случае динамика некоторого вектора состояния описывается плотностями вероятности распределения его компонент в каждый момент времени. При наличии определенной математической модели производимых наблюдений за системой, а также модели априорного изменения параметров вектора состояния (а именно — в качестве марковского формирующего процесса) можно записать уравнение для апостериорной плотности вероятности вектора состояния в любой момент времени. Данное дифференциальное уравнение носит название уравнение Стратоновича. Уравнение Стратоновича в общем виде не решается. Аналитическое решение удается получить только в случае ряда ограничений (предположений):

  • гауссовые априорные и апостериорные плотности вероятности вектора состояния на любой момент времени (в том числе начальный)
  • гауссовые формирующие шумы
  • гауссовые шумы наблюдений
  • белые шумы наблюдений
  • линейность модели наблюдений
  • линейность модели формирующего процесса (который, напомним, должен являться марковским процессом)

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

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

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

  • Расширенный фильтр Калмана (EKF, Extended Kalman filter). Сведение нелинейных моделей наблюдений и формирующего процесса с помощью линеаризации посредством разложения в ряд Тейлора.
  • Unscented Kalman filter (UKF). Используется в задачах, в которых простая линеаризация приводит к уничтожению полезных связей между компонентами вектора состояния. В этом случае «линеаризация» основана на unscented-преобразовании.
  • Ensemble Kalman filter (EnKF). Используется для уменьшения размерности задачи.
  • Возможны варианты с нелинейным дополнительным фильтром, позволяющим привести негауссовые наблюдения к нормальным.
  • Возможны варианты с «обеляющим» фильтром, позволяющим работать с «цветными» шумами
  • и т. д.

Кроме того, имеются аналоги фильтра Калмана, использующие полностью или частично модель непрерывного времени

  • Фильтр Калмана-Бьюси, в котором и эволюция системы, и измерения имеют вид функций от непрерывного времени.
  • Гибридный фильтр Калмана, использующий непрерывное время при описании эволюции системы, и дискретные моменты времени для измерений.

Исторический обзор и имена[править | править вики-текст]

Фильтр назван в честь венгерского математика Рудольфа Э. Калмана, эмигрировавшего в США. Хотя Торвальд Николай Тиле[4][5] и Питер Сверлинг разработали подобный алгоритм раньше. Ричард С. Бьюси из Университета Южной Калифорнии сделал вклад в теорию, которая привела к так называемому фильтру Калмана-Бьюси. Стэнли Ф. Шмидт считается первым, кто реализовал фильтр Калмана во время визита Калмана в Исследовательский центр Эймса, так что, Калман увидел применимость своих идей к задаче оценки траекторий для программы Аполлон, что привело, в конечном счете, к включению этого фильтра в компьютерную систему навигации Аполлона. Фильтр Калмана был впервые описан и частично разработан в работах Сверлинга (1958), Калмана (1960) и Калмана и Бьюси (1961).

Фильтры Калмана оказались критически важными для реализации навигационных систем подводных лодок ВМС США с ядерными баллистическими ракетами на борту, в навигационных системах крылатых ракет, например, Томагавках. Он также использовался в навигационных и управляющих системах проекта НАСА Спейс Шатл, используется в системах управления и навигации МКС.

Это цифровой фильтр иногда называют фильтром Стратоновича-Калмана-Бьюси, поскольку, он является частным случаем более общего, нелинейного фильтра, разработанной несколько раньше советским математиком Русланом Л. Стратоновичем.[6][7][8][9] Фактически, некоторые из уравнений для частных случаев линейного фильтра появились в этих работах Стратоновича, опубликованных до лета 1960 года, когда Калман встретился с Стратоновичем во время конференции в Москве.

Используемая модель динамической системы[править | править вики-текст]

Фильтры Калмана базируются на дискретизированных по времени линейных динамических системах. Такие системы моделируются цепями Маркова при помощи линейных операторов и слагаемых с нормальным распределением. Состояние системы описывается вектором конечной размерности — вектором состояния. В каждый такт времени линейный оператор действует на вектор состояния и переводит его в другой вектор состояния (детерминированное изменение состояния), добавляется некоторый вектор нормального шума (случайные факторы) и в общем случае вектор управления, моделирующий воздействие системы управления. Фильтр Калмана можно рассматривать как аналог скрытым моделям Маркова, с тем отличием, что переменные, описывающие состояние системы, являются элементами бесконечного множества действительных чисел (в отличие от конечного множества пространства состояний в скрытых моделях Маркова). Кроме того, скрытые модели Маркова могут использовать произвольные распределения для последующих значений вектора состояния, в отличие от фильтра Калмана, использующего модель нормально распределенного шума. Существует строгая взаимосвязь между уравнениями фильтра Калмана и скрытой модели Маркова. Обзор этих и других моделей дан Roweis и Chahramani (1999)[10].

При использовании фильтра Калмана для получения оценок вектора состояния процесса по серии зашумленных измерений необходимо представить модель данного процесса в соответствии со структурой фильтра — в виде матричного уравнения определенного типа. Для каждого такта k работы фильтра необходимо в соответствии с приведенным ниже описанием определить матрицы: эволюции процесса Fk; матрицу наблюдений Hk; ковариационную матрицу процесса Qk; ковариационную матрицу шума измерений Rk; при наличии управляющих воздействий — матрицу их коэффициентов Bk.

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

Модель системы/процесса подразумевает, что истинное состояние в момент k получается из истинного состояния в момент k−1 в соответствии с уравнением:

 \textbf{x}_{k} = \textbf{F}_{k} \textbf{x}_{k-1} + \textbf{B}_{k} \textbf{u}_{k} + \textbf{w}_{k} ,

где

  • Fk — матрица эволюции процесса/системы, которая воздействует на вектор xk−1 (вектор состояния в момент k−1);
  • Bk — матрица управления, которая прикладывается к вектору управляющих воздействий uk;
  • wk — нормальный случайный процесс с нулевым математическим ожиданием и ковариационной матрицей Qk, который описывает случайный характер эволюции системы/процесса:
 \textbf{w}_{k} \sim N(0, \textbf{Q}_k)

В момент k производится наблюдение (измерение) zk истинного вектора состояния xk, которые связаны между собой уравнением:

 \textbf{z}_{k} = \textbf{H}_{k} \textbf{x}_{k} + \textbf{v}_{k}

где Hk — матрица измерений, связывающая истинный вектор состояния и вектор произведенных измерений, vk — белый гауссовский шум измерений с нулевым математическим ожиданием и ковариационной матрицей Rk:

\textbf{v}_{k} \sim N(0, \textbf{R}_k)

Начальное состояние и векторы случайных процессов на каждом такте {x0, w1, …, wk, v1, …, vk} считаются независимыми.

Многие реальные динамические системы нельзя точно описать данной моделью. На практике неучтённая в модели динамика может серьёзно испортить рабочие характеристики фильтра, особенно при работе с неизвестным стохастическим сигналом на входе. Более того, неучтённая в модели динамика может сделать фильтр неустойчивым. С другой стороны, независимый белый шум в качестве сигнала не будет приводить к расхождению алгоритма. Задача отделения шумов измерений от неучтенной в модели динамики сложна, решается она с помощью теории робастных систем управления.

Фильтр Калмана[править | править вики-текст]

Фильтр Калмана является разновидностью рекурсивных фильтров. Для вычисления оценки состояния системы на текущий такт работы ему необходима оценка состояния (в виде оценки состояния системы и оценки погрешности определения этого состояния) на предыдущем такте работы и измерения на текущем такте. Данное свойство отличает его от пакетных фильтров, требующих в текущий такт работы знание истории измерений и/или оценок. Далее под записью \hat{\textbf{x}}_{n|m} будем понимать оценку истинного вектора \textbf{x} в момент n с учетом измерений с момента начала работы и по момент m включительно.

Состояние фильтра задается двумя переменными:

  • \hat{\textbf{x}}_{k|k} — апостериорная оценка состояния объекта в момент k полученная по результатам наблюдений вплоть до момента k включительно (в русскоязычной литературе часто обозначается \hat{\textbf{x}}_{k}, где \hat{} означает «оценка», а k — номер такта, на котором она получена);
  • \textbf{P}_{k|k} — апостериорная ковариационная матрица ошибок, задающая оценку точности полученной оценки вектора состояния и включающая в себя оценку дисперсий погрешности вычисленного состояния и ковариации, показывающие выявленные взаимосвязи между параметрами состояния системы (в русскоязычной литературе часто обозначается \hat{\textbf{D}}_{k}).

Итерации фильтра Калмана делятся на две фазы: экстраполяция и коррекция. Во время экстраполяции фильтр получает предварительную оценку состояния системы \hat{\textbf{x}}_{k|k-1} (в русскоязычной литературе часто обозначается \tilde{\textbf{x}}_{k}, где \tilde{} означает «экстраполяция», а k — номер такта, на котором она получена) на текущий шаг по итоговой оценке состояния с предыдущего шага (либо предварительную оценку на следующий такт по итоговой оценке текущего шага, в зависимости от интерпретации). Эту предварительную оценку также называют априорной оценкой состояния, так как для её получения не используются наблюдения соответствующего шага. В фазе коррекции априорная экстраполяция дополняется соответствующими текущими измерениями для коррекции оценки. Скорректированная оценка также называется апостериорной оценкой состояния, либо просто оценкой вектора состояния \hat{\textbf{x}}_{k}. Обычно эти две фазы чередуются: экстраполяция производится по результатам коррекции до следующего наблюдения, а коррекция производится совместно с доступными на следующем шаге наблюдениями, и т. д. Однако возможно и другое развитие событий, если по некоторой причине наблюдение оказалось недоступным, то этап коррекции может быть пропущен и выполнена экстраполяция по нескорректированной оценке (априорной экстраполяции). Аналогично, если независимые измерения доступны только в отдельные такты работы, всё равно возможны коррекции (обычно с использованием другой матрицы наблюдений Hk).

Далее рассмотрим работу классического оптимального фильтра Калмана.

Этап экстраполяции[править | править вики-текст]

Экстраполяция (предсказание) вектора состояния системы по оценке вектора состояния и примененному вектору управления с шага (k−1) на шаг k: \hat{\textbf{x}}_{k|k-1} = \textbf{F}_{k}\hat{\textbf{x}}_{k-1|k-1} + \textbf{B}_{k} \textbf{u}_{k}
Ковариационная матрица для экстраполированного вектора состояния: \textbf{P}_{k|k-1} =  \textbf{F}_{k} \textbf{P}_{k-1|k-1} \textbf{F}_{k}^{T} + \textbf{Q}_{k}

Этап коррекции[править | править вики-текст]

Отклонение полученного на шаге k наблюдения от наблюдения, ожидаемого при произведенной экстраполяции: 
\tilde{\textbf{y}}_{k} = \textbf{z}_{k} - \textbf{H}_{k}\hat{\textbf{x}}_{k|k-1}
Ковариационная матрица для вектора отклонения (вектора ошибки): \textbf{S}_{k} = \textbf{H}_{k}\textbf{P}_{k|k-1} \textbf{H}_{k}^{T}+\textbf{R}_{k}
Оптимальная по Калману матрица коэффициентов усиления, формирующаяся на основании ковариационных матриц имеющейся экстраполяции вектора состояния и полученных измерений (посредством ковариационной матрицы вектора отклонения): \textbf{K}_{k} = \textbf{P}_{k|k-1}\textbf{H}_{k}^{T}\textbf{S}_{k}^{-1}
Коррекция ранее полученной экстраполяции вектора состояния — получение оценки вектора состояния системы: \hat{\textbf{x}}_{k|k} = \hat{\textbf{x}}_{k|k-1} + \textbf{K}_{k}\tilde{\textbf{y}}_{k}
Расчет ковариационной матрицы оценки вектора состояния системы: \textbf{P}_{k|k} = (I - \textbf{K}_{k} \textbf{H}_{k}) \textbf{P}_{k|k-1}

Выражение для ковариационной матрицы оценки вектора состояния системы справедливо только при использовании приведенного оптимального вектора коэффициентов. В общем случае это выражение имеет более сложный вид.

Инварианты[править | править вики-текст]

Если модель абсолютно точна и абсолютно точно заданы начальные условия \hat{\textbf{x}}_{0|0} и \textbf{P}_{0|0}, то следующие величины сохраняются после любого количества итераций работы фильтра — являются инвариантами:

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

  • \textsf{E}[\textbf{x}_k - \hat{\textbf{x}}_{k|k}] = \textsf{E}[\textbf{x}_k - \hat{\textbf{x}}_{k|k-1}] = 0
  • \textsf{E}[\tilde{\textbf{y}}_k] = 0

где \textsf{E}[\xi] — математическое ожидание \xi.

Расчетные матрицы ковариаций экстраполяций, оценок состояния системы и вектора ошибок совпадают с истинными матрицами ковариаций:

  • \textbf{P}_{k|k} = \textrm{cov}(\textbf{x}_k - \hat{\textbf{x}}_{k|k})
  • \textbf{P}_{k|k-1} = \textrm{cov}(\textbf{x}_k - \hat{\textbf{x}}_{k|k-1})
  • \textbf{S}_{k} = \textrm{cov}(\tilde{\textbf{y}}_k)

Пример построения фильтра[править | править вики-текст]

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

В данной задаче матрицы F, H, R и Q не зависят от времени, опустим их индексы. Кроме того, мы не управляем вагонеткой, поэтому матрица управления B отсутствует.

Координата и скорость вагонетки описывается вектором в линейном пространстве состояний

\textbf{x}_{k} = \begin{bmatrix} x \\ \dot{x} \end{bmatrix}

где \dot{x} — скорость (первая производная координаты x по времени).

Будем считать, что между (k−1)-ым и k-ым тактами вагонетка движется с постоянным ускорением ak, распределенным по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением σa. В соответствии с механикой Ньютона можно записать

\textbf{x}_{k} = \textbf{F} \textbf{x}_{k-1} + \textbf{G}a_{k}

где

\textbf{F} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix}

и

\textbf{G} = \begin{bmatrix} \frac{\Delta t^{2}}{2} \\ \Delta t \end{bmatrix} .

Ковариационная матрица случайных воздействий

 \textbf{Q} = \textrm{cov}(\textbf{G}a) = \textsf{E}[(\textbf{G}a)(\textbf{G}a)^{\text{T}}] = \textbf{G} \textsf{E}[a^2] \textbf{G}^{\text{T}} = \textbf{G}[\sigma_a^2]\textbf{G}^{\text{T}} = \sigma_a^2 \textbf{G}\textbf{G}^{\text{T}} (σa — скаляр).

На каждом такте работы производится измерение положения вагонетки. Предположим, что погрешность измерений vk имеет нормальное распределение с нулевым математическим ожиданием и среднеквадратическим отклонением σz. Тогда

\textbf{z}_{k} = \textbf{H x}_{k} + \textbf{v}_{k}

где

\textbf{H} = \begin{bmatrix} 1 & 0 \end{bmatrix}

и ковариационная матрица шума наблюдений имеет вид

\textbf{R} = \textsf{E}[\textbf{v}_k \textbf{v}_k^{\text{T}}] = \begin{bmatrix} \sigma_z^2 \end{bmatrix} .

Начальное положение вагонетки известно точно

\hat{\textbf{x}}_{0|0} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} ,
\textbf{P}_{0|0} = \begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix} .

Если же положение и скорость вагонетки известна лишь приблизительно, то можно инициализировать матрицу дисперсий достаточно большим числом L, чтобы при этом число превосходило дисперсию измерений координаты

\hat{\textbf{x}}_{0|0} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} ,
\textbf{P}_{0|0} = \begin{bmatrix} L & 0 \\ 0 & L \end{bmatrix} .

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

Вывод формул[править | править вики-текст]

Ковариационная матрица оценки вектора состояния[править | править вики-текст]

По определению ковариационной матрицы Pk|k

\textbf{P}_{k|k}  = \textrm{cov}(\textbf{x}_{k} - \hat{\textbf{x}}_{k|k})

подставляем выражение для оценки вектора состояния \hat{\textbf{x}}_{k|k}

\textbf{P}_{k|k} = \textrm{cov}(\textbf{x}_{k} - (\hat{\textbf{x}}_{k|k-1} + \textbf{K}_k\tilde{\textbf{y}}_{k}))

и расписываем выражение для вектора ошибок \tilde{\textbf{y}}_k

\textbf{P}_{k|k} = \textrm{cov}(\textbf{x}_{k} - (\hat{\textbf{x}}_{k|k-1} + \textbf{K}_k(\textbf{z}_k - \textbf{H}_k\hat{\textbf{x}}_{k|k-1})))

и вектора измерений \textbf{z}_{k}

\textbf{P}_{k|k} = \textrm{cov}(\textbf{x}_{k} - (\hat{\textbf{x}}_{k|k-1} + \textbf{K}_k(\textbf{H}_k\textbf{x}_k + \textbf{v}_k - \textbf{H}_k\hat{\textbf{x}}_{k|k-1})))

выносим вектор погрешности измерений vk

\textbf{P}_{k|k} = \textrm{cov}((I - \textbf{K}_k \textbf{H}_{k})(\textbf{x}_k - \hat{\textbf{x}}_{k|k-1}) - \textbf{K}_k \textbf{v}_k )

так как вектор погрешности измерений vk не коррелирован с другими аргументами, получаем выражение

\textbf{P}_{k|k} = \textrm{cov}((I - \textbf{K}_k \textbf{H}_{k})(\textbf{x}_k - \hat{\textbf{x}}_{k|k-1}))  + \textrm{cov}(\textbf{K}_k \textbf{v}_k )

в соответствии со свойствами ковариации векторов данное выражение преобразуется к виду

\textbf{P}_{k|k} = (I - \textbf{K}_k \textbf{H}_{k})\textrm{cov}(\textbf{x}_k - \hat{\textbf{x}}_{k|k-1})(I - \textbf{K}_k \textbf{H}_{k})^{\text{T}}  + \textbf{K}_k\textrm{cov}(\textbf{v}_k )\textbf{K}_k^{\text{T}}

заменяя выражение для ковариационной матрицы экстраполяции вектора состояния на Pk|k−1 и определение ковариационной матрицы шумов наблюдений на Rk, получаем

\textbf{P}_{k|k} = 
(I - \textbf{K}_k \textbf{H}_{k}) \textbf{P}_{k|k-1} (I - \textbf{K}_k \textbf{H}_{k})^\text{T} + \textbf{K}_k \textbf{R}_k \textbf{K}_k^\text{T}

Полученное выражение справедливо для произвольной матрицы коэффициентов, но если в качестве неё выступает матрица коэффициентов, оптимальная по Калману, то данное выражение для ковариационной матрицы можно упростить.

Оптимальная матрица коэффициентов усиления[править | править вики-текст]

Фильтр Калмана минимизирует сумму квадратов математических ожиданий ошибок оценки вектора состояния.

Вектор ошибки оценки вектора состояния

\textbf{x}_{k} - \hat{\textbf{x}}_{k|k}

Стоит задача минимизировать сумму математических ожиданий квадратов компонент данного вектора

\textsf{E}[\;|\textbf{x}_{k} - \hat{\textbf{x}}_{k|k}|^2\,],

что эквивалентно минимизации следа ковариационной матрицы оценки вектора состояния Pk|k. Подставим в выражение для ковариационной матрицы оценки вектора состояния имеющиеся выражения и дополним до полного квадрата:

 \textbf{P}_{k|k}  = \textbf{P}_{k|k-1} - \textbf{K}_k \textbf{H}_k \textbf{P}_{k|k-1} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{K}_k^\text{T} + \textbf{K}_k (\textbf{H}_k \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} + \textbf{R}_k) \textbf{K}_k^\text{T}
 = \textbf{P}_{k|k-1} - \textbf{K}_k \textbf{H}_k \textbf{P}_{k|k-1} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{K}_k^\text{T} + \textbf{K}_k \textbf{S}_k\textbf{K}_k^\text{T}
 = \textbf{P}_{k|k-1} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{S}_k^{-1} \textbf{H}_k \textbf{P}_{k|k-1} + (\textbf{K}_{k} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{S}_k^{-1}) \textbf{S}_k(\textbf{K}_{k} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{S}_k^{-1})^\text{T}

Заметим, что последнее слагаемое является ковариационной матрицей некоторой случайной величины, поэтому его след неотрицателен. Минимум следа достигнется при обнулении последнего слагаемого:

 \textbf{K}_{k} = \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{S}_k^{-1}

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

Ковариационная матрица оценки вектора состояния при использовании оптимальной матрицы коэффициентов[править | править вики-текст]

Выражение для ковариационной матрицы оценки вектора состояния Pk|k при использовании оптимальной матрицы коэффициентов примет вид:

 \textbf{P}_{k|k} = \textbf{P}_{k|k-1} - \textbf{P}_{k|k-1} \textbf{H}_k^\text{T} \textbf{S}_k^{-1} \textbf{H}_k \textbf{P}_{k|k-1}

 = \textbf{P}_{k|k-1} - \textbf{K}_k \textbf{H}_k \textbf{P}_{k|k-1} = (I - \textbf{K}_{k} \textbf{H}_{k}) \textbf{P}_{k|k-1}.

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

Фильтр Калмана-Бюси[править | править вики-текст]

Фильтр Калмана-Бюси (названный по имени Ричарда Сноудена Бюси) - версия фильтра Калмана для непрерывного времени [11][12], опирается на следующую непрерывную динамическую модель состояния:

\frac{d}{dt}\mathbf{x}(t) = \mathbf{F}(t)\mathbf{x}(t) + \mathbf{B}(t)\mathbf{u}(t) + \mathbf{w}(t)
\mathbf{z}(t) = \mathbf{H}(t) \mathbf{x}(t) + \mathbf{v}(t)

здесь \mathbf{Q}(t) и \mathbf{R}(t) будут представлять интенсивности двух членов (с характеристиками белого шума) \mathbf{w}(t) и \mathbf{v}(t), соответственно.

Фильтр состоит из двух дифференциальных уравнений, одно из которых служит для оценки состояния системы, а другое для оценки ковариации:

\frac{d}{dt}\hat{\mathbf{x}}(t) = \mathbf{F}(t)\hat{\mathbf{x}}(t) + \mathbf{B}(t)\mathbf{u}(t) + \mathbf{K}(t) (\mathbf{z}(t)-\mathbf{H}(t)\hat{\mathbf{x}}(t))
\frac{d}{dt}\mathbf{P}(t) = \mathbf{F}(t)\mathbf{P}(t) + \mathbf{P}(t)\mathbf{F}^{T}(t) + \mathbf{Q}(t) - \mathbf{K}(t)\mathbf{R}(t)\mathbf{K}^{T}(t)

где коэффициент Калмана получается по формуле

\mathbf{K}(t)=\mathbf{P}(t)\mathbf{H}^{T}(t)\mathbf{R}^{-1}(t)

Отметим, что в выражении для \mathbf{K}(t) ковариация шумов наблюдения \mathbf{R}(t) представляет одновременно ковариацию ошибки предсказания \tilde{\mathbf{y}}(t)=\mathbf{z}(t)-\mathbf{H}(t)\hat{\mathbf{x}}(t); причем эти ковариации равны только для случая непрерывного времени.[13]

Различие между шагами прогноза и коррекции в дискретной калмановской фильтрации не имеет места для непрерывного случая.

Второе дифференциальное уравнение для ковариации - это пример уравнения Риккати.

Гибридный фильтр Калмана[править | править вики-текст]

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


\begin{align}
\dot{\mathbf{x}}(t) &= \mathbf{F}(t)\mathbf{x}(t)+\mathbf{B}(t)\mathbf{u}(t)+\mathbf{w}(t), &\mathbf{w}(t) &\sim N\bigl(\mathbf{0},\mathbf{Q}(t)\bigr) \\
\mathbf{z}_k &= \mathbf{H}_k\mathbf{x}_k+\mathbf{v}_k,   &\mathbf{v}_k &\sim N(\mathbf{0},\mathbf{R}_k)
\end{align}

где

\mathbf{x}_k=\mathbf{x}(t_k).
Инициализация

\hat{\mathbf{x}}_{0\mid 0}=E\bigl[\mathbf{x}(t_0)\bigr], \mathbf{P}_{0\mid 0}=Var\bigl[\mathbf{x}(t_0)\bigr]
Прогноз

\begin{align}
&\dot{\hat{\mathbf{x}}}(t) = \mathbf{F}(t) \hat{\mathbf{x}}(t) + \mathbf{B}(t) \mathbf{u}(t) 
\text{, where } 
\hat{\mathbf{x}}(t_{k-1}) = \hat{\mathbf{x}}_{k-1\mid k-1} \\
\Rightarrow
&\hat{\mathbf{x}}_{k\mid k-1} = \hat{\mathbf{x}}(t_k)\\
&\dot{\mathbf{P}}(t) = \mathbf{F}(t)\mathbf{P}(t)+\mathbf{P}(t)\mathbf{F}(t)^T+\mathbf{Q}(t)
\text{, where }
\mathbf{P}(t_{k-1}) = \mathbf{P}_{k-1\mid k-1}\\
\Rightarrow
&\mathbf{P}_{k\mid k-1} = \mathbf{P}(t_k)
\end{align}

Уравнения прогноза взяты из фильтра Калмана-Бюси с непрерывным временем, при  \mathbf{K}(t)=0 . Прогноз состояния и ковариации получается интегрированием дифференциальных уравнений с начальным значением, взятым из предыдущего шага коррекции.

Коррекция
\mathbf{K}_{k} = \mathbf{P}_{k\mid k-1}\mathbf{H}_{k}^T\bigl(\mathbf{H}_{k}\mathbf{P}_{k\mid k-1}\mathbf{H}_{k}^T+\mathbf{R}_{k}\bigr)^{-1}
\hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k(\mathbf{z}_k-\mathbf{H}_k\hat{\mathbf{x}}_{k\mid k-1})
\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_{k}\mathbf{H}_{k})\mathbf{P}_{k\mid k-1}

Уравнения коррекции идентичны уравнениям из дискретного фильтра Калмана.

Критика фильтра Калмана[править | править вики-текст]

На настоящий момент основная критика фильтра Калмана ведётся по следующим направлениям[14]:

  • В фильтре Калмана погрешности представлены белым шумом, которого на самом деле в природе не существует.
  • Нет соответствия необходимому и достаточному условию оптимальности
\textsf{M}[\varepsilon(t)\,\textbf{Z}_{k}]^\text{T} = 000 при 00\textbf{t}_{0} \le \tau \le t
  • Ошибка в выводе фильтра Калмана — требуются противоречивые условия верности разных уравнений алгоритма: в одних чтобы τ < t и в других τ = t.

Соответственно, позиция сторонников оптимальности данного фильтра заключается в том, что[15]:

  • Возможно составить модифицированый фильтр Калмана, у которого погрешности будут представлены цветным шумом.
  • Использование условия оптимальности \textsf{M}[\varepsilon(t)\,\textbf{Z}_{k}]^\text{T} = 0\quad в определённых случаях приводит к менее точному результату, нежели используемое в фильтре Калмана.
  • При выводе фильтра Калмана можно принять условия: τ < t, τt, что устраняет противоречие.

Где используется[править | править вики-текст]

См. также[править | править вики-текст]

Литература и публикации[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Ingvar Strid & Karl Walentin (2009), "«Block Kalman Filtering for Large-Scale DSGE Models»", Computational Economics (Springer) . — Т. 33 (3): 277–304, <http://www.riksbank.com/upload/Dokument_riksbank/Kat_publicerat/WorkingPapers/2008/wp224ny.pdf> 
  2. Martin Møller Andreasen (2008), «Non-linear DSGE Models, The Central Difference Kalman Filter, and The Mean Shifted Particle Filter», <ftp://ftp.econ.au.dk/creates/rp/08/rp08_33.pdf> 
  3. Kalman, R.E. (1960). "A new approach to linear filtering and prediction problems". Journal of Basic Engineering 82 (1): pp. 35–45
  4. Steffen L. Lauritzen. "Time series analysis in 1880. A discussion of contributions made by T.N. Thiele". International Statistical Review 49, 1981, 319–333.
  5. Steffen L. Lauritzen, Thiele: Pioneer in Statistics, Oxford University Press, 2002. ISBN 0-19-850972-3.
  6. Stratonovich, R.L. (1959). Optimum nonlinear systems which bring about a separation of a signal with constant parameters from noise. Radiofizika, 2:6, pp. 892–901.
  7. Stratonovich, R.L. (1959). On the theory of optimal non-linear filtering of random functions. Theory of Probability and its Applications, 4, pp. 223–225.
  8. Stratonovich, R.L. (1960) Application of the Markov processes theory to optimal filtering. Radio Engineering and Electronic Physics, 5:11, pp. 1–19.
  9. Stratonovich, R.L. (1960). Conditional Markov Processes. Theory of Probability and its Applications, 5, pp. 156–178.
  10. Roweis, S. and Ghahramani, Z., A unifying review of linear Gaussian models, Neural Comput. Vol. 11, No. 2, (February 1999), pp. 305—345.
  11. Bucy, R.S. and Joseph, P.D., Filtering for Stochastic Processes with Applications to Guidance, John Wiley & Sons, 1968; 2nd Edition, AMS Chelsea Publ., 2005. ISBN 0-8218-3782-6
  12. Jazwinski, Andrew H., Stochastic processes and filtering theory, Academic Press, New York, 1970. ISBN 0-12-381550-9
  13. Kailath, Thomas, "An innovation approach to least-squares estimation Part I: Linear filtering in additive white noise", IEEE Transactions on Automatic Control, 13(6), 646-655, 1968
  14. http://www.tgizd.ru/mag/aviakos/aviakos_7_6_7.shtml Г. Ф. Савинов О некоторых особенностях алгоритма оптимальной фильтрации Калмана — Бьюси // Авиакосмическое приборостроение № 6, 2007 г.
  15. http://www.tgizd.ru/mag/aviakos/aviakos_8_6_5.shtml А. Ю. Горбачев Критерии оценки алгоритмов оптимальной фильтрации // Авиакосмическое приборостроение № 6, 2008 г.