Skip to main content

Crate kalman_fixed_agnostic

Crate kalman_fixed_agnostic 

Source
Expand description

§kalman-fixed-agnostic

Filtre de Kalman adaptatif en virgule fixe pour systèmes embarqués (no_std).

§Caractéristiques

  • #![no_std] — aucune dépendance à la bibliothèque standard
  • Arithmétique entière pure (pas de flottants, pas de libm)
  • Compatible RP2040 (Cortex-M0+), RP2350 (Cortex-M33) et architectures RISC-V
  • Algorithme : Filtre de Kalman scalaire à modèle constant
  • Bruit de mesure R adaptatif via la formule de König : Var(X) = E[X²] − E[X]²
  • Temps d’exécution constant (déterministe) — idéal pour les noyaux temps réel

§Représentation interne Q16.16

Toutes les grandeurs internes (x, p, q, r) sont stockées en format virgule fixe Q16.16 sur i64 :

valeur_réelle = valeur_i64 / 65536.0

L’interface publique (entrée/sortie) reste en i32 (entiers bruts de capteur).

§Algorithme

À chaque appel à AgnosticKalman::update, le filtre effectue dans l’ordre :

  1. Mise à jour du buffer circulaire — la nouvelle mesure remplace la plus ancienne
  2. Calcul de R dynamique — variance de la fenêtre via la formule de König
  3. PrédictionP ← P + Q
  4. Gain de KalmanK = P / (P + R)
  5. Correction de l’étatx ← x + K·(z − x)
  6. Correction de la covarianceP ← (1 − K)·P

§Formule de König

La variance est calculée sans passe double grâce à l’identité :

Var(X) = E[X²] − E[X]²

Cette formulation est numériquement stable pour des capteurs i32 typiques (ADC 12 bits, capteurs de température, accéléromètres) et s’exécute en O(N) avec N = 10 (taille fixe du buffer).

§Exemple

use kalman_fixed_agnostic::AgnosticKalman;

// Signal bruité autour de 1000 avec Q = 1 (filtre très lisse)
let mut k = AgnosticKalman::new(1000, 1);

// Convergence progressive vers la vraie valeur
let mesures = [1005, 998, 1002, 1010, 995, 1003, 999, 1007, 1001, 1004];
let mut sortie = 0i32;
for &m in &mesures {
    sortie = k.update(m);
}

// La sortie doit être proche de 1000
assert!((sortie - 1000).abs() < 15);

Structs§

AgnosticKalman
Filtre de Kalman adaptatif en virgule fixe Q16.16.

Constants§

WINDOW
Taille de la fenêtre glissante pour le calcul de la variance dynamique.