Kalmani filtri kasutamine anduritelt saadud väärtuste filtreerimiseks. Kalmani filtreerimine Optimaalne Kalmani filter

Internetist, sealhulgas Habré'st, leiate palju teavet Kalmani filtri kohta. Kuid valemite endi kergesti seeditavat tuletist on raske leida. Ilma järelduseta tajutakse kogu seda teadust omamoodi šamanismina, valemid näevad välja nagu näotu sümbolite kogum ja mis kõige tähtsam, paljud lihtsad väited, mis jäävad teooria pinnale, on arusaamatud. Selle artikli eesmärk on rääkida sellest filtrist kõige kättesaadavamas keeles.
Kalmani filter on võimas andmete filtreerimise tööriist. Selle põhiprintsiip on see, et filtreerimisel kasutatakse informatsiooni nähtuse enda füüsika kohta. Oletame, et kui filtreerida andmeid auto spidomeetrist, siis auto inerts annab õiguse tajuda liiga kiireid kiirushüppeid mõõtmisveana. Kalmani filter on huvitav, sest teatud mõttes on see parim filter. Mida sõnad “parim” täpselt tähendavad, räägime allpool täpsemalt. Artikli lõpus näitan, et paljudel juhtudel saab valemeid niivõrd lihtsustada, et neist ei jää peaaegu midagi alles.

Likbez

Enne Kalmani filtriga tutvumist teen ettepaneku meenutada mõningaid lihtsaid määratlusi ja fakte tõenäosusteooriast.

Juhuslik väärtus

Kui nad ütlevad, et juhuslik suurus on antud, tähendab see, et see muutuja võib võtta juhuslikke väärtusi. See võtab erinevaid väärtusi erinevate tõenäosustega. Kui viskad näiteks täringu, kukub välja diskreetne väärtuste kogum: . Kui rääkida näiteks eksleva osakese kiirusest, siis ilmselgelt tuleb tegeleda pideva väärtuste hulgaga. Juhusliku muutuja "välja langenud" väärtused tähistatakse tähega , kuid mõnikord kasutame sama tähte, mis tähistab juhuslikku muutujat: .
Pideva väärtushulga korral iseloomustab juhuslikku suurust tõenäosustihedus , mis määrab meile, et tõenäosus, et juhuslik suurus "kukub välja" väikeses pikkusega punktis, on võrdne . Nagu pildilt näeme, on see tõenäosus võrdne graafiku all oleva varjutatud ristküliku pindalaga:

Üsna sageli jaotatakse elus juhuslikud suurused Gaussi järgi, kui tõenäosustihedus on .

Näeme, et funktsioonil on kella kuju, mille keskpunkt on punkt ja mille iseloomulik laius on suurusjärgus .
Kuna me räägime Gaussi jaotusest, siis oleks patt jätta mainimata, kust see tuli. Nii nagu arvud on matemaatikas kindlalt kinnistunud ja ilmuvad kõige ootamatumates kohtades, nii on ka Gaussi jaotus sügavalt juurdunud tõenäosusteoorias. Üks tähelepanuväärne väide, mis osaliselt seletab Gaussi kõikjalolemist, on järgmine:
Olgu suvalise jaotusega juhuslik muutuja (tegelikult on sellel suvalisusel teatud piirangud, kuid need pole sugugi jäigad). Teeme katseid ja arvutame juhusliku suuruse "välja langenud" väärtuste summa. Teeme palju neid katseid. On selge, et iga kord saame erineva väärtuse summast. Teisisõnu, see summa on iseenesest juhuslik suurus, millel on oma kindel jaotusseadus. Selgub, et piisavalt suure puhul kaldub selle summa jaotusseadus Gaussi jaotusele (muide, “kella” iseloomulik laius kasvab kui ). Loe lähemalt wikipediast: keskpiiri teoreem. Elus on väga sageli koguseid, mis koosnevad suurest hulgast võrdselt jaotatud sõltumatutest juhuslikest muutujatest ja jaotuvad seetõttu Gaussi järgi.

Tähendab

Juhusliku suuruse keskmine väärtus on see, mille saame piiris, kui teeme palju katseid ja arvutame langenud väärtuste aritmeetilise keskmise. Keskmist väärtust tähistatakse erinevalt: matemaatikutele meeldib tähistada (ootus) ja välismatemaatikutele (ootus). Füüsika sama läbi või. Määrame võõral viisil:.
Näiteks Gaussi jaotuse puhul on keskmine .

Dispersioon

Gaussi jaotuse puhul näeme selgelt, et juhuslik suurus eelistab oma keskmise väärtuse mõnes naabruses välja kukkuda. Nagu graafikult näha, on järjekorra väärtuste iseloomulik hajumine . Kuidas saame hinnata seda suvalise juhusliku muutuja väärtuste levikut, kui teame selle jaotust. Saate joonistada selle tõenäosustiheduse graafiku ja hinnata iseloomulikku laiust silma järgi. Kuid me eelistame minna algebralist teed. Keskmisest väärtusest leiate hälbe (mooduli) keskmise pikkuse: . See väärtus on väärtuste iseloomuliku leviku hea hinnang. Kuid teie ja mina teame väga hästi, et moodulite kasutamine valemites on peavalu, mistõttu kasutatakse seda valemit harva iseloomuliku leviku hindamiseks.
Lihtsam viis (arvutuste poolest lihtne) on leida . Seda suurust nimetatakse dispersiooniks ja sellele viidatakse sageli kui . Dispersiooni juurt nimetatakse standardhälbeks. Standardhälve on hea hinnang juhusliku suuruse levikule.
Näiteks Gaussi jaotuse puhul võime eeldada, et ülal defineeritud dispersioon on täpselt võrdne , mis tähendab, et standardhälve on võrdne , mis sobib väga hästi meie geomeetrilise intuitsiooniga.
Tegelikult on siin peidus väike pettus. Fakt on see, et Gaussi jaotuse definitsioonis on eksponendi all avaldis . See kaks nimetajas on just selleks, et standardhälve oleks võrdne koefitsiendiga. See tähendab, et Gaussi jaotusvalem ise on kirjutatud kujul, mis on spetsiaalselt teravdatud selleks, et arvestada selle standardhälbega.

Sõltumatud juhuslikud muutujad

Juhuslikud muutujad võivad, kuid ei pruugi olla sõltuvad. Kujutage ette, et viskate nõela tasapinnale ja kirjutate üles selle mõlema otsa koordinaadid. Need kaks koordinaati on sõltuvad, neid ühendab tingimus, et nendevaheline kaugus on alati võrdne nõela pikkusega, kuigi need on juhuslikud suurused.
Juhuslikud muutujad on sõltumatud, kui esimese tulemus on teise tulemusest täiesti sõltumatu. Kui juhuslikud suurused ja on sõltumatud, on nende korrutise keskmine väärtus võrdne nende keskmiste väärtuste korrutisega:

Tõestus

Näiteks sinised silmad ja kuldmedaliga kooli lõpetamine on sõltumatud juhuslikud suurused. Kui sinisilmne, ütleme kuldmedalist , siis sinisilmsed See näide ütleb meile, et kui juhuslikud suurused ja on antud nende tõenäosustiheduse ja , siis nende suuruste sõltumatus väljendub selles, et tõenäosustihedus (esimene väärtus langes välja ja teine ​​) leitakse valemiga:

Sellest järeldub kohe, et:

Nagu näete, viiakse tõestus läbi juhuslike muutujate jaoks, millel on pidev väärtuste spekter ja mis on antud nende tõenäosustiheduse järgi. Muudel juhtudel on tõestuse idee sarnane.

Kalmani filter

Probleemi sõnastamine

Märgistage väärtusega, mida mõõdame ja seejärel filtreerime. See võib olla koordinaat, kiirus, kiirendus, niiskus, haisuaste, temperatuur, rõhk jne.
Alustame lihtsa näitega, mis viib meid üldise probleemi sõnastamiseni. Kujutage ette, et meil on raadio teel juhitav auto, mis saab sõita ainult edasi ja tagasi. Teades auto kaalu, kuju, teekatet jne, arvutasime välja, kuidas juhtkang mõjutab liikumiskiirust.

Siis muutub masina koordinaat vastavalt seadusele:

Reaalses elus ei saa me oma arvutustes arvestada autole mõjuvaid väikesi häireid (tuul, konarused, kivikesed teel), mistõttu auto tegelik kiirus erineb arvutatust. Kirjutatud võrrandi paremale küljele lisatakse juhuslik suurus:

Meil on autole paigaldatud GPS-andur, mis proovib mõõta auto tegelikku koordinaati ja loomulikult ei saa seda täpselt mõõta, vaid mõõdab veaga, mis on ka juhuslik suurus. Selle tulemusena saame andurilt ekslikke andmeid:

Probleem on selles, et teades anduri valesid näitu, leidke masina tegelikule koordinaadile hea lähendus.
Üldprobleemi sõnastuses võib koordinaadi eest vastutada kõik (temperatuur, niiskus ...) ja süsteemi väljastpoolt juhtimise eest vastutavat terminit tähistame kui (masina näites). Koordinaatide ja andurite näitude võrrandid näevad välja järgmised:

Arutame üksikasjalikult, mida me teame:

Kasulik on märkida, et filtreerimisülesanne ei ole silumisülesanne. Meie eesmärk ei ole andurilt saadavaid andmeid siluda, vaid saada tegelikule koordinaadile lähim väärtus.

Kalmani algoritm

Arutleme induktsiooni abil. Kujutage ette, et -ndas etapis oleme juba leidnud andurilt filtreeritud väärtuse, mis vastab hästi süsteemi tegelikule koordinaadile. Ärge unustage, et me teame võrrandit, mis juhib tundmatu koordinaadi muutust:

seetõttu võime andurilt veel väärtust saamata eeldada, et sellel etapil areneb süsteem selle seaduse järgi ja andur näitab midagi lähedast . Midagi täpsemat kahjuks veel öelda ei oska. Teisest küljest on meie käes ebatäpne anduri näit.
Kalmani idee on järgmine. Tegelikule koordinaadile parima lähenduse saamiseks peame valima kesktee anduri ebatäpse näidu ja selle ennustuse vahel, mida me eeldasime. Anname anduri näidule kaalu ja prognoositud väärtusel on kaal:

Koefitsienti nimetatakse Kalmani koefitsiendiks. Oleneb iteratsioonietapist, nii et õigem oleks kirjutada , kuid praegu, et arvutusvalemeid mitte segamini ajada, jätame selle indeksi välja.
Peame valima Kalmani koefitsiendi selliselt, et saadud koordinaadi optimaalne väärtus oleks tõelisele väärtusele kõige lähemal. Näiteks kui teame, et meie andur on väga täpne, siis usaldame selle näitu rohkem ja anname väärtusele suurema kaalu (ühe lähedal). Kui andur, vastupidi, pole üldse täpne, keskendume rohkem teoreetiliselt ennustatud väärtusele.
Üldiselt tuleb Kalmani koefitsiendi täpse väärtuse leidmiseks lihtsalt viga minimeerida:

Vea avaldise ümberkirjutamiseks kasutame võrrandeid (1) (need, mis on sinises kastis):

Tõestus

Nüüd on aeg arutada, mida tähendab väljend vea minimeerimine? Lõppude lõpuks, nagu näeme, on viga ise juhuslik suurus ja iga kord omandab erinevad väärtused. Tõepoolest ei ole olemas ühte kõigile sobivat lähenemisviisi, et määratleda, mida tähendab, et viga on minimaalne. Nii nagu juhusliku suuruse dispersiooni puhul, valime siingi arvutusteks kõige lihtsama kriteeriumi, kui püüdsime hinnata selle hajumise iseloomulikku laiust. Minimeerime ruuduvea keskmise:

Kirjutame viimase väljendi:

Tõestus

Sellest, et kõik avaldises sisalduvad juhuslikud muutujad on sõltumatud, järeldub, et kõik "rist" liikmed on võrdsed nulliga:

Kasutasime asjaolu, et , siis näib dispersiooni valem palju lihtsam: .

See avaldis omandab minimaalse väärtuse, kui (võrdsusta tuletis nulliga):

Siin kirjutame juba Kalmani koefitsiendi avaldise astmeindeksiga, seega rõhutame, et see sõltub iteratsiooni sammust.
Saadud optimaalse väärtuse asendame avaldisega, mille jaoks oleme minimeerinud. Me saame;

Meie ülesanne on lahendatud. Oleme saanud iteratiivse valemi Kalmani koefitsiendi arvutamiseks.
Võtame oma omandatud teadmised ühte raami kokku:

Näide

Matlabi kood

Puhasta kõik; N = 100% proovide arv a = 0,1% kiirendus sigmaPsi = 1 sigmaEta = 50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); kui t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi); z(t+1)=x(t+1)+normnd(0,sigmaEta); lõpp; %kalmani filter xOpt(1)=z(1); eOpt(1)=sigmaEta; t=1 jaoks:(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) lõpp; plot(k,xopt,k,z,k,x)

Analüüs

