Пример за приложение на филтър Kalman. Съвременни проблеми на науката и образованието

В процеса на автоматизация на технологичните процеси за управление на механизми и агрегати се налага да се работи с измервания на различни физически величини. Това може да бъде налягането и скоростта на потока на течност или газ, скорост, температура и много други. Измерването на физическите величини се извършва с помощта на аналогови сензори. Аналоговият сигнал е сигнал от данни, в който всеки от представящите параметри се описва с функция на времето и непрекъснат набор от възможни стойности. От непрекъснатостта на пространството за стойности следва, че всяка интерференция, въведена в сигнала, е неразличима от желания сигнал. Следователно грешната стойност на необходимото физическо количество ще бъде изпратена до аналоговия вход на управляващото устройство. Следователно е необходимо да се филтрира сигналът, идващ от сензора.

Един от ефективните алгоритми за филтриране е филтърът на Калман. Калман филтърът е рекурсивен филтър, който оценява вектора на състоянието на динамична система, използвайки поредица от непълни и шумни измервания. Филтърът на Калман използва динамичен модел на системата (например физическият закон на движението), управляващи действия и много последователни измервания, за да формира оптимална оценка на състоянието. Алгоритъмът се състои от две повтарящи се фази: прогнозиране и корекция. На първия етап се изчислява прогнозата за състоянието в следващия момент (като се вземе предвид неточността на тяхното измерване). На втория, новата информация от сензора коригира прогнозираната стойност (също като се има предвид неточността и шума на тази информация).

На етапа на прогнозиране се случва следното:

  1. Прогнозиране на състоянието на системата:

къде е прогнозата за състоянието на системата в момента; - матрица на преход между състояния (динамичен модел на системата); - прогнозиране на състоянието на системата в предходния момент от времето; - матрица на прилагане на контролното действие; - контролно действие в предходния момент от времето.

  1. Прогнозиране на ковариацията на грешка:

къде е предсказването на грешката; - грешка в предходния момент във времето; - ковариация на шума от процеса.

На етапа на настройка се случва следното:

  1. Изчисляване на печалбата на Калман:

къде е печалбата на Калман; - матрица от измервания, показваща връзката на измерванията и състоянията; - ковариация на измерване на шума.

къде е измерването в момента.

  1. Актуализация на ковариационна грешка:

къде е матрицата на идентичността.

Ако състоянието на системата се описва с една променлива, тогава = 1 и матриците се израждат в обикновени уравнения.

За да се демонстрира ясно ефективността на филтъра на Калман, беше проведен експеримент със сензора за обем AVR PIC KY-037, който е свързан към микроконтролера Arduino Uno. Фигура 1 показва графика на показанията на сензора без филтър (ред 1). Хаотичните колебания в изхода на сензора показват наличието на шум.

Фигура 1. Графика на показанията на сензора без филтър

За да се приложи филтърът, е необходимо да се дефинират стойностите на променливите и, които определят динамиката на системата и размерите. Да вземем и равно на 1 и равно на 0, тъй като в системата няма контролни действия. За да се определят свойствата на изглаждане на филтъра, е необходимо да се изчисли стойността на променливата, както и да се избере стойността на параметъра.

Ще изчислим променливата в програмата Microsoft Excel 2010. За това е необходимо да се изчисли стандартното отклонение за извадката от показанията на сензора. = 0,62. се избира в зависимост от необходимото ниво на филтрация, приемаме = 0.001. На фигура 2, вторият ред показва графиката на показанията на сензора с приложен филтър.

Фигура 2. Графика на показанията на сензора с помощта на филтър Kalman

От графиката можем да заключим, че филтърът се справи със задачата да филтрира смущенията, тъй като в стационарно състояние колебанията в показанията на сензора, преминали през филтрирането, са незначителни.

Филтърът на Калман обаче има значителен недостатък. Ако измерената стойност от сензора може да се промени бързо, филтрираното отчитане на сензора няма да се промени толкова бързо, колкото измерената стойност. Фигура 3 показва реакцията на филтъра на Калман при скок в измерената стойност.

Фигура 3. Реакция на филтъра на Калман на скок в измерената стойност

Установено е, че реакцията на филтъра към скок в измерената стойност е незначителна. Ако измерената стойност се промени значително и след това не се върне към предишната стойност, тогава показанията на филтрирания сензор ще съответстват на реалната стойност на измерената стойност само след значителен период от време, което е неприемливо за системите за автоматично управление, които изискват високи производителност.

От проведения експеримент може да се заключи, че филтърът на Калман е препоръчително да се използва за филтриране на показанията на сензора в нискоскоростни системи.

Библиография:

  1. ГОСТ 17657-79. Трансфер на данни. Термини и определения. - Москва: Издателство на стандартите, 2005. - 2 с.
  2. Калман филтър // Уикипедия. ... Дата на актуализиране: 26.04.2017г. URL: http://ru.wikipedia.org/?oldid=85061599 (дата на достъп: 21.05.2017 г.).

В интернет, включително и в Хабре, можете да намерите много информация за филтъра на Калман. Но е трудно да се намери лесно смилаемо извличане на самите формули. Без заключение цялата тази наука се възприема като вид шаманизъм, формулите изглеждат като безличен набор от символи и най-важното е, че много прости твърдения, които лежат на повърхността на една теория, са извън разбирането. Целта на тази статия ще бъде да говорим за този филтър на възможно най -достъпен език.
Калман филтърът е мощен инструмент за филтриране на данни. Основният му принцип е, че при филтриране се използва информация за физиката на самото явление. Например, ако филтрирате данни от скоростомера на автомобил, тогава инерцията на автомобила ви дава право да възприемате твърде бързите скокове на скоростта като грешка в измерването. Филтърът на Калман е интересен, защото в известен смисъл е най-добрият филтър. Ще обсъдим по -подробно по -долу какво точно означават думите „най -добрият“. В края на статията ще покажа, че в много случаи формулите могат да бъдат опростени до такава степен, че от тях няма да остане почти нищо.

