Folosind filtrul Kalman pentru a filtra valorile obținute de la senzori. Filtru Kalman Filtru Kalman optim

Pe Internet, inclusiv pe Habré, puteți găsi o mulțime de informații despre filtrul Kalman. Dar este greu să găsești o derivație ușor digerabilă a formulelor î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 care se află la suprafața unei teorii sunt dincolo de înțelegere. Scopul acestui articol va fi acela de a vorbi despre acest filtru într-un limbaj cât mai accesibil.
Filtrul Kalman este un instrument puternic de filtrare a datelor. Principiul său principal este că la filtrare se utilizează informații despre fizica fenomenului în sine. De exemplu, dacă filtrați datele din vitezometrul unei mașini, atunci inerția mașinii vă oferă 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 finalul articolului, voi arăta că, în multe cazuri, formulele pot fi simplificate în așa măsură încât aproape nimic nu va rămâne din ele.

Program educativ

Înainte de a face cunoștință cu filtrul Kalman, îmi propun să reamintesc 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ă cantitate poate lua valori aleatoare. Ia valori diferite cu probabilități diferite. Când aruncați, să zicem, un zar, un set discret de valori va renunța:. Când vine vorba, de exemplu, de viteza unei particule rătăcitoare, atunci, evident, trebuie să se ocupe de un set continuu de valori. Vom nota valorile „eliminate” ale unei variabile aleatoare cu, dar uneori, vom folosi aceeași literă, pe care o folosim pentru a desemna o variabilă aleatoare:.
În cazul unui set continuu de valori, variabila aleatoare se caracterizează prin densitatea de probabilitate, care ne dictează că probabilitatea ca variabila aleatoare să „cădă” într-o mică vecinătate a unui punct cu 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 gaussiene atunci când densitatea de probabilitate este egală.

Vedem ca functia are forma unui clopot centrat intr-un punct si cu o latime caracteristica ordinului.
Întrucât vorbim despre distribuția Gauss, ar fi un păcat să nu mai vorbim de unde a venit. Așa cum numerele sunt bine stabilite în matematică și apar în locurile cele mai neașteptate, tot așa și distribuția gaussiană și-a luat rădăcini adânci în teoria probabilității. O afirmație remarcabilă care explică parțial omniprezența gaussiană este următoarea:
Să existe o variabilă aleatoare cu o distribuție arbitrară (de fapt, există unele restricții asupra acestui arbitrar, dar nu sunt deloc rigide). Să efectuăm experimente și să calculăm suma valorilor „abandonate” ale variabilei aleatoare. Să facem multe dintre aceste 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 de distribuție. Se pare că pentru suficient de mare, legea de distribuție a acestei sume tinde către distribuția gaussiană (apropo, lățimea caracteristică a „clopotului” crește ca). Citiți mai multe în Wikipedia: Teorema limitei centrale. În viață, de foarte multe ori există cantități care sunt alcătuite dintr-un număr mare de variabile aleatoare independente distribuite egal și, prin urmare, sunt distribuite conform gaussianului.

Rău

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

Dispersia

În cazul distribuției gaussiene, vedem în mod clar că variabila aleatoare preferă să cadă în apropierea valorii sale medii. După cum se poate observa din grafic, împrăștierea caracteristică a valorilor de ordine. 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ă urmăm calea algebrică. Puteți găsi lungimea medie a abaterii (modulului) de la medie:. Această valoare va fi o bună estimare a răspândirii tipice 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 răspândirea caracteristică.
O modalitate mai ușoară (simplu din punct de vedere al calculelor) este să găsești. Această valoare se numește varianță și este adesea menționată 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 o distribuție Gaussiană, putem calcula că varianța definită mai sus este exact egală, ceea ce înseamnă că abaterea standard este egală, ceea ce este de acord foarte bine cu intuiția noastră geometrică.
De fapt, există o mică fraudă ascunsă aici. Cert este că în definiția distribuției gaussiene, sub exponent se află expresia. Aceste două din numitor se află tocmai astfel încât abaterea standard să fie egală cu coeficientul. Adică formula de distribuție Gaussiană în sine este scrisă într-o formă special ascuțită, astfel încât să luăm în considerare abaterea ei standard.

Variabile aleatoare independente

Variabilele aleatoare sunt dependente și nu. Imaginați-vă că aruncați un ac într-un plan și notați coordonatele ambelor capete. Aceste două coordonate sunt dependente, sunt legate de condiția ca distanța dintre ele să fie întotdeauna egală cu lungimea acului, deși sunt valori aleatorii.
Variabilele aleatoare sunt independente dacă rezultatul primei dintre ele este complet independent de rezultatul celei de-a doua dintre ele. 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 liceul cu o medalie de aur sunt variabile aleatoare independente. Dacă există 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 și sunt date de densitățile lor de probabilitate și, atunci independența acestor valori este exprimată prin faptul că densitatea probabilității (prima valoare a renunțat, iar a doua) se găsește prin formula:

Din aceasta rezultă imediat că:

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

filtru Kalman

Formularea problemei

