Utilizarea unui filtru Kalman pentru a procesa o secvență de coordonate GPS. Probleme moderne de știință și educație Filtru Kalman pentru măsurători de traiectorie

04.03.2021 Știri

Cumva s-a întâmplat că îmi plac foarte mult tot felul de algoritmi care au o bază matematică clară și logică) Dar adesea descrierea lor pe Internet este atât de supraîncărcată cu formule și calcule încât este pur și simplu imposibil de înțeles sensul general al algoritmului. Dar înțelegerea esenței și principiului de funcționare a unui dispozitiv/mecanism/algoritm este mult mai importantă decât memorarea unor formule uriașe. Oricât de banal ar fi, memorarea chiar și a sutelor de formule nu va ajuta în niciun fel dacă nu știi cum și unde să le aplici 😉 De fapt, la ce sunt toate acestea.. Am decis să fac o descriere a unor algoritmi care A trebuit să întâlnesc în practică. Voi încerca să nu mă supraîncărc cu calcule matematice, astfel încât materialul să fie ușor de înțeles și ușor de citit.

Și astăzi vom vorbi despre filtru Kalman, să ne dăm seama ce este, de ce și cum se folosește.

Să începem cu un mic exemplu. Să ne confruntăm cu sarcina de a determina coordonatele unei aeronave zburătoare. În plus, în mod firesc, coordonatele (să o notăm) ar trebui determinate cât mai precis posibil.

Am instalat în avans un senzor în avion, care ne oferă datele de locație necesare, dar, ca tot pe lumea asta, senzorul nostru este imperfect. Prin urmare, în loc de valoarea obținem:

unde este eroarea senzorului, adică o variabilă aleatorie. Astfel, din citirile inexacte ale echipamentului de masura, trebuie sa obtinem o valoare a coordonatei () cat mai apropiata de pozitia reala a aeronavei.

Sarcina a fost stabilită, să trecem la rezolvarea ei.

Anunțați-ne acțiunea de control () datorită căreia zboară avionul (pilotul ne-a spus ce pârghii trage 😉). Apoi, cunoscând coordonatele la pasul k, putem obține valoarea la pasul (k+1):

S-ar părea că de asta avem nevoie! Și nu este nevoie de filtru Kalman aici. Dar nu totul este atât de simplu.. În realitate, nu putem lua în considerare toți factorii externi care afectează zborul, așa că formula ia următoarea formă:

unde este cauzata eroarea influență externă, imperfecțiunea motorului etc.

Deci ce se întâmplă? La pasul (k+1) avem, în primul rând, o citire inexactă a senzorului și, în al doilea rând, o valoare calculată incorect, obținută din valoarea din pasul anterior.

Ideea filtrului Kalman este de a obține o estimare precisă a coordonatei dorite (pentru cazul nostru) din două valori inexacte (luându-le cu coeficienți de ponderare diferiți). În general, valoarea măsurată poate fi absolut orice (temperatură, viteză...). Iată ce se întâmplă:

Prin calcule matematice, putem obține o formulă de calcul a coeficientului Kalman la fiecare pas, dar, așa cum sa convenit la începutul articolului, nu vom aprofunda calculele, mai ales că în practică s-a stabilit că coeficientul Kalman tinde întotdeauna către o anumită valoare pe măsură ce k crește. Obținem prima simplificare a formulei noastre:

Acum să presupunem că nu există nicio legătură cu pilotul și nu cunoaștem acțiunea de control. S-ar părea că în acest caz nu putem folosi filtrul Kalman, dar nu este așa 😉 Pur și simplu „aruncăm” din formulă ceea ce nu știm, atunci

Obținem cea mai simplificată formulă Kalman, care, totuși, în ciuda unor astfel de simplificări „grele”, își face față perfect sarcinii. Dacă prezentați rezultatele grafic, veți obține ceva de genul acesta:

Dacă senzorul nostru este foarte precis, atunci în mod natural coeficientul de ponderare K ar trebui să fie aproape de unitate. Dacă situația este inversă, adică senzorul nostru nu este foarte bun, atunci K ar trebui să fie mai aproape de zero.

Probabil asta e tot, exact așa, ne-am dat seama de algoritmul de filtrare Kalman! Sper că articolul a fost util și de înțeles =)

Random Forest este unul dintre algoritmii mei preferați extragerea datelor. În primul rând, este incredibil de versatil; poate fi folosit pentru a rezolva atât probleme de regresie, cât și de clasificare. Căutați anomalii și selectați predictori. În al doilea rând, acesta este un algoritm care este cu adevărat dificil de aplicat incorect. Pur și simplu pentru că, spre deosebire de alți algoritmi, are puțini parametri personalizabili. Și este, de asemenea, surprinzător de simplu în natură. Și, în același timp, este uimitor de precis.

Care este ideea din spatele unui astfel de algoritm minunat? Ideea este simplă: să presupunem că avem un algoritm foarte slab, să zicem . Dacă facem multe diferite modele folosind acest algoritm slab și făcând o medie a rezultatului predicțiilor lor, rezultatul final va fi semnificativ mai bun. Aceasta este ceea ce se numește învățare prin ansamblu în acțiune. Prin urmare, algoritmul Random Forest se numește „Random Forest”; pentru datele primite, creează mulți arbori de decizie și apoi face media rezultatului predicțiilor lor. Un punct important Există un element de șansă în crearea fiecărui copac. La urma urmei, este clar că, dacă creăm mulți copaci identici, atunci rezultatul medierii lor va avea acuratețea unui singur copac.

Cum lucrează? Să presupunem că avem câteva date de intrare. Fiecare coloană corespunde unui parametru, fiecare rând corespunde unui element de date.

Putem selecta aleatoriu un anumit număr de coloane și rânduri din întregul set de date și putem construi un arbore de decizie pe baza acestora.


joi, 10 mai 2012

joi, 12 ianuarie 2012


Asta e tot. Zborul de 17 ore s-a încheiat, Rusia rămâne peste ocean. Și prin fereastra unui apartament confortabil cu 2 dormitoare, San Francisco, faimoasa Silicon Valley, California, SUA, se uită la noi. Da, tocmai acesta este motivul pentru care nu am scris prea multe în ultima vreme. Ne-am mutat.