Образователна програма

Преди да се запозная с филтъра на Калман, предлагам да си припомним някои прости дефиниции и факти от теорията на вероятностите.

Случайна стойност

Когато казват, че е дадена случайна променлива, те имат предвид, че това количество може да приема случайни стойности. Той приема различни стойности с различни вероятности. Когато хвърлите, да речем, матрица, дискретен набор от стойности ще отпадне :. Когато става въпрос например за скоростта на блуждаеща частица, тогава, очевидно, човек трябва да има работа с непрекъснат набор от стойности. Ще обозначаваме „отпадналите“ стойности на произволна променлива с, но понякога ще използваме същата буква, която използваме за означаване на случайна променлива :.
В случай на непрекъснат набор от стойности, случайната променлива се характеризира с плътността на вероятностите, която ни диктува, че вероятността случайната величина да „изпадне“ в малка околност на точка с дължина е равна на. Както можем да видим от снимката, тази вероятност е равна на площта на затъмнения правоъгълник под графиката:

Доста често в живота случайните променливи са гаусови, когато плътността на вероятността е.

Виждаме, че функцията има формата на камбана, центрирана в точка и с характерна ширина на реда.
Тъй като говорим за гаусово разпределение, би било грях да не споменем откъде идва то. Точно както числата са твърдо установени в математиката и се срещат на най-неочаквани места, така и гаусовото разпределение пусна дълбоки корени в теорията на вероятностите. Едно забележително твърдение, което частично обяснява вездесъствието на Гаус, е следното:
Нека има произволна променлива с произволно разпределение (всъщност има някои ограничения за този произвол, но те изобщо не са твърди). Нека проведем експерименти и да изчислим сумата от "отпадналите" стойности на случайната променлива. Нека направим много от тези експерименти. Ясно е, че всеки път ще получаваме различна стойност на сумата. С други думи, тази сума сама по себе си е случайна величина със свой собствен закон за разпределение. Оказва се, че при достатъчно големи, законът за разпределение на тази сума се стреми към разпределението на Гаус (между другото, характерната ширина на "камбаната" расте подобно). Прочетете повече в Уикипедия: Централна гранична теорема. В живота много често има количества, които се състоят от голям брой еднакво разпределени независими случайни променливи и следователно се разпределят според Гаус.

Означава

Средната стойност на произволна променлива е това, което получаваме в лимита, ако проведем много експерименти и изчислим средноаритметичната стойност на изпуснатите стойности. Средната стойност се обозначава по различни начини: математиците обичат да означават с (очакване), а чуждестранните математици с (очакване). Физиците са чрез или. Ще обозначим по чужд начин :.
Например за гаусово разпределение средната стойност е.

Дисперсия

В случая с разпределението на Гаус, ние ясно виждаме, че случайната променлива предпочита да изпадне в някаква околност на средната си стойност. Както се вижда от графиката, характерното разсейване на стойностите на поръчката. Как можем да оценим това разпределение на стойностите за произволна произволна променлива, ако знаем нейното разпределение. Можете да начертаете графика на нейната вероятностна плътност и да прецените характерната ширина на око. Но ние предпочитаме да следваме алгебричния път. Можете да намерите средната дължина на отклонението (модула) от средната стойност:. Тази стойност ще бъде добра оценка за типичното разпространение на стойности. Но вие и аз знаем много добре, че използването на модули във формули е едно главоболие, така че тази формула рядко се използва за оценка на характерното разпространение.
По-лесен начин (прост по отношение на изчисленията) е да намерите. Тази стойност се нарича вариация и често се нарича. Коренът на дисперсията се нарича стандартно отклонение. Стандартното отклонение е добра оценка на разпространението на произволна променлива.
Например, за разпределение по Гаус, можем да изчислим, че дефинираната по -горе дисперсия е точно еднаква, което означава, че стандартното отклонение е равно, което е много добре в съответствие с нашата геометрична интуиция.
Всъщност тук се крие малка измама. Факт е, че в дефиницията на гаусовото разпределение под експонента е изразът. Тези две в знаменателя стоят точно така, че стандартното отклонение да е равно на коефициента. Тоест самата формула за разпределение на Гаус е написана във форма, специално изострена, така че ще разгледаме нейното стандартно отклонение.

Независими случайни променливи

Случайните променливи са зависими и не. Представете си, че хвърляте игла върху равнина и записвате координатите на двата края. Тези две координати са зависими, те са свързани с условието, че разстоянието между тях винаги е равно на дължината на иглата, въпреки че те са случайни стойности.
Случайните променливи са независими, ако резултатът от първата от тях е напълно независим от резултата от втората от тях. Ако случайните променливи са независими, тогава средната стойност на техния продукт е равна на произведението на техните средни стойности:

Доказателство

Например, да имаш сини очи и да завършиш гимназия със златен медал са независими случайни променливи. Ако има синеоки, да речем, златни медалисти, тогава синеоки медалисти. Този пример ни казва, че ако произволните променливи и са дадени от тяхната плътност на вероятностите и, тогава независимостта на тези стойности се изразява във факта, че плътността на вероятността (първата стойност е отпаднала, а втората) се намира по формулата:

От това веднага следва, че:

Както можете да видите, доказателството се извършва за случайни величини, които имат непрекъснат спектър от стойности и са дадени от тяхната вероятностна плътност. В други случаи идеята за доказване е подобна.

Филтър Kalman

Формулиране на проблема

Нека да обозначим със стойността, която ще измерваме, и след това да филтрираме. Това може да бъде координирано, скорост, ускорение, влажност, воня, температура, налягане и т.н.
Нека започнем с един прост пример, който ще ни накара да формулираме общ проблем. Представете си, че имаме радиоуправляем автомобил, който може да върви само напред-назад. Знаейки теглото на автомобила, формата, пътната настилка и т.н., ние изчислихме как управляващият джойстик влияе върху скоростта на движение.