Să notăm după valoarea pe care o vom măsura și apoi să filtram. Acestea pot fi coordonate, viteză, accelerație, umiditate, miros, temperatură, presiune etc.
Să începem cu un exemplu simplu care ne va conduce la formularea unei probleme generale. Imaginați-vă că avem o mașină controlată prin radio care poate merge doar înainte și înapoi. Cunoscând greutatea mașinii, forma, suprafața drumului etc., am calculat modul în care joystick-ul de control afectează viteza de mișcare.

Apoi coordonatele mașinii se vor schimba conform legii:

În viața reală, nu putem ține cont în calculele noastre de micile perturbații 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 este adăugată în partea dreaptă a ecuației scrise:

Avem un senzor GPS instalat pe o mașină de scris care încearcă să măsoare adevărata coordonată a mașinii și, desigur, nu o poate măsura exact, 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 greșite ale senzorului, să găsească o bună aproximare pentru coordonatele adevărate a mașinii.
În formularea problemei generale, orice poate fi responsabil pentru coordonată (temperatură, umiditate...), iar termenul responsabil pentru controlul sistemului din exterior va fi notat cu (în exemplul cu o mașină). Ecuațiile pentru citirile de coordonate și senzori vor arăta astfel:

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

Este demn de remarcat faptul că sarcina de filtrare nu este o sarcină anti-aliasing. Nu încercăm să netezim datele de la senzor, încercăm să obținem cea mai apropiată valoare de coordonatele reale.

algoritmul lui Kalman

Vom argumenta prin inducție. Imaginați-vă că la pasul al treilea am găsit deja valoarea 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, neprimind inca valoarea de la senzor, putem presupune ca la un pas sistemul evolueaza conform acestei legi si senzorul va arata ceva apropiat. Din păcate, nu putem spune nimic mai precis până acum. Pe de altă parte, la un pas, 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 calea de mijloc între citirea unui senzor inexact și predicția noastră despre ceea ce ne așteptam de la acesta. Vom acorda greutate citirii senzorului și greutatea va rămâne pe valoarea prezisă:

Coeficientul se numește coeficientul Kalman. Depinde de pasul de iterație, așa că mai corect ar fi să îl scriem, dar deocamdată, pentru a nu aglomera formulele de calcul, vom omite indicele lui.
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ă, este complet inexact, 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 caseta cu fundal albastru) pentru a rescrie expresia erorii:

Dovada

Acum este momentul să discutăm ce înseamnă expresia minimize error? La urma urmei, eroarea, după cum putem vedea, este ea însăși o variabilă aleatorie și de fiecare dată ia valori diferite. De fapt, nu există o abordare unu-la-unu pentru a defini ceea ce înseamnă că eroarea este minimă. La fel ca și în cazul varianței unei variabile aleatoare, atunci când am încercat să estimăm lățimea caracteristică a răspândirii acesteia, aici vom alege cel mai simplu criteriu de calcul. Vom minimiza media erorii pătrate:

Să scriem 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 de 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 un indice de pas, astfel subliniem că depinde de pasul de iterație.
Inlocuim valoarea optima obtinuta in expresia pentru, pe care am minimizat-o. Noi primim;

Sarcina noastră a fost îndeplinită. Avem o formulă iterativă pentru a calcula coeficientul 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; % filtru kalman 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; grafic (k, xOpt, k, z, k, x)

Analiză

Dacă urmărim cum se modifică coeficientul Kalman odată cu pasul de iterație, se poate demonstra că se stabilizează întotdeauna la o anumită valoare. De exemplu, atunci când erorile rms ale senzorului și ale modelului sunt legate între ele ca 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, să presupunem că doriți să filtrați citirile de la accelerometrul preferat. Nu știi dinainte după ce lege intenționezi să rotești accelerometrul. Cele mai multe informații pe care le puteți obține 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, pentru că acum toată fizica mișcării necunoscută nouă este ascunsă acolo și, prin urmare, nu putem spune că în momente diferite 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, aplicăm prostește toate formulele colosale, alegând coeficienții la ochi, pentru ca datele filtrate să pară drăguț.
Dar poți merge într-un mod diferit, mult mai simplu. După cum am văzut mai sus, coeficientul Kalman se stabilizează întotdeauna spre o valoare cu creștere. Prin urmare, în loc să alegem coeficienții și să găsim coeficientul Kalman folosind formule complexe, putem considera că acest coeficient este întotdeauna constant și selectam numai această constantă. Această presupunere nu strică aproape nimic. În primul rând, folosim deja ilegal teoria lui Kalman, iar în al doilea rând, coeficientul Kalman se stabilizează rapid la o constantă. Ca rezultat, totul va fi foarte simplificat. Nu avem nevoie deloc de formule din teoria lui Kalman, trebuie doar să găsim o valoare acceptabilă și să o introducem în formula iterativă:

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

După cum putem vedea, metodele sunt aproape aceleași. 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 fi cel mai puțin diferit 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 se desfășoară complet. Adică, valoarea filtrată depinde de dintre toate citirile anterioare ale senzorului liniar:

Prin urmare, filtrul Kalman se numește filtru liniar.
Se poate dovedi că filtrul Kalman este cel mai bun dintre toate filtrele liniare. Cel mai bun în sensul că pătratul mediu al erorii 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 însăși ideea derivării lor este aceeași ca și în cazul unidimensional. Le puteți vedea în acest articol excelent: http://habrahabr.ru/post/140274/.
Și în acest minunat video este analizat un exemplu de utilizare a acestora.

Filtrele Wiener sunt cele mai potrivite pentru procesele de procesare sau secțiuni de procese în general (prelucrare în bloc). Pentru procesarea secvențială, este necesară o estimare curentă a semnalului la fiecare ciclu de ceas, ținând cont de informațiile care intră în intrarea filtrului în timpul procesului de observare.

Cu filtrarea Wiener, fiecare nouă probă de semnal ar necesita recalcularea tuturor greutăților filtrului. În prezent s-au răspândit filtrele adaptive, în care noile informații primite sunt folosite pentru a corecta continuu evaluarea semnalului efectuată anterior (urmărirea țintei în radar, sisteme de control automate în control etc.). De un interes deosebit sunt filtrele adaptive de tip recursiv cunoscut sub numele de filtru Kalman.

Aceste filtre sunt utilizate pe scară largă în buclele de control din sistemele automate de reglare și control. Tocmai de acolo au apărut ei, dovadă fiind o terminologie atât de specifică folosită pentru a descrie munca lor ca spațiu de stat.

Una dintre principalele sarcini de rezolvat în practica calculului neuronal este obținerea de algoritmi rapizi și fiabili pentru învățarea rețelelor neuronale. În acest sens, poate fi util să folosiți filtre liniare în bucla de feedback. Deoarece algoritmii de antrenament sunt de natură iterativă, un astfel de filtru trebuie să fie un estimator recursiv secvenţial.

Problema de estimare a parametrilor

Una dintre problemele teoriei deciziilor statistice, de mare importanță practică, este problema estimării vectorilor de stare și a parametrilor sistemelor, care se formulează astfel. Să presupunem că este necesar să se estimeze valoarea parametrului vectorial $ X $, care este inaccesibil măsurării directe. În schimb, se măsoară un alt parametru $ Z $, în funcție de $ X $. Problema de estimare este de a răspunde la întrebarea: ce se poate spune despre $ X $, cunoscând $ Z $. În cazul general, procedura de evaluare optimă a vectorului $ X $ depinde de criteriul acceptat al calității evaluării.

De exemplu, abordarea bayesiană a problemei de estimare a parametrilor necesită informații complete a priori despre proprietățile probabilistice ale parametrului estimat, ceea ce este adesea imposibil. În aceste cazuri, se recurge la metoda celor mai mici pătrate (OLS), care necesită mult mai puține informații a priori.

Să luăm în considerare aplicarea MCO pentru cazul în care vectorul de observație $ Z $ este legat de vectorul de estimare a parametrilor $ X $ printr-un model liniar, iar observația conține zgomot $ V $ necorelat cu parametrul estimat:

$ Z = HX + V $, (1)

unde $ H $ este o matrice de transformare care descrie relația dintre mărimile observate și parametrii estimați.

Estimarea $ X $ care minimizează eroarea pătrată este scrisă după cum urmează:

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

Fie perturbația $ V $ necorelată, în acest caz matricea $ R_V $ este doar matricea de identitate, iar ecuația pentru estimare devine mai simplă:

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

Scrierea sub formă de matrice economisește foarte mult hârtie, dar poate fi neobișnuit pentru unii. Următorul exemplu, luat din monografia lui Yu. M. Korshunov „Fundațiile matematice ale ciberneticii”, ilustrează toate acestea.
Următorul circuit electric este disponibil:

Valorile observate în acest caz sunt citirile dispozitivelor $ A_1 = 1 A, A_2 = 2 A, V = 20 B $.

În plus, este cunoscută rezistența $ R = 5 $ Ohm. Este necesar să se estimeze în cel mai bun mod, din punctul de vedere al criteriului pătratului mediu minim al erorii, valorile curenților $ I_1 $ și $ I_2 $. Cel mai important lucru aici este că există o relație între valorile observate (citirile instrumentului) și parametrii estimați. Și această informație este adusă din exterior.

În acest caz, acestea sunt legile lui Kirchhoff, în cazul filtrării (despre care vom discuta în continuare) - un model autoregresiv al unei serii de timp, care presupune dependența valorii curente față de cele precedente.

Deci, cunoașterea legilor lui Kirchhoff, care nu are nimic de-a face cu teoria deciziilor statistice, face posibilă stabilirea unei legături între valorile observate și parametrii estimați (cine a studiat ingineria electrică - pot verifica, restul va avea să se creadă pe cuvânt):

$$ 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 $$

Este același în formă vectorială:

$$ \ 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) $$

Sau $ Z = HX + V $, unde

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

Luând în considerare valorile interferenței necorelate între ele, găsim estimarea lui I 1 și I 2 prin metoda celor mai mici pătrate în conformitate cu formula 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 (ots) = \ 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) $;

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

Sarcina de filtrare

