Calcul en virgule fixe
Simulez la quantification d’un nombre réel en format à virgule fixe, visualisez l’erreur d’arrondi, la résolution, la plage représentable et l’encodage binaire. Cet outil est utile en DSP, microcontrôleurs, FPGA, traitement audio et calcul embarqué temps réel.
Guide expert du calcul en virgule fixe
Le calcul en virgule fixe est une méthode de représentation des nombres réels dans laquelle la position de la virgule binaire est définie à l’avance. Contrairement au calcul en virgule flottante, où l’exposant permet de déplacer dynamiquement la virgule pour couvrir une plage très large, la virgule fixe sacrifie une partie de cette flexibilité en échange d’une mise en oeuvre plus simple, plus prévisible et souvent plus rapide sur du matériel embarqué. Cette approche reste fondamentale dans les systèmes temps réel, les microcontrôleurs sans unité de calcul flottant, les chaînes de traitement audio, la vision embarquée, les FPGA et de nombreux circuits de contrôle industriel.
En pratique, un format à virgule fixe représente une valeur réelle comme un entier mis à l’échelle. Si vous utilisez par exemple 8 bits fractionnaires, alors la valeur stockée est multipliée par 28, soit 256, puis convertie en entier. Une valeur comme 3,14159 devient donc environ 804 lorsqu’elle est mise à l’échelle. Une fois cet entier codé, la valeur reconstruite se calcule en le divisant à nouveau par 256. La différence entre la valeur d’origine et la valeur reconstruite est l’erreur de quantification. Toute la logique de conception d’un format en virgule fixe consiste à choisir correctement le compromis entre précision, plage et coût matériel.
Idée clé : en virgule fixe, plus vous ajoutez de bits fractionnaires, plus la précision augmente, mais moins la plage maximale représentable est grande si le nombre total de bits reste constant.
Principe mathématique de base
Le modèle le plus fréquent repose sur un format noté Qm.n. Dans ce schéma, m correspond généralement au nombre de bits de la partie entière et n au nombre de bits fractionnaires. Selon les conventions, le bit de signe peut être compté séparément ou inclus dans la partie entière. Le plus important est d’être cohérent dans toute la chaîne de calcul. Si un nombre réel x est représenté avec n bits fractionnaires, alors l’entier codé vaut :
Ensuite, la valeur reconstruite vaut :
La résolution du format est alors exactement égale à 2-n. Avec 8 bits fractionnaires, la résolution vaut 1/256, soit 0,00390625. Avec 15 bits fractionnaires, elle descend à 0,000030517578125. Cette notion est essentielle dans les applications sensibles au bruit numérique, car l’erreur d’arrondi minimum dépend directement de cette résolution.
Pourquoi utiliser la virgule fixe aujourd’hui
Malgré la généralisation des processeurs avec calcul flottant matériel, la virgule fixe reste très pertinente. D’abord, sur de nombreux microcontrôleurs basse consommation, les opérations entières sont plus rapides et consomment moins d’énergie que les opérations en virgule flottante. Ensuite, dans les architectures temps réel critiques, la prévisibilité du coût d’exécution est un avantage majeur. Une addition entière sur 16 ou 32 bits a un comportement temporel simple à analyser, ce qui facilite la certification, l’optimisation et le dimensionnement.
Dans les systèmes de traitement du signal, la virgule fixe offre aussi un meilleur contrôle des débordements, de la saturation, du bruit de quantification et de la stabilité numérique lorsqu’elle est correctement conçue. Sur FPGA, elle est souvent privilégiée parce qu’elle réduit la surface logique et permet d’augmenter la fréquence maximale par rapport à des pipelines flottants plus complexes.
Les éléments à maîtriser absolument
- Le nombre total de bits : il détermine la taille mémoire et la plage brute du format.
- Le nombre de bits fractionnaires : il fixe la résolution.
- Le signe : signé en complément à deux pour gérer les valeurs négatives, ou non signé si seules les valeurs positives existent.
- Le mode d’arrondi : au plus proche, troncature, plancher ou plafond, selon la logique métier.
- La stratégie de débordement : saturation, wrap-around ou signalement d’erreur.
Lecture des résultats du calculateur
Le calculateur ci-dessus permet de tester un scénario de quantification très concret. Vous entrez une valeur décimale, choisissez un format signé ou non signé, définissez la largeur totale du mot et le nombre de bits après la virgule, puis vous sélectionnez le mode d’arrondi. Le résultat affiché comprend :
- La valeur quantifiée obtenue après mise à l’échelle et arrondi.
- L’erreur de quantification, c’est-à-dire la différence entre la valeur réelle et la valeur reconstruite.
- La résolution du format, qui indique le plus petit pas représentable.
- La plage minimale et maximale possible.
- Le code binaire stocké, utile pour le débogage bas niveau.
- Un indicateur d’overflow si la valeur demandée dépasse la capacité du format.
Tableau comparatif de formats courants
Le tableau suivant illustre des caractéristiques réelles de plusieurs formats usuels. Les plages et résolutions sont calculées mathématiquement à partir du nombre de bits et du positionnement de la virgule. Ces chiffres sont particulièrement utiles pour choisir rapidement un format adapté à une application embarquée.
| Format | Type | Bits fractionnaires | Résolution réelle | Plage représentable | Erreur max d’arrondi au plus proche |
|---|---|---|---|---|---|
| Q7.8 sur 16 bits | Signé | 8 | 0,00390625 | -128 à 127,99609375 | 0,001953125 |
| Q15.16 sur 32 bits | Signé | 16 | 0,0000152587890625 | -32768 à 32767,9999847412 | 0,00000762939453125 |
| UQ0.8 sur 8 bits | Non signé | 8 | 0,00390625 | 0 à 0,99609375 | 0,001953125 |
| UQ8.8 sur 16 bits | Non signé | 8 | 0,00390625 | 0 à 255,99609375 | 0,001953125 |
Virgule fixe contre virgule flottante
Le choix entre virgule fixe et virgule flottante dépend des contraintes du projet. La virgule flottante est plus souple et réduit l’effort de dimensionnement manuel, mais elle impose souvent un coût matériel plus élevé et un comportement moins déterministe sur de petites plateformes. La virgule fixe, au contraire, exige une analyse de plage plus rigoureuse, mais elle permet une forte efficacité lorsque les bornes des signaux sont connues.
| Critère | Virgule fixe 16 bits | Float 32 bits | Double 64 bits |
|---|---|---|---|
| Taille mémoire par valeur | 2 octets | 4 octets | 8 octets |
| Économie mémoire vs double | 75 % | 50 % | 0 % |
| Pas de quantification | Fixe et déterministe | Variable selon l’exposant | Variable selon l’exposant |
| Analyse temps réel | Très favorable | Bonne à moyenne selon le MCU | Souvent plus coûteuse |
| Dimensionnement initial | Élevé | Faible | Faible |
Comment choisir le bon format
Le bon dimensionnement part toujours des données réelles du système. Il faut connaître les amplitudes minimales et maximales possibles, puis la précision utile. Si votre capteur varie entre -20 et +20 avec une précision utile de 0,01, il vous faut une résolution au moins aussi fine que 0,01 et une plage couvrant 40 unités. Un format signé sur 16 bits avec 10 bits fractionnaires donne une résolution de 1/1024, soit environ 0,0009765625, ce qui est largement suffisant. Sa plage est d’environ -32 à +31,999, ce qui couvre le besoin. C’est typiquement une bonne solution.
En revanche, si votre signal peut monter jusqu’à 500 et que vous gardez trop de bits fractionnaires sur un mot de 16 bits, vous risquez de perdre de la plage et de saturer fréquemment. Dans ce cas, il est préférable de réduire le nombre de bits fractionnaires, d’augmenter la taille du mot, ou de mettre en place une normalisation avant calcul.
Les erreurs classiques à éviter
- Choisir le format seulement à partir de la précision sans analyser les valeurs extrêmes.
- Oublier qu’une multiplication augmente le nombre de bits nécessaires dans le produit intermédiaire.
- Utiliser la troncature partout, ce qui introduit un biais systématique.
- Négliger les accumulations longues, par exemple dans un filtre FIR ou une somme glissante.
- Confondre l’encodage signé et non signé lors du diagnostic binaire.
- Ne pas tester les cas limites : maximum positif, minimum négatif, zéro, quasi débordement.
Cas d’usage concrets
En audio numérique, de nombreux traitements sur échantillons utilisent des formats à virgule fixe afin de garantir une latence faible et un coût réduit. Dans les commandes moteur, le calcul fixe facilite les boucles de régulation sur microcontrôleur. Dans les capteurs intelligents, il permet de traiter localement les signaux sans processeur haut de gamme. En apprentissage automatique embarqué, la quantification des poids et activations vers des entiers ou quasi virgule fixe réduit fortement la mémoire et augmente le débit de calcul.
Le domaine des FPGA reste l’un des plus grands utilisateurs de cette technique. Lorsqu’un algorithme est synthétisé en logique matérielle, chaque bit compte. Passer d’un pipeline flottant à un pipeline fixe bien dimensionné peut réduire la consommation de ressources, simplifier la chaîne de calcul et améliorer les fréquences d’horloge. C’est la raison pour laquelle de nombreux concepteurs commencent par un modèle flottant de référence puis réalisent une étude de quantification pour migrer vers la virgule fixe.
Méthode pratique de dimensionnement en 6 étapes
- Mesurer ou simuler les valeurs minimales et maximales de tous les signaux.
- Définir l’erreur numérique acceptable pour chaque étape.
- Choisir un nombre initial de bits fractionnaires à partir de la résolution visée.
- Vérifier la plage restante avec le nombre total de bits disponible.
- Tester les opérations critiques : additions, multiplications, accumulations, filtres.
- Ajuster le format et le mode d’arrondi jusqu’à atteindre le bon compromis.
Rounding, saturation et robustesse
Le mode d’arrondi a un impact direct sur le biais statistique. L’arrondi au plus proche tend à mieux répartir l’erreur autour de zéro, alors que la troncature crée souvent un biais dépendant du signe et de la distribution des données. Dans les applications de contrôle, une petite erreur biaisée peut devenir visible sur le long terme. La saturation, de son côté, est souvent préférable à l’effet de retour modulo lorsque le dépassement de capacité doit rester physiquement plausible. Un wrap-around qui transforme une grande valeur positive en une valeur négative peut être catastrophique dans une boucle de commande.
Sources de référence utiles
- Cornell University: introduction au complément à deux
- University of Iowa: représentation binaire et décimale en informatique
- NIST: ressource générale de normalisation et de calcul numérique
Conclusion
Le calcul en virgule fixe n’est pas une technique du passé. C’est au contraire un outil moderne, puissant et extrêmement rentable dès qu’un système a des contraintes d’énergie, de mémoire, de latence ou de coût matériel. Bien utilisé, il permet d’obtenir des résultats très précis avec une empreinte bien plus faible que la virgule flottante. Le secret réside dans une compréhension claire de la résolution, de la plage, du signe, de l’arrondi et du comportement en cas de débordement. Le calculateur de cette page vous aide à visualiser immédiatement ces notions pour concevoir des formats robustes et adaptés à vos données réelles.