Тогава координатата на автомобила ще се промени според закона:

В реалния живот не можем да вземем предвид в нашите изчисления малки смущения, действащи върху колата (вятър, неравности, камъчета по пътя), така че реалната скорост на колата ще се различава от изчислената. Случайна променлива ще бъде добавена към дясната страна на написаното уравнение:

Имаме GPS сензор, инсталиран на пишеща машина, който се опитва да измери истинската координата на автомобила и, разбира се, не може да го измери точно, но го измерва с грешка, която също е случайна променлива. В резултат на това получаваме грешни данни от сензора:

Задачата е, знаейки грешните показания на сензора, да намерите добро приближение за истинската координата на автомобила.
При формулирането на общия проблем всичко може да бъде отговорно за координатата (температура, влажност ...), а терминът, отговорен за управлението на системата отвън, ще бъде обозначен с (в примера с машина). Уравненията за координатните и сензорните показания ще изглеждат така:

Нека обсъдим подробно това, което знаем:

Заслужава да се отбележи, че задачата за филтриране не е задача за премахване на псевдоними. Ние не се опитваме да изгладим данните от сензора, ние се опитваме да получим най-близката стойност до реалната координата.

Алгоритъмът на Калман

Ще спорим чрез индукция. Представете си, че на тата стъпка вече сме намерили филтрираната стойност от сензора, която апроксимира добре истинската координата на системата. Не забравяйте, че знаем уравнението, което контролира промяната в неизвестната координата:

следователно, все още не получавайки стойността от сензора, можем да приемем, че на една стъпка системата се развива според този закон и сензорът ще покаже нещо близко до. За съжаление засега не можем да кажем нищо по-точно. От друга страна, на стъпка ще имаме неточно отчитане на сензора на ръцете си.
Идеята на Калман е следната. За да постигнем най -доброто приближение до истинската координата, трябва да изберем средата между отчитането на неточен сензор и нашето предвиждане за това, което очаквахме да видим от него. Ще дадем тежест на показанията на сензора и теглото ще остане на прогнозираната стойност:

Коефициентът се нарича коефициент на Калман. Това зависи от стъпката на итерация, така че би било по -правилно да го напишем, но засега, за да не претрупваме формулите за изчисление, ще пропуснем неговия индекс.
Трябва да изберем коефициента на Калман, така че получената оптимална координатна стойност да е най -близо до истинската. Например, ако знаем, че нашият сензор е много точен, тогава ще се доверим повече на неговото отчитане и ще придадем на стойността по-голяма тежест (близо до единица). Напротив, ако сензорът е напълно неточен, тогава ще се съсредоточим повече върху теоретично предвидената стойност.
Като цяло, за да намерите точната стойност на коефициента на Калман, просто трябва да минимизирате грешката:

Използваме уравнения (1) (тези в полето със син фон), за да пренапишем израза за грешката:

Доказателство

Сега е моментът да обсъдим какво означава изразът за минимизиране на грешката? В крайна сметка грешката, както виждаме, сама по себе си е случайна променлива и всеки път приема различни стойности. Всъщност няма един-към-един подход за определяне на това какво означава, че грешката е минимална. Точно както в случая с дисперсията на случайна величина, когато се опитахме да оценим характерната ширина на нейното разпространение, така и тук ще изберем най -простия критерий за изчисления. Ще сведем до минимум средната стойност на квадрат на грешка:

Нека запишем последния израз:

Доказателство

От факта, че всички случайни променливи, включени в израза за, са независими, следва, че всички "кръстосани" термини са равни на нула:

Използвахме факта, че тогава формулата на дисперсията изглежда много по-проста:.

Този израз приема минимална стойност, когато (приравняваме производната на нула):

Тук вече пишем израз за коефициента на Калман с индекс на стъпка, като по този начин подчертаваме, че зависи от стъпката на итерация.
Заместваме получената оптимална стойност в израза за, който сме минимизирали. Получаваме;

Нашата задача е изпълнена. Получихме итеративна формула за изчисляване на коефициента на Калман.
Нека обобщим нашите придобити знания в един кадър:

Пример

Matlab код

Изчисти всичко; N = 100% брой проби a = 0,1% ускорение sigmaPsi = 1 sigmaEta = 50; k = 1: N x = k x (1) = 0 z (1) = x (1) + normrnd (0, sigmaEta); за t = 1: (N-1) x (t + 1) = x (t) + a * t + normrnd (0, sigmaPsi); z (t + 1) = x (t + 1) + normrnd (0, sigmaEta); край; % kalman филтър xOpt (1) = z (1); eOpt (1) = sigmaEta; за t = 1: (N-1) eOpt (t + 1) = sqrt ((sigmaEta ^ 2) * (eOpt (t) ^ 2 + sigmaPsi ^ 2) / (sigmaEta ^ 2 + eOpt (t) ^ 2 + sigmaPsi ^ 2)) K (t + 1) = (eOpt (t + 1)) ^ 2 / sigmaEta ^ 2 xOpt (t + 1) = (xOpt (t) + a * t) * (1-K (t +1)) + K (t + 1) * z (t + 1) край; график (k, xOpt, k, z, k, x)

Анализ

Ако проследим как се променя коефициентът на Калман със стъпката на итерация, можем да покажем, че той винаги се стабилизира до определена стойност. Например, когато средноквадратичните грешки на сензора и модела са свързани помежду си като десет към едно, тогава графиката на коефициента на Калман в зависимост от стъпката на итерация изглежда така:

В следващия пример ще обсъдим как това може да направи живота ни много по -лесен.

Втори пример

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