Spre deosebire de problema estimării parametrilor care au valori fixe, în problema filtrării este necesară estimarea proceselor, adică găsirea estimărilor curente ale unui semnal variabil în timp, distorsionat de zgomot și, prin urmare, inaccesibil direct. măsurare. În general, tipul de algoritmi de filtrare depinde de proprietățile statistice ale semnalului și ale zgomotului.

Vom presupune că semnalul util este o funcție de timp care variază lent, iar interferența este un zgomot necorelat. Vom folosi metoda celor mai mici pătrate, din nou din cauza lipsei de informații a priori despre caracteristicile probabilistice ale semnalului și interferenței.

În primul rând, obținem o estimare a valorii curente de $ x_n $ pe baza $ k $ disponibile a celor mai recente valori ale seriei de timp $ z_n, z_ (n-1), z_ (n-2) \ puncte z_ (n- (k-1)) $. Modelul de observație este același ca în problema de estimare a parametrilor:

Este clar că $ Z $ este un vector coloană format din valorile observate ale seriei de timp $ z_n, z_ (n-1), z_ (n-2) \ puncte z_ (n- (k-1)) $, $ V $ - vector-coloană de zgomot $ \ xi _n, \ xi _ (n-1), \ xi_ (n-2) \ dots \ xi_ (n- (k-1)) $, deformând adevăratul semnal. Ce înseamnă simbolurile $ H $ și $ X $? Despre ce, de exemplu, vectorul coloană $ X $ putem vorbi dacă tot ceea ce este necesar este să oferim o estimare a valorii curente a seriei de timp? Și ce se înțelege prin matricea de transformare $ H $ nu este deloc clar.

La toate aceste întrebări se poate răspunde numai dacă este introdus în considerare conceptul de model de generare a semnalului. Adică, este nevoie de un model al semnalului original. Acest lucru este de înțeles, în absența informațiilor a priori despre caracteristicile probabilistice ale semnalului și interferențelor, rămâne doar să facem presupuneri. O poți numi o ghicitoare pentru zațul de cafea, dar experții preferă o terminologie diferită. Pe „uscătorul de păr” lor se numește model parametric.

În acest caz, parametrii acestui model particular sunt estimați. Atunci când alegeți un model adecvat de generare a semnalului, rețineți că orice funcție analitică poate fi extinsă într-o serie Taylor. O proprietate uimitoare a seriei Taylor este că forma unei funcții la orice distanță finită $ t $ de la un punct $ x = a $ este determinată în mod unic de comportamentul funcției într-o vecinătate infinit de mică a punctului $ x = a $ (vorbim despre derivatele sale de ordinul întâi și superior).

Astfel, existența seriei Taylor înseamnă că funcția analitică are o structură internă cu un cuplaj foarte puternic. Dacă, de exemplu, ne limităm la trei membri ai seriei Taylor, atunci modelul de generare a semnalului va arăta astfel:

$ 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) $$

Adică, formula 4, pentru o ordine dată a polinomului (în exemplu, este 2) stabilește o legătură între valoarea $ n $ -a a semnalului din secvența de timp și $ (n-i) $ -th. Astfel, vectorul de stare estimat în acest caz include, în plus față de valoarea estimată reală, derivatele întâi și a doua ale semnalului.

În teoria controlului automat, un astfel de filtru ar fi numit filtru de astatism de ordinul 2. Matricea de transformare $ H $ pentru acest caz (estimarea este efectuată pe baza eșantioanelor curente și $ k-1 $ anterioare) arată astfel:

$$ H = \ începe (vmatrix) 1 & -k & k ^ 2/2 \\ - & - & - \\ 1 & -2 & 2 \\ 1 & -1 & 0,5 \\ 1 & 0 & 0 \ sfârşitul (vmatrix) $$

Toate aceste numere sunt obținute din seria Taylor presupunând că intervalul de timp dintre valorile adiacente observate este constant și egal cu 1.

Deci, sarcina de filtrare conform ipotezelor noastre a fost redusă la sarcina de a estima parametrii; în acest caz se estimează parametrii modelului de generare a semnalului adoptat. Și estimarea valorilor vectorului de stat $ X $ se efectuează conform aceleiași formule 3:

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

În esență, am implementat un proces de estimare parametrică bazat pe un model autoregresiv al procesului de generare a semnalului.

Formula 3 este ușor de implementat programatic, pentru aceasta trebuie să completați matricea $ H $ și coloana vectorială de observații $ Z $. Aceste filtre sunt numite filtre de memorie finite, deoarece folosesc ultimele $ k $ observații pentru a obține estimarea curentă a $ X_ (nu) $. La fiecare nou ciclu de observație, se adaugă unul nou la setul curent de observații, iar cel vechi este eliminat. Acest proces de obținere a notelor se numește fereastra glisanta.

Creșterea filtrelor de memorie

Filtrele cu memorie finită au principalul dezavantaj că după fiecare nouă observație este necesară efectuarea unei recalculări complete asupra tuturor datelor stocate în memorie. În plus, calculul estimărilor poate fi început numai după ce au fost acumulate rezultatele primelor observații $ k $. Adică aceste filtre au un timp tranzitoriu lung.