Kui jälgida, kuidas Kalmani koefitsient muutub iteratsiooniastmega, siis saame näidata, et see stabiliseerub alati teatud väärtuseni. Näiteks kui anduri ja mudeli RMS-i vead on omavahel seotud kümne ja ühega, näeb Kalmani koefitsiendi graafik sõltuvalt iteratsioonietapist välja järgmine:

Järgmises näites arutleme, kuidas see võib meie elu palju lihtsamaks muuta.

Teine näide

Praktikas juhtub sageli, et me ei tea filtreeritava füüsilisest mudelist üldse midagi. Näiteks soovite filtreerida oma lemmikkiirendusmõõturi näidud. Te ei tea ette, millise seadusega kavatsete kiirendusmõõturit keerata. Kõige rohkem teavet, mida saate koguda, on anduri vea dispersioon. Sellises keerulises olukorras võib kogu liikumismudeli teadmatuse juhtida juhuslikku muutujasse:

Kuid ausalt öeldes ei vasta selline süsteem enam tingimustele, mille me seadsime juhuslikule suurusele, sest nüüd on seal peidus kogu meile tundmatu liikumisfüüsika ja seetõttu ei saa me öelda, et erinevatel ajahetkedel on mudelid on üksteisest sõltumatud ja nende keskmised väärtused on null. Sel juhul Kalmani filtri teooria üldiselt ei kehti. Kuid me ei pööra sellele asjaolule tähelepanu, vaid rakendame rumalalt kogu valemite kolossi, valides koefitsiendid ja silma järgi, nii et filtreeritud andmed näevad ilusad välja.
Kuid on veel üks, palju lihtsam viis. Nagu eespool nägime, stabiliseerub Kalmani koefitsient alati väärtusele . Seetõttu võime koefitsientide valimise ja keerukate valemite abil Kalmani koefitsiendi leidmise asemel lugeda seda koefitsienti alati konstandiks ja valida ainult selle konstanti. See oletus ei riku peaaegu midagi. Esiteks kasutame juba ebaseaduslikult Kalmani teooriat ja teiseks stabiliseerub Kalmani koefitsient kiiresti konstantseks. Lõpuks saab kõik olema väga lihtne. Me ei vaja Kalmani teooriast üldse valemeid, peame lihtsalt valima vastuvõetava väärtuse ja sisestama selle iteratiivsesse valemisse:

Järgmine graafik näitab kahel erineval viisil filtreeritud fiktiivse anduri andmeid. Eeldusel, et me ei tea nähtuse füüsikast midagi. Esimene viis on aus, kõigi Kalmani teooria valemitega. Ja teine ​​on lihtsustatud, ilma valemiteta.

Nagu näeme, on meetodid peaaegu samad. Väikest erinevust täheldatakse alles alguses, kui Kalmani koefitsient pole veel stabiliseerunud.

Arutelu

Nagu nägime, on Kalmani filtri põhiidee leida selline koefitsient, mis vastab filtreeritud väärtusele

keskmiselt erineks kõige vähem koordinaadi tegelikust väärtusest. Näeme, et filtreeritud väärtus on anduri näidu ja eelmise filtreeritud väärtuse lineaarne funktsioon. Ja eelmine filtreeritud väärtus on omakorda anduri näidu ja eelmise filtreeritud väärtuse lineaarne funktsioon. Ja nii edasi, kuni kett on täielikult lahti keeratud. See tähendab, et filtreeritud väärtus sõltub kõik varasemad anduri näidud lineaarselt:

Seetõttu nimetatakse Kalmani filtrit lineaarseks filtriks.
Võib tõestada, et Kalmani filter on kõigist lineaarfiltritest parim. Parim selles mõttes, et filtri vea keskmine ruut on minimaalne.

Mitme muutujaga juhtum

Kogu Kalmani filtriteooriat saab üldistada mitmemõõtmelisele juhtumile. Seal olevad valemid tunduvad pisut hirmuäratavamad, kuid nende tuletamise idee on sama, mis ühemõõtmelisel juhul. Näete neid selles suurepärases artiklis: http://habrahabr.ru/post/140274/.
Ja selles imelises video näide nende kasutamisest.

Viinerfiltrid sobivad kõige paremini protsesside või protsesside osade kui terviku töötlemiseks (plokktöötlus). Järjestikune töötlemine nõuab signaali hetkehinnangut igas tsüklis, võttes arvesse vaatlusprotsessi ajal filtri sisendis saadud teavet.

Wieneri filtreerimise korral nõuaks iga uue signaali näidis kõigi filtrite kaalude ümberarvutamist. Praegu on laialdaselt kasutusel adaptiivsed filtrid, milles saabuva uue info abil korrigeeritakse pidevalt varem tehtud signaalihinnangut (sihtmärgi jälgimine radaris, automaatjuhtimissüsteemid juhtimises jne). Eriti huvitavad on rekursiivset tüüpi adaptiivsed filtrid, mida tuntakse Kalmani filtrina.

Neid filtreid kasutatakse laialdaselt automaatsete reguleerimis- ja juhtimissüsteemide juhtimiskontuurides. Sealt nad tulid, mida tõendab selline spetsiifiline terminoloogia, mida kasutati nende töö kui olekuruumi kirjeldamisel.

Üks peamisi lahendamist vajavaid ülesandeid närviarvutuse praktikas on kiirete ja töökindlate närvivõrgu õppimisalgoritmide hankimine. Sellega seoses võib olla kasulik kasutada tagasisideahelas lineaarsete filtrite õppealgoritmi. Kuna õppealgoritmid on olemuselt iteratiivsed, peab selline filter olema järjestikune rekursiivne hindaja.

Parameetrite hindamise probleem

Üheks suure praktilise tähtsusega statistiliste lahendusteooria probleemiks on süsteemide olekuvektorite ja parameetrite hindamise probleem, mis on sõnastatud järgmiselt. Oletame, et on vaja hinnata vektori parameetri $X$ väärtust, mis on otseseks mõõtmiseks kättesaamatu. Selle asemel mõõdetakse teist parameetrit $Z$, olenevalt $X$. Hindamise ülesanne on vastata küsimusele: mida saab öelda $X$ kohta, kui on antud $Z$. Üldjuhul sõltub vektori $X$ optimaalse hindamise protseduur hinnangu aktsepteeritud kvaliteedikriteeriumist.

Näiteks Bayesi lähenemisviis parameetrite hindamise probleemile nõuab täielikku a priori teavet hinnangulise parameetri tõenäosuslike omaduste kohta, mis on sageli võimatu. Sellistel juhtudel kasutatakse vähimruutude meetodit (LSM), mis nõuab palju vähem a priori teavet.

