Détection et correction d'erreur avec le code de Haming

Prenons comme exemple le cas de la transmission d'un nombre compris entre 0 et 15, et donc codé en binaire sur 4 bits. Dans le tableau ci-contre, les bits S4S2S1S0 sont la représentation binaire classique des nombres de 0 à 15.

Le code de Haming intercale un bit S3 et ajoute deux bits S5 et S6 (en rouge dans le tableau ci-contre), au nombre binaire classique. Un nombre codé selon Haming nécessite donc 7 bits.

Les groupes S6S4S2S0, S5S4S1S0 et S3S2S1S0 sont des groupes de contrôle à parité paire.

Les sommes modulo 2 (donc sans retenue) des 4 bits de chacun de ces groupes donnent un nombre codé sur trois bits A2A1A0, tels que :

A2 = S6+S4+S2+S0
A1 = S5+S4+S1+S0
A0 = S3+S2+S1+S0

Si le nombre A2A1A0 est nul c'est qu'il n'y a pas eu d'erreur dans la transmission puisque la parité de chaque groupe de contrôle est bien paire.

Si au contraire le nombre A2A1A0 est différent de zéro, alors son complément indique le rang de la colonne contenant l'erreur.

Exemple : si l'on veut transmettre la valeur décimale 6, on enverra les bits 1100110. Supposons que lors de la transmission le bit S2 soit inversé, la valeur qui arrive est donc 1100010, et les groupes de contrôle donnent :

A2 = S6+S4+S2+S0 = 1
A1 = S5+S4+S1+S0 = 0
A0 = S3+S2+S1+S0 = 1

soit un rang de l'erreur égal à 010, c'est à dire 2. Il est donc alors possible de corriger le bit S2 en l'inversant, tout simplement.