Pentru a combate acest dezavantaj, este necesar să treceți de la un filtru de memorie persistent la un filtru cu memorie în creștere... Într-un astfel de filtru, numărul de valori observate pentru care se face estimarea trebuie să coincidă cu numărul n al observației curente. Aceasta face posibilă obținerea estimărilor pornind de la numărul de observații egal cu numărul de componente ale vectorului estimat $ X $. Și aceasta este determinată de ordinea modelului adoptat, adică câți membri din seria Taylor sunt utilizați în model.

În același timp, odată cu creșterea n, proprietățile de netezire ale filtrului se îmbunătățesc, adică acuratețea estimărilor crește. Cu toate acestea, implementarea directă a acestei abordări este asociată cu o creștere a costurilor de calcul. Prin urmare, filtrele de memorie în creștere sunt implementate ca recurent.

Cert este că până în momentul n avem deja o estimare $ X _ ((n-1) оц) $, care conține informații despre toate observațiile anterioare $ z_n, z_ (n-1), z_ (n-2) \ puncte z_ (n- (k-1)) $. Estimarea $ X_ (nоц) $ se obține din următoarea observație $ z_n $ folosind informațiile stocate în estimarea $ X _ ((n-1)) (\ mbox (оц)) $. Această procedură se numește filtrare recurentă și constă în următoarele:

  • conform estimării $ X _ ((n-1)) (\ mbox (оц)) $ prezice estimarea $ X_n $ prin formula 4 cu $ i = 1 $: $ X _ (\ mbox (notsapriori)) = F_1X _ ((n-1 ) sc) $. Aceasta este o estimare a priori;
  • conform rezultatelor observaţiei curente $ z_n $, această estimare a priori se transformă într-una adevărată, adică a posteriori;
  • această procedură se repetă la fiecare pas, începând de la $ r + 1 $, unde $ r $ este ordinea filtrului.

Formula finală pentru filtrarea recurentă arată astfel:

$ X _ ((n-1) оц) = X _ (\ mbox (notsapriori)) + (H ^ T_nH_n) ^ (- 1) h ^ T_0 (z_n - h_0 X _ (\ mbox (notsapriori))) $ , (6 )

unde pentru filtrul nostru de a doua comandă:

Un filtru de memorie în creștere care funcționează conform formulei 6 este un caz special al unui algoritm de filtrare cunoscut sub numele de filtru Kalman.

În implementarea practică a acestei formule, este necesar să ne amintim că estimarea a priori inclusă în ea este determinată de formula 4, iar valoarea $ h_0 X _ (\ mbox (notspriori)) $ este prima componentă a vectorului $ X _ (\ mbox (notspriori)) $.

Filtrul de memorie în creștere are o caracteristică importantă. Dacă te uiți la formula 6, atunci scorul final este suma vectorului de scor prezis și a termenului corector. Această corecție este mare pentru $ n $ mici și scade odată cu creșterea $ n $, tinzând spre zero ca $ n \ rightarrow \ infty $. Adică, odată cu creșterea lui n, proprietățile de netezire ale filtrului cresc și modelul inerent acestuia începe să domine. Dar semnalul real poate corespunde modelului numai în anumite zone, prin urmare, precizia prognozei se deteriorează.

Pentru a combate acest lucru, pornind de la niște $ n $, se impune o interdicție privind reducerea în continuare a termenului de corecție. Acest lucru este echivalent cu schimbarea lățimii de bandă a filtrului, adică pentru n mic filtrul este mai larg (mai puțin inerțial), pentru n mare devine mai inerțial.

Comparați Figura 1 și Figura 2. În prima figură, filtrul are o memorie mare, în timp ce se netezește bine, dar datorită benzii sale înguste, traiectoria estimată rămâne în urmă cu cea reală. În a doua figură, memoria filtrului este mai mică, se netezește mai rău, dar urmărește mai bine traiectoria reală.

Literatură

  1. YM Korshunov „Bazele matematice ale ciberneticii”
  2. A.V. Balakrishnan „Teoria filtrării Kalman”
  3. VNFomin „Estimarea recurentă și filtrarea adaptivă”
  4. C.F.N. Cowen, P.M. Acordați „Filtre adaptive”

Random Forest este unul dintre algoritmii mei preferați de data mining. Î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 configurabili. De asemenea, este surprinzător de simplu la bază. Și, în același timp, este remarcabil prin precizie.

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 o mulțime de modele diferite folosind acest algoritm slab și facem o medie a rezultatului predicțiilor lor, atunci rezultatul final va fi mult mai bun. Acesta este așa-numitul antrenament de ansamblu în acțiune. Algoritmul Random Forest se numește așadar „Random Forest”, pentru datele obținute creează mulți arbori de decizie și apoi face media rezultatului predicțiilor lor. Punctul important aici este elementul aleatoriu î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 terminat, Rusia este peste ocean. Iar prin fereastra unui apartament confortabil cu 2 dormitoare San Francisco, celebrul Silicon Valley, California, SUA se uită la noi. Da, tocmai acesta este motivul pentru care practic nu am scris în ultima vreme. Ne-am mutat.

