Aller au contenu
  1. Portfolio/

Filtre de Kalman pour Android (Java/Kotlin)

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 Filter gérant la zone morte (deadband).
  • Une classe interne Kalman1D implé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ètreSignificationValeur typique
processNoiseBruit du modèle0.0002
measurementNoiseBruit de mesure0.001
adaptiveGainActive l’ajustement dynamiquetrue
adaptiveStrengthSensibilité de l’adaptation0.2
deadbandThresholdZone de tolérance sans variation0.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.