Antti Somppi Paloittain päivittävä Kalmanin suodatin Kandidaatintyö I TIIVISTELMÄ TAMPEREEN TEKNILLINEN YLIOPISTO Teknis-luonnontieteellinen koulutusohjelma TEKIJÄN NIMI: Antti Somppi Kandidaatintyö 15 sivua, 3 liitesivua Maaliskuu 2015 Pääaine: Matematiikka Tarkastaja: Simo Ali-Löytty Avainsanat: Kalmanin suodatin, epälineaarinen estimointi, Paloittain päivittävä Kalmanin suodatin Kalmanin suodatin on algoritmi, joka laskee mittausten ja niitä kuvaavan mallin avulla arvion näitä vastaavista todellisista arvoista. Tavoitteena on, että yhdistämällä mittaukset ja malli saadaan tarkennettua arviota todellisista arvoista sellaisessa tilanteessa, jossa mittauksiin ja mallin antamiin tuloksiin tiedetään sisältyvän virheitä. Alkuperäinen Kalmanin suodatin on tehty laskemaan approksimaation tilanteessa, jossa niin malli kuin mittauksetkin ovat lineaarisia. Epälineaarisia tapauksia varten on kehitetty alkuperäisen algoritmin pohjalta laajennoksia, joilla pyritään lisäämään algoritmin käyttömahdollisuuksia. Tässä työssä tutustutetaan lukija erääseen tällaiseen laajennokseen, ja esitetään sen lisäksi uusi tehokkaampi tapa ratkaista epälineaarisia estimointiongelmia. Työ pohjautuu Renato Zanettin vuonna 2012 tekemään julkaisuun RUF-algoritmista “Recursive Update Filtering for Nonlinear Estimation”, ja siinä osoitetaan uuden algoritmin etuja suhteessa vanhempaan algoritmiin käyttäen numeerista esimerkkiä, sekä sitä havainnollistavia kuvia. Työssä todetaan RUF-algoritmin edut laskennallisen vaativuuden sekä tulosten tarkkuuden suhteen verrattuna muihin epälineaarisia estimointiongelmia ratkaiseviin algoritmehin. II SISÄLLYS 1. Johdanto . . . . . . . . . . . . . . . . 2. Teoria . . . . . . . . . . . . . . . . . . 2.1 Ongelman asettelu . . . . . . . . 2.2 Laajennettu Kalmanin suodatin . 2.2.1 Algoritmin esittely . . . . . . 2.2.2 Esimerkki . . . . . . . . . . . 2.3 RUF Kalman -algoritmi . . . . . 2.3.1 Algoritmin esittely . . . . . . 2.3.2 Algoritmin johtaminen . . . . 2.3.3 Esimerkki . . . . . . . . . . . 3. Yhteenveto . . . . . . . . . . . . . . . Lähteet . . . . . . . . . . . . . . . . . . . A. Liite: EKF-esimerkin MATLAB-koodi B. Liite: RUF-esimerkin MATLAB-koodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 3 5 5 6 8 8 8 12 13 15 16 17 III TERMIT JA LYHENTEET MÄÄRITELMINEEN f Tilafunktio h Mittausfunktio ti Ajanhetki askeleella i xi Tilamuuttujan tila ajanhetkellä ti x− i Tilamuuttujan tilan prioriestimaatti x+ i Tilamuuttujan tilan posterioriestimaatti yi Mittaus ajanhetkellä ti ŷi Mittauksen ennustettu arvo wi Tilamallin virhetermi vi Mittausmallin virhetermi Qi Mallifunktion kovarianssimatriisi Ri Mittafunktion kovarianssimatriisi Ki Algoritmin Kalmanin vahvistus Φi Mallifunktion derivaatan arvo ajanhetkellä ti x:n arvolla x̂− i Hk Mittafunktion derivaatan arvo ajanhetkellä ti x:n arvolla x̂− i Pi x:n (eli tilamuuttujan) keskineliövirhematriisi Pi− Prioriestimaattorin keskineliövirhematriisi Pi+ Posteriestimaattorin keskineliövirhematriisi Ck Ristikovarianssi tilan xk ja mittauskohinan välillä e1k RUF-algoritmin ensimmäisen päivityspalan posteriorivirhe e− k RUF-algoritmin päivityksen prioriestimointivirhe MVUE Harhaton minimivarianssiestimaattori (Minimum Variance Unbiased Estimate) EKF Laajennettu Kalmanin suodatin (Extended Kalman Filter) IV RUF Paloittain päivittävä Kalmanin suodatin (Recursive Update Filter) BLU Paras harhaton lineaarinen (estimaattori) (Best Linear Unbiased) EKF2 Toisen Asteen Laajennettu Kalmanin suodatin (Second order EKF) UKF Hajuton Kalmanin suodatin (Unscented Kalman Filter) UT Hajuton muunnos (Unscented Transformation) IKF Iteroitu Kalmanin suodatin (iterated Kalman filter) Huom. Alaindeksi i viittaa tilamallin askeleeseen diskreetissä mallissa. 1 1. JOHDANTO Alkuperäinen Kalmanin suodatin -algoritmi julkaistiin vuonna 1960 [1]. Se on tullut erittäin tunnetuksi ja antaa optimaalisen ratkaisun estimoitaessa lineaarisia ongemia. Globaali optimaalisuus saavutetaan kun käsitellään lineaarista mallia ja lineaarisia mittauksia, joiden virheet ja alkuperäinen estimointivirhe ovat normaalisti jakautuneita. Mikäli virheet eivät ole normaalisti jakautuneita, klassinen Kalmanin suodatin ei ole globaalisti optimaalinen, mutta silti lineaarinen harhaton minimivarianssi estimaattori (MVUE). [2] Kalmanin suodatinta voidaan soveltaa eri tavoilla sen mukaan, miten sitä tulkitaan. Bayesilaisella tulkinnalla haetaan jakaumia, parhaan harhattoman lineaarisen estimaatin tulkinnalla minimoidaan posterioriestimaatin ja todellisen tilan neliöllistä keskivirhettä, ja deterministinen tulkinta jättää pois oletukset virheiden jakaumista ja tulkitsee ongelmaa täysin deterministisenä prosessina, jossa haetaan ratkaisua deterministiselle pienimmän neliösumman ongelmalle. [3] Epälineaarisille estimointiongelmille on kehitetty monia laajennoksia Kalmanin suodattimeen perustuen. Monet niistä perustuvat parhaan harhattoman lineaarisen estimaatin laskemiseen. Näistä yksi yleisimpiä on laajennettu Kalmanin suodatin (Extended Kalman filter, EKF). Laajennettu Kalmanin suodatin pyrkii linearisoimaan mittausten ja mallin epälineaarisuuksia. Algoritmissa oletetaan virheet pieniksi ja epälineaarisuuksia approksimoidaan niiden ensimmäisellä kertaluvulla, eli approksimoimalla mittaus- ja tilamallia niiden Taylorin sarjojen kahdella ensimmäisellä termillä. Tämä toimii, mikäli epälineaarisuudet eivät ole kovin suuria. EKF:stä on olemassa myös erilaisia variaatioita, kuten toisen asteen laajennettu Kalmanin suodatin (Second Order Extended Kalman filter, EKF2). Tämä eroaa tavallisesta EKF-suodattimesta vain siltä osin, että approksimaatioissa käytetään mallien Taylorin sarjojen toisen asteen termejä. Niin EKF:n kuin EKF2:nkin yksi puute on, että niissä mittausfunktion arvon arvio lasketaan prioritilamuuttujan arvolla, ja mikäli tämä arvio on väärin, ajautuu algoritmi heti alussa vääriin arvoihin. Toinen ongelma on, että kun Kalmanin vahvistukselle lasketaan arvo, sen oletetaan olevan sama koko päivitysaskeleella, vaikka todellisuudessa se saattaa vaihdella. [3; 8] Tässä työssä esiteltävää uutta paloittain päivittävää Kalmanin suodatinta verrataan laajennettuun Kalmanin suodattimeen. Tavallinen ja toisen asteen laajennettu Kalmanin suodatin, kuten myös tässä työs- 1. Johdanto 2 sä esiteltävä paloittain päivittävä suodatin vaativat laskuissa derivaattojen laskemista analyyttisesti sekä numeerisesti. On olemassa myös Kalmanin suodattimen laajennoksia, jotka eivät tätä vaadi. Esimerkiksi hajuton Kalmanin suodatin (Unscended Kalman Filter, UKF) on tällainen. Se laskee numeerisesti integroimalla estimaattien arvot. UKF käyttää muunnosta, jota kutsutaan hajuttomaksi muunnokseksi (Unscented Transformation, UT), jossa tilamuuttujan jakaumaa arvioidaan tekemällä mittausfunktion arvon odotusarvosta muunnos niin sanottujen sigmapisteiden avulla lasketuksi integraaliksi. Tämä arvio on tarkka mikäli mittausfunktio on kolmannen asteen polynomi. Sigmapisteet lasketaan normaalijakaumasta, jonka odotusarvona on tilamuuttujan prioriestimaatti ja kovarianssina tilamuuttujan priorikovarianssi. Niiden määrittämiseen voidaan käyttää erilaisia menetelmiä tilanteesta riippuen. Hajuton suodatin välttää EKF:n ja EKF2:n ongelman väärästä Kalmanin vahvistuksesta valitsemalla sigmapisteet ympäri jakaumaa ja laskemalla vahvistuksen niistä. UKF:n algoritmi on muutoin sama kuin EKF:n, mutta posterioritilan ja posteriorikovarianssin laskemisessa derivaatat korvataan hajuttomalla muunnoksella lasketulla mittauksen odotusarvolla. Laskennalliselta vaativuudelta UKF on samaa luokkaa EKF:n kanssa. Mahdollisia ongelmia UKF:ssä voi aiheuttaa se, että kovariansseiksi on mahdollista laskea negatiivisia arvoja, mutta tämä on vältettävissä oikeanlaisella sigmapisteiden valinnalla.[4; 3; 5] Edellä mainittujen lisäksi lisäksi on olemassa lukuisia muita algoritmeja, joilla voidaan ratkoa epälineaarisia ongelmia. Näilläkin on omat heikkoutensa, esimerkiksi laskennallinen raskaus, joka on haittana mm. tehtäessä reaaliaikaista laskentaa. Tässä työssä on tarkoituksena esitellä epälineaaristen estimointiongelmien ratkaisemiseen uusi menetelmä, jolla vältetään EKF:n ja muiden algoritmien heikkouksia. Uuden algoritmin laskennallinen vaativuus on verrannollinen (N-1) kappaleeseen EKF:n päivitysaskeleita. Algoritmi jakaa yhden päivitysaskeleen N kappaleeseen paloja, ja mitä useampia näitä on, sitä vähemmän algoritmi luottaa linearisointiin. [8] Työssä esitellään EKF-algoritmi ja kyseinen uusi algoritmi, sekä verrataan niiden toimivuutta esimerkkitapauksessa. Tämä työ on mukailee lyhennettynä Renato Zanettin vuonna 2012 tekemää julkaisua “Recursive Update Filtering for Nonlinear Estimation”. 3 2. TEORIA 2.1 Ongelman asettelu Tarkoituksena tässä työssä on esitellä uudenlainen sovellustapa Kalmanin suodattimelle epälineaarissa tapauksissa. Työssä perehdytään suodattimeen, jota kutsutaan vapaasti suomennettuna paloittain päivittäväksi Kalmanin suodattimeksi (Recursive Update Filter, RUF). Tarkoituksena on esitellä ja johtaa suodattimen algoritmi, jossa epälineaarinen signaali approksimoidaan linearisoimalla päivitysaskel paloittain. Suodattimen perusajatus on tehdä lineaarinen estimaatti epälineaariselle mallille samankaltaisesti kuin laajennetulla Kalmanin suodattimella [6], mutta jakaa approksimaatiossa algoritmin päivitysaskel useampaan palaan, millä virheen toivotaan pienentyvän siedettävän suuruiseksi, linearisoinnista huolimatta. Työssä käydään läpi myös EKF-algoritmin periaatteet ja sen antamia tuloksia, joihon RUF-algoritmin antamia tuloksia verrataan yksinktertaisilla esimerkeillä MATLAB-koodina toteutettuna. Molemmista algoritmeista on olemassa diskreetisti ja jatkuvasti päivittävät versiot. Tässä työssä perehdytään edellä mainittuihin. Tila- ja mittamalleina tässä työssä käytetään funktioita f ja h, sekä niihin lisättyjä virhetermejä w ja v. Yhtälömuodossa funktiot ovat seuraavanlaiset [7]: xk = fk (xk−1 ) + wk , yk = hk (xk ) + vk . (2.1) Lineaariseen suodattimeen erona on funktioiden epälineaarisuus. Funktioista toinen tai molemmat voivat olla epälineaarisia, kun taas lineaarisissa tapauksissa molemmat funktiot ovat lineaariset. Funktiot voivat muuttua askeleen mukaan, mihin viitataan alaindekseillä. Tässä työssä käsitellään ainoastaan tapauksia, joissa funktiot ovat samoja joka askeleella. Virhetermit noudattavat nollakeskistä normaalijakaumaa kovarianssi(matriiseilla) Q ja R. Virheet eri ajanhetkillä ovat toisistaan riippumattomia.[9] Kovarianssit päivitetään jokaisella askeleella tilamuuttujien lisäksi. Mittaukset oletetaan annetuiksi. Yleisestä tapauksesta poiketen tässä työssä käytetään skalaariesimerkkejä ongelman yksinkertaistamiseksi. Yleisessä tapauksessa tilavektorin ollessa m-pituinen ja mittausvektorin n-pituinen niiden virhetermit ovat saman pituiset ja virheiden kovarianssimatriisit m x m - ja n x n -kokoiset. Tässäkin 2. Teoria 4 alaindeksi k viittaa askeleeseen ajanhetkella tk . wk ∼ N(0, Qk ), vk ∼ N(0, Rk ). (2.2) Melko yleinen tapa ratkaista epälineaaisia ongelmia on etsiä paras lineaarinen harhaton estimaattori, ns. BLU-estimaattori (best linear unbiased). Käytännössä tämä tarkoittaa, että oletuksena ovat seuraavat yhtälöt [9]: " E " V xk yk xk yk #! #! " " = = x̄k ȳk # Pxxk Pxyk Pxyk Pyyk # Tällöin tilan xk paras lineaarinen harhaton estimaattori on: −1 x̂k = x̄k + Pxyk Pyy (yk − ȳk ). k (2.3) EKF-algoritmi ratkaisee tilamuuttujalle seuraavan askeleen priori- ja posterioriestimaatit, sekä odotetun mittaustuloksen. Jokaisella askeleella päivitetään kovarianssit molempien mallien kohinatermeille. Ongelmana EKF-algoritmissa on se, että tarpeeksi epälineaarisissa tapauksissa algoritmin laskema posterioriestimaatti seuraavalla askeleella eroaa mittauksesta enemmän, kuin mitä hajonta on. Tämä johtuu siitä (kuten myöhemmin osoitetaan), että otetaan liian suuri askel mallifunktion tangentin suuntaan ja päädytään kauaksi todellisesta funktion pisteestä. Tässä saatetaan päätyä tilanteeseen, jossa kohinaa sisältävä mittaus itsessään olisi tarkempi estimaatti seuraavalle askeleelle, kuin algoritmin määrittämä estimaatti. Ongelmana on siten löytää menetelmä, jolla päästään tarkempaan arvioon seuraavan askeleen tilamuuttujan arvosta. Tarkoituksena on siis korjata arviota siten, ettei todellisesta arvosta harhauduta, vaan parantaa algoritmin kykyä käsittellä myös enemmän epälinaarisuutta. Yksinkertaistettuna: ollessamme tilamallin tilassa xk−1 pyrimme määrittämään tilamuuttujalle estimaatin tilassa xk . Tähän päästäksemme tarvitsemme korjauksen EKF-algoritmin laskemaan posterioriestimaattoriin x+ k. RUF-algoritmi lähtee etsimään parempaa estimaattia ottamalla pienemmän askeleen mallifunktion derivaatan suuntaan, jolloin tarkoituksena on pystyä seuraamaan todellisen signaalin käyrää tarkemmin. 2. Teoria 2.2 2.2.1 5 Laajennettu Kalmanin suodatin Algoritmin esittely EKF -algoritmi eli laajennettu Kalmanin suodatin on ensimmäisiä Kalmanin suodattimen sovelluksia. Se kehitettiin pian alkuperäisen Kalmanin suodattimen jälkeen, joka julkaistiin vuonna 1960. Tällöin oltiin huomattu, että Kalmanin suodattimelle olisi olemassa paljon käyttökohteita, joita sillä ei kuitenkaan voida käsitellä. Tämä johtuu siitä, että alkuperäinen suodatin olettaa mittaussignaalit lineaarisiksi ja sen soveltamisessa käytetään lineaarisia malleja. Laajennettu Kalmanin suodatinta käytetään laajalti epälineaarisen estimoinnin työkaluna ja se olettaa estimointivirheet pieniksi.[6] Perusajatus EKF:ssä on täysin sama kuin alkuperäisessä Kalmanin suodattimessa. Seuraavan askeleen prioriestimaatin laskemiseen käytetään mallifuntiota f , ottaen huomioon mallin epätarkkuuden kohinalla wk . Virhetermi noudattaa nollakeskistä normaalijakaumaa, jonka kovarianssi(matriisina) on Qk .[7] Annettujen funtioiden avulla lasketaan prioriestimaatti tilamuuttujalle sijoittamalla tilamalliin edellisen askeleen posterioriestimaatti sekä ennustettu mittaustulos sijoittamalla mallifunktioon nykyisen askeleen prioriestimaatti: + − x̂− k = fk−1 (x̂k−1 ) ŷ = hk (x̂k ). (2.4) Kuten yleisessä ongelmanasettelussa mainittiin, funktioiden alaindeksit viittaavat mallin askeleeseen. Funktiot voivat muuttua eri askeleilla, mutta tässä työssä käsitellään tapauksia, joissa näin ei ole. Seuraavassa vaiheessa tehdään lineaariapproksimaatio käyttäen tilamallin derivaattaa ja mittamallin derivaattaa. Tilafuntiota ja mittamallin funktioita approksimoidaan niiden Taylorin sarjojen kahdella ensimmäisellä termillä. Φk−1 ≈ δfk−1 (x) − δx x=x̂k−1 Hk ≈ δhk (x) . δx x=x̂−k (2.5) Tilamallin priorikovarianssi(matriisi) seuraavassa tilassa saadaan nyt laskettua hyödyntämällä tilamallin derivaatan arvoa käyttäen tilamuuttujalle tässä nykyisen tilan prioriestimaattia. + Pk− = Φk−1 Pk−1 ΦTk−1 + Qk−1 . (2.6) Kalmanin vahvistus lasketaan samaan tapaan kuin tavallisessa Kalmanin suodatin algoritmissa, mutta tilamallin ja mittamallin matriisit korvataan mitta- ja tilamallin 2. Teoria 6 Taulukko 2.1: EKF -algoritmin päivitysaskel, perustuu lähteeseen [7]. + − x̂− k = f (x̂k−1 ), ŷk = h(x̂k ) δf (x, k − 1) Φk−1 ≈ − δx x=x̂k−1 δh(x, k) Hk ≈ − δx x=x̂k − + Pk = Φk−1 Pk−1 ΦTk−1 + Qk−1 Kk = Pk− HkT (Hk Pk− HkT + Rk )−1 − x̂+ k = x̂k + Kk (yk − ŷk ) Pk+ = (I − Kk Hk )Pk− funktioiden derivaattojen arvoilla aiemmin lasketuissa pisteissä: Kk = 2.2.2 Pk− HkT . Hk Pk− HkT + Rk (2.7) Esimerkki Seuraava esimerkki kuvaa hyvin EKF -algoritmia käytettäessä mahdollisesti esiintyviä kompastuskiviä. [8] Käytetään selkeyden vuoksi yksinkertaista skalaariesimerkkiä. Oletetaan, että ollaan tilassa, jonka todellinen arvo on x = 3,5 ja prioriestimaatille on annettu arvio x̂− = 2,5. Myös prioriestimaatin kovarianssi on annettu ja sen arvo on P − = 0,52 . Tällöin on tiedossa, että prioriesimaatin virhe on x − x̂− = 3,5 − 2,5 = 1. (2.8) Kovarianssista nähdään, että keskihajonta on σ = 0,5, joten x̂− on kahden keskihajonnan päässä odotusarvostaan. Oletetaan että mittausfunktio on seuraavanlainen: y = x3 + w w ∼ N(0, 0,12 ). (2.9) Mittauksista laskemalla x:lle saataisiin siten seuraava estimaatti: x̂M itta = y 1/3 . (2.10) Monte Carlo -simulointia käyttämällä tälle estimaatin virhekovarianssille PM itta saadaan laskettua arvo PM itta = 0,00272 . Mittafunktion derivaatan ja mittamallin virheen kovarianssin avulla voidaan myös approksimoida mittafunktion virheen kova- 2. Teoria 7 rianssia käyttämällä sen laskemisessa tilamuuttujan todellista arvoa ja saadaan lähes sama arvo kuin Monte Carlo -simuloinnilla: PM itta ≈ 0,12 = 0,0027. (3 · 3,52 )2 (2.11) Kalmanin vahvistuksen laskemista varten lasketaan Hk :n lauseke auki: 3 δh(x, k) δx̂− 2 Hk ≈ − = k− = 3x̂− k . δx x=x̂k δx̂k (2.12) Nyt voidaan määrittää arvo Kalmanin vahvistukselle aiemmin mainitulla kaavalla Kk = Pk− HkT [Hk Pk− HkT + Rk ]−1 = 0,1 · 3(x̂− )2 /[9(x̂− )4 · 0,12 + 0,12 ] = 0,0533. (2.13) Koska halutaan pitää esimerkki deterministisenä, oletetaan mittaus virheettömäksi, eli y = x3 = 42,875. Tällöin algoritmin perusteella saadaan laskettua tilamuuttujalle seuraava estimaatti x̂+ = 3,9532. − − 3 x̂+ EKF = x̂ + Kk (y − (x̂ ) ) = 3,9532. (2.14) Tästä nähdään, että estimaattorin virhe on 0,4532. Posteriorivirheen kovarianssiksi saadaan laskettua 0,00532 . P + = (1 − 3Kk (x̂− )2 )2 P − + Kk2 R = 0,00532 . (2.15) Tästä voidaan laskea, että esimaattorin virhe on noin 85-kertainen virheen keskihajontaan nähden. Virhe on siis erittäin suuri keskivirheeseen nähden. Virhe antaa olettaa, että posterioriestimaatti olisi lähellä oikeata arvoa, mutta numeerisesta tuloksesta nähdään, ettei näin ole. Näin ollen algoritmin suorituskyky ei tässä tapauksessa ole hyvä. Seuraavassa edellä kuvattua esimerkkiä havainnollistava kuva. 2. Teoria 8 80 70 60 y=x3 prioriest. posterioriest. tod.sijainti 50 x, y 40 30 20 − 3 + − x̂+ k , (x̂k ) + Hk (x̂k − x̂k ) x̂− ,(x̂− )3 10 0 2 2.5 3 3.5 4 Kuva 2.1: EKF-algoritmilla laskettu päivitysaskel. 2.3 2.3.1 RUF Kalman -algoritmi Algoritmin esittely Tavallinen Kalmanin soudatin, sekä siihen perustuva EKF toimivat siten, että lineaarinen päivitysaskel otetaan käyttöön välittömästi kun estimaatti on saatu laskettua. Paloittain päivittävä soudatin toimii siten, että päivitysaskel suoritetaan vähitellen siten, että posterioriestimaatille lasketaan väliarvoja, joita käytetään seuraavassa välivaiheessa prioriarvoina. [8] Tässä menetelmässä approksimaatiovaiheen Jacobin matriisi voidaan laskea uudelleen ennen päivitystä, jolloin saadaan tarkemmin seurattua lineaarisella arviolla epälineaarista signaalia. Tässä kohtaa myös Kalmanin vahvistus lasketaan uudelleen vastaamaan muuttunutta derivaattaa. Paloittain päivittävän suodattimen etuna on se, että sitä käytettäessä ei välttämättä tarvita kohinatermien jakaumaa. Mallifunktion ei tarvitse olla myöskään lineaarinen. Jatkossa tullaan näyttämään, että RUF toimii paremmin kuin EKF tapauksissa joissa mittausfunktio on epälineaarinen. Tämän lisäksi rekursiivisella suodattimella vältetään Taylor-sarjan typistämisestä aiheutuva hajautuminen todellisesta funktiosta. Algoritmi seuraa mittausfunktion gradienttia ja minimoi kovarianssin. Mittausten ollessa lineaarisia algoritmi redusoituu laajennetuksi Kalman suodattimeksi. [8] 2.3.2 Algoritmin johtaminen Kuten edellä jo todettiin, algoritmin ydinajatus on uuden askeleen lisääminen vaiheittain. Jokaisessa vaiheessa Jakobin matriisi H lasketaan uudelleen, mikä mahdol- 2. Teoria 9 listaa mittausepälineaarisuuksien tarkemman approksimoinnin lineaarisesti. Algoritmia varten merkitsemme muuttujalla Ck ristikovarianssia ajanhetkellä tk todellisen tilan xk ja mittauskohinan välillä[10]: T Ck = E(xk − x̂− k )vk . (2.16) Mittausmalli ja tilamalli määritellään aivan samoin kuin EKF-algoritmissäkin. Päivitysaskeleet määritellään seuraavasti: − − x̂+ k = x̂k + Kk (yk − Hk x̂k ). (2.17) yk = Hk xk + vk . (2.18) Optimaalinen minimivarianssiestimoinnin mukainen Kalmanin vahvistus on muotoa: Kk = (Pk− HkT + Ck )(Hk Pk− HkT + Rk + Hk Ck + CkT HkT )−1 . (2.19) Posteriorivirhekovarianssimatriisi lasketaan seuraavasti: Pk+ =(I − Kk Hk )Pk− (I − Kk Hk )T + Kk Rk KkT − (I − Kk Hk )Ck KkT − Kk CkT (I − Kk Hk )T . (2.20) Kun tietyn askeleen mittaus on päivitetty kerran, saadaan posteriorivirheeksi ja Kalmanin vahvistukseksi seuraava: (1) (1) (1) (1) ek = xk − x̂k = (I − Kk Hk )e− k − Kk vk . (1) Kk = Pk− HkT (Hk Pk− HkT + Rk )−1 . (2.21) (2.22) Lausekkeessa 2.21 merkitään prioriestimointivirhettä e− k :lla: (1) e− k = xk − x̂k (2.23) (0) Alkuvaiheessa kovarianssi Ck (merkitään myös Ck ) saa arvokseen nolla. Tämä johtuu siitä, että tilan k prioritilamuuttuja ja tilan mittaus eivät ole toisistaan riip- 2. Teoria 10 puvia ensimmäisellä iteraatiolla. Kuitenkin seuraavan iteraation prioritilamuuttujan laskemisessa käytetään kyseisen askeleen mittausdataa, jolloin tilamuuttujan virhe ja mittausvirhe eivät ole toisistaan riippumattomia, jolloin Ck ei saa arvokseen nolla.Tästä johtuen ensimmäisen iteraation vahvistuksen lauseke saa ylläolevan muo(1) don. ek :n ja vk :n väliseksi ristikovarianssiksi ensimmäisen vaiheen jälkeen saadaan: (1) Ck = −Kk Rk . (2.24) (1) Pk+ :n lauseketta yksinkertaistamalla ja sijoittamalla Kk :n lauseke saadaan ensimmäisen vaiheen jälkeiselle kovarianssimatriisille: (1) (1) Pk = (I − Kk Hk )Pk− − Kk CkT . (2.25) Suluissa olevat yläindeksit viittaavat tässä tietyn päivitysaskeleen vaiheeseen. Yllä olevien yhtälöiden laskemisen jälkeen on teoriassa käyty siis yhden päivitysaskeleen ensimmäinen vaihe. Vaiheiden määrä on vapaasti valittava parametri. Kuten edellä (0) mainittiin, ristikovarianssi Ck prioritilan ja mittausvirheen välillä on nolla, josta (1) seuraa, että Kk :n lauseke on hieman eri muotoa kuin myöhempien vahvistusten. Tämä pätee ainoastaan optimaaliselle vahvistukselle. Jos nyt käsitellään sama alkuperäinen mittaus saaduilla kovariansseilla ja ristikovarianssilla, sekä alkuperäisellä Jakobin matriisilla, käytetään priorikovarianssina Pk− edellisen vaiheen posterioriko(1) varianssia Pk . Tällöin seuraavan vaiheen Kalmanin vahvistukseksi tulee: (2) (1) (1) (1) (1) (1)T Kk = (Pk HkT + Ck )(Hk Pk − HkT + Rk + Hk Ck + Ck HkT )(−1) . (2.26) Laskemalla edellinen lauseke auki saadaan tulokseksi nolla. Tämä johtuu siitä, että ensimmäisessä vaiheessa oletettiin vahvistuksen arvo täydelliseksi, jolloin voidaan ajatella, että kaikki informaatio mittauksesta saatiin hyödynnettyä. Tässä tapauksessa muutosta ei tulisi tapahtua, sillä päivitysaskel saatiin jo tehtyä edellisessä vaiheessa. Mikäli ensimmäisen vaiheen päivitys ei olekaan optimaalinen, niin silloin vain osa datasta hyödynnetään. Jos esimerkiksi Kalmanin vahvistus on vain puolet edellisen esimerkin vahvistuksesta niin se saa arvon (1) Kk = 0,5Pk− HkT (Hk Pk− HkT + Rk )−1 . (2) (2.27) Tässä tapauksessa myös Kk saa eri arvon, joka on eri kuin nolla. Seuraavassa vai(2) heessa laskettavan vahvistuksen Kk arvo on sellainen, että askeleen kokonaisvai- 2. Teoria 11 kutus on sama kuin tavallisen Kalman suodattimen askeleessa. Mikäli päivitysaskel jaetaan kolmeen vaiheeseen, niin sillon halutaan, että jokaisessa vaiheessa lisätään kolmannes kokonaispäivityksestä. Tällöin ensimmäisen Kalmanin vahvistuksen kerroin on 1/3. Toisen vaiheen vahvistuksen kerroin on 1/2 ja viimeisen 1. Näin menetellään siksi, että ensimmäisen vaiheen jälkeen mittauksen sekä prioriestimaatin ja Jakobin matriisin tulon erotuksesta on vähentynyt kolmannes (koska ensimmäisessä vaiheessa siirryttiin kolmannes päivitysaskeleen suuntaan) ja tällöin jäljellä kyseisestä erotuksesta on kaksi kolmannesta. Kun kaksi kolmannesta kerrotaan puolikkaalla, saadaan kolmasosa, jolloin liikutaan taas kolmasosa uudelleen lasketun Jakobin suuntaan (eli edelleen approksimoidaan epälineaarista tapausta lineaarisesti mutta ollaan tehty korjausta). Kun kolmannessa vaiheessa otetaan Kalmanin vahvistuksen kertoimeksi 1, niin päivityksestä on tehty jo kaksi kolmannesta, eli jäljellä on kolmannes. Näin saatiin tehtyä yksi päivitysiteraatio kolmivaiheisesti siten, että jokaisessa vaiheessa käytettiin sama osuus mittausdatasta ja korjattiin gradientin suuntaa. Taulukossa 2.2 on esitettynä RUF-algoritmin yksi päivitysaskel. Taulukko 2.2: RUF-algoritmin päivitysaskel [8]. (0) (0) (0) Ck = 0, Pk = Pk− , x̂k = x̂− k For i = 1 to N δh (i) Hk = δx x=x̂i−1 k (i) (i) (i−1) Wk = Hk Pk (i) (i) (i−1) Kk = γk (Pk (i) (i−1) x̂k = x̂k (i) (i)T + Rk + Hk Ck (i) (i)T + Ck Hk Hk (i−1) (i) (i) (i) (i−1) Pk = (I − Kk Hk )Pk (i) (i) (i) (i) (i) (N ) (N ) (i) (i−1) Pk+ =Pk , x̂+ k = x̂k (i)T Hk (i) )) (i) (i) (i) (i)T (I − Kk Hk )T + Kk Rk Kk (i)T − (I − Kk Hk )Ck Kk Ck = (I − Kk Hk )Ck 1 (i) γk = N +1−i End For (i−1)T + Ck )(Wk )−1 (i−1) + Kk (yk − h(x̂k (i−1) (i) (i)T − Kk Ck (i) − Kk Rk (i) (i) (I − Kk Hk )T 2. Teoria 2.3.3 12 Esimerkki Esimerkkitapauksena käytetään täysin samaa tapausta, mitä aiempi EKF -algoritmin esimerkki käsitteli. RUF -algoritmilla käyttäen kahta väliaskelta, saadaan posterioriestimaatiksi tilamuuttujalle arvo x̂+ = 3,5238. Posteriorin virhe on siis 0,0238. Posteriorin virhekovarianssiksi saadaan P + = 0,00322 . Estimaatin virhe on siis noin seitsenkertainen odotettuun keskihajontaan nähden, ainoastaan kahdella väliaskeleella laskettuna. Esimerkissä käytettiin ainoastaan kahta väliaskelta, jotta saatiin selkeä kuvaaja. Käyttämällä kymmentä väliaskelta saataisiin estimaatin virheeksi ainoastaan 0,0014 ja keskihajonnaksi 0,0028, jolloin virhe olisi vain puolet keskihajonnasta. Kuvassa 2.2 on esitettynä kaksivaiheisesti laskettu päivitysaskel RUFalgoritmillä. 50 45 40 y=x3 RUF (x,y) (1) (1) (2) x̂k , (x̂k )3 + Hk ∆x̂k (1) (1) x̂k , (x̂k )3 35 30 25 (1) 15 10 2.4 (1) 3 x̂k , (x̂− k ) + Hk ∆x̂k 20 − 3 x̂− k ,(x̂k ) 2.6 2.8 3 3.2 3.4 3.6 Kuva 2.2: RUF -algoritmilla kaksivaiheisesti laskettu päivitysaskel. 13 3. YHTEENVETO Tässä kandidaatintyössä esiteltiin lukijalle yksi yleisimmin käytetyistä Kalmanin suodatin -algoritmin epälineaarisista laajennoksista, laajennettu Kalmanin suodatin, sekä uusi tapa tehdä epälineaarista estimointia laskemalla päivitysaskel paloittain. Työssä käytiin läpi EKF -algoritmin toimintaperiaate ja esiteltiin paloittain päivittävän suodattimen (RUF -algoritmi) toimintaa. Algoritmien eroa havainnollistettiin numeerisella esimerkillä, josta kävi selvästi ilmi RUF:n edut suhteessa EKF -algoritmiin. Esimerkin tapauksessa mittaus oletettiin tarkaksi. Kuvasta 2.1 nähdään, että tässä tapauksessa EKF -algoritmi laskee prioriestimaatin oikein ja se asettuu oikealle kohdalle käyrää pisteeseen (x̂− , (x̂− )3 ). Koska mittaus on huomattavasti tarkempi kuin prioriestimaatti (x̂− ), posterioriestimaatti lasketaan pääosin mittauksen perusteella. Tässä päivitys tapahtuu linearisoinnin perusteella vastaamaan mittausta, jolloin y-akselin arvo asettuu oikealle kohdalle (kuten pitääkin kun mittaus oletettiin tarkaksi), mutta liian suuren Kalmanin vahvistuksen vaikutuksesta posterioriestimaatti harhautuu todellisesta arvosta. EKF -algorimissa oletetaan myös Kalmanin vahvistuksen olevan sama koko päivitysvälillä, vaikka näin ei ole. Verrattaessa RUF:a muihin Kalmanin suodattimen epälineaarisiin laajennuksiin tyydytään toteamaan vain, että on tapauksia, joissa vanhemmat algorimit antavat paremman tuloksen, mutta yleisesti RUF:lla saadaan tarkempia tuloksia, pienemmällä laskennallisella kuormituksella. Johdannossa mainittu hajuton Kalmanin suodatin tekee päivityksen samaan tyyliin kuin EKF ja EKF2, ja eroaa näistä ainoastaan siinä, että derivaattaa ei lasketa. UKF -suodatin voi joissain tapauksissa kärsiä samoista ongelmista, kuin EKF:kin. Esimerkiksi tapauksessa, jossa mittaukset ovat tarkkoja, voi UKF antaa ratkaisun, joka on näitä epätarkempi. RUF -algoritmissa on käyttäjän valittavissa, kuinka moneen palaan päivitysaskeleet jaetaan, eli monessako osassa kukin päivitysaskel lasketaan. Tämä on tapauskohtaista ja sopivan määrän etsiminen on tasapainottelua tarkkuuden ja laskennallisen raskauden välillä. Yleisesti voidaan sanoa, että sopiva määrä paloja on pienin mahdollinen, jolla saavutetaan haluttu tarkkuus. Esimerkkitapauksessa jo kahdella väliaskeleella laskettaessa päästiin estimaatin virheen ja posteriokeskivirheen suhteessa kokoluokkaa pienempään arvoon kuin käyttämällä laajennettua Kalman suodatinta. Tästä voidaan päätellä, että erittäin pienellä laskennan lisäämisellä saadaan huo- 3. Yhteenveto 14 mattavasti parempi tulos. Kymmentä väliaskelta käyttämällä estimaatin virhe olisi vain puolet posteriorikeskivirheestä, joten RUF -algoritmillä pystytään estimaattia tarkentamaan huomattavasti lisäämällä päivitysaskeleen palojen määrää. Näin ollen voidaan todeta RUF -algoritmin olevan esimerkkitapauksessa huomattavasti EKF -algoritmia suorituskykyisempi. Koska paloittain päivittävä Kalman suodatin käyttää derivaattaa, kuten EKF ja EKF2:kin, niin tilanteet, joissa derivaatat saavat arvokseen nollan, saattavat aiheuttaa sillekin ongelmia, mutta vaikutukset eivät ole yhtä dramaattisia, sillä päivitys lasketaan vaiheittain. Olemassaolevista algoritmeista RUF:a eniten muistuttava on iteroitu Kalmanin suodatin (Iterated Kalman filter, IKF). [8] 15 LÄHTEET [1] R.E. Kalman “A new approach to linear filtering and prediction problems,” J. Basic Eng. Mar. 1960, https://www.cs.unc.edu/~welch/kalman/media/ pdf/Kalman1960.pdf [2] B. D. Tapley, B. E. Schutz, and G. H. Born, Statistical Orbit Determination. Waltham, MA: Elsevier Academic Press, 2004. [3] Ali-Löytty S., Gaussian Mixture Filters in Hybrid Positioning. Väitöskirja. Tampere 2009. Tampereen Teknillinen Yliopisto. http://dspace.cc.tut.fi/ dpub/bitstream/handle/123456789/219/ali-loytty.pdf [4] S. J. Julier ja J. K. Uhlmann, Unscended Filtering and Nonlinear Estimation, Invited Paper, Proceedings of the IEEE vol. 92, no. 3, march 2004, http: //www.gatsby.ucl.ac.uk/~byron/nlds/julier04.pdf [5] S. J. Julier ja J. K. Uhlmann, A new extension of the Kalman Filter to nonlinear systems. In Proceeding of AeroSense: the 11th international symposium on aerospace/defence sensing, simulation and controls, 1997, http://www.cs.berkeley.edu/~pabbeel/cs287-fa13/optreadings/ JulierUhlmann-UKF.pdf [6] A. Gelb, Ed., Applied Optimal Estimation. Cambridge, MA: MIT press, 1996, pp. 182-189, and pp. 190-191. Waltham, MA: Elsevier Academic Press, 2004. [7] Grewal, M. ja Andrews, A. 1993. Kalman Filtering : theory and practice, 1. painos. New Jersey, Prentice-Hall. 381 s. [8] Zanetti, R. 2012. Recursive Update Filterin for Nonlinear Estimation http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber= 6096372&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all. jsp%3Farnumber%3D6096372 [9] Ali-Löytty S., Collin J. ja Sirola N.: Paikannuksen matematiikka 2010: http:// math.tut.fi/courses/MAT-45800/paikannuksen_matematiikka_2010b.pdf [10] R. G. Brown, P. Y. Hwang, Introduction to Random Signals and Applied Kalman Filtering, 3rd ed. New York: Wiley 1997, pp. 348-350 16 A. LIITE: EKF-ESIMERKIN MATLAB-KOODI x0 x_ P_ R H = = = = = K_ekf y1 = = x_plus = P_plus = sigma = 3.5; 2.5; 0.5^2; 0.1^2; 3*x_^2; %tilamuuttujan todellinen arvo %tilamuuttujan prioriestimaatin arvo %tilamuuttujan prioriestimaatin kovarianssi %mittausmallin virheen kovarianssi %mittausmallin Jacobin matriisin (derivaatan) %arvo prioriestimaatilla laskettuna P_*H/(H*P_*H’+R); %EKF:n Kalmanin vahvistus x0^3; %Päivitetty mittaus, joka %oletetaan tässä virheettömäksi x_+K_ekf*(y1-h(x_)); %x:n posterioriestimaatti (1-K_ekf*H)*P_; %Posterioriestimaatin kovarianssi sqrt(P_plus); %Posterioriestimaatin keskivirhe 17 B. LIITE: RUF-ESIMERKIN MATLAB-KOODI N=10; %Yhden päivitysaskeleen palojen määrä %(vapaasti valittava) R = 0.1^2; %mittausmallin häiriön varianssi W=zeros(N,1); %apumuuttuja Kalmanin vahvistuksen laskemiseen x_tod = 3.5; %x:n todellinen arvo C=zeros(N+1,1); %tilan x_k ja mittauskohinan ristikovarianssi x_=zeros(N+1,1); %apumuuttujavektori, johon estimaatin väliarvot %tallennetaan x_(1)=2.5; %esimerkkitapauksen tilamuuttujan arvon alkuarvaus H=zeros(N+1,1); %apumuuttujavektori, johon tallennetaan mittaus%funktion derivaatan väliarvot. H(1)=3*x_(1)^2; %Mittausfunktion derivaatan arvo alkuarvaustilassa h=zeros(N+1,1); %apumuuttujavektori, johon tallennetaan paloissa %mittausfunktion arvot kunkin palan posteriori%estimaatin arvolla laskettuna h(1)=x_(1)^3; %Arvio mittauksen alkuarvosta alkuarvaustilassa. K=zeros(N,1); %apuvektori, johon tallennetaan Kalmanin %vahvistuksen arvot päivitysaskeleen %eri paloissa/vaiheissa. P=zeros(N+1,1); %apuvektori, johon tallennetaan päivitysaskeleen eri %vaiheiden estimaattien kovarianssit. P(1)=0.25; %Kyseisen vektorin ensimmäiseen alkioon tulee %prioriestimaatin kovarianssi. y=42.875; %Mittausarvo, joka oletettiin esimerkissä % virheettömäksi (y = x_tod^3). for i = 1:N gamma=1/(N+1-i); %Tässä silmukassa lasketaan %päivitysaskeleen palat. %Kalmanin vahvistuksen painokerroin, %jolla kokonaisvahvistus jaetaan tasan %päivitysaskeleen eri B. Liite: RUF-esimerkin MATLAB-koodi 18 %vaiheiden kesken. W(i)=H(i)*P(i)*H(i)+R+H(i)*C(i)+C(i)*H(i); K(i)=gamma(i)*(P(i)*H(i)+C(i))/W(i); x_(i+1)=x_(i)+K(i)*(z-h(i)); C(i+1)=(1-K(i)*H(i))*C(i)-K(i)*R; P(i+1)=(1-K(i)*H(i))*P(i)*(1-K(i)*H(i)) +K(i)*R*K(i) -(1-K(i)*H(i))*C(i+1)*K(i)-K(i)*C(i+1)*(1-K(i)*H(i)); H(i+1)=3*x_(i+1)^2; h(i+1)=x_(i+1)^3; end x_post = x_(N+1); P_post = P(N+1); sigma = sqrt(P_post); %Tilan posterioriestimaatti tallentuu %silmukassa x_ -vektorin viimeiseen alkioon, %eli se on päivitysaskeleen viimeisen %vaiheen tulos. %Posterioriestimaatin kovarianssi tallentuu % vastaavasti P-vektorin viimeiseen alkioon. %Posterioriestimaatin keskivirhe
© Copyright 2024