Totul a început în aprilie 2011, când am avut un interviu telefonic cu Zynga. Apoi totul mi s-a părut un fel de joc fără legătură cu realitatea și nici nu mi-am putut imagina la ce va duce. În iunie 2011, Zynga a venit la Moscova și a realizat o serie de interviuri, au fost luați în considerare aproximativ 60 de candidați care au promovat un interviu telefonic și au fost selectați aproximativ 15 persoane dintre aceștia (nu știu numărul exact, unii s-au răzgândit ulterior, alții refuzat imediat). Interviul s-a dovedit a fi surprinzător de simplu. Fără probleme de programare, fără întrebări complicate despre forma trapelor, în mare parte testându-ți capacitatea de a conversa. Iar cunoștințele, după părerea mea, au fost evaluate doar superficial.

Și atunci a început jocul. Mai întâi am așteptat rezultatele, apoi oferta, apoi aprobarea LCA, apoi aprobarea petiției de viză, apoi documentele din SUA, apoi coada la ambasadă, apoi verificarea suplimentară, apoi viza. Uneori mi se părea că sunt gata să renunț la tot și să marchez. Uneori mă îndoiam dacă avem nevoie de această America, până la urmă, nici Rusia nu este rea. Întregul proces a durat aproximativ șase luni, până la urmă, la jumătatea lunii decembrie am primit vize și am început să ne pregătim de plecare.

Luni a fost prima mea zi de lucru într-un loc nou. Biroul are toate condițiile nu numai pentru a lucra, ci și a locui. Mic dejun, prânz și cine de la bucătarii noștri, o mulțime de mâncare variată umplută în fiecare colț, o sală de sport, masaj și chiar un coafor. Toate acestea sunt complet gratuite pentru angajați. Mulți oameni fac naveta la serviciu cu bicicleta, iar mai multe încăperi sunt echipate pentru depozitarea vehiculelor. În general, nu am mai văzut așa ceva în Rusia. Totuși, totul are prețul lui; am fost imediat avertizați că va trebui să muncim mult. Ce înseamnă „multe”, după standardele lor, nu îmi este foarte clar.

Sper, totuși, că, în ciuda volumului de muncă, în viitorul apropiat voi putea să reiau blogging-ul și, poate, să spun ceva despre viața americană și despre munca ca programator în America. Așteaptă și vezi. Intre timp, va doresc tuturor un An Nou fericit si Craciun si ne revedem!


Pentru un exemplu de utilizare, vom tipări randamentul dividendelor companiilor rusești. Ca preț de bază, luăm prețul de închidere al acțiunii în ziua în care registrul este închis. Din anumite motive, aceste informații nu sunt disponibile pe site-ul Troika, dar sunt mult mai interesante decât valorile absolute ale dividendelor.
Atenţie! Executarea codului durează destul de mult, deoarece... Pentru fiecare promoție trebuie să faceți o cerere către serverele finam și să obțineți valoarea acesteia.