Но, честно казано, такава система вече не отговаря на условията, които наложихме на случайната променлива, защото сега цялата непозната за нас физика на движение е скрита там и затова не можем да кажем, че в различни моменти от времето грешките на модела са независими един от друг и че средните им стойности са нула. В този случай като цяло теорията на филтъра на Калман не е приложима. Но няма да обръщаме внимание на този факт, а глупаво прилагаме всички колосални формули, избирайки коефициентите на око, така че филтрираните данни да изглеждат сладки.
Но можете да отидете по различен, много по -прост начин. Както видяхме по-горе, коефициентът на Калман винаги се стабилизира към стойност с нарастване. Следователно, вместо да избираме коефициентите и да намираме коефициента на Калман с помощта на сложни формули, можем да считаме този коефициент за винаги постоянен и да изберем само тази константа. Това предположение не разваля почти нищо. Първо, ние вече използваме незаконно теорията на Калман, и второ, коефициентът на Калман бързо се стабилизира до константа. В резултат всичко ще бъде много по-просто. Изобщо не се нуждаем от формули от теорията на Калман, просто трябва да намерим приемлива стойност и да я вмъкнем в итеративната формула:

Следващата графика показва две филтрирани различни начиниданни от измислен сензор. При условие, че не знаем нищо за физиката на явлението. Първият начин е честен, с всички формули от теорията на Калман. А вторият е опростен, без формули.

Както виждаме, методите са почти същите. Малка разлика се наблюдава само в началото, когато коефициентът на Калман все още не се е стабилизирал.

Дискусия

Както видяхме, основната идея на филтъра на Калман е да се намери коефициент, така че филтрираната стойност

средно би било най-малко различно от реалната стойност на координатата. Виждаме, че филтрираната стойност е линейна функция от показанията на сензора и предишната филтрирана стойност. И предишната филтрирана стойност от своя страна е линейна функция на показанията на сензора и предишната филтрирана стойност. И така, докато веригата се разгъне напълно. Тоест филтрираната стойност зависи от от всичкипредишни показания на сензора линейно:

Следователно филтърът на Калман се нарича линеен филтър.
Може да се докаже, че филтърът на Калман е най -добрият от всички линейни филтри. Най -доброто в смисъл, че средният квадрат на грешката на филтъра е минимален.

Многоизмерен случай

Цялата теория на филтъра на Калман може да бъде обобщена в многоизмерния случай. Формулите там изглеждат малко по-страшни, но самата идея за тяхното извличане е същата като в едномерния случай. Можете да ги видите в тази отлична статия: http://habrahabr.ru/post/140274/.
И в това прекрасно видеосе анализира пример за това как да се използват.

Филтърът Калман е може би най -популярният алгоритъм за филтриране, използван в много области на науката и технологиите. Поради своята простота и ефективност, той може да бъде намерен в GPS приемници, процесори на показанията на сензорите, при внедряване на системи за управление и др.

В интернет има много статии и книги за филтъра на Калман (предимно на английски), но тези статии имат доста голям праг за влизане, има много неясни места, въпреки че всъщност това е много ясен и прозрачен алгоритъм. Ще се опитам да ви разкажа за него прост език, с постепенно нарастване на сложността.

За какво е?

Всяко измервателно устройство има някаква грешка, може да бъде повлияно от голям брой външни и вътрешни влияния, което води до факта, че информацията от него е шумна. Колкото по -шумни са данните, толкова по -трудно е да се обработи такава информация.

Филтърът е алгоритъм за обработка на данни, който премахва шума и ненужната информация. Във филтъра на Калман е възможно да се зададе априорна информация за естеството на системата, връзката на променливите и въз основа на това да се изгради по -точна оценка, но дори и в най -простия случай (без да се въвежда априорна информация ) дава отлични резултати.

Обмисли най-простият пример- Да предположим, че трябва да контролираме нивото на горивото в резервоара. За да направите това, в резервоара е инсталиран капацитивен сензор, той е много лесен за поддръжка, но има някои недостатъци - например зависимост от зареденото гориво (диелектричната константа на горивото зависи от много фактори, например, върху температурата), голямо влияние на "неравностите" в резервоара. В резултат на това информацията от него представлява типичен "трион" с прилична амплитуда. Тези видове сензори често се инсталират на тежко минно оборудване (не се бъркайте от обема на резервоара):

Филтър Kalman

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

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

Нека първо разберем обозначението: индексът обозначава момента във времето: k - текущ, (k-1) - предишен, знакът минус в горния индекс означава, че е предсказаномеждинна стойност.

Описанията на променливите са представени на следните изображения:

Възможно е дълго и досадно да се описва какво означават всички тези мистериозни преходни матрици, но според мен е по -добре да се опитаме да приложим алгоритъма, използвайки реален пример - така че абстрактните стойности да придобият реално значение.

Нека опитаме в действие

Нека се върнем към примера със сензора за нивото на горивото, тъй като състоянието на системата е представено от една променлива (обема на горивото в резервоара), матриците се израждат в обичайните уравнения:
Определяне на модел на процес
За да приложите филтъра, е необходимо да определите матриците / стойностите на променливите, които определят динамиката на системата и размерите F, B и H:

F- променлива, описваща динамиката на системата, в случай на гориво - това може да бъде коефициент, който определя разхода на гориво на празен ход през времето за вземане на проби (времето между стъпките на алгоритъма). Въпреки това, в допълнение към разхода на гориво, има и зареждане с гориво ... следователно, за простота, ние ще вземем тази променлива равна на 1 (тоест, ние посочваме, че прогнозираната стойност ще бъде равна на предишното състояние).

Б- променливата, определяща прилагането на контролното действие. Ако имахме допълнителна информация за оборотите на двигателя или степента на натискане на педала на газта, тогава този параметър би определил как ще се промени разходът на гориво по време на времето за вземане на проби. Тъй като в нашия модел няма управляващи действия (няма информация за тях), приемаме B = 0.

