Filtrul Kalman este un filtru recursiv eficient care evaluează starea unui sistem dinamic pornind de la o serie de măsurători supuse zgomotului. Datorită caracteristicilor sale intrinseci, este un filtru excelent pentru zgomote și perturbări care acționează asupra sistemelor gaussiene cu medie zero. Este utilizat ca observator de stare , ca recuperare a transferului de buclă (LTR) și ca sistem de identificare parametrică . Problema de proiectare a filtrului Kalman este problema regulatorului cuadratic liniar dual (LQR).
Istorie
Filtrul poartă numele lui Rudolf E. Kalman , deși Thorvald Nicolai Thiele [1] și Peter Swerling au dezvoltat de fapt un algoritm similar. Stanley Schmidt este, în general, recunoscut că a fost primul care a dezvoltat o implementare practică a unui filtru Kalman. În timpul unei vizite a lui Kalman la Centrul de Cercetare Ames al NASA , Schmidt a văzut aplicabilitatea ideilor lui Kalman la problema de estimare a traiectoriei pentru programul Apollo și a ajuns să îl includă în programul de bord Apollo. Filtrul a fost dezvoltat în lucrări științifice de Swerling (1958), Kalman (1960) și Kalman și Bucy (1961).
Mai târziu, pornind de la formularea originală Kalman care acum se numește filtrul Kalman simplu , au fost dezvoltate mai multe tipuri de filtre Kalman; unele exemple sunt filtrul Schmidt extins , filtrul de informații și mai multe filtre cu rădăcină pătrată dezvoltate de Bierman, Thornton și mulți alții. Bucla blocată în fază (PLL), un circuit electronic utilizat în nenumărate aplicații precum radio, calculatoare electronice și transmisie de date, poate fi, de asemenea, considerat un filtru Kalman.
Filtru Kalman cu timp continuu
Definirea problemei
Luați în considerare aplicarea problemei la un sistem MIMO generic: dat un sistem liniar staționar dinamic supus zgomotului procesului{\ displaystyle {\ boldsymbol {v}} _ {x} (t)} și zgomot de măsurare{\ displaystyle {\ boldsymbol {v}} _ {y} (t)} , ecuațiile caracteristice sunt scrise ca:
- {\ displaystyle {\ begin {align} {\ boldsymbol {\ dot {x}}} (t) & = A {\ boldsymbol {x}} (t) + B {\ boldsymbol {u}} (t) + { \ boldsymbol {v}} _ {x} (t) \\ {\ boldsymbol {y}} (t) & = C {\ boldsymbol {x}} (t) + D {\ boldsymbol {u}} (t) + {\ boldsymbol {v}} _ {y} (t) \ end {align}}} cu {\ displaystyle {\ boldsymbol {v}} (t) = {\ begin {bmatrix} {\ boldsymbol {v}} _ {x} (t) \\ {\ boldsymbol {v}} _ {y} (t) \ end {bmatrix}}}
unde zgomotele{\ displaystyle {\ boldsymbol {v}} _ {x} (t)} Și{\ displaystyle {\ boldsymbol {v}} _ {y} (t)} sunt necorelate în timp, împreună gaussiene cu medie zero. Fără a pierde prea multă generalitate, poate fi luat în considerare {\ displaystyle D = 0} (cazul unui sistem strict propriu). Având în vedere zgomotul, scrieți o matrice {\ displaystyle V} a spus matricea de covarianță ca:
- {\ displaystyle V = {\ begin {bmatrix} {\ tilde {Q}} & Z \\ Z & {\ tilde {R}} \ end {bmatrix}} \,}
unde este
- {\ displaystyle Z = \ mathrm {Cov} [{\ boldsymbol {v}} _ {x} (t), {\ boldsymbol {v}} _ {y} (t)]}
- {\ displaystyle {\ tilde {Q}} = \ mathrm {Var} [{\ boldsymbol {v}} _ {x} (t)]}
- {\ displaystyle {\ tilde {R}} = \ mathrm {Var} [{\ boldsymbol {v}} _ {y} (t)]}
Pe măsură ce presupun ipoteze suplimentare: {\ displaystyle {\ tilde {R}} \ succ 0} (definit pozitiv), adică componenta de zgomot are o covarianță diferită de zero pe fiecare ieșire, {\ displaystyle Z = 0} , adică zgomotele de stare și de ieșire sunt necorelate; starea este modelată ca o variabilă aleatorie Gaussiană astfel încât:
- {\ displaystyle {\ boldsymbol {x}} _ {0} = {\ boldsymbol {x}} (0)}
- {\ displaystyle \ mathrm {E} [{\ boldsymbol {x}} (0)] = {\ overline {\ boldsymbol {x}}} _ {0}}
- {\ displaystyle \ mathrm {E} [({\ boldsymbol {x}} _ {0} - {\ overline {\ boldsymbol {x}}} _ {0}) ({\ boldsymbol {x}} _ {0} - {\ overline {\ boldsymbol {x}}} _ {0}) '] = {\ tilde {P}} \ succeq 0}
și, de asemenea, zgomotele și starea sunt necorelate, adică:
- {\ displaystyle \ mathrm {E} [{\ boldsymbol {x}} _ {0} {\ boldsymbol {v}} '] = 0}
Observator de stat
Acum ia în considerare observatorul
- {\ displaystyle {\ frac {\ mathrm {d} {\ boldsymbol {\ hat {x}}} (t)} {\ mathrm {d} t}} = {\ boldsymbol {\ dot {\ hat {x}} }} (t) = A {\ boldsymbol {\ hat {x}}} (t) + B {\ boldsymbol {u}} (t) + L (t) [{\ boldsymbol {y}} (t) - C {\ boldsymbol {\ hat {x}}} (t)]}
De aici, cu pași algebrici simpli prin substituție, este posibil să scriem dinamica erorii în felul următor:
- {\ displaystyle {\ boldsymbol {\ dot {e}}} (t) = {\ boldsymbol {\ dot {x}}} (t) - {\ boldsymbol {\ dot {\ hat {x}}}} (t )}}
- {\ displaystyle {\ boldsymbol {\ dot {e}}} (t) = A_ {c} (t) {\ boldsymbol {e}} (t) + B_ {c} (t) {\ boldsymbol {v}} (t)}
unde se definesc ei înșiși
- {\ displaystyle A_ {c} (t) = AL (t) C}
- {\ displaystyle B_ {c} (t) = IL (t)}
Scriind acum
- {\ displaystyle {\ overline {\ boldsymbol {e}}} (t) = \ mathrm {E} [{\ boldsymbol {e}} (t)]}
- {\ displaystyle {\ overline {\ boldsymbol {\ dot {e}}}} (t) = A_ {c} (t) {\ overline {\ boldsymbol {e}}} (t) + B_ {c} \ mathrm {E} [{\ boldsymbol {v}} (t)] = A_ {c} (t) {\ overline {\ boldsymbol {e}}} (t)}
rețineți că valoarea așteptată a erorii este un sistem autonom. În acest caz, definiți matricea de covarianță a erorilor
- {\ displaystyle {\ tilde {P}} (t) = \ mathrm {E} [{\ boldsymbol {e}} (t) {\ boldsymbol {e}} (t) ']}
- {\ displaystyle {\ tilde {P}} (0) = {\ tilde {P}} _ {0}}
Prin urmare, obiectivul de optimizare este de a găsi {\ displaystyle L (t)} ceea ce minimizează cifra meritului
- {\ displaystyle \ min _ {L (t)} {\ boldsymbol {\ gamma}} '{\ tilde {P}} (t) {\ boldsymbol {\ gamma}} = \ min _ {L (t)} \ | {\ boldsymbol {\ gamma}} \ | _ {{\ tilde {P}} (t)} ^ {2}}
cu {\ displaystyle {\ boldsymbol {\ gamma}}} vector generic de dimensiuni adecvate.
Forma filtrului Kalman
Arată că câștigul {\ displaystyle L (t)} care rezolvă problema de optimizare are forma
- {\ displaystyle L (t) = {\ tilde {P}} (t) C '{\ tilde {R}} ^ {- 1}}
unde este {\ displaystyle {\ tilde {P}} (t)} este soluția ecuației lui Riccati scrisă în formă
- {\ displaystyle {\ dot {\ tilde {P}}} (t) = A {\ tilde {P}} (t) + {\ tilde {P}} (t) A '+ {\ tilde {Q}} - {\ tilde {P}} (t) C '{\ tilde {R}} ^ {- 1} C {\ tilde {P}} (t)}
cu stare inițială
- {\ displaystyle {\ tilde {P}} (0) = {\ tilde {P}} _ {0}}
Acesta este exact cazul dual al problemei de optimizare pentru controlul LQ .
Proprietățile filtrului Kalman
Aici studiem proprietățile filtrului Kalman pe un orizont de timp infinit. Un rezultat important se referă la stabilitatea filtrului: definiți matricea {\ displaystyle B_ {q}} ca o partiție a matricei {\ displaystyle {\ tilde {Q}}} , sau astfel încât
- {\ displaystyle B_ {q} B_ {q} '= {\ tilde {Q}}}
Atunci filtrul Kalman este stabil dacă perechea {\ displaystyle (A, \ B_ {q})} este accesibil și dacă cuplul {\ displaystyle (A, \ C)} este observabil.
Conform acestor ipoteze, estimatorul optim este:
- {\ displaystyle {\ boldsymbol {\ dot {\ hat {x}}}} (t) = A {\ boldsymbol {\ hat {x}}} (t) + B {\ boldsymbol {u}} (t) + L ^ {*} [{\ boldsymbol {y}} (t) -C {\ boldsymbol {\ hat {x}}} (t)]}
cu
- {\ displaystyle L ^ {*} = {\ tilde {P}} ^ {*} C '{\ tilde {R}} ^ {- 1}}
unde este {\ displaystyle {\ tilde {P}} ^ {*}} este singura soluție pozitivă definită a ecuației staționare Riccati
- {\ displaystyle 0 = A {\ tilde {P}} ^ {*} + {\ tilde {P}} ^ {*} A '+ {\ tilde {Q}} - {\ tilde {P}} ^ {* } C '{\ tilde {R}} ^ {- 1} C {\ tilde {P}} ^ {*}}
Stabilitate asimptotică
Conform ipotezelor luate în considerare, filtrul Kalman este asimptotic stabil, deoarece se întâmplă că toți polii filtrului au o parte negativă reală, adică valorile proprii ale matricei {\ displaystyle (AL ^ {*} C)} Sunt în afară de negativul real.
Filtru Kalman în timp discret
Definirea problemei
Luați în considerare aplicarea problemei la un sistem MIMO generic: dat un sistem liniar staționar dinamic supus zgomotului procesului{\ displaystyle {\ boldsymbol {v}} _ {x} (k)} și zgomot de măsurare{\ displaystyle {\ boldsymbol {v}} _ {y} (k)} , ecuațiile caracteristice sunt scrise ca:
- {\ displaystyle {\ begin {align} {\ boldsymbol {x}} (k + 1) & = A {\ boldsymbol {x}} (k) + B {\ boldsymbol {u}} (k) + {\ boldsymbol {v}} _ {x} (k) \\ {\ boldsymbol {y}} (k) & = C {\ boldsymbol {x}} (k) + {\ boldsymbol {v}} _ {y} (k ) \ end {align}}} cu {\ displaystyle {\ boldsymbol {v}} (k) = {\ begin {bmatrix} {\ boldsymbol {v}} _ {x} (k) \\ {\ boldsymbol {v}} _ {y} (k) \ end {bmatrix}}}
unde zgomotele{\ displaystyle {\ boldsymbol {v}} _ {x} (k)} Și{\ displaystyle {\ boldsymbol {v}} _ {y} (k)} sunt necorelate , gausi cu medie zero.
Formulele rezultate (estimarea filtrată a stării, varianța erorii de estimare filtrată, predictorul stării, varianța erorii de predicție):
- {\ displaystyle {\ begin {align} {\ boldsymbol {\ hat {x}}} (k | k) & = {\ boldsymbol {\ hat {x}}} (k | k-1) + L (k) e (k) \\ P (k | k) & = P (k | k-1) -L (k) N (k) L '(k) \\ {\ boldsymbol {\ hat {x}}} ( k + 1 | k) & = F {\ boldsymbol {\ hat {x}}} (k | k) + ZR ^ {- 1} y (k) \\ P (k + 1 | k) & = FP ( k | k) F '+ M \\\ end {align}}}
Unde este:
- {\ displaystyle {\ begin {align} L (k) & = P (k | k-1) C '[CP (k | k-1) C' + R] ^ {- 1} \\ e (k) & = y (k) -C {\ boldsymbol {\ hat {x}}} (k | k-1) \\ N (k) & = CP (k | k-1) C '+ R \\ F & = A-ZR ^ {- 1} C \\ M & = Q-ZR ^ {- 1} Z '\ end {align}}}
Notă
Bibliografie
- Magni L., Scattolini R., Complements of automatic controls , Pitagora Editrice, Bologna, 2006.
- Colaneri P., Locatelli A., Robust control in RH2 / RH , Pitagora Editrice, Bologna, 1993.
- K. Zhou, JC Doyle, K. Glover, Control robust și optim , Prentice Hall, 1996.
- P. Dorato, C. Abdallah, V. Cerone Controlul quadratic liniar: o introducere , Prentice Hall, 1995.
Elemente conexe
Alte proiecte