Rezultat<- NULL for(i in (1:length(divs[,1]))){ d <- divs if (d$Divs>0)( încercați(( ghilimele<- 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


În mod similar, puteți construi statistici pentru anii anteriori.

Acest filtru este utilizat în diverse domenii - de la inginerie radio până la economie. Aici vom discuta despre ideea principală, sensul, esența acestui filtru. Acesta va fi prezentat în cel mai simplu limbaj posibil.
Să presupunem că trebuie să măsurăm unele cantități ale unui anumit obiect. În inginerie radio, ele se ocupă cel mai adesea cu măsurarea tensiunilor la ieșirea unui anumit dispozitiv (senzor, antenă etc.). În exemplul cu un electrocardiograf (vezi), avem de-a face cu măsurători ale biopotențialelor pe corpul uman. În economie, de exemplu, valoarea măsurată poate fi ratele de schimb. În fiecare zi cursul de schimb este diferit, adică. în fiecare zi „măsurătorile lui” ne dau o valoare diferită. Și dacă generalizăm, putem spune că cea mai mare parte a activității umane (dacă nu toată) se rezumă la măsurători și comparații constante ale anumitor cantități (vezi cartea).
Deci, să presupunem că măsurăm constant ceva. De asemenea, presupunem că măsurătorile noastre vin întotdeauna cu o eroare - acest lucru este de înțeles, deoarece nu există instrumente de măsurare ideale și fiecare produce rezultate cu o eroare. În cel mai simplu caz, ceea ce este descris se poate reduce la următoarea expresie: z=x+y, unde x este valoarea adevărată pe care dorim să o măsurăm și care ar fi măsurată dacă am avea un aparat de măsurat ideal, y este măsura eroare introdusă de dispozitivul de măsurare, iar z este mărimea pe care am măsurat-o. Deci sarcina filtrului Kalman este să ghicească (determină) din z-ul pe care l-am măsurat, care a fost valoarea adevărată a lui x atunci când am primit z-ul nostru (care conține valoarea adevărată și eroarea de măsurare). Este necesar să se filtreze (înlăturarea) adevărata valoare a lui x din z - pentru a elimina zgomotul de distorsionare y din z. Adică, având în mână doar o sumă, trebuie să ghicim ce termeni au dat această sumă.
În lumina celor de mai sus, să formulăm acum totul după cum urmează. Să fie doar două numere aleatorii. Ni se oferă doar suma lor și ni se cere să folosim această sumă pentru a determina care sunt termenii. De exemplu, ni s-a dat numărul 12 și ei spun: 12 este suma numerelor x și y, întrebarea este cu ce sunt egali x și y. Pentru a răspunde la această întrebare, creăm o ecuație: x+y=12. Am primit o ecuație cu două necunoscute, prin urmare, strict vorbind, nu este posibil să găsim două numere care au dat această sumă. Dar mai putem spune ceva despre aceste cifre. Putem spune că acestea erau fie numerele 1 și 11, fie 2 și 10, fie 3 și 9, fie 4 și 8 etc., de asemenea, erau fie 13 și -1, fie 14 și -2, fie 15 și - 3, etc. Adică, putem folosi suma (în exemplul nostru 12) pentru a determina numeroasele opțiuni posibile care însumează exact 12. Una dintre aceste opțiuni este perechea pe care o căutăm, care de fapt a dat 12 chiar acum. observând că toate variantele de perechi de numere care dau un total de 12 formează o linie dreaptă, prezentată în Fig. 1, care este dată de ecuația x+y=12 (y=-x+12).

Fig.1

Astfel, perechea pe care o căutăm se află undeva pe această linie dreaptă. Repet, este imposibil să alegi dintre toate aceste opțiuni perechea care a existat efectiv – care a dat cifra 12, fără a cunoaște indicii suplimentare. In orice caz, în situația pentru care a fost inventat filtrul Kalman, astfel de indicii există. Se știe ceva dinainte despre numerele aleatoare. În special, așa-numita histogramă de distribuție pentru fiecare pereche de numere este cunoscută acolo. Se obține de obicei după o observare suficient de lungă a apariției acestor numere aleatoare. Adică, de exemplu, se știe din experiență că în 5% din cazuri apare de obicei perechea x=1, y=8 (notăm această pereche astfel: (1,8)), în 2% din cazuri perechea x=2, y=3 ( 2,3), în 1% din cazuri o pereche (3,1), în 0,024% din cazuri o pereche (11,1) etc. Repet, această histogramă este dată pentru toate cuplurile numere, inclusiv cele care însumează 12. Astfel, pentru fiecare pereche care însumează 12, putem spune că, de exemplu, perechea (1, 11) apare 0,8% din timp, perechea ( 2, 10) – în 1% din cazuri, pereche (3, 9) – în 1,5% din cazuri etc. Astfel, putem folosi histograma pentru a determina în ce procent din cazuri suma termenilor unei perechi este egală cu 12. Fie, de exemplu, în 30% din cazuri suma dă 12. Iar în restul de 70%, perechile rămase cad - acestea sunt (1,8), (2, 3), (3,1), etc. – cele care însumează alte numere decât 12. Mai mult, să fie, de exemplu, perechea (7,5) să apară în 27% din cazuri, în timp ce toate celelalte perechi care însumează 12 apar în 0,024%+0,8% +1 %+1,5%+…=3% din cazuri. Deci, din histogramă am aflat că numerele care însumează 12 apar în 30% din cazuri. Mai mult, știm că, dacă se aruncă un 12, atunci cel mai adesea (27% din 30%) motivul pentru aceasta este perechea (7,5). Adică dacă deja Dacă se aruncă un 12, putem spune că în 90% din cazuri (27% din 30% - sau, ceea ce este la fel, de 27 de ori din 30) motivul pentru care se aruncă 12 este perechea (7,5 ). Știind că cel mai adesea motivul primirii unei sume egale cu 12 este perechea (7,5), este logic să presupunem că, cel mai probabil, aceasta a scăzut acum. Desigur, încă nu este un fapt că, de fapt, acum numărul 12 este format din această pereche specială, totuși, data viitoare, dacă întâlnim 12 și presupunem din nou perechea (7,5), atunci în aproximativ 90% de cazuri din 100% vom avea dreptate. Dar dacă ghicim perechea (2, 10), vom avea dreptate doar în 1% din 30% din cazuri, ceea ce este egal cu 3,33% din presupunerile corecte față de 90% când ghicim perechea (7,5). Asta este - acesta este scopul algoritmului de filtru Kalman. Adică, filtrul Kalman nu garantează că nu va face o greșeală în determinarea sumandului prin sumă, dar garantează că va greși de un număr minim de ori (probabilitatea unei erori va fi minimă), deoarece folosește statistici - o histogramă a apariției perechilor de numere. De asemenea, este necesar să subliniem că algoritmul de filtrare Kalman utilizează adesea așa-numita densitate de distribuție a probabilității (PDD). Cu toate acestea, este necesar să înțelegem că sensul acolo este același cu cel al unei histograme. Mai mult, o histogramă este o funcție construită pe baza PDF și este aproximarea acesteia (vezi, de exemplu,).
În principiu, putem descrie această histogramă în funcție de două variabile - adică sub forma unei anumite suprafețe deasupra planului xy. Acolo unde suprafața este mai mare, probabilitatea de a obține perechea corespunzătoare este mai mare. Figura 2 prezintă o astfel de suprafață.


Fig.2

După cum puteți vedea deasupra dreptei x+y=12 (care are variante de perechi de dare în total 12), punctele de suprafață sunt situate la diferite înălțimi, iar cea mai mare înălțime este pentru varianta cu coordonate (7,5). Și când întâlnim o sumă egală cu 12, în 90% din cazuri motivul apariției acestei sume este tocmai perechea (7,5). Acestea. Această pereche, care însumează 12, este cea care are cea mai mare probabilitate de apariție, cu condiția ca suma să fie 12.
Astfel, ideea din spatele filtrului Kalman este descrisă aici. Pe această bază sunt construite tot felul de modificări - într-un singur pas, recurent în mai multe etape etc. Pentru un studiu mai aprofundat al filtrului Kalman, recomand cartea: Van Trees G. Theory of detection, estimation and modulation.

p.s. Pentru cei care sunt interesați de explicațiile conceptelor de matematică, așa cum se spune „pe degete”, le putem recomanda această carte și în special capitolele din secțiunea „Matematică” (puteți achiziționa cartea în sine sau capitole individuale din ea). ).

Pe Internet, inclusiv pe Habré, puteți găsi o mulțime de informații despre filtrul Kalman. Dar este dificil să găsești o concluzie ușor digerabilă la formulele în sine. Fără o concluzie, toată această știință este percepută ca un fel de șamanism, formulele arată ca un set fără chip de simboluri și, cel mai important, multe afirmații simple aflate la suprafața teoriei sunt dincolo de înțelegere. Scopul acestui articol va fi să vorbim despre acest filtru într-o limbă cât mai accesibilă.
Filtrul Kalman este un instrument puternic de filtrare a datelor. Principiul său principal este că filtrarea folosește informații despre fizica fenomenului în sine. Să presupunem că, dacă filtrezi datele din vitezometrul unei mașini, atunci inerția mașinii îți dă dreptul de a percepe salturi prea rapide de viteză ca o eroare de măsurare. Filtrul Kalman este interesant pentru că, într-un fel, este cel mai bun filtru. Vom discuta mai detaliat mai jos ce înseamnă exact cuvintele „cel mai bun”. La sfârșitul articolului voi arăta că în multe cazuri formulele pot fi simplificate în așa măsură încât nu mai rămâne aproape nimic din ele.

Program educațional

Înainte de a face cunoștință cu filtrul Kalman, vă sugerez să amintim câteva definiții și fapte simple din teoria probabilității.

Valoare aleatoare

Când spun că este dată o variabilă aleatoare, înseamnă că această valoare poate lua valori aleatoare. Ia valori diferite cu probabilități diferite. Când aruncați, să zicem, un zar, va apărea un set discret de valori: . Când vorbim, de exemplu, despre viteza unei particule rătăcitoare, atunci, evident, avem de a face cu un set continuu de valori. Vom nota valorile „eliminate” ale unei variabile aleatoare prin , dar uneori vom folosi aceeași literă cu care notăm variabila aleatoare: .
În cazul unui set continuu de valori, o variabilă aleatoare este caracterizată printr-o densitate de probabilitate, care ne dictează că probabilitatea ca o variabilă aleatoare să „cădă” într-o mică vecinătate a unui punct de lungime este egală cu . După cum putem vedea din imagine, această probabilitate este egală cu aria dreptunghiului umbrit de sub grafic:

Destul de des în viață, variabilele aleatoare sunt distribuite gaussian atunci când densitatea de probabilitate este egală cu .

Vedem că funcția are forma unui clopot cu un centru într-un punct și o lățime caracteristică de ordine.
Din moment ce vorbim despre distribuția Gauss, ar fi păcat să nu mai vorbim de unde provine. Așa cum numerele sunt bine stabilite în matematică și se găsesc în locurile cele mai neașteptate, distribuția gaussiană și-a prins rădăcini adânci în teoria probabilității. O afirmație remarcabilă care explică parțial omniprezența gaussiană este aceasta:
Să existe o variabilă aleatorie cu o distribuție arbitrară (de fapt, există unele restricții asupra acestui arbitrar, dar nu sunt deloc stricte). Să efectuăm experimente și să calculăm suma valorilor „abandonate” ale unei variabile aleatorii. Să facem multe astfel de experimente. Este clar că de fiecare dată vom primi o valoare diferită a sumei. Cu alte cuvinte, această sumă este ea însăși o variabilă aleatoare cu propria sa lege specifică de distribuție. Se pare că atunci când este suficient de mare, legea distribuției acestei sume tinde către distribuția gaussiană (apropo, lățimea caracteristică a „clopotului” crește ca ). Citim mai detaliat pe Wikipedia: teorema limitei centrale. În viață, de foarte multe ori există cantități care sunt suma unui număr mare de variabile aleatoare independente distribuite identic și, prin urmare, sunt distribuite gaussian.

Valoarea medie

Valoarea medie a unei variabile aleatoare este ceea ce vom obține în limită dacă efectuăm o mulțime de experimente și calculăm media aritmetică a valorilor scăzute. Valoarea medie este desemnată în moduri diferite: matematicienilor le place să o denote prin (așteptare matematică), iar matematicienilor străini prin (așteptare). Fizicienii prin sau. Îl vom desemna în mod străin: .
De exemplu, pentru o distribuție Gaussiană, media este .

Dispersia

În cazul distribuției gaussiene, vedem clar că variabila aleatoare preferă să se încadreze într-o anumită vecinătate a valorii sale medii. După cum se poate observa din grafic, răspândirea caracteristică a valorilor este de ordinul . Cum putem estima această răspândire a valorilor pentru o variabilă aleatorie arbitrară dacă îi cunoaștem distribuția? Puteți desena un grafic al densității sale de probabilitate și puteți estima lățimea caracteristică cu ochiul. Dar preferăm să mergem pe calea algebrică. Puteți găsi lungimea medie a abaterii (modulul) de la valoarea medie: . Această valoare va fi o bună estimare a răspândirii caracteristice a valorilor. Dar tu și cu mine știm foarte bine că folosirea modulelor în formule este o bătaie de cap, așa că această formulă este rar folosită pentru a estima dispersia caracteristică.
O modalitate mai simplă (simplu din punct de vedere al calculelor) este să găsiți . Această cantitate se numește dispersie și este adesea notată ca . Rădăcina varianței se numește abatere standard. Abaterea standard este o estimare bună a răspândirii unei variabile aleatorii.
De exemplu, pentru distribuția Gaussiană, putem calcula că varianța definită mai sus este exact egală cu , ceea ce înseamnă că abaterea standard este egală cu , ceea ce este de acord foarte bine cu intuiția noastră geometrică.
De fapt, există o mică înșelătorie ascunsă aici. Cert este că în definiția distribuției gaussiene, sub exponent există o expresie. Aceste două se află la numitor tocmai pentru ca abaterea standard să fie egală cu coeficientul. Adică formula de distribuție gaussiană în sine este scrisă într-o formă special adaptată, astfel încât să îi calculăm abaterea standard.

Variabile aleatoare independente

Variabilele aleatoare pot fi dependente sau nu. Imaginați-vă că aruncați un ac într-un avion și înregistrați coordonatele ambelor capete. Aceste două coordonate sunt dependente; ele sunt legate de condiția ca distanța dintre ele să fie întotdeauna egală cu lungimea acului, deși sunt variabile aleatorii.
Variabilele aleatoare sunt independente dacă rezultatul primei este complet independent de rezultatul celei de-a doua. Dacă variabilele aleatoare sunt independente, atunci valoarea medie a produsului lor este egală cu produsul valorilor lor medii:

Dovada

De exemplu, a avea ochi albaștri și a absolvi școala cu o medalie de aur sunt variabile aleatoare independente. Dacă medaliați cu ochi albaștri, să zicem, medaliați cu aur, atunci medaliați cu ochi albaștri. Acest exemplu ne spune că, dacă variabilele aleatoare sunt specificate prin densitățile lor de probabilitate și , atunci independența acestor valori este exprimată prin faptul că densitatea probabilității ( prima valoare a renunțat și a doua) se găsește prin formula:

Din aceasta rezultă imediat că:

După cum puteți vedea, demonstrația a fost efectuată pentru variabile aleatoare care au un spectru continuu de valori și sunt specificate prin densitatea lor de probabilitate. În alte cazuri, ideea de dovadă este similară.

filtru Kalman

Formularea problemei

Să notăm valoarea pe care o vom măsura și apoi o vom filtra. Aceasta ar putea fi poziția, viteza, accelerația, umiditatea, gradul de miros, temperatura, presiunea etc.
Să începem cu un exemplu simplu, care ne va conduce la formularea problemei generale. Imaginați-vă că avem o mașină controlată prin radio care poate merge doar înainte și înapoi. Noi, cunoscând greutatea mașinii, forma, suprafața drumului etc., am calculat modul în care joystick-ul de control afectează viteza de deplasare.

Atunci coordonatele mașinii se vor schimba conform legii:

În viața reală, nu putem ține cont în calculele noastre de micile perturbări care acționează asupra mașinii (vânt, denivelări, pietricele de pe drum), astfel încât viteza reală a mașinii va diferi de cea calculată. O variabilă aleatorie va fi adăugată în partea dreaptă a ecuației scrise:

Avem instalat pe mașină un senzor GPS care încearcă să măsoare adevărata coordonată a mașinii și, desigur, nu o poate măsura cu precizie, ci o măsoară cu o eroare, care este și o variabilă aleatorie. Ca urmare, primim date eronate de la senzor:

Sarcina este ca, cunoscând citirile incorecte ale senzorului, să găsească o bună aproximare pentru coordonatele adevărate a mașinii.
În formularea problemei generale, orice poate fi responsabil de coordonată (temperatură, umiditate...), iar membrul responsabil cu controlul sistemului din exterior îl vom desemna (în exemplul cu mașina). Ecuațiile pentru coordonatele și citirile senzorului vor arăta astfel:

Să discutăm în detaliu ce știm:

Este de remarcat faptul că sarcina de filtrare nu este o sarcină de netezire. Nu încercăm să netezim datele senzorului, încercăm să obținem cea mai apropiată valoare de coordonatele reale.

Algoritmul Kalman

Vom argumenta prin inducție. Imaginați-vă că la pasul al treilea am găsit deja o valoare filtrată de la senzor care aproximează bine coordonatele adevărate a sistemului. Nu uitați că cunoaștem ecuația care controlează modificarea coordonatei necunoscute:

Prin urmare, fără a primi încă valoarea de la senzor, putem presupune că la pas sistemul va evolua conform acestei legi și senzorul va arăta ceva apropiat de . Din păcate, nu putem spune încă nimic mai precis. Pe de altă parte, în timpul pasului vom avea o citire inexactă a senzorului pe mâini.
Ideea lui Kalman este următoarea. Pentru a obține cea mai bună aproximare a coordonatei adevărate, trebuie să alegem o cale de mijloc între citirea inexactă a senzorului și predicția noastră despre ceea ce ne așteptam să vadă. Vom atribui o pondere citirii senzorului și o pondere va rămâne pe valoarea prezisă:

Coeficientul se numește coeficientul Kalman. Depinde de pasul de iterație, deci ar fi mai corect să scriem , dar deocamdată, pentru a nu aglomera formulele de calcul, vom omite indicele acestuia.
Trebuie să alegem coeficientul Kalman astfel încât valoarea coordonatei optime rezultată să fie cea mai apropiată de cea adevărată. De exemplu, dacă știm că senzorul nostru este foarte precis, atunci vom avea mai multă încredere în citirea lui și vom acorda mai multă greutate valorii (aproape de una). Dacă senzorul, dimpotrivă, nu este deloc precis, atunci ne vom concentra mai mult pe valoarea prezisă teoretic.
În general, pentru a găsi valoarea exactă a coeficientului Kalman, trebuie doar să minimizați eroarea:

Folosim ecuațiile (1) (cele din fundalul albastru din cadru) pentru a rescrie expresia erorii:

Dovada

Acum este momentul să discutăm ce înseamnă expresia minimize error? La urma urmei, eroarea, după cum vedem, este ea însăși o variabilă aleatorie și ia valori diferite de fiecare dată. Nu există într-adevăr o abordare unică pentru a defini ce înseamnă să ai o eroare minimă. La fel ca și în cazul dispersiei unei variabile aleatoare, atunci când am încercat să estimăm lățimea caracteristică a dispersiei acesteia, aici vom alege cel mai simplu criteriu de calcul. Vom minimiza media erorii pătrate:

Să notăm ultima expresie:

Dovada

Din faptul că toate variabilele aleatoare incluse în expresia pentru sunt independente, rezultă că toți termenii „încrucișați” sunt egali cu zero:

Am folosit faptul că , atunci formula pentru varianță pare mult mai simplă: .

Această expresie capătă o valoare minimă atunci când (echivalăm derivata cu zero):

Aici scriem deja o expresie pentru coeficientul Kalman cu indicele pasului, prin urmare subliniem că depinde de pasul de iterație.
Inlocuim valoarea optima rezultata in expresia pentru , pe care am minimizat-o. Primim;

Problema noastră este rezolvată. Am obținut o formulă iterativă pentru calcularea coeficientului Kalman.
Să rezumam cunoștințele noastre dobândite într-un singur cadru:

Exemplu

Cod Matlab

Curata tot; N=100% număr de probe a=0,1% accelerare sigmaPsi=1 sigmaEta=50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); pentru t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi); z(t+1)=x(t+1)+normrnd(0,sigmaEta); Sfârşit; %kalman filtru xOpt(1)=z(1); eOpt(1)=sigmaEta; pentru 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) capăt; plot(k,xOpt,k,z,k,x)