З- матрица, която определя връзката между измерванията и състоянието на системата, за сега, без обяснение, ще вземем тази променлива също равна на 1.

Определяне на свойствата на изглаждане
R- грешката на измерването може да бъде определена чрез изпитване на измервателни уреди и определяне на грешката при тяхното измерване.

В- Определянето на шума от процеса е по -трудна задача, тъй като е необходимо да се определи вариацията на процеса, което не винаги е възможно. Във всеки случай можете да изберете този параметър, за да осигурите необходимото ниво на филтриране.

Внедряване в код
За да разсеем останалата неразбираемост, прилагаме опростен алгоритъм в C # (без матрици и контролни действия):

клас KalmanFilterSimple1D
{
public double X0 (get; private set;) // прогнозирано състояние
public double P0 (get; private set;) // прогнозирана ковариация

Публично двойно F (get; private set;) // коефициент на реална стойност към предишната реална стойност
public double Q (get; private set;) // измерване на шума
public double H (get; private set;) // фактор на измерената стойност към реалната стойност
public double R (get; private set;) // шум от околната среда

Публично двойно състояние (get; private set;)
публична двойна ковариация (получаване; частен набор;)

Обществен KalmanFilterSimple1D (двойно q, двойно r, двойно f = 1, двойно h = 1)
{
Q = q;
R = r;
F = f;
Н = h;
}

Public void SetState (двойно състояние, двойна ковариация)
{
Състояние = състояние;
Ковариация = ковариация;
}

Public void Правилно (двойни данни)
{
// актуализиране на времето - прогнозиране
X0 = F * Състояние;
P0 = F * Ковариация * F + Q;

// актуализация на измерването - корекция
var K = H * P0 / (H * P0 * H + R);
Състояние = X0 + K * (данни - H * X0);
Ковариация = (1 - K * H) * F;
}
}

// Приложение ...

Var fuelData = GetData ();
var filtered = нов List ();

Var kalman = нов KalmanFilterSimple1D (f: 1, h: 1, q: 2, r: 15); // задаваме F, H, Q и R
kalman.SetState (fuelData, 0.1); // Задаване на първоначалните стойности за състояние и ковариация
foreach (var d в fuelData)
{
kalman.Correct (d); // Прилагане на алгоритъма

Filtered.Add (kalman.State); // Запазване на текущото състояние
}

Резултатът от филтрирането с тези параметри е показан на фигурата (за да регулирате степента на изглаждане - можете да промените параметрите Q и R):

Най -интересното е оставено извън обхвата на статията - прилагане на филтъра на Калман за няколко променливи, задаване на връзката между тях и автоматично показване на стойности за ненаблюдаеми променливи. Ще се опитам да продължа темата щом има време.

Надявам се описанието да не е много досадно и сложно, ако имате въпроси или разяснения - добре дошли в коментарите)


Този филтър се използва в различни области - от радиотехниката до икономиката. Тук ще обсъдим основната идея, смисъл, същност този филтър... Той ще бъде представен на възможно най -простия език.
Да предположим, че имаме нужда да измерим някои количества на обект. В радиотехниката най -често се занимават с измервания на напрежения на изхода на определено устройство (сензор, антена и т.н.). В примера с електрокардиограф (виж) се занимаваме с измервания на биопотенциали върху човешкото тяло. В икономиката, например, измерената стойност може да бъде обменните курсове. Всеки ден обменният курс е различен, т.е. всеки ден "неговите измервания" ни дават различна стойност. И ако обобщим, тогава можем да кажем, че по-голямата част от дейността на човек (ако не цялата) се свежда именно до постоянни измервания-сравнения на определени величини (виж книгата).
Така че, да предположим, че постоянно измерваме нещо. Нека също така приемем, че нашите измервания винаги идват с някаква грешка - това е разбираемо, тъй като няма идеални измервателни уреди и всеки дава резултат с грешка. В най -простия случай описаното може да се сведе до следния израз: z = x + y, където x е истинската стойност, която искаме да измерим и която би била измерена, ако имаме идеално измервателно устройство, y е грешка при измерване, въведена от измервателния уред, и z - стойността, която измерихме. Така че задачата на филтъра на Калман е да отгатне (определи) по измереното z и каква е била истинската стойност на x, когато сме получили нашето z (в което "седят" истинската стойност и грешката на измерването). Необходимо е да се филтрира (отстрани) истинската стойност на x от z - да се премахне изкривяващият шум y от z. Тоест, като имаме само сумата в ръка, трябва да отгатнем кои условия са дали тази сума.
В светлината на горното, сега ще формулираме всичко по следния начин. Да предположим, че има само две произволни числа. Дадена ни е само тяхната сума и от нас се изисква да определим какви са условията. Например, ни беше дадено числото 12 и те казват: 12 е сумата от числата x и y, въпросът е на какво са равни x и y. За да отговорим на този въпрос, съставяме уравнението: x + y = 12. Получихме едно уравнение с две неизвестни, следователно, строго погледнато, не е възможно да се намерят две числа, които дават тази сума. Но все пак можем да кажем нещо за тези числа. Можем да кажем, че това са или числата 1 и 11, или 2 и 10, или 3 и 9, или 4 и 8 и т.н., също така е или 13 и -1, или 14 и -2, или 15 и - 3 и др. Тоест по сумата (в нашия пример 12) можем да определим множеството възможни вариантикоито се равняват на точно 12. Една от тези опции е двойката, която търсим, която всъщност даде 12. В момента също заслужава да се отбележи, че всички опции за двойки числа, които събират до 12, образуват права линия, показана на фиг. . 1, което се дава от уравнението x + y = 12 (y = -x + 12).

Фиг. 1

