Skip to main content

Crate relu_q15

Crate relu_q15 

Source
Expand description

§relu-q15

Fonction d’activation ReLU en virgule fixe Q15 pour systèmes embarqués.

§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+) sans fpu, (sans unité de calcul en virgule flottante)
  • Temps d’exécution constant (déterministe) idéal pour les noyaux temps réel
  • Zéro allocation dynamique, traitement in-place possible

§Format Q15

En Q15, un i16 représente un nombre réel dans [-1.0, 1.0[ :

valeur_réelle = valeur_i16 / 32768.0

Exemples :

  • 0 → 0.0
  • 16384 → 0.5
  • 32767 → ≈ 1.0 (i16::MAX)
  • -32768 → -1.0 (i16::MIN)

§Algorithme

ReLU (Rectified Linear Unit) : f(x) = max(0, x)

  • Si x < 0 → retourne 0
  • Si x >= 0 → retourne x inchangé (identité)

Cas limites traités explicitement :

  • i16::MIN (-32768) → 0 (valeur la plus négative possible en Q15)
  • i16::MAX (32767) → 32767 (passé tel quel)
  • 00 (zéro reste zéro)

§Exemple

use relu_q15::{relu_q15, relu_slice_q15};

// Valeurs négatives → 0
assert_eq!(relu_q15(-32768), 0); // i16::MIN
assert_eq!(relu_q15(-16384), 0); // -0.5
assert_eq!(relu_q15(-1),     0);

// Zéro → 0
assert_eq!(relu_q15(0), 0);

// Valeurs positives → identité
assert_eq!(relu_q15(1),      1);
assert_eq!(relu_q15(16384),  16384); // 0.5
assert_eq!(relu_q15(32767),  32767); // i16::MAX

// Traitement in-place d'un vecteur
let mut buf = [-32768i16, -100, 0, 100, 32767];
relu_slice_q15(&mut buf);
assert_eq!(buf, [0, 0, 0, 100, 32767]);

Functions§

relu_q15
Calcule la fonction d’activation ReLU pour un seul nombre en virgule fixe Q15.
relu_slice_q15
Applique ReLU sur un slice de données en virgule fixe Q15, in-place.