Vaatleme LSM-i rakendamist juhul, kui vaatlusvektor $Z$ on lineaarse mudeli abil ühendatud parameetrite hinnanguvektoriga $X$ ja vaatluses esineb müra $V$, mis ei ole korrelatsioonis hinnangulise parameetriga. :

$Z = HX + V$, (1)

kus $H$ on teisendusmaatriks, mis kirjeldab seost vaadeldavate väärtuste ja hinnanguliste parameetrite vahel.

Arvestus $X$, mis minimeerib ruuduvea, kirjutatakse järgmiselt:

$X_(ots)=(H^TR_V^(-1)H)^(-1)H^TR_V^(-1)Z$, (2)

Olgu müra $V$ korrelatsioonita, sel juhul on maatriks $R_V$ lihtsalt identiteedimaatriks ja hinnanguline võrrand muutub lihtsamaks:

$X_(ots)=(H^TH)^(-1)H^TZ$, (3)

Maatriksvormingus salvestamine säästab oluliselt paberit, kuid võib olla kellegi jaoks ebatavaline. Seda kõike illustreerib järgmine näide, mis on võetud Yu. M. Koršunovi monograafiast "Küberneetika matemaatilised alused".
Seal on järgmine elektriahel:

Täheldatud väärtused on sel juhul mõõteriista näidud $A_1 ​​= 1 A, A_2 = 2 A, V = 20 B$.

Lisaks on teada takistus $R = 5$ Ohm. Väikseima keskmise ruutvea kriteeriumi seisukohalt on vaja parimal viisil hinnata voolude $I_1$ ja $I_2$ väärtusi. Siin on kõige olulisem see, et vaadeldud väärtuste (instrumendi näidud) ja hinnanguliste parameetrite vahel on teatav seos. Ja see teave tuuakse väljastpoolt.

Antud juhul on need Kirchhoffi seadused, filtreerimise puhul (millest tuleb juttu hiljem) - autoregressiivne aegrea mudel, mis eeldab, et hetkeväärtus sõltub eelmistest.

Niisiis, Kirchhoffi seaduste tundmine, mis ei ole kuidagi seotud statistiliste otsuste teooriaga, võimaldab teil luua seose vaadeldud väärtuste ja hinnanguliste parameetrite vahel (elektritehnikat õppinud saavad kontrollida, ülejäänud peavad võta nende sõna):

$$z_1 = A_1 = I_1 + \xi_1 = 1$$

$$z_2 = A_2 = I_1 + I_2 + \xi_2 = 2$$

$$z_2 = V/R = I_1 + 2 * I_2 + \xi_3 = 4$$

See on vektorkujul:

$$\begin(vmatrix) z_1\\ z_2\\ z_3 \end(vmatrix) = \begin(vmatrix) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmatrix) \begin(vmatrix) I_1\ \ I_2 \end(vmatrix) + \begin(vmatrix) \xi_1\\ \xi_2\\ \xi_3 \end(vmatrix)$$

Või $Z = HX + V$, kus

$$Z= \begin(vmaatriks) z_1\\ z_2\\ z_3 \end(vmaatriks) = \begin(vmatrix) 1\\ 2\\ 4 \end(vmatrix) ; H= \begin(vmaatriks) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmaatriks) ; X= \begin(vmaatriks) I_1\\ I_2 \end(vmaatriks) ; V= \begin(vmatrix) \xi_1\\ \xi_2\\ \xi_3 \end(vmatrix)$$

Arvestades müraväärtusi üksteisega korreleerimata, leiame I 1 ja I 2 hinnangu vähimruutude meetodil vastavalt valemile 3:

$H^TH= \begin(vmatrix) 1 & 1& 1\\ 0 & 1& 2 \end(vmatrix) \begin(vmatrix) 1 & 0\\ 1 & 1\\ 1 & 2 \end(vmatrix) = \ begin(vmatrix) 3 & 3\\ 3 & 5 \end(vmatrix) ; (H^TH)^(-1)= \frac(1)(6) \begin(vmatrix) 5 & -3\\ -3 & 3 \end(vmatrix) $;

$H^TZ= \begin(vmatrix) 1 & 1& 1\\ 0 & 1& 2 \end(vmatrix) \begin(vmatrix) 1 \\ 2\\ 4 \end(vmatrix) = \begin(vmatrix) 7\ \ 10 \end(vmatrix) ; X(vmaatriks)= \frac(1)(6) \begin(vmatrix) 5 & -3\\ -3 & 3 \end(vmatrix) \begin(vmatrix) 7\\ 10 \end(vmatrix) = \frac (1)(6) \begin(vmatrix) 5\\ 9 \end(vmatrix)$;

Seega $I_1 = 5/6 = 0,833 A$; $I_2 = 9/6 = 1,5 A$.

Filtreerimisülesanne

Erinevalt fikseeritud väärtustega parameetrite hindamise ülesandest on filtreerimisülesandes vaja hinnata protsesse, st leida ajas muutuva signaali praegused hinnangud, mis on moonutatud müra tõttu ja seetõttu pole otseseks mõõtmiseks juurdepääsetavad. Üldjuhul sõltub filtreerimisalgoritmide tüüp signaali ja müra statistilistest omadustest.

Eeldame, et kasulik signaal on aeglaselt muutuv aja funktsioon ja müra on korrelatsioonita müra. Kasutame vähimruutude meetodit, jällegi a priori teabe puudumise tõttu signaali ja müra tõenäosuslike omaduste kohta.

Esiteks saame hinnangu $x_n$ praeguse väärtuse kohta, kasutades aegrea $z_n, z_(n-1),z_(n-2)\dots z_(n-() viimaseid $k$ väärtusi k-1))$. Vaatlusmudel on sama, mis parameetrite hindamise ülesandes:

On selge, et $Z$ on veeruvektor, mis koosneb aegridade $z_n, z_(n-1),z_(n-2)\dots z_(n-(k-1)) vaadeldud väärtustest. $, $V $ – müravektor $\xi _n, \xi _(n-1),\xi_(n-2)\dots \xi_(n-(k-1))$, mis moonutab tõelist signaali. Ja mida tähendavad sümbolid $H$ ja $X$? Millisest veeruvektorist näiteks $X$ saab rääkida, kui pole vaja muud kui anda hinnang aegrea hetkeväärtusele? Ja mida mõeldakse teisendusmaatriksi $H$ all, pole üldse selge.

Kõigile neile küsimustele saab vastuse vaid siis, kui võtta arvesse signaali genereerimise mudeli kontseptsiooni. See tähendab, et on vaja mõnda algse signaali mudelit. See on arusaadav, kuna puudub a priori teave signaali ja müra tõenäosuslike omaduste kohta, jääb üle vaid oletada. Võite seda nimetada kohvipaksu ennustamiseks, kuid eksperdid eelistavad teistsugust terminoloogiat. Nende föönis nimetatakse seda parameetriliseks mudeliks.

