Kalmani filter

Kalmani filter on Rudolf Emil Kalmani loodud algoritm, mida kasutatakse kosmonautikas, merenavigatsioonis, tuumaelektrijaamades, demograafilises modelleerimises ja mujal.
Inseneriteadustes on palju valdkondi, kus filtreerimine on eluliselt tähtis. Raadiosignaalid on tihti suure müratasemega (mingid segavad lained). Väga hea filtreerimise algoritm saab elimineerida selle müra, et saada kätte olulist ja vajalikku informatsiooni. Ka elektrienergia juures on tegemist filtreerimise protseduuriga. Paljudes maades nõutakse koduses majapidamises kasutatava elektrienergia voltide filtreerimist, et tagada kodus kasutatavate seadmete pikaealisus (näiteks arvutid, telerid, video- ja DVD-mängijad, jne).
Rudolf Emil Kalman arendas filtri välja aastatel 1960–1961, selle juured ulatuvad Gaussi teooriateni 1795. aastast.
Sissejuhatus.
Kalmani filter on lineaarne, ennustav ja korduv algoritm. Ta on võimeline optimaalselt ennustama reaal-ajas süsteemi seisundit. Kui eksisteerivad mittelineaarsused, siis tuleb mudel eelnevalt lineariseerida.
Korduvus Kalmani filtris tähendab seda, et see ei nõua eelnevate andmete salvestamist ja ümber arvutamist niipea, kui uus mõõtmine on tehtud. Kalmani filtri töös kasutatakse (Maybeck, 1979): (1) teadmisi süsteemi ja mõõtmiste dünaamikast; (2) statistilist iseloomustust süsteemi müra, mõõtmiste vigade ning dünaamilistes mudelites oleva ebakindluse kohta; (3) informatsiooni algsete tingimuste kohta.
Kalmani filter töötab tingimustes, kus süsteemi oleks võimalik kirjeldada lineaarse mudeli abil ning süsteemi ja mõõtmiste müra on iseloomustatav valge gaussi mürana. Valge müra tähendab, et müra väärtus ei ole ajaga korrelatsioonis ning tal on võrdne tugevus kõikidel sagedustel. Gaussi müra on seotud müra amplituudiga. Eeldatakse, et igal ajahetkel Gaussi müra amplituudi tõenäosusjaotus moodustab kella-kujulise kõvera iga üksiku punkti jaoks.
Matemaatiline alus.
Kalmani filter lihtsalt seletatuna on rakenduslik matemaatika. See on lineaarne süsteem, millele vastav funktsioon on: formula_1. Kalmani filtrisse sisestatakse mürased andmed, filtrist väljuvad loodetavalt vähem mürased andmed. Kuid viivitus on hind selle filtreerimise juures. Puhas Kalmani filter ei kohanda andmeid.
Kalmani filter on formuleeritud järgnevalt: Oletame, et protsessi müra formula_2 on valge gaussi müra koodispersiooni maatriksiga formula_3. Edasi oletame et mõõtmiste müra on valge gaussi müra koodispersiooni maatriksiga formula_4 ja see ei ole korreleerunud protsessi müraga. Me tahaksime formuleerida määramise algoritmi, mille puhul järgmised statistilised tingimused oleks täidetud (Simon, 2004):
Kalmani filter.
Kalmani filtri iseloomustamiseks on erinevad autorid kasutanud mitmeid erinevaid tähistusi, siin on kasutatud Welch ja Bishop poolt pakutud valemeid ja Kalmani filtri tuletuskäiku.
Kalmani filter opereerib põhimõttel: (1) ennustab uue seisundi ja tema ebakindluse ja (2) korrigeerib seda uue mõõtmisega.
Kalmani filter kasutab protsessi määramiseks tagasiside kontrolli mehhanismi: filter määrab protsessi seisundi mingil ajahetkel ning siis saab tagasiside (mürastest) mõõtmistest. Kalmani filtri valem koosneb kahest grupist: aja uuenduse valemid ja mõõtmiste uuenduse valemid. Aja uuenduse valemid vastutavad praeguse seisundi projekteerimisest tulevikku (ajas) ja vea koodispersioon määrab aprioorse määrangu järgnevaks aja sammuks. Nende kohta võiks ka öelda, et nad on ennustavad valemid. Mõõtmise uuenduse valemid vastutavad tagasiside eest – kasutavad uut mõõtmist apriori määrangus, et saada täpsustatud aposterioorne määrang. Mõõtmiste uuendamise valemeid võib nimetada ka korrigeerivateks valemiteks.
Kalmani filtri aja uuenduse ja mõõtmise uuenduse valemid on antud järgnevalt:
 aja uuendus:
 formula_5 (1)
 formula_6 (2)
 mõõtmiste uuendus:
 formula_7 (3)
 formula_8 (4)
 formula_9 (5)
 Valemites on kasutatud järgmisi tähistusi:
 formula_10 - Protsessi dünaamika maatriks
 formula_11 - Protsessi mõõtmistulemuste vektor
 formula_12 - Vea koodispersioon
 formula_3 - Protsessi müra koodispersioon
 formula_4 - Mõõtmise müra koodispersioon
 formula_15 - Kalmani juurdekasv
