Implémentation du code de hamming en C
$ cd hamming
# se déplacer dans le dossier du projet hamming
$ make
# compile le fichier selon les règles du Makefile
$ ./hamming "1001010010"
# lance l'exécution avec la chaine "1001010010" à coder
$ ./hamming "1001010010"
[•] encoding '1001010010' (len:10)
[•] sent '11100010010010' (len:14)
[•] recieve '11100110010010' (len:14)
[?] corrupted parity bits : 2 4
[?] fixed data bit at index 6
[•] corrected '11100010010010' (len:14)
[•] decoding '1001010010' (len:10)
[•] message successfully decoded
On commence par prendre notre mot de départ, ici 1001010010
puis on lui ajoute un bit de parité à tous les emplacement puissances de 2 pour donner __1_001_010010
, les '_' représentant les bits de parité.
Chaque bit de parité, aux emplacements 1, 2, 4, 8, 16, 32 ... calculent la parité de la manière suivante.
Soit x la position du bit de parité, on calcule la somme de x bits tout les 2*x bits
Exemple :
Pour le bit de parité 1 : ??1?001?010010 soit 1+0+1+0+0+1=3, 3 est impair, le bit de parité est mis à 1
Pour le bit de parité 2 : 1?1?001?010010 soit 1+0+1+1+0+0=3, 3 est impair, le bit de parité est mis à 1
Pour le bit de parité 4 : 111?001?010010 soit 0+0+1+0+1+0=2, 2 est pair, le bit de parité est mis à 0
Pour le bit de parité 8 : 1110001?010010 soit 0+1+0+0+1+0=2, 2 est pair, le bit de parité est mis à 0
résultat : 11100010010010 (parité en gras et données en normal)
Pour la correction d'un mot on vérifie ses bits de parité, admettons que nous avons reçu 11100110010010,
On recalcule les bits de parité, P1=0, P2=1, P4=1, P8=0, on remarque que les bits de parité 2 et 4 sont incorrects, on peux alors corriger le bit à l'emplacement 2+4 pour retrouver 11100010010010.
On supprime tous les bits aux emplacements puissances de 2, 11100010010010 pour retrouver 1001010010
.