Analiză

Dacă urmăriți cum se modifică coeficientul Kalman cu pașii de iterație, puteți arăta că se stabilizează întotdeauna la o anumită valoare. De exemplu, atunci când erorile pătratice medii ale senzorului și ale modelului au un raport de zece la unu, atunci graficul coeficientului Kalman în funcție de pasul de iterație arată astfel:

În exemplul următor, vom discuta despre modul în care acest lucru ne poate face viața mult mai ușoară.

Al doilea exemplu

În practică, se întâmplă adesea să nu știm nimic despre modelul fizic al ceea ce filtrem. De exemplu, ați vrut să filtrați citirile din accelerometrul dvs. preferat. Nu știți dinainte după ce lege intenționați să rotiți accelerometrul. Cele mai multe informații pe care le puteți culege este variația erorii senzorului. Într-o situație atât de dificilă, toată ignoranța asupra modelului de mișcare poate fi condusă într-o variabilă aleatorie:

Dar, sincer vorbind, un astfel de sistem nu mai satisface condițiile pe care le-am impus variabilei aleatoare, deoarece acum toată fizica necunoscută a mișcării este ascunsă acolo și, prin urmare, nu putem spune că în diferite momente de timp erorile de model sunt independente de reciproc și că valorile lor medii sunt zero. În acest caz, în general, teoria filtrului Kalman nu este aplicabilă. Dar, nu vom acorda atenție acestui fapt, ci vom aplica în mod prostesc tot colosul de formule, selectând coeficienții cu ochii, astfel încât datele filtrate să arate frumos.
Dar poți lua o cale diferită, mult mai simplă. După cum am văzut mai sus, coeficientul Kalman se stabilizează întotdeauna la valoare pe măsură ce crește. Prin urmare, în loc să selectăm coeficienți și să găsim coeficientul Kalman folosind formule complexe, putem considera că acest coeficient este întotdeauna o constantă și selectam numai această constantă. Această presupunere nu va strica aproape nimic. În primul rând, folosim deja ilegal teoria Kalman, iar în al doilea rând, coeficientul Kalman se stabilizează rapid la o constantă. În cele din urmă, totul va fi mult mai simplu. Nu avem deloc nevoie de formule din teoria lui Kalman, trebuie doar să selectăm o valoare acceptabilă și să o introducem în formula iterativă:

Următorul grafic prezintă datele filtrate în două moduri diferite de la un senzor fictiv. Cu condiția să nu știm nimic despre fizica fenomenului. Prima metodă este sinceră, cu toate formulele din teoria lui Kalman. Iar al doilea este simplificat, fără formule.

După cum putem vedea, metodele nu sunt aproape deloc diferite. O mică diferență se observă doar la început, când coeficientul Kalman nu s-a stabilizat încă.

Discuţie

După cum am văzut, ideea principală a filtrului Kalman este de a găsi un coeficient astfel încât valoarea filtrată

în medie, ar diferi cel mai puțin de valoarea reală a coordonatei. Vedem că valoarea filtrată este o funcție liniară a citirii senzorului și a valorii filtrate anterioare. Și valoarea filtrată anterioară este, la rândul său, o funcție liniară a citirii senzorului și valoarea filtrată anterioară. Și așa mai departe până când lanțul este complet întors. Adică, valoarea filtrată depinde de toata lumea citirile anterioare ale senzorului liniar:

Prin urmare, filtrul Kalman se numește filtru liniar.
Se poate dovedi că dintre toate filtrele liniare, filtrul Kalman este cel mai bun. Cel mai bun în sensul că eroarea pătrată medie a filtrului este minimă.

Caz multidimensional