Esimene samm mõõtmiste uuenduses on Kalmani juurdekasvu formula_15 arvutamine. Järgmine samm on tegelikult mõõta protsessi, et leida formula_17, seejärel tekitada aposterioorne määrang, mis sisaldab mõõtmist (4). Viimane samm on määrata aposterioorselt vea koodispersioon valemiga (5).
Peale igat aja ja mõõtmise uuenduse paari protsessid korratakse viimase aposterioorse määrangutega, mida kasutatakse uue aprioorse määrangu ennustamiseks. See korduv loomus võimaldab muuta praktilised lahendused teostatavaks paremini, kui teised sarnased meetodid.
Tegelik filtri teostus, mõõtmise müra koodispersioon formula_4 on tavaliselt eelnevalt mõõdetud. Protsessi müra koodispersiooni formula_3 määramine on raskem, kuna ei ole võimalik otse mõõta protsessi, mida me määrame. Kuid võib kasutada teist Kalmani filtrit nende parameetrite (formula_4 ja formula_3) määramiseks. Seda tehakse tavaliselt sõltumatult (nn off-line) ja sellele viidatakse kui süsteemi identifitseerimisele.
Kuid oletagem, et me liigume. Siis kõik müra ei ole mõõtmiste viga, osa sellest on ka liikumine. Kalmani filter võimaldab kaasata liikumiste mudeli, määramaks kiirust ja asukohta. 
Protsessi mudel kirjeldab seisundi muutust ajas järgmiselt:
Kalmani filtri parameetrite optimeerimine toimub järgmise algoritmi kohaselt (http://www.cs.unc.edu/~welch/kalman/):
Joonis 1. Kalmani filtri parameetrite optimeerimise protsess.
Laiendatud Kalmani filter.
Kalmani filter eeldab lineaarsust, kus on lubatud ainult tehted maatriksitega. Mõõtmine on seisukorra lineaarne funktsioon, kusjuures järgmine seisund on eelmise lineaarne funktsioon. Lineaarne Kalmani filter ei ole võimeline määrama juurdekasvu, ta ei suuda käsitleda pöördeid ega projektsiooni. Et sellest üle saada, kasutatakse Laiendatud Kalmani filtrit.
Laiendatud Kalmani filtri kasutamine aitab vähendada lähendamise vigu, mitte-lineaarne süsteem lineariseeritakse rakendades selleks parimat seisundi vektori määrangut, mida kasutatakse igas lineariseerimise sammus.
Olgu protsess on juhitud mitte-lineaarsete võrrandite poolt:
 formula_24 (6)
mõõtmisega
 formula_25, (7)
kus juhuslikud muutujad formula_2 ja formula_27 iseloomustavad protsessi ja mõõtmiste müra. Funktsioon formula_28 seob seisundi eelmisest ajaetapist formula_29 praegusse ajaetappi formula_30, mis sisaldab parameetreid ükskõik millise liikuva funktsiooni formula_31 ja keskmise müra formula_2 jaoks. Mittelineaarne funktsioon formula_33 mõõtmiste võrrandis seob seisundi formula_34 mõõtmistega formula_17.
Praktikas võiks määrata ligikaudselt seisundi ja mõõtmise vektori, teadmata konkreetseid väärtusi müra formula_2 ja formula_27 jaoks:
 formula_38 (8)
 ja
 formula_39, (9)
kus formula_40 on aposterioorse seisundi määrang (eelmisest ajaetapist formula_30).
Protsessi mittelineaarse erinevuse ja mõõtmise suhte määramiseks võiks alustada võrranditest, mis lineariseerivad valemid (8) ja (9):
 formula_42 (10)
 ja
 formula_43, (11)
kus
 formula_34 ja formula_17 on tegelikud seisundi ja mõõtmiste vektorid; 
 formula_46 ja formula_47 on ligikaudsed seisundi ja mõõtmise vektorid valemitest (8) ja (9);
 formula_40 on aposterioorne määrang viimasel aja etapil formula_30;
 Juhuslikud muutujad formula_2 ja formula_27 tähistavad protsessi ja mõõtmiste müra;
 formula_10 on Jakobi maatriks osatuletistest funktsioonist formula_53 suhtes:
 formula_54; (12)
 formula_55 on Jakobi maatriks osatuletistest funktsioonist formula_56 suhtes:
 formula_57; (13)
 formula_58 on Jakobi maatriks osatuletistest funktsioonist formula_59 suhtes:
 formula_60; (14)
 formula_61 on Jakobi maatriks osatuletistest funktsioonist formula_62 suhtes:
 formula_63. (15)
Ennustatava vea jaoks võib kirjutada:
 formula_64, (16)
mõõtmiste hälve:
 formula_65. (17)
Kasutades (31) ja (32) võib kirjutada valemid vea protsessi jaoks järgnevalt:
 formula_66 (18)
 ja
 formula_67, (19)
kus formula_68 ja formula_69 tähistavad juhuslikke muutujad, mille keskmine on null ja koodispersiooni maatriksid on vastavalt formula_70 ja formula_71, kus formula_3 ja formula_4 on eelnevalt defineeritud.
Nüüd saab kasutada tegelikku mõõtmise hälvet formula_74 valemis (17) ja teist (oletuslikku) Kalmani filtrit et määrata ennustamise viga formula_75. Seda määrangut formula_76 võiks kasutada selleks, et saada aposterioorset seisundi määrangut originaalsest mitte-lineaarsest protsessist:
 formula_77. (20)
Juhuslikud muutujad valemites (18) ja (19) omavad ligikaudselt järgnevat tõenäosusjaotust:
 formula_78, (21)
 formula_79, (22)
 formula_80. (23)
Arvestades niisuguste lähendustega ja lubades ennustatava väärtuse nulliks, kasutatakse Kalmani filtri valemit formula_76 määramiseks:
 formula_82. (24)
Asendades (24) tagasi valemisse (20) ja kasutades valemit (17) võib näha, et tegelikult me ei vajagi teist (oletuslikku) Kalmani filtrit:
 formula_83. (25)
Valemit (40) võib seejärel kasutada mõõtmiste uuendamiseks Laiendatud Kalmani filtris, kus ja tulevad valemitest (8) ja (9), ja Kalmani juurdekasv saadakse valemist (3) koos sobiva asendusega mõõtmiste vea koovariansile.
Täielik Laiendatud Kalmani filtri valemite komplekt on järgmine:
 aja uuenduse valemid
 formula_84 (26)
 formula_85 (27)
 mõõtmiste uuenduse valemid
 formula_86 (28)
 formula_87, (29)
 formula_88. (30)
Alaindeks formula_30 on seotud Jakobi maatriksitega formula_10, formula_55 ja formula_61 et tugevdada märget, et nad on erinevad igal aja etapil (ning seepärast alati uuesti arvutatud).
Aja uuenduse valemid projekteerivad seisundi ja koodispersiooni määrangud eelmisest aja etapist formula_29 järgmisse etappi formula_30. Funktsioon formula_28 valemis (26) tuleb valemist (8), formula_96 ja formula_97 on protsessi Jakobi maatriksid ajahetkel formula_30, ja formula_99 on protsessi müra koodispersioon ajahetkel formula_30.
Mõõtmiste uuenduse valemid korrigeerivad seisundi ja koodispersiooni määranguid mõõtmisega formula_17. Funktsioon formula_33 valemis (29) tuleb valemist (9), formula_103 ja formula_104 on mõõtmiste Jakobi maatriksid aja etapil formula_30, ja formula_106 on mõõtmiste müra koodispersioon aja etapil formula_30. formula_4 alaindeks lubab selle muutumist koos iga uue mõõtmisega.
Laiendatud Kalmani filtri oluline omadus on see, et Jakobi maatriks formula_103 Kalmani juurdekasvu valemis formula_15 võimaldab korrektselt levida ainult asjakohasel mõõtmiste informatsiooni komponendil.
Rakendused.
GPS (Global Position System) / INS (Inertial Navigation System) integreerimine.
Niisugusel juhul annab Kalmani filter täiendatud üldise navigatsiooni tulemuse. Tuleb meeles piadada, et INS toetab virtuaalselt müratut väljundit, mis aeglaselt sumbub ajas. GPS omab minimaalset triivi, aga müra on INS mürast suurem. Kalmani filter kasutab statistilisi mudeleid mõlemast süsteemist, minimeerides optimaalselt nende vigade allikaid. See ongi Kalmani filtri kasutamise eeliseks GPS ja INS kombineerimisel.
GPS vead võivad olla vastuvõtja kell, ionosfääri ja troposfääri viivitus, mitmeteelisus ja satelliitide efemeriidid ning kella vead. Inertsiaalsed ebatäpsused võivad sisaldada asukoha, kiiruse, orientatsiooni, güroskoobi, kiirendusmõõturi ja raskuskiirenduse vigu.
GPS-navigatsioon.
Kalmani filter asub vastuvõtjas, oletuslikud vastuvõtja liikumise valemid asendavad inertsiaalset süsteemi. Liikumise võrrandid (tavaliselt pime-navigatsioon liikuva vastuvõtja jaoks) laiendavad valemit nii, et vastuvõtja trajektoor määrab vigade mudeli, mida on vaja Kalmani filtri jaoks. Siin on Kalmani filtri eeliseks (versus üksiku, fikseeritud vähimruutude lahendus) see, et need liikumise valemid siluvad GPS müra, saavutades nii vajaliku tulemuse.
Näited.
NÄIDE 1..
Olgu meil teostatud mõõtmine, mida iseloomustavad mõõtmine formula_111 ja selle dispersioon formula_112, ning mida võib iseloomustada normaaljaotusfunktsiooniga formula_113, ning mille kohta võib märkida, et formula_114 ja formula_115. Kui me teostame sama mõõtmise teist korda, siis seda mõõtmist iseloomistavad mõõtmine formula_116 ja selle dispersioon formula_117. Küsimus on, kuidas määrata formula_118 ja formula_119 vastavalt meile teadaolevatele andmetele.
Kombineerides hinnanguid, saame
 formula_120
 formula_121
Kombineerides dispersioone, saame
 formula_122
Kombineeritud määrang on formula_123 ja formula_124, mis on reaalajas saadud kaalutud keskmine!
NÄIDE 2..
Küsimus, mida Kalmani filter lahendab on järgmine: Me teame, kuidas süsteem käitub vastavalt süsteemi võrrandile, ja meil on teada asukoha mõõtmised, siis kuidas on võimalik kõige paremini määrata süsteemi muutujaid?
Dünaamilistes süsteemides (süsteemid, mis muutuvad ajas) on muutujad väljendatud terminiga "state variables" ehk seisundi muutujad. Oletame et süsteemi muutujad, mis on väljendatud vektoriga formula_125, on seotud valemiga
 formula_126
kus formula_2 on juhuslik protsessi müra, allindeksid vektorite juures tähistavad ajasamme. Näiteks vektor formula_125 võiks koosneda asukohast formula_129 ja kiirusest formula_130. Niisugusel juhul oleks süsteemi võrrand järgmine (Simon, 2004):
 formula_131,
kus formula_132 on juhuslik, ajast sõltuv pöörlemine ja formula_133 on ajasamm formula_30 ja formula_135 vahel. Nüüd oletame, et meil on võimalik mõõta asukoht formula_129. Siis meie mõõtmine ajahetkel formula_30 võib olla väljendatud formula_138, kus formula_27 on juhuslik mõõtmise müra.
NÄIDE 3. 2D asukoha määramine.
Protsessi mudel:
 formula_140,
mille võib ümber kirjutada järgmiselt:
 formula_141,
 kus 
 formula_46 on seisukord ajaepohhil formula_143; 
 formula_10 on seisundi üleminek; 
 formula_145 on seisund ajaepohhil formula_29 ja 
 formula_147 on müra.
Mõõtmiste mudel:
 formula_148,
mille võib ümber kirjutada
 formula_149,
 kus 
 formula_47 on mõõtmine; 
 formula_58 on mõõtmise maatriks; 
 formula_46 on seisund ja 
 formula_153 on müra.
Ettevalmistus filtreerimiseks:
Initialiseerimine:
 formula_157
 formula_158
Ennustus:
 formula_159
 formula_6
Korrigeerimine
 formula_161
 formula_162
Kus formula_47 on tegelik mõõtmine ja formula_164 on ennustatav mõõtmine.
Kalmani juurdekasv arvutatakse
 formula_165,
kus formula_166 on "denominaator" (ehk mõõtmiste ruum)
Kokkuvõte: joonisel 2 on näidatud Kalmani filtri tööprotsess (http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf):
Joonis 2. Kalmani filtri tööprotsess.