🚦 Predittore di Congestione del Traffico — Filtro di Kalman dal Vivo
Osserva un vero filtro di Kalman fondere dal vivo letture di sensori simulati e rumorosi per stimare e prevedere la velocità del traffico su un tratto stradale, riducendo realmente l'incertezza a ogni aggiornamento di misura. Regola il rumore di processo e il rumore di misura, inietta eventi di congestione e interruzioni del sensore, e osserva la covarianza restringersi e crescere esattamente come previsto dalle equazioni.
Informazioni su questa simulazione
Le letture di velocità dei sensori stradali sono rumorose — una singola spira induttiva o un rilevatore radar può oscillare di diversi km/h da un campione all'altro — eppure i sistemi di gestione del traffico hanno bisogno di una stima fluida, affidabile e continuamente aggiornata di quanto velocemente si muove realmente un tratto. Questa simulazione implementa un vero filtro di Kalman su un modello a 2 stati — velocità e la sua tendenza a breve termine — che esegue il vero passo di predizione (estrapolazione dello stato tramite la matrice di transizione, più crescita della covarianza da rumore di processo) e il vero passo di aggiornamento (calcolo del guadagno di Kalman dalla covarianza dell'innovazione, correzione dello stato, e una riduzione della covarianza in forma di Joseph numericamente robusta) su letture simulate e rumorose di sensore per un tratto stradale. Niente qui è uno smoother esponenziale fittizio: ogni numero nel pannello statistiche — il guadagno di Kalman, la covarianza P₀₀, l'RMSE corrente — proviene direttamente dalle stesse equazioni di algebra lineare pubblicate da Rudolf Kálmán nel 1960.
🔬 Cosa mostra
Una velocità stradale "vera" nascosta evolve con una lenta tendenza più casualità, e può essere spinta in congestione da eventi iniettati che fanno calare e poi recuperare l'obiettivo di flusso libero. Un sensore simulato riporta questa velocità vera più rumore gaussiano a intervalli fissi. Il filtro di Kalman predice in avanti a ogni tick — la sua incertezza cresce — e si corregge ogni volta che arriva una lettura — la sua incertezza si riduce — mentre una scena autostradale 3D mostra densità e velocità del traffico e un grafico dal vivo traccia velocità vera, letture rumorose, la stima di Kalman e la sua banda di confidenza ±1σ che si restringe e poi cresce, più una proiezione tratteggiata a più passi nel futuro.
🎮 Come si usa
Regola il rumore di processo Q per controllare quanto il filtro si fida dei cambiamenti improvvisi rispetto al proprio modello, e il rumore di misura R per controllare quanto è rumoroso il sensore simulato (e quindi quanto il filtro si fida di ogni lettura). Clicca su Inietta congestione per innescare un realistico calo e recupero di velocità, oppure su Interruzione del sensore per sospendere le misure per 8 secondi e osservare la banda di confidenza allargarsi visibilmente senza correzioni in arrivo — per poi restringersi bruscamente non appena arriva una nuova lettura.
💡 Lo sapevi?
Il filtro di Kalman che fonde il sensore di velocità simulato di questa simulazione è matematicamente lo stesso stimatore che guidò le missioni Apollo verso la Luna, e le varianti moderne funzionano ancora dentro il chip GPS del tuo telefono, il sistema di mantenimento di corsia della tua auto e le reti cittadine di semafori adattivi — tutte eseguono esattamente questa danza predizione/aggiornamento, solo su vettori di stato più ricchi.
Domande frequenti
Come combina un filtro di Kalman un sensore di velocità rumoroso con un modello di moto?
Il filtro mantiene una stima dello stato — qui, la velocità stradale e la sua tendenza a breve termine — più una matrice di covarianza che descrive quanto è incerta quella stima. A ogni tick esegue un passo di predizione: lo stato viene estrapolato in avanti con un semplice modello di moto (x⁻ = Fx) e la covarianza cresce per riflettere il rumore di processo (P⁻ = FPFᵀ + Q). Quando arriva una nuova lettura rumorosa del sensore, un passo di aggiornamento calcola il guadagno di Kalman K = P⁻Hᵀ(HP⁻Hᵀ + R)⁻¹, sposta lo stato verso la misura di K volte l'innovazione, e riduce la covarianza. Il guadagno bilancia automaticamente la fiducia tra il modello e il sensore in base alle rispettive incertezze — non è un fattore di smorzamento fisso.
Cosa controllano davvero i cursori del rumore di processo Q e del rumore di misura R?
Q è l'intensità del rumore di processo assunta dal filtro: stabilisce quanto lo stato può derivare tra una misura e l'altra durante il passo di predizione, facendo crescere la matrice di covarianza P di una quantità derivata da un modello discretizzato di accelerazione a rumore bianco. Un Q maggiore rende il filtro più reattivo ma più rumoroso. R è la varianza del rumore di misura assunta, legata alla deviazione standard reale del rumore del sensore simulato. Un R maggiore rende più piccolo il guadagno di Kalman, quindi ogni nuova lettura sposta meno la stima perché il filtro si fida più della propria predizione che di un sensore rumoroso.
Perché l'incertezza della stima si riduce dopo ogni aggiornamento ma cresce tra un aggiornamento e l'altro?
Il passo di predizione aggiunge la covarianza di rumore di processo Q a P a ogni tick, quindi la varianza della stima di velocità aumenta rigorosamente finché non arriva nuova informazione. Il passo di aggiornamento applica poi la formula della covarianza in forma di Joseph P = (I−KH)P⁻(I−KH)ᵀ + KRKᵀ, che garantisce matematicamente di produrre una covarianza non superiore a P⁻ ogni volta che R è positivo — la lettura del sensore, per quanto rumorosa, rimuove sempre un po' di incertezza. La lettura live di P₀₀ e la banda di confidenza rendono direttamente visibile quel motivo a dente di sega di crescita e riduzione.
Cosa succede durante un'interruzione del sensore, e perché la banda di confidenza si allarga?
Cliccando su "Interruzione del sensore" si sospendono gli aggiornamenti di misura per 8 secondi simulati, così il filtro esegue ripetutamente il passo di predizione senza alcun aggiornamento correttivo nel mezzo. Ogni passo di predizione continua ad aggiungere covarianza di rumore di processo, quindi la varianza continua ad accumularsi senza controllo e la banda di confidenza ±1σ della stima si allarga visibilmente sul grafico — esattamente ciò che mostra la proiezione tratteggiata a più passi nel prossimo futuro anche al di fuori di un'interruzione, un'illustrazione fedele della navigazione stimata.
È la stessa matematica usata nei veri sistemi di gestione del traffico?
Sì, in sostanza. I veri sistemi di trasporto intelligenti fondono letture di velocità da spire induttive, radar o sonde GPS usando filtri di Kalman o varianti simili, a volte estesi a stati vettoriali che coprono più tratti o modelli commutanti che stimano anche il regime di traffico. Questa simulazione usa il vero filtro di Kalman scalare posizione/tendenza con le equazioni standard di predizione-aggiornamento anziché uno smoother regolato a mano, quindi il guadagno, la crescita della covarianza e la sua riduzione che vedi sono reali.
Perché lo stato include un termine di tendenza invece di limitarsi a tracciare solo la velocità?
Un filtro a 1 stato che traccia solo la velocità deve trattare ogni deviazione come rumore, quindi resta sempre indietro rispetto a una tendenza reale come l'accumulo nell'ora di punta o la ripresa dopo un evento di congestione. Aggiungere uno stato di tendenza permette alla matrice di transizione di stato F=[[1,dt],[0,1]] di estrapolare la velocità in avanti usando quella tendenza a ogni passo di predizione, così il filtro anticipa un'accelerazione o decelerazione continua invece di limitarsi a reagire a posteriori — la versione più semplice del modello posizione-velocità usato nel tracciamento GPS e radar.
Un vero filtro di Kalman a 2 stati (velocità, tendenza) esegue le vere equazioni di predizione (F, Q) e aggiornamento (guadagno di Kalman, covarianza in forma di Joseph) su letture simulate e rumorose di sensori stradali, con rumore di processo e di misura regolabili, iniezione di congestione dal vivo, interruzione del sensore, e una previsione a più passi nel futuro con incertezza crescente.
3D · renderer Three.js / WebGL · target 60 FPS · funziona interamente lato client, senza installazione