Sel juhul hinnatakse selle konkreetse mudeli parameetreid. Sobiva signaali genereerimise mudeli valimisel pidage meeles, et Taylori seerias saab laiendada mis tahes analüütilist funktsiooni. Taylori seeria silmatorkav omadus on see, et funktsiooni kuju mis tahes lõplikul kaugusel $t$ mingist punktist $x=a$ on üheselt määratud funktsiooni käitumisega punkti $x=a lõpmatult väikeses ümbruses. $ (me räägime selle esimest ja kõrgemat järku tuletisinstrumentidest ).

Seega tähendab Taylori seeria olemasolu seda, et analüütilisel funktsioonil on väga tugeva seosega sisemine struktuur. Kui piirdume näiteks kolme Taylori seeria liikmega, näeb signaali genereerimise mudel välja järgmine:

$x_(n-i) = F_(-i)x_n$, (4)

$$X_n= \begin(vmatrix) x_n\\ x"_n\\ x""_n \end(vmatrix) ; F_(-i)= \begin(vmatrix) 1 & -i & i^2/2\\ 0 & 1 & -i\\ 0 & 0 & 1 \end(vmatrix) $$

See tähendab, et valem 4 loob polünoomi etteantud järjestusega (näites on see võrdne 2-ga) seose ajajada signaali $n$-nda ja $(ni)$-th vahel. . Seega sisaldab hinnanguline olekuvektor sel juhul lisaks hinnangulisele väärtusele ka signaali esimest ja teist tuletist.

Automaatjuhtimise teoorias nimetataks sellist filtrit teist järku astaatiliseks filtriks. Selle juhtumi teisendusmaatriks $H$ (hinnatud praeguse ja $k-1$ eelmiste näidiste põhjal) näeb välja selline:

$$H= \begin(vmatrix) 1 & -k & k^2/2\\ - & - & -\\ 1 & -2 & 2\\ 1 & -1 & 0,5\\ 1 & 0 & 0 \ end(vmatrix)$$

Kõik need arvud saadakse Taylori seeriast, eeldades, et ajavahemik külgnevate vaadeldavate väärtuste vahel on konstantne ja võrdne 1-ga.

Seega on filtreerimisprobleem meie eelduste kohaselt taandatud parameetrite hindamise probleemiks; sel juhul hinnatakse meie poolt vastuvõetud signaali genereerimise mudeli parameetreid. Ja olekuvektori $X$ väärtuste hindamine toimub sama valemi 3 järgi:

$$X_(ots)=(H^TH)^(-1)H^TZ$$

Sisuliselt oleme rakendanud parameetrilise hindamisprotsessi, mis põhineb signaali genereerimise protsessi autoregressiivsel mudelil.

Valem 3 on tarkvaras hõlpsasti rakendatav, selleks tuleb täita maatriks $H$ ja vaatluste vektorveerg $Z$. Selliseid filtreid nimetatakse piiratud mälu filtrid, kuna nad kasutavad praeguse hinnangu $X_(mitte)$ saamiseks viimaseid $k$ vaatlusi. Igal uuel vaatlusetapil lisatakse praegusele vaatluste komplektile uus vaatluste komplekt ja vana jäetakse kõrvale. Seda hindamisprotsessi nimetatakse lükandaken.

Kasvavad mälufiltrid

Piiratud mäluga filtrite peamine puudus on see, et pärast iga uut vaatlust on vaja uuesti arvutada kõigi mällu salvestatud andmete täielik ümberarvutus. Lisaks saab hinnangute arvutamist alustada alles pärast esimeste $k$ vaatluste tulemuste kogumist. See tähendab, et nendel filtritel on siirdeprotsess pikk.

Selle puuduse kõrvaldamiseks on vaja liikuda püsimäluga filtrilt filtrile, millel on kasvav mälu. Sellises filtris peab hinnatavate vaadeldavate väärtuste arv ühtima praeguse vaatluse arvuga n. See võimaldab saada hinnanguid alates vaatluste arvust, mis on võrdne hinnangulise vektori $X$ komponentide arvuga. Ja selle määrab vastuvõetud mudeli järjekord, st kui palju Taylori seeria termineid mudelis kasutatakse.

Samal ajal paranevad n suurenedes filtri silumisomadused, st hinnangute täpsus suureneb. Selle lähenemisviisi otsene rakendamine on aga seotud arvutuskulude suurenemisega. Seetõttu rakendatakse kasvavaid mälufiltreid kujul korduv.

Asi on selles, et aja n järgi on meil juba hinnang $X_((n-1)ots)$, mis sisaldab teavet kõigi varasemate vaatluste kohta $z_n, z_(n-1), z_(n-2) \dots z_ (n-(k-1))$. Hinnang $X_(not)$ saadakse järgmise vaatlusega $z_n$, kasutades hinnangusse $X_((n-1))(\mbox (ot))$ salvestatud informatsiooni. Seda protseduuri nimetatakse korduvaks filtreerimiseks ja see koosneb järgmistest:

  • hinnangul $X_((n-1))(\mbox (ots))$ prognoositakse hinnangu $X_n$ valemiga 4 $i = 1$ jaoks: $X_(\mbox (noca priori)) = F_1X_((n-1 )ots)$. See on a priori hinnang;
  • praeguse vaatluse $z_n$ tulemuste kohaselt muudetakse see a priori hinnang tõeseks, st tagantjärele;
  • seda protseduuri korratakse igas etapis alates $r+1$, kus $r$ on filtrite järjestus.

Lõplik rekursiivse filtreerimise valem näeb välja selline:

$X_((n-1)ots) = X_(\mbox (nocapriori)) + (H^T_nH_n)^(-1)h^T_0(z_n - h_0 X_(\mbox (nocapriori)))$, (6 )

kus on meie teise järjekorra filter:

Kasvav mälufilter, mis töötab vastavalt valemile 6, on Kalmani filtrina tuntud filtreerimisalgoritmi erijuht.

Selle valemi praktilisel rakendamisel tuleb meeles pidada, et selles sisalduv a priori hinnang määratakse valemiga 4 ja väärtus $h_0 X_(\mbox (nocapriori))$ on vektori $X_( esimene komponent \mbox (nocapriori))$.