Întreaga teorie a filtrului Kalman poate fi generalizată la cazul multidimensional. Formulele de acolo arată puțin mai înfricoșătoare, dar ideea de a le deriva este aceeași ca și în cazul unidimensional. Le puteți vedea în acest articol minunat: http://habrahabr.ru/post/140274/.
Și în acest minunat video Este dat un exemplu de utilizare a acestora.

filtru Kalman

Filtrul Kalman este utilizat pe scară largă în aplicații de inginerie și econometrie, de la sisteme radar și de viziune până la estimarea parametrilor modelelor macroeconomice. Filtrarea Kalman este o parte importantă a teoriei controlului și joacă un rol important în crearea sistemelor de control. Împreună cu un controler liniar-quadratic, filtrul Kalman face posibilă rezolvarea problemei controlului liniar-quadratic Gaussian. Filtrul Kalman și controlerul liniar pătratic sunt o soluție posibilă la majoritatea problemelor fundamentale din teoria controlului.

În majoritatea aplicațiilor, numărul de parametri care definesc starea unui obiect este mai mare decât numărul de parametri observabili disponibili pentru măsurare. Folosind un model al unui obiect bazat pe un număr de măsurători disponibile, filtrul Kalman permite obținerea unei estimări a stării interne.

Filtrul Kalman este conceput pentru a estima recursiv vectorul de stare al unui sistem dinamic cunoscut a priori, adică pentru a calcula starea curentă a sistemului, este necesar să se cunoască măsurarea curentă, precum și starea anterioară a filtrului în sine. . Astfel, filtrul Kalman, ca multe alte filtre recursive, este implementat într-o reprezentare în timp, mai degrabă decât într-o frecvență.

Un exemplu clar al capabilităților filtrului este obținerea de estimări precise, actualizate continuu ale poziției și vitezei unui obiect, pe baza rezultatelor unei serii de timp de măsurători inexacte ale locației acestuia. De exemplu, în radar sarcina este de a urmări o țintă, de a determina locația, viteza și accelerația acesteia, în timp ce rezultatele măsurătorilor ajung treptat și sunt foarte zgomotoase. Filtrul Kalman folosește un model probabilistic al dinamicii țintei care specifică tipul de mișcare probabilă a obiectului, care reduce impactul zgomotului și oferă estimări bune ale poziției obiectului în prezent, viitor sau trecut.

Introducere

Filtrul Kalman operează cu conceptul de vector de stare a sistemului (un set de parametri care descriu starea sistemului la un anumit moment în timp) și descrierea sa statistică. În cazul general, dinamica unui anumit vector de stare este descrisă de densitățile de probabilitate ale distribuției componentelor sale în fiecare moment de timp. Dacă aveți un anumit model matematic de observații ale sistemului, precum și un model de modificare a priori a parametrilor vectorului de stare (și anume, ca proces formativ Markov), puteți scrie o ecuație pentru densitatea de probabilitate posterioară a vectorul de stare în orice moment. Această ecuație diferențială se numește ecuația Stratonovich. Ecuația Stratonovich nu poate fi rezolvată în forma sa generală. O soluție analitică poate fi obținută numai în cazul unui număr de restricții (ipoteze):

  • Gaussianitatea densităților de probabilitate a priori și posterioare ale vectorului de stare în orice moment (inclusiv cel inițial)
  • Gaussianitatea zgomotului de modelare
  • Gaussianitatea zgomotului de observare
  • albul zgomotului de observare
  • liniaritatea modelului de observare
  • liniaritatea modelului procesului de formare (care, reamintim, trebuie să fie un proces Markov)

Filtrul Kalman clasic este o ecuație pentru calcularea primului și al doilea moment al densității de probabilitate posterioară (în sensul unui vector de așteptări matematice și a unei matrice de varianțe, inclusiv a celor reciproce) sub restricții date. Datorită faptului că pentru densitatea normală de probabilitate așteptarea matematică și matricea de dispersie definesc complet densitatea de probabilitate, putem spune că filtrul Kalman calculează densitatea de probabilitate posterioară a vectorului de stare în fiecare moment în timp. Aceasta înseamnă că descrie complet vectorul de stare ca o mărime vectorială aleatorie.

Valorile calculate ale așteptărilor matematice în acest caz sunt estimări optime în funcție de criteriul erorii rădăcină-medie-pătrată, care determină utilizarea pe scară largă a acesteia.

