Vous êtes sur la page 1sur 13

représentation et codage de l’information

5. codes détecteurs et correcteurs d’erreurs

Pierre Réty
février 2021
L1 informatique — Université d’Orléans
Détection d’erreurs
Problématique

Sources d’erreurs :

• transmission à travers un réseau


• supports de stockage

Comment détecter les erreurs ?

Idée : ajouter de la redondance aux données pour détecter les


incohérences.

2
Théorie des codes

• message initial 𝑚
• fonction de redondance 𝑟
• le message codé est 𝑐(𝑚) = 𝑚.𝑟(𝑚)

𝑚.𝑟(𝑚)
• Alice ⟶ Bernard
• mais Bernard reçoit 𝑢.𝑣
• si 𝑣 ≠ 𝑟(𝑢), le message reçu est incohérent, et Bernard sait
qu’il y a eu des erreurs de transmission.

3
Distance de Hamming

La distance de Hamming entre deux mots binaires 𝑥 et 𝑦 de


même longueur, est le nombre de bits sur lesquels ils différent.

𝑑(00010, 01010) = 1
𝑑(00011010, 00001011) = 2

4
Détection et correction d’erreurs

𝑐(𝑚)
• Alice ⟶ Bernard
• Bernard reçoit 𝑐(𝑚)′

Le message codé 𝑐(𝑚) est transmis avec 𝑘 erreurs si :


𝑑(𝑐(𝑚), 𝑐(𝑚)′ ) = 𝑘

Un code détecte 𝑘 erreurs si 𝑘 est le plus grand entier tel que :


∀𝑚, 𝑑(𝑐(𝑚), 𝑐(𝑚)′ ) ≤ 𝑘 ⟹ 𝑐(𝑚)′ est incohérent.

Un code corrige 𝑘 erreurs si 𝑘 est le plus grand entier tel que :


