Aller au contenu
  1. Portfolio/

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

·2 mins

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 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.