Există mai multe varietăți de filtru Kalman, care diferă în aproximări și trucuri care trebuie folosite pentru a reduce filtrul la forma descrisă și pentru a-i reduce dimensiunea:

  • Filtru Kalman extins (EKF). Reducerea modelelor observaționale neliniare și a procesului de modelare folosind liniarizarea prin extinderea seriei Taylor.
  • Filtru Kalman fără parfum (UKF). Folosit în probleme în care liniarizarea simplă duce la distrugerea conexiunilor utile între componentele vectorului de stare. În acest caz, „liniarizarea” se bazează pe transformarea fără parfum.
  • Filtrul Ansamblului Kalman (EnKF). Folosit pentru a reduce dimensiunea unei probleme.
  • Opțiunile sunt posibile cu un filtru suplimentar neliniar, care face posibilă reducerea observațiilor non-Gauss la cele normale.
  • Sunt posibile opțiuni cu filtru de „albire”, permițându-vă să lucrați cu zgomot „colorat”.
  • etc.

Modelul de sistem dinamic utilizat

Filtrele Kalman se bazează pe sisteme dinamice liniare eșantionate în timp. Astfel de sisteme sunt modelate prin lanțuri Markov folosind operatori liniari și termeni cu o distribuție normală. Starea sistemului este descrisă de un vector de dimensiune finită - vectorul de stare. La fiecare pas de timp, un operator liniar acționează asupra vectorului de stare și îl transferă într-un alt vector de stare (modificare deterministă a stării), se adaugă un anumit vector de zgomot normal (factori aleatori) și, în cazul general, un vector de control care modelează influența sistemului de control. Filtrul Kalman poate fi văzut ca fiind analog modelelor Markov ascunse, cu diferența că variabilele care descriu starea sistemului sunt elemente ale unui set infinit de numere reale (spre deosebire de un set finit de spațiu de stări în modelele Markov ascunse). În plus, modelele Markov ascunse pot folosi distribuții arbitrare pentru valorile vectoriale de stare ulterioare, spre deosebire de filtrul Kalman, care utilizează un model de zgomot distribuit normal. Există o relație strictă între filtrul Kalman și ecuațiile modelului Markov ascunse. O trecere în revistă a acestor și a altor modele este oferită de Roweis și Chahramani (1999).

Când se utilizează un filtru Kalman pentru a obține estimări ale vectorului de stare al unui proces dintr-o serie de măsurători zgomotoase, este necesar să se prezinte un model al acestui proces în conformitate cu structura filtrului - sub forma unei ecuații matriceale a unui anumit tip. Pentru fiecare ritm k funcţionarea filtrului, este necesară determinarea matricelor în conformitate cu descrierea de mai jos: evoluţia procesului F k; matricea de observatie H k; matricea de covarianță a procesului Q k; matricea de covarianță a zgomotului de măsurare R k; în prezența acțiunilor de control - o matrice a coeficienților acestora B k .

Ilustrație a modului în care funcționează filtrul. Matricele sunt marcate cu pătrate. Elipsele marchează matrice ale distribuțiilor normale multivariate (inclusiv mediile și covarianțele). Vectorii sunt lăsați neîncercuiți. În cel mai simplu caz, unele matrici nu se schimbă în timp (nu depind de index k), dar sunt încă folosite de filtru în fiecare ciclu de operare.

Modelul sistem/proces presupune că starea adevărată la momentul respectiv k este obținută din starea adevărată în momentul de față k−1 conform ecuației:

,
  • F k- matricea de evolutie a procesului/sistemului care afecteaza vectorul X k−1 (vector de stare în acest moment k−1 );
  • B k- matricea de control, care se aplica vectorului actiunilor de control u k ;
  • w k- proces normal aleator cu așteptare matematică zero și matrice de covarianță Q k, care descrie natura aleatorie a evoluției sistemului/procesului:

Pe moment k se face observarea (măsurarea). z k vector de stare adevărată X k, care sunt legate între ele prin ecuația:

Unde H k- matrice de măsurare care conectează vectorul de stare reală și vectorul măsurătorilor efectuate, v k- zgomot gaussian alb al măsurătorilor cu așteptare matematică zero și matrice de covarianță R k :

Starea inițială și vectorii proceselor aleatorii la fiecare ciclu de ceas ( X 0 , w 1 , …, w k , v 1 , …, v k) sunt considerate independente.

Multe sisteme dinamice reale nu pot fi descrise cu acuratețe de acest model. În practică, dinamica care nu este luată în considerare în model poate strica serios performanța filtrului, mai ales atunci când se lucrează cu un semnal de intrare stocastic necunoscut. Mai mult decât atât, dinamica care nu este luată în considerare în model poate face ca filtrul să fie instabil. Pe de altă parte, zgomotul alb independent ca semnal nu va determina divergerea algoritmului. Problema separării zgomotului de măsurare de dinamica care nu este luată în considerare în model este complexă; se rezolvă folosind teoria sistemelor de control robuste.

filtru Kalman

Filtrul Kalman este un tip de filtru recursiv. Pentru a calcula evaluarea stării sistemului pentru ciclul curent de funcționare, este nevoie de o evaluare a stării (sub forma unei evaluări a stării sistemului și a unei estimări a erorii în determinarea acestei stări) la ciclul anterior de funcționare și măsurători la ciclul curent. Această proprietate o diferențiază de filtrele de pachete, care necesită cunoașterea istoricului măsurătorilor și/sau estimărilor în timpul ciclului curent de operare. Mai mult, prin notație vom înțelege estimarea vectorului adevărat în acest moment n luând în considerare măsurătorile din momentul începerii lucrărilor până la m inclusiv.

Starea filtrului este specificată de două variabile:

Iterațiile filtrului Kalman sunt împărțite în două faze: extrapolare și corecție. În timpul extrapolării, filtrul primește o evaluare preliminară a stării sistemului (în literatura în limba rusă este adesea notat , unde înseamnă „extrapolare” și k- numărul căpușului la care a fost primit) pentru pasul curent conform evaluării finale a stării din pasul precedent (sau o estimare preliminară pentru următorul tick conform evaluării finale a pasului curent, în funcție de interpretare). Această estimare preliminară se mai numește și estimare a priori a stării, deoarece nu utilizează observații ale pasului corespunzător pentru a o obține. În faza de corecție, extrapolarea a priori este completată cu măsurători de curent relevante pentru a corecta estimarea. Estimarea ajustată se mai numește și estimarea stării posterioare, sau pur și simplu estimarea vectorului de stare. De obicei, aceste două faze se alternează: extrapolarea se realizează pe baza rezultatelor corecției până la următoarea observație, iar corectarea se realizează împreună cu observațiile disponibile la pasul următor etc. Totuși, este posibilă o altă dezvoltare a evenimentelor, dacă pt. oarecare motiv pentru care observația sa dovedit a fi indisponibilă, atunci etapa de corecție poate fi omisă și extrapolată din estimarea neajustată (extrapolare a priori). De asemenea, dacă măsurătorile independente sunt disponibile numai în anumite cicluri de lucru, corecțiile sunt încă posibile (de obicei folosind o matrice de observație diferită H k ).

