- PVSM.RU - https://www.pvsm.ru -

Что такое наблюдатель и при чём здесь фильтр Калмана

Прочитал на Хабр статью [1] [1], в которой автор простым языком даёт достаточно глубокое представление такого сложного и важного математического объекта как фильтр Калмана и захотел предложить читателям посмотреть на него (фильтр Калмана) несколько с другого ракурса. Сразу хочу предупредить, что перед чтением данной статьи хорошо бы прочесть статью [1] [1], так как даже формулы были специально взяты ровно оттуда, дабы данная статья базировалась на материале упомянутой работы [1] [1].

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

Общая идея такова: берём математическую модель двигателя и в режиме реального времени “запитываем” её показаниями датчиков напряжений фаз работающего двигателя насоса. Показания датчиков тока используем для того, чтобы в реальном времени втянуть виртуальную модель в такой режим, при котором виртуальные показания квазидатчиков тока математической модели станут равны показаниям реальных датчиков тока. То есть в этом случае мы получим виртуальную real time модель из которой можем взять любую информацию, которой она располагает, в частности частоту вращения электродвигателя.

А теперь, изложенную идею попробуем воплотить в виде математических абстракций.

 begin{align}   & {{{hat{x}}}_{k}}={{F}_{k}}{{{hat{x}}}_{k-1}}+{{B}_{k}}{{{vec{u}}}_{k}} \   & {{P}_{k}}={{F}_{k}}{{P}_{k-1}}F_{k}^{T}+{{Q}_{k}} \  end{align} tag{1}

Детально разберём модель (1):

{{F}_{k}}

- матрица дискретной модели наблюдаемого объекта, в данном случае это двигатель погружного насоса;

{{hat{x}}_{k}}

- случайный вектор пространства состояний фильтра Калмана с ковариационной матрицей

{{P}_{k}}=Cov({{hat{x}}_{k}}),

характеризующей разброс

{{hat{x}}_{k}}

вокруг его математического ожидания

Mleft[ {{{hat{x}}}_{k}} right],

в нашем случае

{{hat{x}}_{k}}

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

{{Q}_{k}}

- ковариационная матрица шума внешних возмущающих воздействий на вектор пространства состояний

{{hat{x}}_{k}}

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

{{vec{u}}_{k}}

- вектор детерминированных внешних воздействий с согласующей этот вектор с моделью двигателя матрицей

{{B}_{k}},

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

Так же

{{vec{mu }}_{expected}}={{H}_{k}}{{hat{x}}_{k}}

- случайный вектор показаний квазидатчиков токов фаз математической модели двигателя насоса, где

{{H}_{k}}

- матрица согласования вектора пространства состояний

{{hat{x}}_{k}}

с вектором показаний квазидатчиков

{{vec{mu }}_{expected}};sum{_{expected}}={{H}_{k}}{{P}_{k}}H_{k}^{T}

- ковариационная матрица случайного вектора показаний квазидатчиков

{{vec{mu }}_{expected}} ,

характеризующая разброс этих показаний вокруг математического ожидания

Mleft[ {{{vec{mu }}}_{expected}} right];{{vec{z}}_{k}}

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

{{R}_{k}}=Cov({{vec{z}}_{k}}),

характеризующей шумовой разброс показаний

{{vec{z}}_{k}}

вокруг математического ожидания

Mleft[ {{{vec{z}}}_{k}} right].

Итак, мы имеем два случайных вектора

{{vec{mu }}_{expected}},{{vec{z}}_{k}}

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

sum{_{expected}}={{H}_{k}}{{P}_{k}}H_{k}^{T}  и  { {R}_{k}}

соответственно. Положим, надо объединить показания виртуальных квазидатчиков с показаниями реальных датчиков при помощи произведения двух случайных величин, в данном случае это  

{{vec{mu }}_{expected  }}  и  {{vec{z}}_{k}},

и получить случайный вектор

{{hat{x}}_{k}}^{prime }.

Новая случайная векторная величина   

{{hat{x}}_{k}}^{prime }

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

Случайный вектор

{{vec{mu }}_{expected}}

показаний квазидатчиков тока математической модели двигателя и его ковариационную матрицу

 sum{_{expected}}

представим в виде :

left( {{{vec{mu }}}_{0}},{{Sigma }_{0}} right)=left( {{{vec{mu }}}_{expected}},sum{_{expected}} right)=left( {{H}_{k}}{{{hat{x}}}_{k}},{{H}_{k}}{{P}_{k}}H_{k}^{T} right )  tag{2}

Случайный вектор   

{{vec{z}}_{k}}

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

{{R}_{k}}

представим в виде :

left( {{{vec{mu }}}_{1}},{{Sigma }_{1}} right)=left( {{{vec{z}}}_{k}},{{R}_{k}} right)  tag{3}

В результате произведения  

{{vec{mu }}_{expected}}  ,  {{vec{z}}_{k}}

получаем векторную случайную величину  

{vec{mu }}'

и её ковариационную матрицу

  {Sigma }'  ,

которые можно выразить через  

{{vec{mu }}_{expected}}  ,   {{vec{z}}_{k}}

и их ковариационные матрицы следующим образом:

  begin{align}   & {vec{mu }}'={{{vec{mu }}}_{0}}+K({{{vec{mu }}}_{1}}-{{{vec{mu }}}_{0}}) \   & {Sigma }'={{Sigma }_{0}}-K{{Sigma }_{0}} \  end{align}   где   K={{Sigma }_{0}}{{left( {{Sigma }_{0}}+{{Sigma }_{1}}  right)}^{-1}}  tag{4}