Kasvaval mälufiltril on üks oluline omadus. Vaadates valemit 6, on lõpptulemuseks ennustatud skoorivektori ja parandusliikme summa. See parandus on väikeste $n$ puhul suur ja väheneb $n$ kasvades, kaldudes nullini kui $n \rightarrow \infty$. See tähendab, et kui n kasvab, siis filtri silumisomadused kasvavad ja sellesse põimitud mudel hakkab domineerima. Kuid tegelik signaal võib mudelile vastata ainult mõnes piirkonnas, mistõttu prognoosi täpsus halveneb.

Selle vastu võitlemiseks kehtestatakse alates umbes $n$-st parandustähtaja edasine lühendamise keeld. See võrdub filtririba muutmisega, st väikese n puhul on filter lairiba (vähem inertsiaalne), suure n puhul muutub see inertsiaalsemaks.

Võrrelge joonist 1 ja joonist 2. Esimesel joonisel on filtril suur mälu, samas kui see silub hästi, kuid kitsa riba tõttu jääb hinnanguline trajektoor tegelikust maha. Teisel joonisel on filtrimälu väiksem, see silub kehvemini, kuid jälgib paremini tegelikku trajektoori.

Kirjandus

  1. Yu.M.Korshunov "Küberneetika matemaatilised alused"
  2. A.V. Balakrishnan "Kalmani filtreerimise teooria"
  3. V.N. Fomin "Korduv hindamine ja adaptiivne filtreerimine"
  4. C.F.N. Cowen, P.M. Luba "Adaptiivsed filtrid"

Random Forest on üks minu lemmikandmete kaevandamise algoritme. Esiteks on see uskumatult mitmekülgne, seda saab kasutada nii regressiooni- kui ka klassifitseerimisprobleemide lahendamiseks. Otsige kõrvalekaldeid ja valige ennustajad. Teiseks on see algoritm, mida on tõesti raske valesti rakendada. Lihtsalt sellepärast, et erinevalt teistest algoritmidest on sellel vähe kohandatavaid parameetreid. Ja ometi on see oma olemuselt üllatavalt lihtne. Samal ajal on see märkimisväärselt täpne.

Mis on sellise imelise algoritmi idee? Idee on lihtne: oletame, et meil on mõni väga nõrk algoritm, ütleme . Kui teeme selle nõrga algoritmi abil palju erinevaid mudeleid ja arvutame nende ennustuste tulemuse keskmise, siis on lõpptulemus palju parem. See on nn ansambliõpe tegevuses. Juhusliku metsa algoritmi nimetatakse seetõttu "Juhuslikuks metsaks", saadud andmete jaoks loob see palju otsustuspuid ja seejärel keskmistab nende prognooside tulemuse. Oluline punkt on siin juhuslikkuse element iga puu loomisel. On ju selge, et kui luua palju ühesuguseid puid, siis nende keskmistamise tulemus on ühe puu täpsusega.

Kuidas ta töötab? Oletame, et meil on mõned sisendandmed. Iga veerg vastab mõnele parameetrile, iga rida vastab mõnele andmeelemendile.

Saame kogu andmestikust juhuslikult valida hulga veerge ja ridu ning koostada nende põhjal otsustuspuu.


Neljapäeval, 10. mail 2012

Neljapäeval, 12. jaanuaril 2012


See on tegelikult kõik. 17-tunnine lend on läbi, Venemaa on jäänud ülemere. Ja läbi hubase 2-toalise San Francisco korteri akna vaatab meile vastu Californias, USA-s kuulus Silicon Valley. Jah, just see on põhjus, miks ma pole viimasel ajal palju kirjutanud. Me kolisime.

Kõik sai alguse 2011. aasta aprillis, kui andsin Zyngaga telefoniintervjuu. Siis tundus see kõik mingi mänguna, millel polnud reaalsusega mingit pistmist ja ma ei osanud isegi ette kujutada, milleni see välja viib. 2011. aasta juunis tuli Zynga Moskvasse ja viis läbi rea intervjuusid, kaaluti umbes 60 telefonivestluse läbinud kandidaati ja nende hulgast valiti välja umbes 15 inimest (täpset arvu ei tea, hiljem muutis keegi meelt, keegi keeldus kohe). Intervjuu osutus üllatavalt lihtsaks. Ei mingeid programmeerimisülesandeid teile ega keerulisi küsimusi luukide kuju kohta, peamiselt testiti vestluse võimet. Ja teadmisi hinnati minu meelest vaid pealiskaudselt.

Ja siis algas segadus. Kõigepealt ootasime tulemusi, siis pakkumist, siis LCA kinnitust, siis viisataotluse heakskiitu, siis USAst pärit dokumendid, siis saatkonna järjekord, siis lisakontroll, siis viisa. Kohati tundus mulle, et olen valmis kõik maha lööma ja skoori tegema. Kohati kahtlesin, kas meil on seda Ameerikat vaja, sest ega Venemaa pole paha. Kogu protsess võttis aega umbes pool aastat, lõpuks saime detsembri keskel viisad ja hakkasime väljasõiduks valmistuma.

Esmaspäev oli mu esimene päev uues töökohas. Kontoris on kõik tingimused mitte ainult töötamiseks, vaid ka elamiseks. Hommiku-, lõuna- ja õhtusöögid meie oma kokkadelt, hunnik mitmekesist toitu igasse nurka topitud, jõusaal, massaaž ja isegi juuksur. Kõik see on töötajatele täiesti tasuta. Paljud jõuavad tööle jalgrattaga ja mitmed ruumid on varustatud sõidukite hoidmiseks. Üldiselt pole ma Venemaal midagi sellist näinud. Igal asjal on aga oma hind, meid hoiatati kohe, et tuleb palju tööd teha. Mis on nende standardite järgi "palju", pole mulle väga selge.

Loodan siiski, et vaatamata töömahukusele suudan lähitulevikus taas blogi pidada ja ehk rääkida midagi Ameerika elust ja programmeerijana töötamisest Ameerikas. Oota ja vaata. Seniks aga soovin teile kõigile häid jõule ja edukat uut aastat ning kohtumiseni!


Kasutusnäite jaoks trükime välja Venemaa ettevõtete dividenditootluse. Baashinnaks võtame aktsia sulgemishinna registri sulgemise päeval. Mingil põhjusel pole see teave Troika veebisaidil saadaval ja see on palju huvitavam kui dividendide absoluutväärtused.
Tähelepanu! Koodi käivitamine võtab kaua aega, kuna iga aktsia kohta tuleb teha päring finami serveritele ja saada selle väärtus.

