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.0Exemples :
0→ 0.016384→ 0.532767→ ≈ 1.0 (i16::MAX)-32768→ -1.0 (i16::MIN)
§Algorithme
ReLU (Rectified Linear Unit) : f(x) = max(0, x)
- Si
x < 0→ retourne0 - Si
x >= 0→ retournexinchangé (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)0→0(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.