Причём

  begin{align}   & {vec{mu }}'={{H}_{k}}{{{{hat{x}}'}}_{k}} \   & {Sigma }'={{H}_{k}}{{{{P}'}}_{k}}H_{k}^{T} \  end{align}       tag{5}

Исходя из (2),(3),(4),(5), получим:

  begin{align}   & {vec{mu }}'={{H}_{k}}{{{{hat{x}}'}}_{k}}={{H}_{k}}{{{hat{x}}}_{k}}+{{K}_{k}}left( {{{vec{z}}}_{k}}-{{H}_{k}}{{{hat{x}}}_{k}} right) \   & {Sigma }'={{H}_{k}}{{{{P}'}}_{k}}H_{k}^{T}={{H}_{k}}{{P}_{k}}H_{k}^{T}-{{K}_{k}}{{H}_{k}}{{P}_{k}}H_{k}^{T} \  end{align}  tag{6}

Исходя из (2),(3),(4) коэффициент усиления Калмана   

{{K}_{k}}

будет иметь вид

{{K}_{k}}={{H}_{k}}{{P}_{k}}H_{k}^{T}{{left( {{H}_{k}}{{P}_{k}}H_{k}^{T}+{{R}_{k}} right)}^{-1}}  tag{7}

Мы можем убрать   

{{H}_{k}} 

из начала каждого члена в двух предыдущих уравнениях (6) (обратите внимание, что один скрывается в   K  ), а   

H_{k}^{T}

убрать из конца всех членов второго уравнения системы (6).

Окончательно приходим к следующим выражениям:

  begin{align}   & {{{{hat{x}}'}}_{k}}={{{hat{x}}}_{k}}+{{{{K}'}}_{k}}left( {{{vec{z}}}_{k}}-{{H}_{k}}{{{hat{x}}}_{k}} right) \   & {{{{P}'}}_{k}}={{P}_{k}}-{{{{K}'}}_{k}}{{H}_{k}}{{P}_{k}} \   & {{{{K}'}}_{k}}={{P}_{k}}H_{k}^{T}{{left( {{H}_{k}}{{P}_{k}}H_{k}^{T}+{{R}_{k}} right)}^{-1}} \  end{align}   tag{8}

К которым добавим систему (1):

begin{align}   & {{{hat{x}}}_{k}}={{F}_{k}}{{{hat{x}}}_{k-1}}+{{B}_{k}}{{{vec{u}}}_{k}} \   & {{P}_{k}}={{F}_{k}}{{P}_{k-1}}F_{k}^{T}+{{Q}_{k}} \  end{align}  tag{1}{{{hat{x}}'}_{k}}

— это новое наилучшее возможное значение, и мы можем дальше передавать его вместе с 

{{{P}'}_{k}}

на очередной этап вычислений, полагая  

{{hat{x}}_{k-1}}={{{hat{x}}'}_{k}}  ,   {{P}_{k-1}}={{{P}'}_{k}}  .

Ну и что? Скажете Вы, тот же фильтр Калмана, что и в [1] [1]. Но давайте в первое уравнение системы (8) вместо

{{hat{x}}_{k}}

подставим первое уравнение системы (1), и получим

{{{hat{x}}'}_{k}}={{F}_{k}}{{hat{x}}_{k-1}}+{{B}_{k}}{{vec{u}}_{k}}+{{{K}}_{k}'}left( {{{vec{z}}}_{k}}-{{H}_{k}}{{{hat{x}}}_{k}} right)  tag{9}

наблюдатель в каноническом виде, где   

{{F}_{k}}{{hat{x}}_{k-1}}+{{B}_{k}}{{vec{u}}_{k}}

 - это часть, которая отвечает за математическую модель наблюдаемого объекта, в нашем случае это электродвигатель,    

{{vec{u}}_{k}}

- внешнее детерминированное воздействие, в нашем случае это напряжения фаз, измеренные реальными датчиками,   

{{vec{z}}_{k}}

 - измеряемые величины, в нашем случае это показания датчиков тока двигателя насоса.   

{{{K}}_{k}'}

 - матричный коэффициент усиления наблюдателя, который устроен так, что благодаря ему  

left( {{{vec{z}}}_{k}}-{{H}_{k}}{{{hat{x}}}_{k}} right)

стремится к нулю, но так как  

{{vec{z}}_{k}}

- это показания датчиков реальных, а  

{{vec{mu }}_{expected}}={{H}_{k}}{{hat{x}}_{k}}

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

{{{hat{x}}}_{k}'}

  будут соответствовать реальным текущим значениям наблюдаемого объекта, а что касается нашего случая, то одна из координат  

 {{{hat{x}}}_{k}'}

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

Тогда причём здесь фильтрация?

Задача наблюдения, сформулированная в стохастических терминах, именуется задачей фильтрации [2].

То есть фильтр Калмана – это оптимальный наблюдатель.

  1. Объяснение фильтра Калмана в картинках  [1]

  2. К. Браммер Г. Зиффлинг Фильтр Калмана – Бьюси. Детерминированное наблюдение и стохастическая фильтрация

Автор: boldyrev_igor

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/fil-tr-kalmana/448945

Ссылки в тексте:

[1] [1]: https://habr.com/ru/articles/594249/

[2] Источник: https://habr.com/ru/articles/1019716/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1019716