on peut calculer 𝑚
∀𝑚, 𝑑(𝑐(𝑚), 𝑐(𝑚)′ ) ≤ 𝑘 ⟹ {
à partir de 𝑐(𝑚)′ .

5
Distance minimale

La distance minimale 𝑑𝑚𝑖𝑛 d’un code 𝑐 est la plus petite


distance de Hamming entre deux messages codés, donc entre
deux messages cohérents :

𝑑𝑚𝑖𝑛 = min 𝑑(𝑐(𝑚1 ), 𝑐(𝑚2 ))


𝑚1 ≠𝑚2

Théorème

• Le code 𝑐 détecte 𝑑𝑚𝑖𝑛− 1 erreurs.


• Le code 𝑐 corrige (𝑑𝑚𝑖𝑛− 1)//2 erreurs (quotient de la division).

Exemple
si 𝑑𝑚𝑖𝑛= 4, le code détecte 3 erreurs, et corrige 1 erreur.

6
Exemple : code à répétition

Le message est répété 𝑛 fois : 𝑐(𝑚) = 𝑚 ⋯ 𝑚

Si 𝑛 = 2, et 𝑚 = 𝑏1 𝑏2 𝑏3 𝑏4 (4 bits), 𝑐(𝑚) = 𝑏1 𝑏2 𝑏3 𝑏4 𝑏1 𝑏2 𝑏3 𝑏4
- si 1 erreur 𝑐(𝑚)′ = 𝑏1 𝑏′2 𝑏3 𝑏4 𝑏1 𝑏2 𝑏3 𝑏4 est incohérent
- si 2 erreurs 𝑐(𝑚)′ = 𝑏1 𝑏′2 𝑏3 𝑏4 𝑏1 𝑏′2 𝑏3 𝑏4 est cohérent
Donc 𝑑𝑚𝑖𝑛 = 2. Donc ce code détecte 1 erreur, et corrige 0
erreur.

Pour 𝑛 quelconque, 𝑑𝑚𝑖𝑛 = 𝑛, donc ce code détecte 𝑛 − 1


erreurs, et corrige (𝑛 − 1)//2 erreurs.

Inconvénient : |𝑐(𝑚)| = 𝑛 × |𝑚|. Donc 𝑐(𝑚) est encombrant.

7
Exemple : bit de parité

On ajoute un bit de parité au message 𝑚.

Le bit de parité vaut 0 s’il y a un nombre pair de 1 dans 𝑚,


sinon il vaut 1.

Exemple si 𝑚 = 1110 alors 𝑐(𝑚) = 11101


- si 1 erreur, par exemple 𝑐(𝑚)′ = 10101. C’est incohérent.
- si 2 erreurs, par exemple 𝑐(𝑚)′ = 10001. C’est cohérent.
Donc 𝑑𝑚𝑖𝑛 = 2. Donc ce code détecte 1 erreur, et corrige 0
erreur.

8
Codes de Hamming

On ajoute 𝑛 bits de parité au message 𝑚 de longueur 2𝑛 −1−𝑛.


Par exemple, si 𝑛 = 3, |𝑚| = 4. Si 𝑛 = 4, |𝑚| = 11.
𝑑𝑚𝑖𝑛 = 3. Donc ce code détecte 2 erreurs, et corrige 1 erreur.

Cas 𝑛 = 3, |𝑚| = 4 : prenons 𝑚 = 𝑎 𝑏 𝑐 𝑑 (4 bits).


Trois bits de parité calculés à partir des bits de 𝑚 :
(⊕ signifie ”ou-exclusif”, ce qui est équivalent à une addition modulo 2)
- 𝑥 parité des bits 𝑎, 𝑏, 𝑑, donc 𝑥 = 𝑎 ⊕ 𝑏 ⊕ 𝑑
- 𝑦 parité des bits 𝑎, 𝑐, 𝑑, donc 𝑦 = 𝑎 ⊕ 𝑐 ⊕ 𝑑
- 𝑧 parité des bits 𝑏, 𝑐, 𝑑, donc 𝑧 = 𝑏 ⊕ 𝑐 ⊕ 𝑑
𝑐(𝑚) = 𝑎 𝑏 𝑐 𝑑 𝑥 𝑦 𝑧 (7 bits)

9
Codes de Hamming : correction d’erreurs

Bernard reçoit 𝑐(𝑚)′ = 𝑎′ 𝑏′ 𝑐′ 𝑑 ′ 𝑥 ′ 𝑦 ′ 𝑧′ , et calcule :


𝑥 ″ = 𝑎 ′ ⊕ 𝑏′ ⊕ 𝑑 ′ , 𝑦 ″ = 𝑎 ′ ⊕ 𝑐 ′ ⊕ 𝑑 ′ , 𝑧 ″ = 𝑏 ′ ⊕ 𝑐 ′ ⊕ 𝑑 ′
Algorithme de correction d’erreur :
Rappel : le résultat de 𝑢1 ⊕ 𝑢2 ⊕ 𝑢3 change si on modifie un des 𝑢𝑖 . Donc :

𝑥″ = 𝑥′ 𝑦″ = 𝑦′ 𝑧″ = 𝑧′ bit erroné
𝑜𝑢𝑖 𝑜𝑢𝑖 𝑜𝑢𝑖 pas d’erreur
𝑜𝑢𝑖 𝑜𝑢𝑖 𝑛𝑜𝑛 𝑧′
𝑜𝑢𝑖 𝑛𝑜𝑛 𝑜𝑢𝑖 𝑦′
𝑜𝑢𝑖 𝑛𝑜𝑛 𝑛𝑜𝑛 𝑐′
𝑛𝑜𝑛 𝑜𝑢𝑖 𝑜𝑢𝑖 𝑥′
𝑛𝑜𝑛 𝑜𝑢𝑖 𝑛𝑜𝑛 𝑏′
𝑛𝑜𝑛 𝑛𝑜𝑛 𝑜𝑢𝑖 𝑎′
𝑛𝑜𝑛 𝑛𝑜𝑛 𝑛𝑜𝑛 𝑑′

10
Exemple : codes de Hamming

Alice crée 𝑚 = 1011. Donc 𝑥 = 0, 𝑦 = 1, 𝑧 = 0. Donc 𝑐(𝑚) = 1011010

Bernard reçoit 𝑐(𝑚)′ = 1001010 et calcule 𝑥 ″ = 0, 𝑦 ″ = 0, 𝑧″ = 1.

Ainsi 𝑥 ″ = 𝑥 ′ , 𝑦 ″ ≠ 𝑦 ′ , 𝑥 ″ ≠ 𝑥 ′ . Donc Bernard sait que 𝑐′ est


erroné, donc que 𝑚 = 1011.

Rem : S’il y a 2 erreurs dans 𝑐(𝑚)′ , alors 𝑐(𝑚)′ est incohérent donc Bernard
sait qu’ il y a des erreurs, mais il ne sait pas combien.
S’il exécute l’algorithme de correction d’erreurs, le résultat obtenu est
erroné, sans que Bernard puisse le savoir.

11

Vous aimerez peut-être aussi