По този начин двойката, която търсим, лежи някъде по тази права линия. Повтарям, невъзможно е да се избере от всички тези опции двойката, която всъщност беше - която даде числото 12, без да има допълнителни улики. Но, в ситуацията, за която е изобретен филтърът на Калман, има такива намеци... Нещо се знае предварително за случайните числа. По-специално, там е известна така наречената хистограма на разпределение за всяка двойка числа. Обикновено се получава след доста дълго наблюдение на появата на тези много случайни числа. Това е, например, от опит е известно, че в 5% от случаите обикновено изпада двойка x = 1, y = 8 (ние обозначаваме тази двойка, както следва: (1,8)), в 2% от случаите a двойка x = 2, y = 3 ( 2,3), в 1% от случаите двойка (3.1), в 0,024% от случаите двойка (11.1) и т.н. Отново тази хистограма е зададена за всички двойкичисла, включително тези, които образуват общо 12. Така за всяка двойка, която дава общо 12, можем да кажем, че например двойка (1, 11) изпада в 0,8% от случаите, двойка ( 2, 10) - в 1% от случаите, двойка (3, 9) - в 1,5% от случаите и т.н. По този начин можем да използваме хистограмата, за да определим в какъв процент от случаите сумата от условията на двойка е 12. Да предположим, например, че в 30% от случаите сумата е 12. А в останалите 70% останалите двойки попадат out - това са (1,8), (2, 3), (3,1) и т.н. - тези, които дават числа, различни от 12. И нека например двойката (7,5) изпадне в 27% от случаите, докато всички останали двойки, които дават 12, изпадат в 0,024% + 0,8% + 1% + 1,5% + ... = 3% от случаите. И така, според хистограмата установихме, че числата, даващи общо 12, изпадат в 30% от случаите. В същото време знаем, че ако 12 паднат, то най-често (при 27% от 30%) причината за това е двойката (7,5). Тоест, ако вече 12 прехвърлени, можем да кажем, че в 90% (27% от 30% - или, което е същото 27 пъти на всеки 30), причината за 12 е чифт (7,5). Знаейки, че най -често причината за получаване на сумата равна на 12 е двойката (7.5), логично е да се предположи, че най -вероятно тя е изпаднала сега. Разбира се, все още не е факт, че всъщност сега числото 12 се формира от тази конкретна двойка, но следващия път, ако попаднем на 12, и отново приемем двойката (7,5), тогава някъде в 90% от случаите от 100% ще бъдем прави. Но ако приемем двойката (2, 10), тогава ще сме прави само 1% от 30% от времето, което е 3,33% верни предположения в сравнение с 90%, ако приемем двойката (7,5). Това е всичко - това е точката на алгоритъма на филтъра на Калман. Тоест филтърът на Калман не гарантира, че няма да направи грешка при определяне на сумата, но гарантира, че ще направи грешка минималния брой пъти (вероятността за грешка ще бъде минимална), тъй като използва статистика - хистограма на липсващите двойки числа. Трябва също да се подчертае, че така наречената плътност на разпределението на вероятностите (PDF) често се използва в алгоритъма за филтриране на Калман. Трябва обаче да разберете, че значението е същото като това на хистограмата. Освен това хистограмата е функция, изградена на базата на PDF и е нейно приближение (вижте например).
По принцип можем да представим тази хистограма като функция на две променливи - тоест като повърхност над xy равнината. Когато повърхността е по -висока, има по -голяма вероятност за съответната двойка. Фигура 2 показва такава повърхност.


фиг. 2

Както можете да видите по -горе правата линия x + y = 12 (което е опциите за двойки, даващи общо 12) повърхностните точки са разположени на различни височини и най -високата височина за опцията с координати (7,5). И когато срещнем сума, равна на 12, в 90% от случаите причината за появата на тази сума е точно двойката (7.5). Тези. именно тази двойка, даваща общо 12, има най -голяма вероятност за възникване, при условие че общата сума е 12.
По този начин идеята зад филтъра на Калман е описана тук. Именно върху него се изграждат всякакви негови модификации - едноетапни, многоетапни повтарящи се и т.н. За по-задълбочено изследване на филтъра на Калман препоръчвам книгата: Van Tries G. Theory of detection, estimation and modulation.

p.s.За тези, които се интересуват от обясняване на понятията математика, това, което се нарича „на пръсти“, можете да посъветвате тази книга и по -специално главите от нейния раздел „Математика“ (можете да закупите самата книга или отделни глави от то).

Филтър Kalman

Филтърът Калман се използва широко в инженерни и иконометрични приложения: от радари и системи за виждане до оценка на параметрите на макроикономическите модели. Филтрацията на Калман е важна част от теорията на управлението, играе голяма роля в създаването на системи за управление. Заедно с линейно-квадратичния контролер, филтърът на Калман позволява решаването на линейно-квадратичната задача на Гаус за управление. Филтърът Калман и линейно-квадратичен контролер са възможни решения на повечето фундаментални проблеми в теорията на управлението.

В повечето приложения броят на параметрите, определящи състоянието на даден обект, е по-голям от броя на наблюдаваните параметри, налични за измерване. С помощта на обектния модел за редица налични измервания, филтърът на Калман позволява да се получи оценка на вътрешното състояние.

Филтърът Калман е предназначен за рекурсивна преоценка на вектора на състоянието на априорно известна динамична система, тоест за изчисляване на текущото състояние на системата е необходимо да се знае текущото измерване, както и предишното състояние на филтъра себе си. По този начин филтърът на Калман, подобно на много други рекурсивни филтри, се реализира във времево, а не в честотно представяне.

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

Въведение

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

  • Гаусовост на априорни и апостериорни плътности на вероятността на вектора на състоянието във всеки момент от момента (включително първоначалния)
  • Гаусов шум при оформяне
  • Гаусовост на наблюдателния шум
  • белота на шума от наблюдение
  • линейност на модела на наблюдение
  • линейността на модела на процеса на формоване (който, припомнете, трябва да е Марков процес)

