FilterLab šum a odhad stavu

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Kalmanův filtr obecně, a proč to není jen průměr

Skalární filtr uměl odhadnout konstantu. Zajímavé to začne být, když má stav víc složek — protože pak filtr odhaduje i to, co vůbec neměří.

predikce:  x̂⁻ = F·x̂     P⁻ = F·P·Fᵀ + Q
korekce:  K = P⁻Hᵀ(HP⁻Hᵀ + R)⁻¹     x̂ = x̂⁻ + K(z − H·x̂⁻)

Model konstantní rychlosti

Nejužitečnější dvoustavový model vůbec: stav je poloha a rychlost, měří se jen poloha.

F = [[1, T],[0, 1]]     H = [1, 0]rychlost se neměří — a přesto se odhadne

Rychlost do měření nevstupuje. Filtr ji přesto zná, protože ji potřebuje, aby uměl předpovědět další polohu — a nesoulad mezi předpovědí a měřením ji opraví. Tomuhle žádný dolní propust nedokáže konkurovat: propust rampu zpozdí navždy, kdežto tenhle filtr se na ni naladí a jde s ní bez zpoždění.

Ustálený stav a α-β filtr

Když se F, H, Q a R nemění, ustálí se i K — a pak je z Kalmanova filtru fixní dvouparametrový filtr, který se v radiolokaci používá od padesátých let:

x̂ ← x̂ + α·(z − x̂)     v̂ ← v̂ + βT·(z − x̂)α-β filtr

A Kalata ukázal, že α i β závisí na jediném bezrozměrném čísle:

Λ = σa·T²σv     r = 4 + Λ − √(8Λ + Λ²)4     α = 1 − r²     β = 2(2−α) − 4√(1−α)index sledování
0.0010.0020.0050.010.020.050.100.200.501.02.05.01020501002005001.0k0.01.02.0index sledování Λ = σₐ·T²/σᵥzesíleníαβ
Λ = σₐ·T²/σᵥ = 0,0050 → α = 0,0952, β = 0,0048.
Tohle je ustálený Kalmanův filtr pro model konstantní rychlosti, jen napsaný dvěma čísly místo Riccatiho rovnice. Λ je jediná věc, na které záleží: ne σₐ a σᵥ zvlášť, ale jejich poměr přenásobený T². Zdvojnásob obojí a nezmění se nic.
Pozor na jednu věc: Λ je poměr SMĚRODATNÝCH odchylek, ne variancí. Pro T = σₐ = σᵥ = 1 dávají obě verze totéž — a to je přesně ten příklad, na kterém by to člověk zkoušel.
Táhni všemi třemi jezdci a sleduj, že se pohne jen tehdy, když se změní Λ. Zdvojnásob σₐ i σᵥ naráz — nestane se nic.

Past, kterou jeden příklad neodhalí. Λ je poměr směrodatných odchylek, ne variancí. Zdroje to píší různě a rozdíl se pozná jen na netriviálním případu: pro T = σa = σv = 1 dají obě verze Λ = 1 a shodnou se. A to je přesně ten příklad, na kterém by to člověk zkoušel. V testech téhle labky se proto ustálený Riccati porovnává s Kalatou v pěti různých případech a od varianty s variancemi se vyžaduje, aby selhala.

Kdy Kalmanův filtr za tu složitost stojí

SituaceCo použít
šum kolem konstanty, nic se nehýbeprůměr — Kalmanův filtr nedá nic navíc
signál se pohybuje předvídatelněKalman — model ho předběhne, propust ho zpozdí
víc senzorů s různým šumem a různou rychlostíKalman — váhy si spočítá sám
je potřeba veličina, kterou nikdo neměříKalman — jinak to nejde vůbec
procesor nemá na maticové násobeníα-β s pevnými čísly, výsledek je stejný

Josephův tvar. P = (I−KH)P⁻ je algebraicky správně, ale numericky se rozjede: kovariance ztratí symetrii, pak kladnou definitnost, a filtr se rozpadne bez varování. Josephův tvar P = (I−KH)P⁻(I−KH)ᵀ + KRKᵀ je delší a drží. Solver ho používá a testy hlídají, že P zůstane symetrická na strojovou přesnost.

Vzorce v této kapitole

K — maticové Kalmanovo zesílení
K = P⁻Hᵀ(HP⁻Hᵀ + R)⁻¹ [—] Welch & Bishop, tab. 1-2
P — Josephův tvar
P = (I−KH)P⁻(I−KH)ᵀ + KRKᵀ [—] numericky stabilní
Λ — index sledování
Λ = σ_a·T²/σ_v [—] Kalata 1984 — odchylky, ne variance
α, β — ustálená zesílení
α = 1 − r², β = 2(2−α) − 4√(1−α) [—] Kalata 1984