Totul a început în aprilie 2011, când făceam un interviu telefonic la Zynga. Apoi totul mi s-a părut un fel de joc care nu avea nimic de-a face cu realitatea și nici nu mi-am putut imagina în ce va rezulta. Î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 interviurile telefonice și au fost selectați aproximativ 15 dintre ei (nu știu numărul exact, cineva s-a răzgândit ulterior, cineva imediat refuzat). Interviul s-a dovedit a fi surprinzător de simplu. Nu a fost testată nicio sarcină de programare, nicio întrebare dificilă despre forma trapelor, mai ales capacitatea de a conversa. Iar cunoștințele, după părerea mea, au fost evaluate doar superficial.

Și atunci a început trucul. În primul rând, am așteptat rezultatele, apoi oferta, apoi aprobarea LCA, apoi aprobarea petiției pentru viză, apoi documentele din SUA, apoi coada la ambasadă, apoi un control suplimentar, apoi Visa. Uneori mi se părea că sunt gata să renunț la tot și să marchez. Uneori m-am îndoit dacă avem nevoie de această America, la urma urmei, nici în Rusia nu este rău. Întregul proces a durat aproximativ șase luni, drept urmare, la jumătatea lunii decembrie am primit vize și am început să ne pregătim pentru plecare.

Luni a fost prima mea zi la serviciu într-un loc nou. Biroul are toate condițiile nu doar pentru a lucra, ci și a locui. Mic dejun, prânz și cine de la bucătarii noștri, o grămadă de mâncare variată înghesuită peste tot, o sală de sport, masaj și chiar un coafor. Toate acestea sunt complet gratuite pentru angajați. Mulți oameni ajung la muncă cu bicicleta și există mai multe încăperi pentru depozitarea vehiculelor. În general, nu am întâlnit niciodată așa ceva în Rusia. Totul, însă, are propriul preț, am fost imediat avertizați că va trebui să muncim mult. Ce este „mult”, după standardele lor, nu îmi este foarte clar.

Sper, totuși, că, în ciuda volumului de muncă, voi putea să reiau blogging-ul în viitorul apropiat și poate să vă spun ceva despre viața și munca americană ca programator în America. Așteaptă și vezi. Între timp, le doresc tuturor un An Nou fericit și Crăciun și ne vedem curând!


Pentru un exemplu de utilizare, vom tipări randamentul dividendelor companiilor rusești. Ca preț de bază, luăm prețul de închidere al unei acțiuni în ziua închiderii registrului. Din anumite motive, aceste informații nu se află pe site-ul troicii și sunt mult mai interesante decât valorile absolute ale dividendelor.
Atenţie! Codul durează mult timp pentru a se executa, 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 trecuți.

Filtrul Kalman este probabil cel mai popular algoritm de filtrare folosit în multe domenii ale științei și tehnologiei. Datorită simplității și eficienței sale, se găsește în receptoare GPS, procesoare de citire a senzorilor, în implementarea sistemelor de control etc.

Există o mulțime de articole și cărți despre filtrul Kalman pe Internet (în principal în limba engleză), dar aceste articole au un prag de intrare destul de mare, există multe locuri vagi, deși de fapt este un algoritm foarte clar și transparent. Voi încerca să vă povestesc despre asta într-un limbaj simplu, cu o creștere treptată a complexității.

Pentru ce este?

Orice dispozitiv de măsurare are o anumită eroare, poate fi influențat de un număr mare de influențe externe și interne, ceea ce duce la faptul că informațiile de la acesta sunt zgomotoase. Cu cât datele sunt mai zgomotoase, cu atât este mai dificil să procesezi astfel de informații.

Un filtru este un algoritm de procesare a datelor care elimină zgomotul și informațiile inutile. În filtrul Kalman, este posibil să se specifice informații a priori despre natura sistemului, relația dintre variabile și, pe baza acesteia, să se construiască o estimare mai precisă, dar chiar și în cel mai simplu caz (fără a introduce informații a priori ) dă rezultate excelente.

Să luăm în considerare cel mai simplu exemplu - să presupunem că trebuie să controlăm nivelul de combustibil din rezervor. Pentru a face acest lucru, în rezervor este instalat un senzor capacitiv, este foarte ușor de întreținut, dar are unele dezavantaje - de exemplu, dependența de combustibilul umplut (constanta dielectrică a combustibilului depinde de mulți factori, de exemplu, asupra temperaturii), o mare influență a „bumpiness” în rezervor. Ca urmare, informațiile din acesta reprezintă un „fierăstrău” tipic cu o amplitudine decentă. Aceste tipuri de senzori sunt adesea instalate pe echipamentele miniere grele (nu fi confundat cu volumul rezervorului):

filtru Kalman

Să ne abatem puțin și să ne familiarizăm cu algoritmul în sine. Filtrul Kalman folosește un model dinamic al sistemului (de exemplu, legea fizică a mișcării), acțiuni de control cunoscute și multe măsurători succesive pentru a forma o estimare optimă a stării. Algoritmul constă din două faze repetate: predicție și corecție. La început, se calculează predicția stării la momentul următor (ținând cont de inexactitatea măsurării lor). Pe al doilea, noile informații de la senzor corectează valoarea prezisă (ținând cont și de inexactitatea și zgomotul acestor informații):