Класическият филтър на Калман е уравнение за изчисляване на първия и втория момент на задната плътност на вероятността (по смисъла на вектора на математическите очаквания и матрицата на вариациите, включително взаимните) при тези ограничения. С оглед на факта, че за нормална плътност на вероятността математическото очакване и матрицата на дисперсията напълно определят плътността на вероятността, можем да кажем, че филтърът на Калман изчислява постериорната плътност на вероятността на вектора на състоянието във всеки момент от времето. Това означава, че той напълно описва вектора на състоянието като произволна величина на вектора.

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

Има няколко разновидности на филтъра на Калман, които се различават по приближения и трикове, които трябва да се използват, за да се намали филтърът до описаната форма и да се намали размерът му:

  • Разширен филтър на Калман (EKF). Конвертиране на нелинейни модели на наблюдение и процес на оформяне с помощта на линеаризация с помощта на разширението на серията Тейлър.
  • Калман филтър без аромат (UKF). Използва се при проблеми, при които простата линеаризация води до разрушаване на полезни връзки между компонентите на вектора на състоянието. В този случай "линеаризацията" се основава на трансформация без аромат.
  • Ансамбъл Калман филтър (EnKF). Използва се за намаляване на размера на проблема.
  • Възможни са варианти с нелинеен допълнителен филтър, позволяващ да се приведат негаусовите наблюдения до нормални.
  • Възможни са варианти с "избелващ" филтър, който ви позволява да работите с "цветен" шум
  • и т.н.

Използва се динамичен модел на системата

Филтрите на Kalman се основават на линейни динамични системи с дискретизация във времето. Такива системи се моделират от вериги на Марков, използващи линейни оператори и нормално разпределени термини. Състоянието на системата се описва с вектор с крайна размерност - вектор на състоянието. На всяка времева стъпка линейният оператор действа върху вектора на състоянието и го преобразува в друг вектор на състоянието (детерминирана промяна на състоянието), добавя се определен нормален вектор на шум (случайни фактори) и в общия случай управляващ вектор, симулиращ действието на системата за управление. Филтърът на Калман може да се разглежда като аналог на скрити модели на Марков, с тази разлика, че променливите, описващи състоянието на системата, са елементи от безкрайно множество реални числа(за разлика от краен набор от пространство на състояния в скритите модели на Марков). В допълнение, скритите модели на Марков могат да използват произволни разпределения за последващи стойности на вектора на състоянието, за разлика от филтъра на Калман, който използва нормално разпределен модел на шум. Съществува силна връзка между уравненията на филтъра на Калман и скрития модел на Марков. Тези и други модели са разгледани от Roweis и Chahramani (1999).

Когато използвате филтъра на Калман за получаване на оценки на вектора на състоянието на процеса от серия от шумни измервания, е необходимо да се представи модел този процесв съответствие със структурата на филтъра - под формата на матрично уравнение от определен тип. За всеки ритъм кна операцията на филтъра, е необходимо да се определят матриците в съответствие с описанието по-долу: развитие на процеса F к; матрица за наблюдение З к; ковариационна матрица на процеса В к; ковариационна матрица за измерване на шума R к; при наличие на контролни действия - матрицата на техните коефициенти Б к .

Илюстрация как работи филтърът. Матриците са маркирани с квадратчета. Елипсите маркират матрици на многовариантни нормални разпределения (включително средни стойности и ковариация). Векторите не са очертани. В най-простия случай някои матрици не се променят с времето (не зависят от индекса к), но все още се използват от филтъра при всеки тактов цикъл.

Моделът система / процес приема, че истинското състояние в момента ксе получава от истинското състояние в момента к−1 според уравнението:

,
  • F к- матрица на еволюцията на процеса / системата, която влияе върху вектора х к−1 (векторът на състоянието в момента к−1 );
  • Б к- управляващата матрица, която се прилага към вектора на управляващите действия ти к ;
  • w к- нормален случаен процес с нулево математическо очакване и ковариационна матрица В к, който описва случайния характер на еволюцията на системата/процеса:

В момента кнаблюдение (измерване) z квектора на истинското състояние х к, които са свързани с уравнението:

където З к- измервателна матрица, свързваща вектора на истинското състояние и вектора на направените измервания, v к- бял гаусов шум от измервания с нулево математическо очакване и ковариационна матрица R к :

Началното състояние и векторите на случайни процеси при всеки тактов цикъл ( х 0 , w 1 , …, w к , v 1 , …, v к) се считат за независими.

Много реални динамични системи не могат да бъдат описани точно с този модел. На практика неотчетената в модела динамика може сериозно да развали работата на филтъра, особено при работа с неизвестен стохастичен сигнал на входа. Освен това неотчитаната в модела динамика може да направи филтъра нестабилен. От друга страна, независимият бял шум като сигнал няма да доведе до разминаване на алгоритъма. Проблемът с отделянето на измервателния шум от динамиката, която не се отчита в модела, е трудна; той се решава с помощта на теорията за здрави системи за управление.

Филтър Kalman

Филтърът на Калман е вид рекурсивен филтър. За да изчисли оценката на състоянието на системата за текущия цикъл на работа, той се нуждае от оценка на състоянието (под формата на оценка на състоянието на системата и оценка на грешката при определяне на това състояние) при предишен цикъл на работа и измервания при текущия цикъл. Това свойство го отличава от пакетните филтри, които изискват познаване на историята на измерванията и/или оценките в текущия такт. По -нататък под нотация разбираме оценката на истинския вектор в момента нкато се вземат предвид измерванията от момента на започване на работа и до момента мприобщаващ.

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

