Transmission numérique · détecter et corriger les erreurs
Un bit s'est perdu
en route.
Sur un câble, une fibre ou une onde radio, un 0 peut arriver en 1. Le récepteur n'a aucun moyen de le deviner : pour lui, un bit faux ressemble exactement à un bit juste. Sauf si on a prévu le coup.
00
Pourquoi ça casse
Un bit, physiquement, ce n'est pas un chiffre : c'est une tension, une impulsion lumineuse ou une onde. Le récepteur mesure et tranche : « au-dessus du seuil → 1, en dessous → 0 ». Le bruit électromagnétique, l'atténuation sur la distance, une soudure moyenne ou un micro-ondes voisin peuvent pousser une mesure du mauvais côté du seuil. Le bit bascule.
On mesure ça avec le TEB (taux d'erreur binaire, BER en anglais) : le nombre de bits faux divisé par le nombre de bits envoyés.
| Support | TEB typique | Ce que ça donne à 1 Gbit/s |
|---|---|---|
| Fibre optique | 10⁻¹² | 1 bit faux toutes les ~17 minutes |
| Paire de cuivre (Ethernet) | 10⁻⁹ … 10⁻⁶ | de 1 à 1 000 bits faux par seconde |
| Wi-Fi / radio mobile | 10⁻⁵ … 10⁻³ | jusqu'à un million de bits faux par seconde |
| Liaison satellite lointaine | 10⁻² et pire | impraticable sans correction |
Le piège à comprendre en premier
Un TEB de 10⁻⁶ a l'air minuscule. Mais un fichier de 10 Mo, c'est 80 millions de bits : statistiquement 80 bits faux. Sur un exécutable ou un virement bancaire, un seul suffit à tout casser. Le silence n'est pas un signe de bonne santé : par défaut, une erreur passe simplement inaperçue.
01
L'idée de départ : la redondance
Au téléphone, quand la ligne est mauvaise, vous ne dites pas « B », vous dites « B comme Bravo ». « Bravo » n'apporte aucune information nouvelle : c'est du rembourrage volontaire. Mais si votre interlocuteur entend « Brovo », il sait tout de suite que quelque chose cloche — alors qu'un « D » reçu à la place d'un « B » aurait été avalé sans broncher.
Tout le contrôle d'erreurs tient dans cette phrase : on envoie plus de bits que nécessaire, choisis de façon à ce que la plupart des combinaisons soient impossibles. Si le récepteur reçoit une combinaison impossible, il sait qu'il y a eu un accident.
La méthode bête : tout répéter trois fois
Envoyer 1 sous la forme 111. Si le récepteur lit 101, il vote à la majorité et conclut 1. Ça marche, ça corrige même — mais ça coûte trois fois le débit. Inutilisable en pratique. Tout le reste de cette page consiste à obtenir le même service en ajoutant beaucoup moins de bits.
Le vocabulaire, une fois pour toutes
- k — le nombre de bits utiles (votre message).
- r — le nombre de bits de contrôle ajoutés par la machine.
- n = k + r — la longueur totale émise. On parle d'un code (n, k).
- Rendement R = k / n — la part de votre débit qui transporte vraiment de l'information. Répétition ×3 → R = 1/3. Bit de parité sur un octet → R = 7/8. CRC-32 sur une trame Ethernet → R ≈ 0,997.
- Mot de code — une suite de n bits qui respecte les règles. Toutes les autres suites sont interdites, donc reconnaissables.
Deux ambitions différentes
Détecter
« Cette trame est fausse, jette-la et redemande-la. » Peu de bits ajoutés, très efficace — mais il faut un chemin de retour pour redemander. C'est la parité, le checksum, le CRC.
Corriger
« Le bit n°5 est faux, je le retourne moi-même. » Plus cher en bits, mais aucune retransmission nécessaire. Indispensable quand redemander est impossible : satellite, diffusion TV, QR code, disque dur. C'est Hamming, Reed-Solomon, LDPC.
02
Le bit de parité
Un seul bit ajouté. La protection la plus simple qui existe — et la plus facile à prendre en défaut.
La règle
On compte les 1 dans le message. Puis on ajoute un bit choisi pour que ce compte devienne pair (parité paire, la plus courante) ou impair (parité impaire).
- 1011001 contient quatre 1 → déjà pair → on ajoute 0 → on émet 10110010.
- 1011000 contient trois 1 → impair → on ajoute 1 → on émet 10110001.
À l'arrivée, le récepteur recompte les 1 sur les huit bits reçus. Si le total est pair, il accepte. S'il est impair, il sait qu'au moins un bit a basculé.
En une opération
Le bit de parité, c'est le XOR (ou exclusif) de tous les bits du message. Et vérifier, c'est faire le XOR de tous les bits reçus, bit de parité compris : le résultat doit valoir 0. Deux lignes de logique câblée, gratuit en matériel. D'où sa popularité historique (liaisons série, RS-232, mémoires ECC de première génération).
La faiblesse fatale
Deux erreurs se compensent : si un 0 devient 1 et qu'un 1 devient 0, le nombre total de 1 ne change pas et la parité reste bonne. Le récepteur accepte un message faux en toute confiance.
Bilan : le bit de parité détecte tout nombre impair d'erreurs (1, 3, 5…) et aucun nombre pair (2, 4, 6…). Il ne corrige jamais rien, puisqu'il dit « il y a un problème » sans jamais dire où. Or les erreurs arrivent rarement seules : un parasite dure quelques microsecondes et abîme une rafale de bits voisins. C'est précisément le cas où la parité échoue.
03
La parité croisée : le premier code qui corrige
Rangez les bits en tableau, mettez une parité par ligne et une par colonne. L'intersection des deux alarmes vous donne l'adresse du coupable.
On empile plusieurs octets les uns sous les autres. Chaque ligne reçoit son bit de parité (c'est le VRC, Vertical Redundancy Check, la parité classique de la section précédente). Puis on calcule une ligne supplémentaire en bas, où chaque bit est la parité de sa colonne (c'est le LRC, Longitudinal Redundancy Check).
Si un seul bit bascule, deux contrôles échouent : celui de sa ligne et celui de sa colonne. Le croisement des deux désigne une case unique — et il suffit de retourner le bit qui s'y trouve. On est passé de la détection à la correction, sans aucune retransmission.
Ses limites
- 2 erreurs sur la même ligne → la parité de ligne redevient bonne, mais deux colonnes protestent. On sait qu'il y a un problème, on ne sait plus où. Détection oui, correction non.
- 4 erreurs formant un rectangle (mêmes 2 lignes, mêmes 2 colonnes) → toutes les parités redeviennent bonnes. Invisible. C'est le motif d'erreur minimal que ce code ne voit pas.
- Le coût grimpe : sur 4×6 bits utiles, on ajoute 4 + 6 + 1 = 11 bits. Rendement 24/35 ≈ 0,69. Cher pour une protection encore modeste.
C'est pour ça que le CRC (section 05) a remplacé cette technique partout où le débit compte.
04
La somme de contrôle
On ne raisonne plus bit par bit : on additionne les paquets d'octets et on envoie le total. Rapide en logiciel, et c'est tout l'intérêt.
La règle
On découpe le message en blocs de taille fixe (8 ou 16 bits), on les additionne, on garde le résultat modulo la taille du bloc (on jette les retenues qui débordent), et on envoie cette somme à la suite du message. Le récepteur refait l'addition et compare.
Variante universelle sur Internet : on transmet le complément de la somme. Le récepteur additionne tout, somme de contrôle comprise, et doit obtenir 0 (ou FF). Un seul test, pas de comparaison.
Deux angles morts célèbres
La compensation. Si un octet perd 5 et qu'un autre gagne 5, la somme ne bouge pas. Le message est faux, le contrôle est vert.
L'ordre. L'addition est commutative : A+B = B+A. Si deux blocs sont intervertis en route, la somme est identique. Le checksum est aveugle aux permutations.
C'est pourtant celui utilisé par IP, TCP et UDP — parce qu'il est très rapide en logiciel et qu'en dessous, la couche liaison (Ethernet, Wi-Fi) a déjà fait le vrai travail avec un CRC. Le checksum n'est qu'un filet de sécurité de second rang, contre les corruptions survenues dans la mémoire des routeurs, pas sur le câble.
05
Le CRC : la division qui protège tout Internet
Le contrôle de redondance cyclique. C'est lui qui protège chaque trame Ethernet, chaque paquet Wi-Fi, chaque secteur de disque dur, chaque fichier ZIP. Il a l'air compliqué : en réalité c'est une division posée, avec une seule bizarrerie.
L'idée, sans mathématiques
Vous connaissez le principe du reste d'une division. Prenez 1 234 567 et divisez par 97 : il reste 51. Ce 51 est une empreinte du nombre de départ. Changez n'importe quel chiffre de 1 234 567 et le reste changera presque à coup sûr.
Le CRC fait exactement ça avec votre message : il le traite comme un immense nombre binaire, le divise par un diviseur fixe appelé polynôme générateur, et envoie le reste à la suite du message. Le récepteur refait la division sur tout ce qu'il a reçu : si le reste vaut zéro, la trame est intacte.
La seule bizarrerie : on soustrait avec des XOR
Dans une division ordinaire, les soustractions ont des retenues qui se propagent — lent et pénible à câbler. Le CRC utilise donc une arithmétique sans retenue : la soustraction devient un simple XOR bit à bit (1⊕1=0, 1⊕0=1, 0⊕0=0). C'est tout. Le reste de la mécanique est la division posée que vous avez apprise à l'école primaire.
Le mot « polynôme » sert juste à nommer les bits : 1011 se lit x³ + x + 1 (un 1 en position 3, 1, 0). C'est une notation, pas un calcul supplémentaire.
La recette en quatre gestes
- Le générateur a r + 1 bits (par exemple 1011, donc r = 3). Il commence et finit toujours par 1.
- On colle r zéros à la fin du message : c'est la place réservée au futur CRC.
- On divise ce tout par le générateur, en XOR. Le reste fait exactement r bits.
- On remplace les r zéros par ce reste, et on émet. Le message émis est alors exactement divisible par le générateur — c'est ce que le récepteur va vérifier.
Pourquoi il est si difficile à tromper
Avec un générateur bien choisi (ils sont normalisés, pas improvisés), un CRC de r bits garantit :
- toutes les erreurs simples et doubles détectées ;
- tout nombre impair d'erreurs détecté, si le générateur est divisible par x+1 ;
- toutes les rafales de r bits ou moins détectées — c'est sa grande force, car les parasites réels arrivent en rafales ;
- les rafales plus longues passent au travers avec une probabilité d'environ 1/2ʳ. Pour le CRC-32 d'Ethernet : environ une chance sur 4 milliards.
Ce que le CRC ne fait pas
Il ne corrige rien — il dit oui ou non. Une trame Ethernet dont le CRC est faux est purement et simplement jetée ; c'est à TCP, au-dessus, de s'apercevoir qu'elle manque et de la redemander.
Et il ne protège pas contre un attaquant : qui modifie le message peut recalculer le CRC. Contre la malveillance il faut une signature cryptographique (HMAC), pas un CRC. Le CRC protège contre le hasard, pas contre quelqu'un.
06
La distance de Hamming : la théorie qui explique tout le reste
Une seule notion permet de prédire, pour n'importe quel code, combien d'erreurs il détecte et combien il en corrige.
La distance de Hamming entre deux mots binaires, c'est le nombre de positions où ils diffèrent. Entre 10110 et 10011 : trois positions changent, la distance vaut 3. (Techniquement : le nombre de 1 dans leur XOR.)
Ce qui compte pour un code, c'est sa distance minimale d : la plus petite distance entre deux mots de code valides. C'est la mesure de son « écartement ». Plus les mots valides sont éloignés les uns des autres, plus il faut d'erreurs pour transformer l'un en l'autre — donc plus le code est robuste.
Les deux formules à retenir
- Pour détecter jusqu'à e erreurs, il faut d ≥ e + 1.
Intuition : tant que les erreurs ne suffisent pas à atteindre un autre mot valide, on atterrit sur un mot interdit — donc repérable. - Pour corriger jusqu'à c erreurs, il faut d ≥ 2c + 1.
Intuition : il ne suffit pas de savoir qu'on est perdu, il faut que le mot valide le plus proche soit sans ambiguïté le bon. D'où le facteur deux.
| Code | d minimale | Détecte | Corrige |
|---|---|---|---|
| Aucun code (n = k) | 1 | rien | rien |
| Bit de parité | 2 | 1 erreur | rien |
| Parité croisée 2D | 4 | 3 erreurs | 1 erreur |
| Hamming (7,4) | 3 | 2 erreurs | 1 erreur |
| Répétition ×3 | 3 | 2 erreurs | 1 erreur |
| Répétition ×5 | 5 | 4 erreurs | 2 erreurs |
Regardez les deux dernières lignes du tableau contre Hamming (7,4) : même distance 3, mêmes capacités — mais la répétition ×3 coûte un rendement de 1/3 quand Hamming atteint 4/7. À protection égale, le bon code est celui qui ajoute le moins de bits. C'est tout le métier.
07
Le code de Hamming : quand la machine répare seule
Trois bits de contrôle bien placés, et le récepteur ne se contente plus de dire « c'est faux » : il annonce l'adresse exacte du bit fautif.
L'astuce des puissances de deux
On numérote les positions de 1 à 7 (attention : on commence à 1, pas à 0). Les positions qui sont des puissances de deux — 1, 2, 4 — accueillent les bits de contrôle. Les autres — 3, 5, 6, 7 — portent vos données.
Chaque bit de contrôle surveille les positions dont le numéro écrit en binaire contient son propre poids :
- P1 (position 1 = 001) surveille toutes les positions dont le binaire finit par 1 → 1, 3, 5, 7
- P2 (position 2 = 010) surveille celles dont le bit du milieu vaut 1 → 2, 3, 6, 7
- P4 (position 4 = 100) surveille celles dont le bit de poids fort vaut 1 → 4, 5, 6, 7
Chaque bit de contrôle est réglé pour que son groupe soit de parité paire. Et voici la magie : à la réception, on recalcule les trois parités. Les trois résultats, lus comme un nombre binaire P4 P2 P1, forment le syndrome — et ce nombre est le numéro de la position fautive. 000 signifie « tout va bien », 101 signifie « le bit n°5 est faux ».
Ce n'est pas un hasard : si le bit n°5 (101) bascule, il fait échouer exactement les contrôles qui le surveillent, c'est-à-dire P1 et P4 — donc le syndrome vaut 101. Chaque position a une signature unique, parce que chaque nombre a une écriture binaire unique.
Le piège des deux erreurs
Avec une distance minimale de 3, Hamming (7,4) corrige une erreur. Avec deux erreurs, le syndrome n'est pas nul — il croit donc avoir trouvé un coupable — mais il désigne une troisième position innocente et la retourne. Résultat : trois bits faux au lieu de deux. Le code a aggravé la situation. Essayez le bouton « Casser 2 bits » dans la démo.
C'est pour ça qu'on ajoute souvent un huitième bit de parité globale : on obtient le code SECDED (Single Error Correction, Double Error Detection), distance 4, qui corrige une erreur et sait reconnaître qu'il y en a deux sans se tromper de victime. C'est ce qu'il y a dans la mémoire ECC de tous les serveurs.
08
La courbe : ce qu'on regarde vraiment pour juger un code
Le graphique qu'on vous montre systématiquement en cours. Deux axes, deux courbes, et un chiffre qui résume tout : le gain de codage.
Lire les axes
- En abscisse : Eb/N0, prononcé « E-b sur N-zéro », en décibels. C'est l'énergie dépensée par bit divisée par le bruit. Traduisez simplement : la qualité de la liaison. Vers la droite = plus de puissance, antenne plus proche, câble plus court.
- En ordonnée : le TEB, le taux d'erreur binaire. Échelle logarithmique — chaque graduation vaut dix fois mieux que la précédente. Plus bas = meilleur.
- La courbe descend en piqué : c'est normal. Gagner 1 ou 2 dB de qualité peut diviser le taux d'erreur par cent.
Les trois choses à voir sur ce graphique
Le gain de codage
L'écart horizontal entre les deux courbes, à un TEB donné. Il se lit en décibels et signifie : « grâce au code, j'obtiens la même qualité avec tant de dB de puissance en moins ». Sur une sonde spatiale, chaque dB gagné, c'est des kilos d'antenne et de panneaux solaires économisés.
Le point de croisement
À gauche, la courbe codée est au-dessus de l'autre : le code empire les choses. Normal : en ajoutant des bits de contrôle, on répartit la même énergie sur plus de bits, chacun devient plus fragile — et si le canal est trop mauvais, le décodeur se trompe de correction. Un code n'est jamais gratuit.
Troisième chose : le rendement. La courbe ne dit pas tout. Hamming (7,4) a un rendement de 4/7 : pour 7 bits sur le câble, seuls 4 vous servent. Un code moderne (LDPC, turbo-code) obtient un bien meilleur gain avec un rendement de 0,9. C'est le compromis permanent : puissance, débit utile, complexité de calcul — on n'optimise jamais les trois à la fois.
09
Une erreur est détectée. Et maintenant ?
Deux stratégies, deux mondes. Soit on redemande, soit on répare sur place.
Stratégie ARQ — redemander
Automatic Repeat reQuest. Le récepteur jette la trame fausse et l'émetteur la renvoie. Simple, très peu de bits ajoutés, mais il faut un canal de retour et il faut accepter d'attendre. Trois variantes, de la plus naïve à la plus efficace :
| Variante | Fonctionnement | Coût d'une erreur | Où on la trouve |
|---|---|---|---|
| Stop-and-Wait envoyer et attendre |
Une trame, puis on attend l'accusé de réception avant d'envoyer la suivante. | Faible — on ne renvoie qu'une trame. Mais le débit s'effondre sur les longues distances : on passe son temps à attendre. | Liaisons courtes et lentes, protocoles embarqués. |
| Go-Back-N retour en arrière |
On envoie N trames d'affilée. En cas d'erreur sur l'une, on renvoie celle-là et toutes les suivantes. | Élevé — on regâche du travail déjà fait. Mais le récepteur reste très simple : aucune mémoire de réordonnancement. | HDLC, anciens modems. |
| Rejet sélectif Selective Repeat |
On ne renvoie que la trame fautive. Le récepteur garde les suivantes en mémoire tampon et les remet dans l'ordre. | Minimal. En échange, il faut de la mémoire et de la logique des deux côtés. | TCP moderne (SACK), Wi-Fi (Block ACK). |
Stratégie FEC — réparer sur place
Forward Error Correction. On envoie assez de redondance pour que le récepteur répare seul, sans jamais rien redemander. Plus coûteux en débit, mais c'est la seule option quand redemander est impossible ou absurde :
- La diffusion — un émetteur TNT ne peut pas retransmettre pour un seul téléviseur sur un million.
- La distance — un aller-retour vers une sonde spatiale prend des heures. Voyager utilisait un code de Reed-Solomon concaténé.
- Le stockage — un CD rayé ou un secteur de SSD usé ne peut « redemander » à personne. Reed-Solomon, encore.
- Le temps réel — en voix ou vidéo en direct, une trame retransmise arriverait trop tard pour servir.
- Le QR code — Reed-Solomon lui permet de rester lisible avec jusqu'à 30 % de la surface abîmée. C'est pour ça qu'on peut coller un logo au milieu.
En pratique, les systèmes modernes font les deux : le Wi-Fi et la 5G corrigent en FEC ce qu'ils peuvent, protègent le résultat par un CRC, et retransmettent en ARQ ce qui reste cassé. C'est ce qu'on appelle l'hybrid ARQ.
10
Récapitulatif
La seule chose à emporter : chaque méthode achète de la sécurité avec des bits, et on choisit selon ce qu'on peut se permettre de perdre en débit et selon la possibilité ou non de retransmettre.
| Méthode | Bits ajoutés | Détecte | Corrige | Aveugle à… | Utilisée par |
|---|---|---|---|---|---|
| Bit de parité | 1 | tout nombre impair d'erreurs | non | tout nombre pair d'erreurs | RS-232, mémoires anciennes |
| Parité croisée | lignes + colonnes | 1 à 3 erreurs | 1 erreur | 4 erreurs en rectangle | anciens protocoles, bandes magnétiques |
| Checksum | 8 ou 16 | la plupart des erreurs simples | non | compensations, permutations d'octets | IP, TCP, UDP |
| CRC | 8 à 32 | toutes rafales ≤ r bits, tout nombre impair | non | ~1 cas sur 2ʳ, et un attaquant | Ethernet, Wi-Fi, USB, ZIP, disques |
| Hamming (7,4) | 3 pour 4 | 2 erreurs | 1 erreur | 3 erreurs ou plus | base théorique, mémoires ECC (variante SECDED) |
| Reed-Solomon | variable | rafales longues | rafales entières | au-delà de sa capacité prévue | QR codes, CD/DVD, TNT, spatial |
| LDPC / turbo-codes | variable, rendement élevé | correction très proche de la limite théorique de Shannon | coût de calcul important | 5G, Wi-Fi 6, satellite DVB-S2 | |
Les cinq phrases qui résument la page
- Un canal est toujours bruité ; sans redondance, une erreur est invisible.
- Contrôler, c'est ajouter des bits pour rendre la plupart des combinaisons impossibles.
- La distance minimale du code dit tout : détecter d−1 erreurs, en corriger (d−1)/2.
- Détecter coûte peu mais impose de retransmettre ; corriger coûte des bits mais rend autonome.
- La courbe TEB / Eb-N0 arbitre : le gain de codage se paie en rendement, et sur un très mauvais canal un code peut faire pire que rien.
11
Vérifiez que c'est passé
Six questions. Cliquez une réponse ; l'explication apparaît dans tous les cas.