Kalman Filter
AdvancedHet KalmanFilter-blok schat de verborgen toestand van een lineair systeem op basis van een ruizige meting. Bij elke sample voorspelt het blok waar de toestand zich zou moeten bevinden volgens het model en de bekende ingang, en corrigeert het die voorspelling vervolgens met de meting. Daarbij weegt het de twee af op basis van betrouwbaarheid: de procesruis Q tegenover de meetruis R.
Beschrijf het systeem zoals op papier — continu-tijd dx/dt = A·x + B·u, met Q als een ruisdichtheid per seconde — en het blok discretiseert dit exact voor de gekozen bemonsteringstijd, inclusief ruis. Het verwerkt twee toestanden en één meting, wat dekking biedt voor positie/snelheids-tracking, eerste-orde processen met onbekende bias en gelineariseerde batterijmodellen. Naast de toestandsschatting levert het blok de eigen onzekerheid (σ), de Kalman-versterkingen en de genormaliseerde innovatiekwadraten (NIS), het getal dat aantoont of Q en R correct zijn getuned. Het rekent één keer per sample ongeacht welke solver het diagram aanstuurt, blijft voorspellen wanneer metingen uitvallen, en kan direct in een terugkoppelingslus (regelkring) worden geplaatst.
Ingangen. z is de meting en u de bekende ingang. Reset herstart het filter vanaf de initiële schatting, terwijl een Valid-ingang onder 0.5 het filter laat voorspellen zonder meetcorrectie. Beide zijn optioneel — een niet-aangesloten Valid betekent dat de meting betrouwbaar is.
Offset is de constante term van het meetmodel. De meetvergelijking luidt z = C·x + offset. Een gelineariseerde curve rond een werkpunt is affien: het lineariseren van V(SOC) geeft V(s) + H·(SOC − s), oftewel een richtingscoëfficiënt H plus een constante V(s) − H·s. Sluit de Offset-ingang aan om deze direct dynamisch vanuit het diagram te sturen via een LookupTable en Gain.
Wiskundig Model
Waarbij:
x̂de tweedimensionale toestandsschatting is enPde covariantiematrix.zde meting is enude bekende ingang (nulde-orde-hold over elke sample).- Een continu model exact wordt gediscretiseerd via de matrixexponentiaal en Van Loan's methode voor Q.
Kde Kalman-versterking is enSde innovatievariantie (scalair bij één meting).- De eerste sample de predictiestap overslaat en de initiële toestand direct corrigeert; een sample met Valid < 0.5 slaat juist de correctiestap over.
Ingangen & Uitgangen
| Direction | ID | Label | Type | Status |
|---|---|---|---|---|
| → In | in1 |
z | number | Required |
| → In | in2 |
u | number | Optional |
| → In | in3 |
Reset | number | Optional |
| → In | in4 |
Dropout | number | Optional |
| → In | in5 |
Offset | number | Optional |
| ← Out | x_hat_0 |
x̂₀ | number | Output |
| ← Out | x_hat_1 |
x̂₁ | number | Output |
| ← Out | sigma_0 |
σ₀ | number | Output |
| ← Out | sigma_1 |
σ₁ | number | Output |
| ← Out | k_gain_0 |
K₀ | number | Output |
| ← Out | k_gain_1 |
K₁ | number | Output |
| ← Out | z_hat |
ẑ | number | Output |
| ← Out | innovation |
Innov. | number | Output |
| ← Out | innovation_cov |
S | number | Output |
| ← Out | nis |
NIS | number | Output |
Parameters
| Parameters | Label | Type | Standaard | Beschrijving |
|---|---|---|---|---|
sampleTime |
Sample Time | number | 1 |
Filter period in seconds |
model |
Model | select | continuous |
Continuous: dx/dt = A·x + B·u, discretised exactly for the sample time. Discrete: x[k+1] = A·x[k] + B·u[k], already for this sample time |
a |
A (2x2) | vector | 0 1; 0 0 |
State matrix, row by row |
b |
B (2x1) | vector | 0 1 |
Input matrix |
c |
C (1x2) | vector | 1 0 |
Measurement row |
d |
D | number | 0 |
Direct feedthrough from u to the measurement |
offset |
Measurement Offset | number | 0 |
Constant term in z = C·x + D·u + offset, e.g. the intercept of a linearised curve |
q |
Q | vector | 0 0.01 |
Process noise: two numbers for the diagonal, four for the full matrix. Per second (a density) for a continuous model, per sample for a discrete one |
r |
R | number | 1 |
Measurement noise variance |
xInit |
Initial Estimate | vector | 0 0 |
|
pInit |
Initial Covariance | vector | 1 1 |
Two numbers for the diagonal, four for the full matrix |
Gebruiksvoorbeelden
Volgen van een Ruisige Sinusoïde
Een langzame sinusgolf met Gaussische ruis (σ = 0.15) stuurt een continu constante-snelheid Kalman-filter aan met een bemonsteringsfrequentie van 50 Hz. De toestandsschatting volgt de sinus met slechts een kwart van de meetfout (RMS 0.040 ten opzichte van 0.150).
Snelheidsinschatting zonder Tachometer
Meting van een positietransducer met kwantisatieruis wordt gefilterd om zowel een zuivere positie als de niet rechtstreeks gemeten snelheid te reconstrueren zonder ruisversterking door differentiatie.
Opmerkingen & Best Practices
- σ uitgangen:
x̂₀ ± 2σ₀vormt een 95%-betrouwbaarheidsinterval wanneer het model accuraat is. Controleer dit via de NIS-uitgang: het tijdgemiddelde is 1 voor een consistent filter. - Valid ingang: Koppel hier de status van een sensor aan. Onder 0.5 voert het blok enkel voorspellingen uit en groeien de covarianties totdat er weer geldige metingen binnenkomen.
- Terugkoppeling: De schatting kan direct een regelaar aansturen waarvan de stuuractie terugkeert als
u. Doordat de predictieu_{k-1}gebruikt, ontstaat er bijd = 0geen algebraïsche lus. - Numerieke robuustheid: Slecht geformatteerde matrices vallen automatisch terug op het standaardmodel. Een gedegenereerde innovatievariantie (S ≤ 0) slaat de correctiestap veilig over zonder NaN te genereren.
Gerelateerde Componenten
- BatterySocEkf" class="bw-link">BatterySocEkf
- DiscreteStateSpace" class="bw-link">DiscreteStateSpace
- RandomNumber" class="bw-link">RandomNumber