Vai al contenuto
coden

Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va

Combinazione di due misure e guadagno di Kalman, il filtro come media progressiva, modello di stato, previsione e correzione, inseguimento di un’auto con il GPS e stima della velocità non misurata, taratura dei rumori Q e R, ottimalità ed estensioni non lineari.

14 minuti Matěj Žalmánek 2026-10-15

Serie Basi di IA Parte 41 di 52
  1. Mappa dell’intelligenza artificiale: che cos’è ciascuna cosa e come si incastra tutto
  2. Breve storia dell’intelligenza artificiale: da Turing ai modelli linguistici
  3. Dati, modello, addestramento, inferenza: i concetti di base su un unico esempio
  4. Come leggere la notazione matematica: simboli, indici, sommatorie e quantificatori
  5. Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA
  6. Funzioni e applicazioni: perché ogni modello di IA è una funzione
  7. Logica e dimostrazioni: le regole con cui si ragiona nell’IA
  8. Grafi e alberi: la struttura su cui poggiano la ricerca e le reti neurali
  9. Algebra lineare per l’apprendimento automatico: vettori, matrici e perché l’IA soprattutto moltiplica
  10. Derivate, gradiente e regola della catena: come un modello capisce in quale direzione imparare
  11. Discesa del gradiente: come impara un modello
  12. Che cos’è la probabilità: dal lancio di un dado agli assiomi di Kolmogorov
  13. Probabilità condizionata e teorema di Bayes: come cambiare una stima quando scopri qualcosa di nuovo
  14. Variabile aleatoria e funzione di ripartizione: una sola funzione che dice tutto sulla distribuzione
  15. Funzione di densità e funzione di massa: perché una variabile continua ha probabilità zero in un punto
  16. Valore atteso, varianza e covarianza: dove si trova una distribuzione, quanto è larga e che cosa è legato a che cosa
  17. Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
  18. Legge dei grandi numeri e teorema del limite centrale: perché le medie si comportano in modo così prevedibile
  19. Statistica e stima dei parametri: massima verosimiglianza, MAP e intervalli di confidenza
  20. Teoria dell’informazione: entropia, entropia incrociata e divergenza KL — da dove vengono le funzioni di perdita
  21. Ricerca nello spazio degli stati: BFS, DFS, UCS e A* con animazioni
  22. Giochi e avversari: minimax, potatura alfa-beta e Monte Carlo tree search
  23. Soddisfacimento di vincoli: backtracking, propagazione dei vincoli e AC-3 su un sudoku e una mappa delle regioni ceche
  24. Logica e sistemi basati sulla conoscenza: concatenazione in avanti e all’indietro, risoluzione e sistemi esperti
  25. Pianificazione: STRIPS, il mondo dei blocchi, euristiche dal rilassamento e pianificazione negli agenti IA
  26. Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
  27. Algoritmi genetici: popolazione, incrocio, mutazione e selezione su uno zaino per l’escursione
  28. Strategie evolutive e programmazione genetica: dalla regola di un quinto alla legge di Keplero
  29. Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
  30. Ottimizzazione a sciame di particelle: inerzia, esperienza propria ed esperienza dello sciame
  31. Neuroevoluzione: evoluzione dei pesi e della forma delle reti neurali e l’algoritmo NEAT
  32. Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
  33. Logica fuzzy e probabilità: perché «un po’ caldo» non significa «probabilmente caldo»
  34. Logica fuzzy: t-norme, implicazioni e regole SE–ALLORA
  35. Controllo fuzzy: Mamdani e Sugeno, dal ventilatore al pendolo inverso su un carrello
  36. Clustering fuzzy: l’algoritmo fuzzy c-means e i punti tra i cluster
  37. Sistemi neuro-fuzzy (ANFIS): regole fuzzy che imparano dai dati
  38. Catene di Markov: matrice di transizione, distribuzione stazionaria e PageRank
  39. Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto
  40. Reti bayesiane: perché l’erba è bagnata e che cosa significa per l’irrigatore
  41. Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
  42. Tipi di apprendimento automatico: supervisionato, non supervisionato, semi-supervisionato e altri
  43. Prompt, contesto e RAG: come dare a un modello le informazioni giuste
  44. Autoencoder variazionali (VAE): immagini nuove da uno spazio latente continuo
  45. Reti generative avversarie (GAN): il falsario contro il detective
  46. Modelli di diffusione: come il rumore puro diventa un’immagine
  47. Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
  48. Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale
  49. Policy gradient e PPO: imparare direttamente la politica
  50. Come funziona un agente IA: un modello linguistico in un ciclo con strumenti
  51. Programmare con agenti IA: incarico, test e controllo
  52. Valutazione e sicurezza dei sistemi di IA: come misurare e come sorvegliare

Programma completo della serie 52 di 83 argomenti pubblicati

Cosa porterai a casa
  • Come si combinano due misure imprecise e che cos’è il guadagno di Kalman.
  • Come il filtro alterna la previsione secondo il modello e la correzione secondo la misura — e stima anche ciò che nessuno misura.
  • Perché la scelta dei rumori Q e R conta così tanto e come se la cava il filtro con un mondo non lineare.

Utile sapere prima: Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto, Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale

L’Apollo 11 volò verso la Luna con un computer di bordo che aveva meno memoria di una calcolatrice grafica di oggi. Eppure la navigazione doveva stimare di continuo, a partire da misure imprecise delle stelle, del radar e dei sensori inerziali, dove si trovava la navicella e a che velocità viaggiava. La aiutò un metodo che Rudolf Kálmán pubblicò nel 1960 e che Stanley Schmidt portò nella pratica per la NASA. Oggi il filtro di Kalman è in ogni cellulare che combina il GPS con l’accelerometro, in ogni drone e in ogni auto che mantiene da sola la corsia. Con questa parte si chiude il modulo sui modelli probabilistici.

Riprende le parti Modelli di Markov nascosti e Panoramica delle distribuzioni di probabilità.

1. Due misure imprecise valgono più di una

Cominciamo in modo semplice. Misuriamo due volte la distanza da un faro: una volta con uno strumento preciso — 100 m con un’incertezza (deviazione standard) di 5 m — e una volta con uno grossolano — 110 m con un’incertezza di 10 m. Qual è la stima migliore?

Teorema — combinazione di due stime normali

Se due stime indipendenti sono N(m1, σ12) e N(m2, σ22), la stima combinata è normale con

m = m1 + K (m2 − m1),   σ2 = (1 − K) σ12,   dove K = σ12 / (σ12 + σ22).

In modo equivalente 1/σ2 = 1/σ12 + 1/σ22: le precisioni si sommano.

Dimostrazione. La stima combinata ha una densità proporzionale al prodotto delle due densità (teorema di Bayes con la prima stima come distribuzione a priori e la seconda come verosimiglianza). Nell’esponente si sommano due funzioni quadratiche:

−(x − m1)2 / (2σ12) − (x − m2)2 / (2σ22) = −½ (1/σ12 + 1/σ22) x2 + (m1/σ12 + m2/σ22) x + cost.

Una densità con esponente −½ ax2 + bx è, dopo il completamento del quadrato, normale con varianza 1/a e valore atteso b/a. Da qui 1/σ2 = 1/σ12 + 1/σ22, cioè σ2 = σ12σ22 / (σ12 + σ22) = (1 − K) σ12, e m = σ2 (m1/σ12 + m2/σ22) = (1 − K) m1 + K m2 = m1 + K (m2 − m1). ∎

In parole semplici

Prendi la prima stima e spostala verso la seconda — tanto più quanto più ti fidi della seconda. Il numero K ti dice quale fetta della differenza adottare. Il risultato è più preciso di ciascuna misura da sola; anche una misura grossolana aggiunge informazione.

m = m1 + K (m2 − m1),   K = σ12 / (σ12 + σ22),   σ2 = (1 − K) σ12

m1, σ12
la prima stima (blu nella figura) è il punto di partenza — da lì ci spostiamo; la sua varianza al numeratore di K dice: meno ci fidiamo della prima stima, più lontano da essa possiamo muoverci
m2, σ22
la seconda stima (ambra); entra nella formula solo attraverso la differenza m2 − m1 — se le due coincidessero, non ci sarebbe nulla da correggere. La sua varianza al denominatore di K riduce il guadagno: di una misura grossolana ci fidiamo poco
K
il guadagno di Kalman, un numero tra 0 e 1 — quale parte della differenza adottare. È la quota dell’incertezza della prima stima sull’incertezza totale, quindi la stima più precisa «tira» il risultato verso di sé
m, σ2
la stima combinata (verde); il fattore 1 − K < 1 garantisce che la nuova incertezza sia minore della prima — ogni misura, anche grossolana, aggiunge qualcosa
Spostati dalla prima stima verso la seconda nella proporzione data da chi ti ispira più fiducia.
8090100110120130 distanza (m) densità di prob. (1/m)
Combinazione di due misure di distanza precisa: 100 ± 5 mgrossolana: 110 ± 10 mcombinata: 102 ± 4,5 m

Qui K = 25 / (25 + 100) = 0,2: adottiamo un quinto della differenza e otteniamo 102 m con un’incertezza di √20 ≈ 4,5 m — meno dei 5 m dello strumento preciso. Questo numero K è il guadagno di Kalman, e il filtro intero non è altro che questo passo, ripetuto nel tempo.

Esempio — combinazione delle misure 100 ± 5 m e 110 ± 10 m passo per passo

Varianze: σ12 = 52 = 25, σ22 = 102 = 100.

Guadagno: K = 25 / (25 + 100) = 0,2.

Valore atteso: m = 100 + 0,2 · (110 − 100) = 102 m — lo stesso della media ponderata 0,8 · 100 + 0,2 · 110.

Varianza: σ2 = (1 − 0,2) · 25 = 20,   σ = √20 ≈ 4,47 m.

Verifica tramite le precisioni: 1/25 + 1/100 = 0,04 + 0,01 = 0,05 = 1/20. ✓

2. Misurare più volte la stessa grandezza

Misuriamo la temperatura di una stanza con un termometro con incertezza di 2 °C, cinquanta volte di fila, e dopo ogni misura combiniamo il nuovo dato con la stima che abbiamo finora. Dopo cinquanta misure la stima è 19,895 °C — esattamente la media aritmetica di tutte le misure — e l’incertezza è 0,283 °C = 2/√50. Il filtro di Kalman per una grandezza che non cambia è quindi una semplice media progressiva. Diventa interessante quando la grandezza cambia nel tempo.

Teorema — il filtro per una grandezza costante è una media progressiva

Misuriamo una costante con uno strumento di varianza σ2 e partiamo da una stima così incerta che la prima misura la annulla del tutto (v0 → ∞). Allora dopo k misure vale

Kk = 1/k,   mk = mk−1 + (1/k) (zk − mk−1) = (z1 + … + zk) / k,   vk = σ2/k.

Dimostrazione per induzione. Per k = 1 si ha K1 = v0 / (v0 + σ2) → 1, quindi m1 = z1 e v1 = σ2. Se vale vk−1 = σ2/(k − 1), allora Kk = vk−1 / (vk−1 + σ2) = (1/(k − 1)) / (1/(k − 1) + 1) = 1/k e vk = (1 − 1/k) · σ2/(k − 1) = σ2/k. Se mk−1 è la media delle prime k − 1 misure, allora mk = ((k − 1) mk−1 + zk) / k è la media di tutte le k. ∎

In parole semplici

Nella media di dieci numeri la decima misura pesa un decimo — ed è esattamente il peso che le dà anche il filtro. Più cose sai già, meno ti sposta una singola misura nuova. L’incertezza cala come 1/√k: per dimezzare l’errore ti servono quattro volte più misure.

Esempio — le prime tre misure di temperatura

Il nostro filtro parte da una stima di 0 °C con varianza 106 (incertezza di 1 000 °C — «non so niente»); la varianza della misura è 22 = 4.

1ª misura 23,098 °C: K1 = 106 / (106 + 4) ≈ 1, stima 23,098 °C, varianza 4,00.

2ª misura 21,967 °C: K2 = 4 / (4 + 4) = 1/2, stima 23,098 + ½ · (21,967 − 23,098) = 22,533 °C, varianza 2,00.

3ª misura 16,630 °C: K3 = 2 / (2 + 4) = 1/3, stima 22,533 + ⅓ · (16,630 − 22,533) = 20,565 °C, varianza 1,33 = 4/3.

Verifica: (23,098 + 21,967 + 16,630) / 3 = 20,565 °C — una semplice media. Dopo cinquanta misure la varianza è 4/50 = 0,08 e l’incertezza √0,08 ≈ 0,283 °C.

3. Il modello di stato

Definizione — modello di stato lineare

Uno stato nascosto xk ∈ ℝn evolve e una misura zk lo rileva con rumore:

xk = F xk−1 + wk,   wk ~ N(0, Q),    zk = H xk + vk,   vk ~ N(0, R).

F è la matrice di transizione, H la matrice di misura, Q la covarianza del rumore di processo e R la covarianza del rumore di misura.

In parole semplici

È il modello di Markov nascosto della parte precedente, solo che lo stato non è «dado onesto o dado truccato», ma un vettore di numeri — per esempio posizione e velocità. La fisica dice come evolve lo stato, più o meno (F); gli urti casuali e l’imprecisione del modello li riassume Q. Lo strumento vede solo una parte dello stato (H) e sbaglia di R.

Il nostro esempio: un’auto percorre una strada a una velocità più o meno costante di 15 m/s, ma ogni tanto il conducente frena un po’ o accelera — un’accelerazione casuale con deviazione standard di 0,5 m/s². Lo stato è (posizione, velocità), il passo è 1 s, quindi F = [[1, 1], [0, 1]]: la nuova posizione è la vecchia più la velocità. Il GPS misura solo la posizione, con un’incertezza di 8 m: H = [1, 0], R = 64.

Definizione — matrice di covarianza e distribuzione normale multivariata

Per un vettore aleatorio X ∈ ℝn con valore atteso μ = E[X] la matrice di covarianza è Σ = E[(X − μ)(X − μ)T], cioè Σij = cov(Xi, Xj). Sulla diagonale ci sono le varianze delle componenti, fuori dalla diagonale le covarianze; la matrice è simmetrica e semidefinita positiva.

La notazione X ~ N(μ, Σ) indica la distribuzione normale multivariata con densità proporzionale a exp(−½ (x − μ)T Σ−1 (x − μ)). Per una trasformazione lineare vale AX + c ~ N(Aμ + c, A Σ AT), e la somma di vettori normali indipendenti è normale con la somma delle covarianze.

In parole semplici

La matrice di covarianza è «l’incertezza per più numeri insieme». Sulla diagonale c’è quanto siamo incerti sulla posizione e quanto sulla velocità. Fuori dalla diagonale c’è se gli errori vanno di pari passo: una covarianza positiva tra posizione e velocità significa «se abbiamo stimato l’auto troppo avanti, probabilmente le abbiamo attribuito anche una velocità troppo alta».

Esempio — da dove viene la matrice Q

Durante un passo di durata Δt sull’auto agisce un’accelerazione casuale costante a ~ N(0, q2). Dalle formule del moto uniformemente accelerato:

pk = pk−1 + Δt · vk−1 + ½ Δt2 a,   vk = vk−1 + Δt · a.

Senza rumore è F = [[1, Δt], [0, 1]]. Il rumore è w = g a con il vettore g = (½ Δt2, Δt), e secondo la regola AΣAT vista sopra

Q = q2 g gT = q2 [[Δt4/4, Δt3/2], [Δt3/2, Δt2]].

Per Δt = 1 s e q = 0,5 m/s²: Q = 0,25 · [[0,25; 0,5], [0,5; 1]] = [[0,0625; 0,125], [0,125; 0,25]]. In un secondo, quindi, l’accelerazione casuale aggiunge un’incertezza di √0,0625 = 0,25 m nella posizione e di 0,5 m/s nella velocità — ed entrambi gli errori hanno lo stesso segno, per questo la covarianza è positiva. È esattamente questa la matrice nel codice più sotto.

4. Previsione e correzione

Algoritmo — filtro di Kalman

La stima è una distribuzione normale con valore atteso x̂ e covarianza P. A ogni passo:

Previsione: x̂− = F x̂,   P− = F P FT + Q.

Correzione: K = P− HT (H P− HT + R)−1,   x̂ = x̂− + K (z − H x̂−),   P = (I − K H) P−.

In parole semplici

Previsione: «secondo la fisica l’auto adesso dovrebbe essere qui» — e siccome la fisica non è perfetta, l’incertezza cresce un po’. Correzione: arriva la misura; la differenza tra misura e previsione (l’innovazione) viene adottata solo nella proporzione K, a seconda di chi ti ispira più fiducia. È la combinazione di due misure del primo capitolo — una «misura» è la previsione dal passo precedente, l’altra è il GPS. In più la covarianza P si ricorda come sono legati l’errore di posizione e quello di velocità, e grazie a questo il filtro corregge anche la velocità, che nessuno misura.

I colori nelle scomposizioni qui sotto corrispondono alle figure: la previsione (prima la «prima stima») in blu, la misura in ambra, il risultato in verde, il guadagno in viola.

x̂− = F x̂,   P− = F P FT + Q

x̂−, P−
la previsione per questo passo, prima che arrivi la misura — fa la parte della «prima stima» nella combinazione di due misure
F … FT
il modello porta avanti la stima; l’incertezza si propaga con la regola AΣAT (per l’auto: una velocità incerta si traduce in un secondo in incertezza sulla posizione). Non basta FP, perché la covarianza è una grandezza quadratica — si moltiplica a sinistra e a destra
Q
il modello non è perfetto (il conducente frena un po’), quindi l’incertezza si aggiunge a ogni passo — senza Q, P scenderebbe a zero e il filtro smetterebbe di dare ascolto alle misure
Previsione: dove arriva lo stato secondo la fisica e di quanto cresce così l’incertezza.

K = P− HT (H P− HT + R)−1

H P− HT
l’incertezza della previsione tradotta nel linguaggio dello strumento (per l’auto solo la varianza della posizione) — corrisponde a σ12
R
la varianza della misura, corrisponde a σ22; la somma tra parentesi è la varianza dell’innovazione S — di quanto misura e previsione possono divergere per puro caso
P− HT
la covarianza dell’intero stato con la grandezza misurata; grazie a essa riceve un guadagno non nullo anche la velocità, che nessuno misura — l’errore di posizione e quello di velocità sono legati
K
il guadagno di Kalman, un numero per ogni componente dello stato; l’inversa al posto della divisione solo perché la misura può essere un vettore
In una dimensione con H = 1 è esattamente il K = σ12 / (σ12 + σ22) del primo capitolo.

x̂ = x̂− + K (z − H x̂−),   P = (I − K H) P−

x̂−, P−
la previsione — il punto di partenza da cui ci spostiamo
z
la nuova misura (nella figura i punti ambra del GPS); l’unico punto da cui i dati entrano nella stima
H
converte la previsione dello stato in ciò che lo strumento dovrebbe mostrare; misura e stato non si possono sottrarre direttamente, perché il GPS vede solo la posizione, non la velocità
K
quale parte dell’innovazione z − Hx̂− adottare in ogni componente dello stato
x̂, P
la stima corretta (verde nella figura); il fattore I − KH riduce l’incertezza — tanto più quanto maggiore è la parte della misura che abbiamo adottato
Correzione: lo stesso «spostati verso la misura nella proporzione K», solo per vettori.
import numpy as np

F = np.array([[1, 1], [0, 1]])                    # posizione += velocità
H = np.array([[1, 0]])                            # misuriamo solo la posizione
Q = 0.5**2 * np.array([[1/4, 1/2], [1/2, 1]])     # accelerazione casuale
R = np.array([[8**2]])                            # GPS ± 8 m