Итерациите на филтъра на Калман са разделени на две фази: екстраполация и корекция. По време на екстраполацията филтърът получава предварителна оценка на състоянието на системата (в литературата на руски език често се посочва, където означава „екстраполация“, ке номерът на цикъла, при който е получен интерпретация). Тази предварителна оценка се нарича още оценка на априорно състояние, тъй като наблюденията на съответната стъпка не се използват за нейното получаване. Във фазата на корекция априорната екстраполация се допълва със съответните измервания на тока, за да се коригира оценката. Коригираната оценка се нарича още оценка на постериорното състояние или просто оценка на вектора на състоянието. Обикновено тези две фази се редуват: екстраполацията се прави според резултатите от корекцията до следващото наблюдение, а корекцията се прави заедно с наличните наблюдения на следващата стъпка и т.н. се пропуска и се извършва екстраполация върху некоригираната оценка (априори екстраполация). По същия начин, ако независими измервания са налични само в определени времеви стъпки, корекциите все още са възможни (обикновено се използва различна матрица за наблюдение З к ).

Етап на екстраполация

Етап на корекция

Отклонение на получената стъпка кнаблюдения от очакваното наблюдение от извършената екстраполация:
Ковариационната матрица за вектора на отклонение (вектор на грешка):
Матрицата на оптималното усилване на Калман, формирана въз основа на ковариационните матрици на наличната екстраполация на вектора на състоянието и получените измервания (използвайки ковариационната матрица на вектора на отклонението):
Корекция на получената преди това екстраполация на вектора на състоянието - получаване на оценка на вектора на състоянието на системата:
Изчисляване на ковариационната матрица на оценката на вектора на състоянието на системата:

Изразът за ковариационната матрица на оценката на вектора на състоянието на системата е валиден само когато се използва намаленият оптимален вектор на коефициентите. Като цяло този израз има по -сложна форма.

Инвариантите

Ако моделът е абсолютно точен и началните условия и са посочени абсолютно точно, тогава следните стойности се запазват след произволен брой повторения на операцията на филтъра - те са инварианти:

Математически очаквания на оценките и екстраполации на вектора на състоянието на системата, матриците на грешките са нулеви вектори:

къде е математическото очакване.

Изчислените матрици на ковариация на екстраполации, оценки на състоянието на системата и вектора на грешките съвпадат с истинските матрици на ковариацията:

Пример за изграждане на филтър

Представете си количка, която стои на безкрайно дълги релси при липса на триене. Първоначално той почива в позиция 0, но под влиянието на случайни фактори върху него действа произволно ускорение. Ние измерваме положението на количката на всеки ∆ Tсекунди, но измерванията са неточни. Искаме да получим оценки за позицията на количката и нейната скорост. Нека приложим филтъра на Калман към този проблем и да дефинираме всички необходими матрици.

В този проблем матриците F , З , Rи Вне зависят от времето, пропускаме техните индекси. В допълнение, ние не контролираме мината, така че контролната матрица е Ботсъстващ.

Координатата и скоростта на количката се описват с вектор в линейното пространство на състоянията

където е скоростта (първата производна на координатата по отношение на времето).

Ще приемем, че между ( к−1) ти и к-ти отметки количката се движи с постоянно ускорение а кразпределени по нормалния закон с нулево математическо очакване и стандартно отклонение σ а... Според нютоновата механика можем да пишем

.

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

(σ ае скалар).

При всеки цикъл на работа се измерва позицията на количката. Да предположим, че грешката в измерването v kима нормално разпределение с нулеви математически очаквания и стандартно отклонение σ z... Тогава

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

.

Първоначалната позиция на количката е известна точно

, .

Ако позицията и скоростта на количката са известни приблизително, тогава дисперсионната матрица може да бъде инициализирана с достатъчно голям брой Lтака че броят да надвишава дисперсията на измерванията на координатата

, .

В този случай при първите цикли на часовника филтърът ще използва резултатите от измерванията с по -голямо тегло от наличната априорна информация.

Извеждане на формули

Ковариационна матрица за оценка на вектора на състоянието

По дефиницията на ковариационната матрица П к|к

замества израза за оценка на вектора на състоянието

и запишете израза за вектора на грешките

и измервателни вектори

извадете вектора на грешката в измерването v к

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

в съответствие със свойствата на ковариацията на векторите, този израз се преобразува във формата

замествайки израза за ковариационната матрица на екстраполация на вектора на състоянието с П к|к−1 и определяне на ковариационната матрица на наблюдателния шум на R к, получаваме

Полученият израз е валиден за произволна матрица от коефициенти, но ако матрицата на коефициентите, оптимална според Калман, действа като нея, тогава този израз за ковариационната матрица може да бъде опростен.

Оптимална матрица на усилване

Филтърът на Калман минимизира сумата от квадратите на очакваните грешки на оценката на вектора на състоянието.

Вектор за грешка при оценката на вектора на състоянието

Задачата е да се сведе до минимум сумата от математическите очаквания на квадратите на компонентите на този вектор

,

което е еквивалентно на минимизиране на следата от ковариационната матрица на оценката на вектора на състоянието П к|к... Заменете съществуващите изрази в израза за ковариационната матрица на оценката на вектора на състоянието и допълнете до пълен квадрат:

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

Твърди се, че тази матрица е желаната и, когато се използва като матрица от коефициенти във филтъра на Калман, минимизира сумата от средните квадрати на грешките при оценката на вектора на състоянието.

Ковариационна матрица за оценка на вектора на състоянието с помощта на матрицата на оптималния коефициент

Израз за ковариационната матрица на оценката на вектора на състоянието П к|кпри използване на оптималната матрица от коефициенти ще приеме формата:

Тази формула е изчислително по-проста и затова почти винаги се използва на практика, но е правилна само при използване на оптималната матрица на коефициентите. Ако поради ниска изчислителна точност възникне проблем с изчислителната стабилност или е специално използвана матрица от коефициенти, различни от оптималните, трябва да се използва общата формула за ковариационната матрица на оценката на вектора на състоянието.



Свързани статии: