Filtre de Kalman pour Android (Java/Kotlin)

Sommaire
Le module Filter.Kalman1D du package
fr.gildasld.torque_graph.shared.filters implémente un filtre de Kalman pour estimer le couple réel à partir de mesures Bluetooth bruitées.
Il réduit les fluctuations 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. |