Ecuațiile sunt prezentate sub formă de matrice, dacă nu cunoașteți algebra liniară - este în regulă, atunci va exista o versiune simplificată fără matrice pentru cazul cu o variabilă. În cazul unei variabile, matricele degenerează în valori scalare.

Să înțelegem mai întâi notația: indicele denotă momentul în timp: k - curent, (k-1) - anterior, semnul minus în superscript înseamnă că este prezis valoare intermediară.

Descrierile variabilelor sunt prezentate în următoarele imagini:

Este posibil să descriem mult timp și plictisitor ce înseamnă toate aceste matrici de tranziție misterioase, dar este mai bine, în opinia mea, să încercăm să aplici algoritmul folosind un exemplu real - astfel încât valorile abstracte să dobândească un sens real.

Să încercăm în acțiune

Să revenim la exemplul cu senzorul de nivel al combustibilului, deoarece starea sistemului este reprezentată de o variabilă (volumul de combustibil din rezervor), matricele degenerează în ecuațiile obișnuite:
Definirea unui model de proces
Pentru aplicarea filtrului, este necesar să se determine matricele/valorile variabilelor care determină dinamica sistemului și dimensiunile F, B și H:

F- o variabilă care descrie dinamica sistemului, în cazul combustibilului - acesta poate fi un coeficient care determină consumul de combustibil la ralanti în timpul timpului de prelevare (timpul dintre pașii algoritmului). Totuși, pe lângă consumul de combustibil, există și realimentări... prin urmare, pentru simplitate, vom lua această variabilă egală cu 1 (adică indicăm că valoarea prezisă va fi egală cu starea anterioară).

B- variabila care determină aplicarea acţiunii de control. Dacă am avea informații suplimentare despre turația motorului sau gradul de apăsare a pedalei de accelerație, atunci acest parametru ar determina modul în care se va modifica consumul de combustibil în timpul de prelevare. Deoarece nu există acțiuni de control în modelul nostru (nu există informații despre acestea), luăm B = 0.

H- o matrice care determină relația dintre măsurători și starea sistemului, deocamdată, fără explicații, vom lua și această variabilă egală cu 1.

Definirea proprietăților de netezire
R- eroarea de masurare poate fi determinata prin testarea instrumentelor de masura si determinarea erorii de masurare a acestora.

Q- Determinarea zgomotului procesului este o sarcină mai dificilă, deoarece este necesară determinarea variației procesului, ceea ce nu este întotdeauna posibil. În orice caz, puteți alege acest parametru pentru a oferi nivelul necesar de filtrare.

Implementarea în cod
Pentru a elimina incomprehensibilitatea rămasă, implementăm un algoritm simplificat în C # (fără matrice și acțiune de control):

clasa KalmanFilterSimple1D
{
public double X0 (obține; set privat;) // stare prezisă
public dublu P0 (obține; set privat;) // covarianță prezisă

Public dublu F (get; private set;) // factor de valoare reală la valoarea reală anterioară
public double Q (get; private set;) // măsurare zgomot
public dublu H (get; private set;) // factor de la valoarea măsurată la valoarea reală
public dublu R (get; private set;) // zgomot de mediu

Public dublu Stat (obține; set privat;)
covarianță dublă publică (obține; set privat;)

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

Public void SetState (stare dublă, covarianță dublă)
{
stare = stare;
Covarianza = covarianta;
}

Vidul public Corect (date duble)
{
// actualizare de timp - predicție
X0 = F * Stare;
P0 = F * Covarianta * F + Q;

// actualizare măsurători - corectare
var K = H * P0 / (H * P0 * H + R);
Stare = X0 + K * (date - H * X0);
Covarianța = (1 - K * H) * F;
}
}

// Aplicație...

Var fuelData = GetData ();
var filtrat = listă nouă ();

Var kalman = nou KalmanFilterSimple1D (f: 1, h: 1, q: 2, r: 15); // setați F, H, Q și R
kalman.SetState (fuelData, 0,1); // Setați valorile inițiale pentru stare și covarianță
foreach (var d în fuelData)
{
kalman.Corect (d); // Aplică algoritmul

Filtered.Add (kalman.State); // Salvează starea curentă
}

Rezultatul filtrării cu acești parametri este afișat în figură (pentru a regla gradul de netezire - puteți modifica parametrii Q și R):

Cel mai interesant lucru este lăsat în afara domeniului de aplicare al articolului - aplicarea filtrului Kalman pentru mai multe variabile, stabilirea relației dintre ele și afișarea automată a valorilor pentru variabilele neobservabile. Voi încerca să continui subiectul de îndată ce am timp.

Sper că descrierea sa dovedit a fi nu foarte plictisitoare și complicată, dacă aveți întrebări sau clarificări - bine ați venit la comentarii)