def kalman(mereni, x, P):
    for z in mereni:
        x, P = F @ x, F @ P @ F.T + Q             # previsione
        K = P @ H.T @ np.linalg.inv(H @ P @ H.T + R)
        x = x + K @ (z - H @ x)                   # correzione secondo l’innovazione
        P = (np.eye(2) - K @ H) @ P
        yield x, P
Esempio — i primi due passi del filtro sui dati dell’auto

Avvio. La prima misura del GPS è z1 = 8,44 m. Il filtro parte dalla posizione 8,44 m, velocità 0 e una grande incertezza P0 = [[100; 0], [0; 100]] (10 m e 10 m/s). La correzione con la stessa misura non cambia la posizione (l’innovazione è 0), ne riduce solo la varianza: K = 100 / (100 + 64) = 0,610, P11 = (1 − 0,610) · 100 = 39,02.

Previsione per il 2° secondo. x̂− = (8,44 + 0; 0) = (8,44; 0,00). La covarianza FPFT aggiunge alla varianza della posizione la varianza della velocità (posizione += velocità):

P− = [[39,02 + 100 + 0,0625; 100 + 0,125], [100 + 0,125; 100 + 0,25]] = [[139,09; 100,13], [100,13; 100,25]].

Correzione. Misura z2 = 23,23 m, innovazione y = 23,23 − 8,44 = 14,78 m, la sua varianza S = 139,09 + 64 = 203,09.

K = (139,09; 100,13) / 203,09 = (0,685; 0,493),

x̂ = (8,44 + 0,685 · 14,78; 0 + 0,493 · 14,78) = (18,57 m; 7,29 m/s).

Dopo due misure il filtro «sa» che l’auto si muove, anche se nessuno ha misurato la velocità: l’ha stimata in 7,3 m/s (quella reale è 13,9 m/s). Il guadagno per la velocità è non nullo solo grazie alla covarianza 100,13 fuori dalla diagonale. Perché solo la metà? Le misure hanno un rumore di 8 m, quindi il filtro non prende ancora del tutto sul serio una differenza di 15 m — nei secondi successivi la velocità si assesta.

5. Il filtro segue l’auto

Un minuto di guida, una misura del GPS al secondo. In questo tempo l’auto percorre poco meno di un chilometro, quindi in un grafico della posizione il rumore si perderebbe. Disegniamo perciò di quanto l’auto è avanti o indietro rispetto a una marcia a esattamente 15 m/s:

−25025 01020 0102030405060 scostamento dalla marcia a 15 m/s (m) velocità (m/s) tempo (s)
Inseguimento dell’auto: sopra lo scostamento della posizione, sotto la velocità realtà misure del GPS stima del filtro ± 2σ

Le misure del GPS si discostano dalla posizione reale in media di 8,3 m (dal decimo secondo, quando il filtro è ormai avviato). La stima del filtro solo di 4,9 m — il 41 % in meno. E la velocità, che nessun sensore misura, la stima con un errore di 0,8 m/s: il filtro la ricava da come cambia la posizione. All’inizio non conosce la velocità (parte da zero), ma in pochi secondi la aggancia. La fascia ±2σ è l’incertezza onesta del filtro — la posizione reale ci sta dentro nel 95 % dei passi, esattamente come deve.

Definizione — errore medio (RMSE) e fascia ±2σ

L’«errore medio» in questa parte è la radice dell’errore quadratico medio (RMSE) sui passi k = 10, …, 59 (N = 50):

RMSE = √( (1/N) ∑k (x̂k − xk)2 ),

dove xk è la posizione reale e x̂k la stima (o la misura stessa). I quadrati penalizzano gli errori grandi più di quelli piccoli e la radice riporta il risultato in metri. Per il solo GPS l’RMSE dovrebbe venire intorno a σ = 8 m — ed è venuto 8,3 m.

La fascia ±2σ è l’intervallo x̂k ± 2√Pk,11. Per una distribuzione normale l’intervallo μ ± 2σ contiene una probabilità di 0,9545; se il filtro ha calcolato correttamente l’incertezza P, la realtà deve cadere nella fascia in circa il 95 % dei passi.

Dopo pochi passi il guadagno di Kalman si stabilizza su K ≈ (0,30; 0,05): di ogni innovazione il filtro adotta il 30 % nella posizione e il 5 % (0,05 m/s per metro di innovazione) nella velocità. Su 50 guide simulate l’errore del filtro è in media il 55 % dell’errore del solo GPS.

Teorema — guadagno stazionario

Nelle formule per P−, K e P non compaiono le misure z — covarianza e guadagno si possono calcolare in anticipo. Unendo previsione e correzione si ottiene una ricorrenza (l’equazione di Riccati discreta)

P−k+1 = F (P−k − P−kHT (HP−kHT + R)−1 HP−k) FT + Q.

Per F, H, Q, R costanti che soddisfano le condizioni usuali (il sistema è osservabile — da una serie di misure si può ricavare l’intero stato — e il rumore Q agisce su tutte le sue componenti) la successione converge a un unico punto fisso indipendentemente dalla P0 iniziale; il guadagno converge allora a un valore stazionario.

Per l’auto: dopo 60 passi K = (0,297; 0,052) e P = [[19,04; 3,35], [3,35; 1,29]], cioè il filtro si attribuisce una precisione di √19,04 ≈ 4,4 m nella posizione e √1,29 ≈ 1,1 m/s nella velocità.

In parole semplici

All’inizio il filtro non sa quasi niente e si beve ogni misura (guadagno 0,61, poi 0,68). Man mano che la stima diventa più precisa, il guadagno cala — finché si stabilizza dove l’incertezza aggiunta a ogni passo dal rumore Q è grande quanto quella che toglie la misura. Da lì in poi non cambia più nulla, ed è per questo che nei dispositivi semplici il guadagno spesso si calcola una volta in anticipo e poi il filtro moltiplica soltanto per numeri fissi.

6. Di chi fidarsi: Q e R

Il filtro ha bisogno di conoscere Q e R. La precisione del GPS di solito la indica il produttore, ma il rumore di processo è più difficile da stimare. Che cosa succede se dai al filtro valori diversi da quelli dei dati?

Rumore di processo che il filtro presume (m/s²)0,010,10,5 (reale)210
errore di posizione (m)9,295,884,865,677,08
errore di velocità (m/s)1,190,860,791,535,19

Quando il filtro crede che l’auto vada a una velocità quasi esattamente costante (Q piccolo), si aggrappa al suo modello e reagisce tardi all’accelerazione reale — l’errore di posizione è persino maggiore che con il solo GPS. Quando invece si aspetta cambiamenti bruschi (Q grande), non si fida del modello e copia le misure rumorose. Il risultato migliore lo ottiene con il valore reale 0,5. Lo stesso vale per R: con un’incertezza del GPS di 2, 8 e 30 m l’errore di posizione risulta 5,66; 4,86 e 5,39 m.

7. Perché proprio così

Teorema — ottimalità del filtro di Kalman

Se il modello è lineare e i rumori sono normali, la distribuzione N(x̂k, Pk) è esattamente la distribuzione a posteriori dello stato P(xk | z1, …, zk). Senza l’ipotesi di normalità il filtro di Kalman è la migliore stima lineare nel senso dell’errore quadratico medio.

In parole semplici

Il filtro di Kalman è il teorema di Bayes applicato più e più volte. La previsione è la distribuzione a priori, la misura è la verosimiglianza, la correzione è la distribuzione a posteriori. La distribuzione normale ha la rara proprietà che il prodotto di normali è di nuovo normale — e così basta ricordarsi valore atteso e covarianza invece dell’intera funzione. È l’algoritmo forward dei modelli di Markov nascosti per uno stato continuo.

p(xk | z1:k) ∝ p(zk | xk) · ∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1

∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1
la previsione (distribuzione a priori): lo stato precedente non lo conosciamo con esattezza, quindi facciamo la media della transizione su tutti gli stati precedenti possibili, pesati in base a ciò in cui credevamo la volta prima. L’integrale è l’analogo continuo della somma ∑i nell’algoritmo forward degli HMM. Per un modello lineare e una distribuzione normale risulta N(Fx̂, FPFT + Q)
p(zk | xk)
la verosimiglianza della nuova misura — quanto bene ciascun luogo spiegherebbe ciò che ha mostrato il GPS; dal modello è N(zk; Hxk, R)
p(xk | z1:k)
la distribuzione a posteriori dopo tutte le misure; «∝» perché la costante di normalizzazione p(zk | z1:k−1) non ci serve — il prodotto di due densità normali lo calcola fino in fondo la dimostrazione del teorema all’inizio della parte, e ne esce esattamente il passo di correzione
Il teorema di Bayes nel tempo: previsione per verosimiglianza dà una nuova stima, che è la previsione per il passo successivo.

8. Quando il mondo non è lineare

  • Il filtro di Kalman esteso (EKF) linearizza il modello non lineare a ogni passo tramite la derivata — così faceva anche la navigazione dell’Apollo.
  • Il filtro di Kalman unscented (UKF), invece delle derivate, fa passare attraverso il modello pochi punti scelti con cura e da essi calcola il nuovo valore atteso e la nuova covarianza.
  • Il filtro a particelle rinuncia del tutto alla distribuzione normale: rappresenta la stima con migliaia di campioni («particelle») che si muovono secondo il modello e vengono ripesati secondo le misure. Gestisce anche una stima con più picchi, per esempio «il robot è o in cucina o in soggiorno».
  • Dove si usa: fusione di GPS, accelerometro e giroscopio nei cellulari, navigazione di aerei, droni e razzi, tracciamento di oggetti con il radar, stima della posizione delle auto autonome e perfino smussamento di serie storiche economiche.
Definizione — filtro di Kalman esteso (EKF)

Il modello è non lineare: xk = f(xk−1) + wk, zk = h(xk) + vk. L’EKF calcola il valore atteso con le funzioni non lineari e la covarianza con le loro matrici jacobiane (matrici delle derivate parziali) nella stima attuale:

Fk = ∂f/∂x |x̂k−1,   Hk = ∂h/∂x |x̂−k,

x̂− = f(x̂),   P− = Fk P FkT + Q,   x̂ = x̂− + K (z − h(x̂−)),   K e P come prima, con Hk al posto di H.

Esempio: un radar misura la distanza h(px, py) = √(px2 + py2); allora Hk = (px/d, py/d) con d = √(px2 + py2) — il versore in direzione del bersaglio. Per un bersaglio in (300, 400) m si ha d = 500 m e Hk = (0,6; 0,8). Il risultato non è più la distribuzione a posteriori esatta, ma solo una sua approssimazione; tanto peggiore quanto più il modello è curvo nell’intervallo dell’incertezza.

9. Riepilogo

  • Due misure normali indipendenti si combinano con una media ponderata; le precisioni si sommano e il peso K è il guadagno di Kalman.
  • Il filtro di Kalman ripete una previsione secondo il modello e una correzione secondo la misura; per una grandezza costante è una media progressiva.
  • Per l’auto ha ridotto l’errore di posizione da 8,3 m (GPS) a 4,9 m e ha stimato anche la velocità non misurata con un errore di 0,8 m/s; la fascia ±2σ ha coperto la realtà nel 95 % dei passi.
  • Il risultato dipende da Q e R: troppa fiducia nel modello reagisce in ritardo, troppo poca copia il rumore.
  • Per un modello lineare con rumore normale il filtro è un aggiornamento bayesiano esatto; il mondo non lineare lo gestiscono EKF, UKF e filtri a particelle.

Con questa parte si chiude il modulo sui modelli probabilistici. Vuoi provarlo con mano? Chiedi a un agente IA di scrivere un filtro di Kalman per i dati dell’accelerometro del tuo telefono e prova a vedere quanto bene stima di quanto hai spostato il telefono.

La vedi diversamente? Scrivi a support@coden-app.com.

Un Agente sul tuo computer, guidato dal telefono