Etapa extrapolării

Etapa de corectare

Abatere primită la pas k observații din observația așteptată din extrapolare:
Matricea de covarianță pentru vectorul de abatere (vector de eroare):
Matricea de câștig optim Kalman, formată pe baza matricelor de covarianță ale extrapolării existente a vectorului de stare și a măsurătorilor obținute (prin matricea de covarianță a vectorului de deviație):
Corectarea extrapolării obținute anterior a vectorului de stare - obținerea unei estimări a vectorului de stare a sistemului:
Calculul matricei de covarianță pentru estimarea vectorului de stare a sistemului:

Expresia pentru matricea de covarianță a estimării vectorului de stare a sistemului este valabilă numai atunci când se utilizează vectorul optim de coeficienți dat. În general, această expresie are o formă mai complexă.

Invariante

Dacă modelul este absolut precis și condițiile inițiale și sunt specificate cu absolut exactitate, atunci următoarele valori sunt păstrate după orice număr de iterații ale filtrului - acestea sunt invariante:

Așteptările matematice ale estimărilor și extrapolărilor vectorului de stare a sistemului și matricelor de eroare sunt vectori nuli:

unde este așteptarea matematică.

Matricele de covarianță calculate ale extrapolărilor, estimările stării sistemului și vectorii de eroare coincid cu matricele de covarianță adevărate:

Exemplu de construcție a filtrului

Să ne imaginăm un cărucior stând pe șine infinit de lungi în absența frecării. Inițial, este în repaus în poziția 0, dar sub influența unor factori aleatori este supus unei accelerații aleatorii. Măsurăm poziția căruciorului la fiecare ∆ t secunde, dar măsurătorile sunt inexacte. Dorim să obținem estimări ale poziției căruciorului și vitezei acestuia. Să aplicăm filtrul Kalman acestei probleme și să determinăm toate matricele necesare.

În această problemă matricele F , H , RȘi Q nu depinde de timp, vom omite indicii lor. În plus, nu controlăm căruciorul, deci matricea de control B absent.

Coordonatele și viteza căruciorului sunt descrise de un vector în spațiul liniar al stărilor

unde este viteza (prima derivată a coordonatei în raport cu timpul).

Vom presupune că între ( k−1)-lea și kîn ciclul al treilea căruciorul se deplasează cu accelerație constantă un k, distribuit conform legii normale cu așteptare matematică zero și abatere standard σ a. În conformitate cu mecanica newtoniană, putem scrie

.

Matricea de covarianță a efectelor aleatoare

(σ A- scalar).

La fiecare pas de lucru se masoara pozitia caruciorului. Să presupunem că eroarea de măsurare vk are o distribuție normală cu așteptări matematice zero și abatere standard σ z. Apoi

iar matricea de covarianță a zgomotului de observație are forma

.

Poziția inițială a căruciorului este cunoscută exact

, .

Dacă poziția și viteza căruciorului sunt cunoscute doar aproximativ, atunci matricea de varianță poate fi inițializată cu un număr suficient de mare L, astfel încât numărul să depășească varianța măsurătorilor de coordonate

, .

În acest caz, în primele cicluri de funcționare, filtrul va folosi rezultatele măsurătorilor cu o greutate mai mare decât informațiile disponibile a priori.

Formule derivate

Matricea de covarianță a estimării vectorului de stare

Prin definiția matricei de covarianță P k|k

înlocuiți expresia pentru a estima vectorul de stare

și scrieți expresia pentru vectorul de eroare

și vectori de măsurare

scoatem vectorul de eroare de măsurare v k

deoarece vectorul de eroare de măsurare v k nu este corelat cu alte argumente, obținem expresia

în conformitate cu proprietățile covarianței vectoriale, această expresie este transformată în forma

înlocuind expresia pentru matricea de covarianță a extrapolării vectorului de stare cu P k|k−1 și determinarea matricei de covarianță a zgomotului de observație pe R k, primim

Expresia rezultată este valabilă pentru o matrice de coeficienți arbitrare, dar dacă este o matrice de coeficienți optimi Kalman, atunci această expresie pentru matricea de covarianță poate fi simplificată.

Matricea optimă a câștigului

Filtrul Kalman minimizează suma pătratelor așteptărilor matematice ale erorilor de estimare a vectorului de stare.

Vector de eroare de estimare a vectorului de stare

Sarcina este de a minimiza suma așteptărilor matematice ale pătratelor componentelor unui vector dat

,

ceea ce este echivalent cu minimizarea urmei matricei de covarianță a estimării vectorului de stare P k|k. Să substituim expresiile existente în expresia pentru matricea de covarianță a estimării vectorului de stare și să o completăm până la un pătrat complet:

Rețineți că ultimul termen este matricea de covarianță a unei variabile aleatoare, deci urma sa este nenegativă. Minimul de urmărire este atins atunci când ultimul termen este setat la zero:

Se susține că această matrice este cea dorită și, atunci când este utilizată ca matrice de coeficienți în filtrul Kalman, minimizează suma erorilor pătratice medii în estimarea vectorului de stare.

Matricea de covarianță a estimării vectorului de stare folosind matricea coeficienților optimi

Expresia pentru matricea de covarianță a estimării vectorului de stare P k|k atunci când se utilizează matricea coeficienților optimi va lua forma:

Această formulă este mai simplă din punct de vedere computațional și, prin urmare, este aproape întotdeauna utilizată în practică, dar este corectă numai atunci când se utilizează matricea coeficienților optimi. Dacă, din cauza acurateței de calcul scăzute, apare o problemă cu stabilitatea de calcul sau este utilizată în mod specific o matrice de coeficienți, alta decât cea optimă, ar trebui utilizată o formulă generală pentru matricea de covarianță a estimării vectorului de stare.