tulemus<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0)( proovi(( jutumärgid<- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes) if (length(price)>0)(dd<- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c("Symbol", "Name", "RegistryDate", "Divs") result


Samamoodi saate koostada viimaste aastate statistikat.

Kalmani filter on ilmselt kõige populaarsem filtreerimisalgoritm, mida kasutatakse paljudes teaduse ja tehnoloogia valdkondades. Tänu oma lihtsusele ja tõhususele võib seda leida GPS-vastuvõtjates, andurite näitude protsessorites, juhtimissüsteemide juurutamisel jne.

Kalmani filtri kohta on Internetis palju artikleid ja raamatuid (peamiselt inglise keeles), kuid nendel artiklitel on üsna suur sisenemislävi, palju on uduseid kohti, kuigi tegelikult on see väga selge ja läbipaistev algoritm. Püüan sellest rääkida lihtsas keeles, järk-järgult keerukamaks muutudes.

Milleks see mõeldud on?

Igal mõõteseadmel on mõni viga, seda võivad mõjutada paljud välised ja sisemised mõjud, mis viib selleni, et sellelt saadav teave osutub mürarikkaks. Mida mürarikkamad on andmed, seda keerulisem on sellist teavet töödelda.

Filter on andmetöötlusalgoritm, mis eemaldab müra ja ebavajaliku teabe. Kalmani filtris on võimalik seada a priori infot süsteemi olemuse, muutujate seoste kohta ja selle põhjal ehitada täpsem hinnang, kuid ka kõige lihtsamal juhul (ilma a priori infot sisestamata) see annab suurepäraseid tulemusi.

Vaatleme kõige lihtsamat näidet – oletame, et peame kontrollima kütuse taset paagis. Selleks on paaki paigaldatud mahtuvusandur, seda on väga lihtne hooldada, kuid sellel on mõned puudused - näiteks sõltuvus täidetavast kütusest (kütuse dielektriline konstant sõltub paljudest teguritest, nt. temperatuur), paagis esineva "judina" suur mõju. Sellest tulenevalt on sealt saadav informatsioon tüüpiline korraliku amplituudiga "saag". Sellised andurid paigaldatakse sageli rasketele kaevandusseadmetele (ärge häbenege paagi mahu pärast):

Kalmani filter

Lähme veidi kõrvale ja tutvume algoritmi endaga. Kalmani filter kasutab optimaalse olekuhinnangu moodustamiseks süsteemi dünaamilist mudelit (nt füüsikalist liikumisseadust), teadaolevaid juhtimistoiminguid ja järjestikuste mõõtmiste komplekti. Algoritm koosneb kahest iteratiivsest faasist: ennustamine ja korrigeerimine. Esimeses etapis arvutatakse oleku prognoos järgmisel ajahetkel (võttes arvesse nende mõõtmise ebatäpsust). Teisel juhul korrigeerib anduri uus teave prognoositud väärtust (võttes arvesse ka selle teabe ebatäpsust ja müra):

Võrrandid esitatakse maatriksi kujul, kui te ei tunne lineaaralgebrat - ärge muretsege, siis on ühe muutujaga juhtumi jaoks olemas lihtsustatud versioon ilma maatriksiteta. Ühe muutuja korral taanduvad maatriksid skalaarväärtusteks.

Kõigepealt vaatame tähistust: alaindeks tähistab ajahetke: k - praegune, (k-1) - eelmine, miinusmärk ülaindeksis näitab, et see ennustatud vahepealne väärtus.

Muutujate kirjeldus on esitatud järgmistel piltidel:

Võib olla pikk ja tüütu kirjeldada, mida kõik need salapärased üleminekumaatriksid tähendavad, kuid minu arvates on parem proovida algoritmi rakendada reaalsel näitel – nii et abstraktsed väärtused omandaksid tõelise tähenduse.

Proovime seda tegevuses

Tuleme tagasi näite juurde kütusetaseme anduriga, kuna süsteemi olekut tähistab üks muutuja (paagis oleva kütuse maht), siis maatriksid manduvad tavapärasteks võrranditeks:
Protsessi mudeli määratlus
Filtri rakendamiseks on vaja määrata süsteemi dünaamikat määravate muutujate maatriksid/väärtused ning mõõtmised F, B ja H:

F- süsteemi dünaamikat kirjeldav muutuja, kütuse puhul - see võib olla koefitsient, mis määrab proovivõtuaja (algoritmi sammude vaheline aeg) tühikäigul kütusekulu. Kuid lisaks kütusekulule on ka tanklaid ... nii et lihtsuse huvides võtame selle muutuja võrdseks 1-ga (st näitame, et ennustatud väärtus on võrdne eelmise olekuga).

B– muutuja, mis määrab juhttoimingu rakendamise. Kui meil oleks lisainfot mootori pöörete või gaasipedaali vajutamise astme kohta, siis see parameeter määraks, kuidas muutub kütusekulu proovivõtu ajal. Kuna meie mudelis pole juhtimistoiminguid (nende kohta pole teavet), siis võtame B = 0.

H- maatriks, mis määrab seose mõõtmiste ja süsteemi oleku vahel, praegu aktsepteerime ilma selgitusteta ka selle muutuja väärtusega 1.

Silumisomaduste definitsioon
R- mõõteviga saab määrata mõõtevahendite katsetamise ja nende mõõtevea määramise teel.

K- Protsessi müra määramine on keerulisem ülesanne, kuna selleks on vaja määrata protsessi dispersioon, mis pole alati võimalik. Igal juhul saate seda parameetrit reguleerida, et tagada vajalik filtreerimise tase.

Koodis juurutamine
Ülejäänud arusaamatuse hajutamiseks rakendame C #-s lihtsustatud algoritmi (ilma maatriksite ja juhtimistoiminguteta):

klass KalmanFilterSimple1D
{
avalik topelt X0 (saada; privaatne komplekt;) // ennustatud olek
public double P0 ( get; private set; ) // ennustatud kovariatsioon

Public double F ( get; private set; ) // reaalväärtuse tegur eelmise reaalväärtusega
public double Q ( get; private set; ) // mõõtmismüra
public double H ( get; private set; ) // mõõdetud väärtuse koefitsient tegelikule väärtusele
public double R ( get; private set; ) // keskkonnamüra

Avalik topeltolek ( saada; privaatne komplekt; )
avalik kahekordne kovariatsioon ( saada; privaatne komplekt; )

Avalik KalmanFilterSimple1D(double q, double r, double f = 1, double h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

Public void SetState (topeltolek, topeltkovarians)
{
olek = olek;
Kovariatsioon = kovariatsioon;
}

Public void Õige (topeltandmed)
{
//aja uuendus – ennustus
X0 = F*olek;
P0 = F*Kovariatsioon*F + Q;

//mõõtmise uuendus – parandus
var K = H*PO/(H*PO*H + R);
Olek = X0 + K*(andmed - H*X0);
Kovariatsioon = (1 - K*H)*F;
}
}

// Rakendus...

VarfuelData = GetData();
var filtered = new List();

Var kalman = new KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // määrake F, H, Q ja R
kalman.SetState(kütuseandmed, 0,1); // Seadistage oleku ja kovariatsiooni algväärtus
foreach(var d kütuseandmetes)
{
kalman.Õige(d); // Rakendage algoritm

Filtreeritud.Lisa(kalman.Olek); // Salvestage praegune olek
}

Nende parameetritega filtreerimise tulemus on näidatud joonisel (silumisastme reguleerimiseks saate muuta Q ja R parameetreid):

Kõige huvitavam jääb artikli ulatusest välja - Kalmani filtri rakendamine mitme muutuja jaoks, nendevahelise seose määramine ja jälgimata muutujate väärtuste automaatne tuletamine. Proovin teemat jätkata niipea kui aega saan.

Loodan, et kirjeldus ei osutunud väga tüütuks ja keeruliseks, kui teil on küsimusi ja selgitusi - tere tulemast kommentaaridesse)

Mehhanismide ja sõlmede juhtimise tehnoloogiliste protsesside automatiseerimise käigus tuleb tegeleda erinevate füüsikaliste suuruste mõõtmisega. See võib olla vedeliku või gaasi rõhk ja vool, pöörlemiskiirus, temperatuur ja palju muud. Füüsikaliste suuruste mõõtmine toimub analoogandurite abil. Analoogsignaal on andmesignaal, milles igat esindavat parameetrit kirjeldatakse aja funktsiooni ja võimalike väärtuste pideva hulgaga. Väärtusruumi järjepidevusest järeldub, et mis tahes signaali sisestatud häired on kasulikust signaalist eristamatud. Seetõttu saadetakse juhtseadme analoogsisendisse nõutava füüsilise koguse vale väärtus. Seetõttu on vaja andurilt tulevat signaali filtreerida.

Üks tõhusamaid filtreerimisalgoritme on Kalmani filter. Kalmani filter on rekursiivne filter, mis hindab dünaamilise süsteemi olekuvektorit, kasutades mitmeid mittetäielikke ja mürarikkaid mõõtmisi. Kalmani filter kasutab optimaalse olekuhinnangu moodustamiseks süsteemi dünaamilist mudelit (näiteks füüsikalist liikumisseadust), juhtimistoiminguid ja järjestikuste mõõtmiste komplekti. Algoritm koosneb kahest iteratiivsest faasist: ennustamine ja korrigeerimine. Esimeses etapis arvutatakse oleku prognoos järgmisel ajahetkel (võttes arvesse nende mõõtmise ebatäpsust). Teises korrigeerib andurilt saadud uus teave prognoositud väärtust (võttes arvesse ka selle teabe ebatäpsust ja müra).

Prognoosifaasis:

  1. Süsteemi oleku ennustus:

kus on süsteemi hetkeseisu ennustus; – olekutevahelise ülemineku maatriks (süsteemi dünaamiline mudel); – süsteemi seisundi ennustamine eelmisel ajahetkel; – kontrollimeetmete rakendamise maatriks; on juhttoiming eelmisel ajahetkel.

  1. Kovariatsioonivea ennustus:

kus on vea ennustus; – viga eelmisel ajahetkel; on protsessi müra kovariatsioon.

Kohanemise etapis:

  1. Kalmani kasumi arvutamine:

kus on Kalmani kasu; – mõõtmiste maatriks, mis näitab mõõtmiste ja olekute suhet; on mõõtmismüra kovariatsioon.

kus on praeguse aja mõõtmine.

  1. Kovariatsiooni vea värskendus:

kus on identiteedimaatriks.

Kui süsteemi olekut kirjeldatakse ühe muutujaga, siis = 1 ja maatriksid manduvad tavalisteks võrranditeks.

Kalmani filtri efektiivsuse selgeks demonstreerimiseks viidi läbi katse helitugevuse anduriga AVR PIC KY-037, mis on ühendatud Arduino Uno mikrokontrolleriga. Joonisel 1 on kujutatud anduri näitude graafik ilma filtrit kasutamata (joon 1). Väärtuse kaootilised kõikumised anduri väljundis näitavad müra olemasolu.

Joonis 1. Anduri näitude graafik ilma filtrit kasutamata

Filtri rakendamiseks on vaja määrata süsteemi ja mõõtmiste dünaamika määravate muutujate väärtused ja. Aktsepteerime ja võrdub 1-ga ja võrdub 0-ga, kuna süsteemis pole juhtimistoiminguid. Filtri silumisomaduste määramiseks on vaja arvutada muutuja väärtus ja valida parameetri väärtus.

Arvutame muutuja programmis Microsoft Excel 2010. Selleks on vaja arvutada anduri näitude valimi standardhälve. = 0,62. valitakse sõltuvalt nõutavast filtreerimistasemest, aktsepteerime = 0,001. Joonisel 2 on teisel real anduri näitude graafik filtri abil.

Joonis 2. Andurite näitude graafik Kalmani filtri abil

Graafikult võime järeldada, et filter on müra filtreerimise ülesandega hakkama saanud, kuna püsiseisundis on filtreerimise läbinud andurite näitude kõikumised ebaolulised.

Kalmani filtril on aga märkimisväärne puudus. Kui anduri mõõdetud väärtus võib kiiresti muutuda, ei muutu filtreeritud anduri näit nii kiiresti kui mõõdetud väärtus. Joonisel 3 on näidatud Kalmani filtri reaktsioon mõõdetud väärtuse hüppele.

Joonis 3. Kalmani filtri reaktsioon mõõdetud väärtuse hüppele

Filtri reaktsioon mõõdetud väärtuse hüppele osutus ebaoluliseks. Kui mõõdetud väärtus muutub oluliselt ja seejärel ei naase eelmisele väärtusele, vastavad filtreeritud anduri näidud mõõdetud väärtuse tegelikule väärtusele alles pärast märkimisväärset ajavahemikku, mis on vastuvõetamatu automaatjuhtimissüsteemide puhul, mis nõuavad suurt kiirust. .

Katse põhjal võime järeldada, et Kalmani filtrit tuleks kasutada andurite näitude filtreerimiseks madala kiirusega süsteemides.

Bibliograafia:

  1. GOST 17657-79. Andmete ülekanne. Tingimused ja määratlused. - Moskva: Standardite kirjastus, 2005. - 2 lk.
  2. Kalmani filter // Vikipeedia. . Värskendamise kuupäev: 26.04.2017. URL: http://ru.wikipedia.org/?oldid=85061599 (juurdepääsu kuupäev: 21.05.2017).