În procesul de automatizare a proceselor tehnologice pentru a controla mecanismele și unitățile, trebuie să se ocupe de măsurători ale diferitelor mărimi fizice. Aceasta poate fi presiunea și debitul unui lichid sau gaz, viteza, temperatura și multe altele. Măsurarea mărimilor fizice se realizează cu ajutorul senzorilor analogici. Un semnal analogic este un semnal de date în care fiecare dintre parametrii reprezentativi este descris printr-o funcție de timp și un set continuu de valori posibile. Din continuitatea spațiului valoric rezultă că orice interferență introdusă în semnal nu se poate distinge de semnalul dorit. Prin urmare, valoarea greșită a mărimii fizice necesare va fi trimisă la intrarea analogică a dispozitivului de control. Prin urmare, este necesar să se filtreze semnalul care vine de la senzor.

Unul dintre algoritmii eficienți de filtrare este filtrul Kalman. Filtrul Kalman este un filtru recursiv care estimează vectorul de stare al unui sistem dinamic folosind o serie de măsurători incomplete și zgomotoase. Filtrul Kalman folosește un model dinamic al sistemului (de exemplu, legea fizică a mișcării), acțiuni de control și multe măsurători secvențiale pentru a forma o estimare optimă a stării. Algoritmul constă din două faze repetate: predicție și corecție. În prima etapă, se calculează predicția stării în momentul următor în timp (ținând cont de inexactitatea măsurării acestora). Pe al doilea, noile informații de la senzor corectează valoarea prezisă (ținând cont și de inexactitatea și zgomotul acestor informații).

În etapa de predicție, se întâmplă următoarele:

  1. Predicția stării sistemului:

unde este predicția stării sistemului la momentul curent; - matricea de tranziție între stări (modelul dinamic al sistemului); - previziunea stării sistemului la momentul anterior în timp; - matricea de aplicare a actiunii de control; - actiune de control in momentul anterior in timp.

  1. Predicția covarianței erorilor:

unde este predicția erorii; - eroare la momentul anterior în timp; - covarianta zgomotului de proces.

În etapa de ajustare, se întâmplă următoarele:

  1. Calculul câștigului Kalman:

unde este câștigul Kalman; - o matrice de măsurători care arată relația dintre măsurători și stări; - măsurarea covarianței zgomotului.

unde este măsurarea la ora curentă.

  1. Actualizare eroare de covarianță:

unde este matricea de identitate.

Dacă starea sistemului este descrisă de o variabilă, atunci = 1, iar matricele degenerează în ecuații obișnuite.

Pentru a demonstra clar eficacitatea filtrului Kalman, a fost efectuat un experiment cu senzorul de volum AVR PIC KY-037, care este conectat la microcontrolerul Arduino Uno. Figura 1 prezintă un grafic al citirilor senzorului fără filtru (linia 1). Fluctuațiile haotice ale ieșirii senzorului indică prezența zgomotului.

Figura 1. Graficul citirilor senzorului fără aplicarea filtrului

Pentru a aplica un filtru, este necesar să definiți valorile variabilelor și care determină dinamica sistemului și dimensiunile. Să luăm și egal cu 1 și egal cu 0, deoarece nu există acțiuni de control în sistem. Pentru a determina proprietățile de netezire ale filtrului, este necesar să se calculeze valoarea variabilei, precum și să se selecteze valoarea parametrului.

Vom calcula variabila în Microsoft Excel 2010. Pentru a face acest lucru, este necesar să se calculeze abaterea standard pentru eșantionarea valorilor citirilor senzorului. = 0,62. este selectat în funcție de nivelul de filtrare necesar, luăm = 0,001. În Figura 2, a doua linie arată graficul citirilor senzorului cu filtrul aplicat.

Figura 2. Graficul citirilor senzorului folosind filtrul Kalman

Din grafic, putem concluziona că filtrul a făcut față sarcinii de filtrare a interferențelor, deoarece în starea de echilibru fluctuațiile citirilor senzorului care au trecut de filtrare sunt nesemnificative.

Cu toate acestea, filtrul Kalman are un dezavantaj semnificativ. Dacă valoarea măsurată de la senzor se poate modifica rapid, citirea senzorului filtrată nu se va schimba la fel de repede ca valoarea măsurată. Figura 3 arată răspunsul filtrului Kalman la un salt în valoarea măsurată.

Figura 3. Reacția filtrului Kalman la un salt în valoarea măsurată

Răspunsul filtrului la un salt în valoarea măsurată a fost considerat neglijabil. Dacă valoarea măsurată se modifică semnificativ și apoi nu revine la valoarea anterioară, atunci citirile senzorului filtrate vor corespunde cu valoarea reală a valorii măsurate numai după o perioadă semnificativă de timp, ceea ce este inacceptabil pentru sistemele de control automat care necesită performanțe ridicate. .

Din experimentul efectuat, se poate concluziona că filtrul Kalman este recomandabil să fie utilizat pentru filtrarea citirilor senzorilor în sistemele cu viteză mică.

Bibliografie:

  1. GOST 17657-79. Transfer de date. Termeni și definiții. - Moscova: Editura standardelor, 2005. - 2 p.
  2. Filtru Kalman // Wikipedia. ... Data actualizării: 26.04.2017. URL: http://ru.wikipedia.org/?oldid=85061599 (data accesului: 21/05/2017).