Application d’un filtre de Kalman 1D dans Torque Graph
·2 mins

Sommaire
Le module Filter.Kalman1D du package fr.gildasld.torque_graph.shared.filters applique un filtre de Kalman unidimensionnel pour lisser les mesures de couple provenant du couplemètre Bluetooth.
Il réduit les fluctuations aléatoires dues au bruit de mesure et améliore la stabilité de l’affichage temps réel.
Structure du module #
shared/
└── filters/
└── Filter.kt
Ce fichier contient :
- Une classe abstraite
Filtergérant la zone morte (deadband). - Une classe interne
Kalman1Dimplémentant le filtrage adaptatif.
Schéma d’interaction #
sequenceDiagram
autonumber
participant S as Source Bluetooth
participant F as Kalman1D
participant D as Deadband
participant O as Output Signal
S->>F: Valeur brute (inputValue)
F->>F: Mise à jour des covariances (Q, R)
F->>F: Calcul du gain de Kalman K = P / (P + R)
F->>F: Mise à jour de l’état x = x + K*(z - x)
F->>D: Application du deadband
D-->>O: Valeur filtrée finale
Utilisation en Kotlin #
val kalman = Filter.Kalman1D(
processNoise = 0.0002f,
measurementNoise = 0.001f,
adaptiveGain = true,
adaptiveStrength = 0.2f,
capacity = 12f
)
var filtered = 0f
for (sample in torqueMeasurements) {
filtered = kalman.update(sample)
println("Couple filtré : $filtered")
}
Résumé #
| Paramètre | Signification | Valeur typique |
|---|---|---|
processNoise | Bruit du modèle | 0.0002 |
measurementNoise | Bruit de mesure | 0.001 |
adaptiveGain | Active l’ajustement dynamique | true |
adaptiveStrength | Sensibilité de l’adaptation | 0.2 |
deadbandThreshold | Zone de tolérance sans variation | 0.003 |
Ce filtre est utilisé dans Torque Graph pour fournir une estimation stable et fluide du couple moteur mesuré, garantissant une lecture réactive mais sans oscillations parasites.