Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie GEL-7064 : Théorie et pratique des codes correcteurs Codes Reed-Solomon Notes de cours Jean-Yves Chouinard Département de génie électrique et de génie informatique Université Laval [email protected] 26 février 2013 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Plan de la présentation 1 Codes Reed-Solomon 2 Construction des codes Reed-Solomon 3 Propriétés des codes Reed-Solomon 4 Décodage des codes Reed-Solomon Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon 5 Bibliographie Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Codes Reed-Solomon Définition (code Reed-Solomon) : Un code Reed-Solomon est un code BCH q m −aire de longueur n = q m − 1. Définition (classe cyclotomique) : Le partitionnement de l’ensemble des entiers modulo n en sousensembles disjoints de la forme : o n Ci = a, aq, aq 2 , aq 3 , . . . , aq d−1 dans le corps de Galois CG(q), donne les classes cyclotomiques q−aires modulo n. Remarque : à chaque classe cyclotomique corresponds une classe de conjugués. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (classes cyclotomiques d’un corps de Galois) : Considérons le corps de Galois CG(32) = CG(25 ) pour lequel nous désirons déterminer les classes cyclotomiques. Les classes de conjugués sont : 2 3 4 β, β q , β q , β q , β q , . . . Pour le corps de Galois CG(32), nous avons : β β β β β β β β =0 =1 =α = α3 = α5 = α7 = α11 = α15 =⇒ {0} =⇒ {1} =⇒ {α, α2 , α4 , α8 , α16 } =⇒ {α3 , α6 , α12 , α17 , α24 } =⇒ {α5 , α9 , α10 , α18 , α20 } =⇒ {α7 , α14 , α19 , α25 , α28 } =⇒ {α11 , α13 , α21 , α22 , α26 } =⇒ {α15 , α23 , α27 , α29 , α30 } Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (classes cyclotomiques d’un corps de Galois) : Les classes cyclotomiques correspondantes sont obtenues en déterminant les séquences modulo n suivantes (ici les séquences modulo 31) : a, aq, aq 2 , aq 3 , aq 4 , . . . La première classe cyclotomique est la classe (triviale) : C0 : 0 =⇒ {0} La seconde classe cyclotomique est : C1 : 1, 1 · 2 = 2, 1 · 22 = 4, 1 · 23 = 8, 1 · 24 = 16, 1 · 25 = 32 ≡31 1 =⇒ {1, 2, 4, 8, 16} Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (classes cyclotomiques d’un corps de Galois) : Les autres classes cyclotomiques sont : C3 : 3, 3 · 2 = 6, 3 · 22 = 12, 3 · 23 = 24, 3 · 24 = 48 ≡31 17, 3 · 25 = 96 ≡31 3 =⇒ {3, 6, 12, 17, 24} C5 : 5, 5 · 2 = 10, 5 · 22 = 20, 5 · 23 = 40 ≡31 9, 5 · 24 = 80 ≡31 18, 5 · 25 = 160 ≡31 5 =⇒ {5, 9, 10, 18, 20} C7 : 7, 7 · 2 = 14, 7 · 22 = 28, 7 · 23 = 56 ≡31 25, 7 · 24 = 112 ≡31 19, 7 · 25 = 224 ≡31 7 =⇒ {7, 14, 19, 25, 28} C11 : 11, 11 · 2 = 22, 11 · 22 = 44 ≡31 13, 11 · 23 = 88 ≡31 26, 11 · 24 = 176 ≡31 21, 11 · 25 = 352 ≡31 11 =⇒ {11, 13, 21, 22, 26} C15 : 15, 15 · 2 = 30, 15 · 22 = 60 ≡31 29, 15 · 23 = 120 ≡31 27, 15 · 24 = 240 ≡31 23, 15 · 25 = 480 ≡31 15 =⇒ {15, 23, 27, 29, 30} Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (classes cyclotomiques d’un corps de Galois) : De ces classes cyclotomiques on forme les polynômes minimaux : classes cyclotomiques modulo 31 polynômes minimaux C0 = {0} M0 (x) = x + 1 C1 = {1, 2, 4, 8, 16} M1 (x) = x 5 + x + 1 C3 = {3, 6, 12, 17, 24} M3 (x) = x 5 + x 4 + x 3 + x 2 + 1 C5 = {5, 9, 10, 18, 20} M5 (x) = x 5 + x 4 + x 2 + x + 1 C7 = {7, 14, 19, 25, 28} M7 (x) = x 5 + x 3 + x 2 + x + 1 C11 = {11, 13, 21, 22, 26} M11 (x) = x 5 + x 4 + x 3 + x + 1 C15 = {15, 23, 27, 29, 30} M15 (x) = x 5 + x 3 + 1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Construction des codes Reed-Solomon La première étape dans la construction de ces codes BCH q m −aires, c’est-à-dire les codes Reed-Solomon, consiste à construire le corps de Galois CG(q m ). Du corps de Galois, on peut former les classes cyclotomiques modulo q m − 1, ou de manière équivalente les classes de conjugués, afin de déterminer les polynômes minimaux. Étant donné que l’on s’intéresse au corps de Galois CG(q m ), les classes cyclotomiques seront de la forme : a, aq m , a(q m )2 , a(q m )3 , a(q m )4 , . . . où a = 1, 2, 3, 4, . . ., et les opérations sont effectuées modulo n = q m − 1. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Construction des codes Reed-Solomon Les éléments des classes cyclotomiques sont de la forme : a(q m )i modulo(q m − 1) avec i = 0, 1, 2, . . .. Pour i = 0, on a : a(q m )0 modulo(q m − 1) = a De même, pour i = 1, a(q m )modulo(q m − 1) m a(q )modulo(q m − 1) = [a(q m − 1) + a] modulo(q m − 1) = a et pour i = 2 : a(q m )2 modulo(q m − 1) = [a(q m )(q m )] modulo(q m − 1) − 1) = a(q m )2 modulo(q m − 1) = [a(q m − 1) + a] · [1(q m − 1) + 1] modulo(q m − 1) a(q m − 1)2 + a(q m − 1) + a(q m − 1) + a modulo(q m − 1) = a m 2 a(q ) modulo(q m 2 a(q ) modulo(q m m − 1) Les classes cyclotomiques sont alors des singletons (ensemble ne comportant qu’un seul élément) de la forme : {a} pour a = 0, 1, 2, . . . , q m − 1. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Construction des codes Reed-Solomon Nous savons (du théorème sur la borne des codes BCH) que pour un code BCH t−correcteur, il faut que les 2t puissances consécutives de l’élément αb soient des zéros du polynôme générateur g (x). Ceci implique que le polynôme générateur g (x) d’un code Reed-Solomon (i.e. codes BCH q m −aire) est de la forme : g (x) = x − αb · x − αb+1 · . . . · x − αb+2t−1 En choisissant l’exposant b = 1, on obtient un polynôme générateur au sens strict : g (x) = (x − α) · x − α2 · . . . · x − α2t ou encore : g (x) = 2t Y i=1 Jean-Yves Chouinard x − αi Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : On désire construire un code Reed-Solomon 8−aire de longueur n = 7. Ici, n = q m − 1 avec q = 2 et m = 3. On peut former le corps de Galois CG(23 ) à l’aide du polynôme primitif binaire p(x) = x 3 + x + 1 : p(α) = α3 + α + 1 = 0 =⇒ α3 = α + 1 élément de GF(8) représentation polynômiale 0 1 α α2 α3 α4 α5 α6 Jean-Yves Chouinard 0 1 α α2 α α2 +α α2 +α α2 +1 +1 +1 Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Les classes cyclotomiques modulo n = 7 sont : a, a(q m ), a(q m )2 , a(q m )3 , a(q m )4 , . . . a, a(23 ), a(23 )2 , a(23 )3 , a(23 )4 , . . . c’est-à-dire C0 : 0 =⇒ {0} C1 : 1, 1 · 8 = 8 ≡7 1, 1 · 82 = 64 ≡7 1 =⇒ C1 = {1} C2 : 2, 2 · 8 = 16 ≡7 2, 2 · 82 = 128 ≡7 2 =⇒ C2 = {2} qui sont des singletons comme prévu. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Les classes cyclotomiques modulo 7 définies sur le corps de Galois CG(8) sont les singletons suivants : classes cyclotomiques modulo 7 polynômes minimaux C0 = {0} M0 (x) = x − 1 C1 = {1} M1 (x) = x − α C2 = {2} M2 (x) = x − α2 C3 = {3} M3 (x) = x − α3 C4 = {4} M4 (x) = x − α4 C5 = {5} M5 (x) = x − α5 C6 = {6} M6 (x) = x − α6 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Le polynôme générateur g (x) du code Reed-Solomon est alors donné par : g (x) = g (x) = x − αb · x − αb+1 · . . . · x − αb+2t−1 2t Y x − αb+i−1 i=1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Code de correction d’erreurs simples Reed-Solomon (t = 1) : Un code correcteur d’erreurs simples (t = 1) Reed-Solomon de longueur n = 7 aura le polynôme générateur (sens strict b = 1) g (x) suivant : g (x) = (x − α) · x − α2 g (x) = x 2 + x −α − α2 + α3 g (x) = x 2 + x α + α2 + α3 car le corps de Galois CG(8) = CG(23 ) est une extension de CG(2) et : g (x) = x 2 + α4 x + α3 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Code de correction d’erreurs simples Reed-Solomon (t = 1) : Les coefficients du polynôme générateur g (x) sont des coefficients 8−aires du corps de Galois CG(8). Les polynômes mot-codes seront de la forme : c(x) = m(x) · g (x) c(x) = m0 + m1 x + . . . + mk−1 x k−1 · (g0 + g1 x + . . . + gr x r ) c(x) = c0 + c1 x + . . . + cn−1 x n−1 avec n = 7, r = 2 et k = 5. L’ensemble des polynômes messages comprend donc tous les 5-uples (vecteurs de longueur 5) 8−aires. Le code Reed-Solomon RS(7, 5) consistera donc en 85 = 215 = 32 768 mot-codes de 7 symboles 8−aires. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Code de correction d’erreurs doubles Reed-Solomon (t = 2) : Le code Reed-Solomon de capacité de correction t = 2, c’est-à-dire pouvant corriger jusqu’à deux symboles 8−aires sur les 7 symboles 8−aires d’un mot-code, est caractérisé par le polynôme générateur (toujours avec b = 1) : g (x) = (x − α) · x − α2 · x − α3 · x − α4 g (x) = x 2 + α4 x + α3 · x + α3 · x + α4 g (x) = x 3 + x 2 α4 + α3 + x α7 + α3 + α6 · x + α4 g (x) = x 3 + α6 x 2 + αx + α6 · x + α4 g (x) = x 4 + x 3 α6 + α4 + x 2 α + α10 + x α6 + α5 + α10 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Exemple (code Reed-Solomon de longueur n = 7) : Code de correction d’erreurs doubles Reed-Solomon (t = 2) : Le polynôme générateur est donc : g (x) = x 4 + α3 x 3 + x 2 + αx + α3 Le degré du polynôme générateur g (x) étant égal à r = 4, ce code Reed-Solomon C est un code 8−aire de longueur n = 7 et constitué de (q m )n−r = 83 = 512 mot-codes. On pourra donc coder 512 messages 8−aires de longueur k = 3, il s’agit donc d’un code Reed-Solomon RS(7, 3). Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Distance minimale d’un code linéaire Théorème (distance minimale d’un code linéaire) : Soit C(n, k) un code linéaire ayant une matrice de contrôle H. La distance minimale du code, dmin , est égale au nombre minimal de colonnes de la matrice de contrôle H pour lesquelles la combinaison linéaire est égale à zéro. Représentons la matrice de contrôle (n − k) × n, H, par n vecteurs colonnes : d0 d1 . . . dn−1 H = Un mot-code c sera un mot-code valide dans le code C si cHT = 0, ou de manière équivalente : T c0 c1 . . . cn−1 · d0 d1 . . . dn−1 cHT = cHT = c0 d0 + c1 d1 + . . . + cn−1 dn−1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Distance minimale d’un code linéaire Si le mot-code c est de poids w , i.e. qu’il consiste en w éléments non-nuls, alors le produit cHT sera une combinaison linéaire de w colonnes différentes de la matrice de contrôle H. Or la distance minimale d’un code linéaire est égale au poids du mot-code non-nul de plus petit poids. Théorème (borne de Singleton) : La distance minimale dmin d’un code linéaire C(n, k) est bornée par : dmin ≤ n − k + 1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Distance minimale d’un code linéaire Considérons la matrice de contrôle H d’un code h0 h0,0 h0,1 h1,0 h h 1 1,1 H = = .. .. .. . . . h(n−k−1) hn−k−1,0 hn−k−1,1 linéaire C(n, k) : ... ... .. . h0,n−1 h1,n−1 .. . . . . hn−k−1,n−1 qui est une matrice (n − k) × n de rang (n − k) car les (n − k) rangées sont linéairement indépendantes. Toute combinaison de (n − k + 1) colonnes sera linéairement dépendante. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Distance minimale d’un code linéaire 1 Un code Reed-Solomon RS(n, k) étant un code q m −aire, la borne de distance des codes BCH s’applique pour un code Reed-Solomon t−correcteur : dmin ≥ δ = 2t + 1 Le degré du polynôme générateur g (x) est r = n − k, ce qui implique que la distance apparente (ou distance de conception) (δ − 1) = r = n − k et donc : dmin 2 ≥ n−k +1 La borne de Singleton indique que la distance minimale d’un code (n, k) a une borne supérieure donnée par : dmin Jean-Yves Chouinard ≤ n−k +1 Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Distance minimale d’un code linéaire Donc si pour les codes Reed-Solomon, dmin ≥ n − k + 1 et dmin ≤ n − k + 1, alors : dmin = n − k + 1 Théorème (distance minimale d’un code Reed-Solomon) : Un code Reed-Solomon RS(n, k) a une distance minimale dmin = n − k + 1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Algorithme de décodage de Peterson, Gorenstein et Ziergler : L’algorithme de décodage de Peterson permet de décoder à partir du calcul de syndrômes les codes BCH binaires. Cet algorithme détermine la position des erreurs dans le polynôme vecteur reçu r (x) et corrige ces erreurs en inversant les bits de r (x) pour récupérer le polynôme mot-code c(x) en autant que la capacité de correction t du code BCH binaire ne soit pas dépassée. Pour les codes BCH non-binaires et pour les codes Reed-Solomon, on doit déterminer en plus de la position des erreurs leurs poids respectifs afin de pouvoir les corriger. Plusieurs algorithmes de décodage de codes Reed-Solomon existent. Parmi ceux-ci, il y a l’algorithme de Berlekamp-Massey, l’algorithme d’Euclide, les méthodes fréquentielles et l’algorithme de Peterson, Gorenstein et Ziergler. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Algorithme de décodage de Peterson, Gorenstein et Ziergler : La méthode de Peterson, Gorenstein et Ziergler est en fait une généralisation effectuée par Gorenstein et Ziergler des algorithmes de décodage de codes BCH binaires de Peterson et de Berlekamp. Nous nous intéresserons à celle-ci. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Algorithme de Peterson, Gorenstein et Ziergler : 1 Calculer du polynôme reçu r (x) les 2t syndrômes : Sj 2 3 = r (αj ), Construire la matrice S1 S2 S3 A = S4 .. . St−1 St j = 1, 2, . . . , 2t. de syndrômes A : S2 S3 S4 S5 .. . S3 S4 S5 S6 .. . S4 S5 S6 S7 .. . ... ... ... ... .. . St−1 St St+1 St+2 .. . St St+1 St+2 St+3 .. . St St+1 St+1 St+2 St+2 St+3 ... ... S2t−3 S2t−2 S2t−2 S2t−1 Calculer le déterminant de la matrice de syndrômes A : si le déterminant est non nul, i.e. |A| = 6 0, aller à l’étape 5. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Algorithme de Peterson, Gorenstein et Ziergler : 4 5 Construire une nouvelle matrice de syndrômes A0 en éliminant la dernière colonne et la dernière rangée de la matrice A et retourner à l’étape 3. Résoudre le système d’équations pour obtenir le polynôme localisateur d’erreur Λ(x) : AΛ 6 = S1 S2 S3 S4 . . . St−1 St S2 S3 S4 S5 . . . St St+1 S3 S4 S5 S6 . . . St+1 St+2 S4 S5 S6 S7 . . . St+2 St+3 ... ... ... ... .. . ... ... St−1 St St+1 St+2 . . . S2t−3 S2t−2 St St+1 St+2 St+3 . . . S2t−2 S2t−1 Λt Λt−1 Λ t−2 Λ t−3 · . . . Λ2 Λ1 = −St+1 −St+2 −St+3 −St+4 . . . −S2t−1 −S2t Trouver les racines du polynôme localisateur d’erreur Λ(x). Si Λ(x) n’a pas de racines distinctes ou tout simplement pas de racines alors aller à l’étape 10. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Algorithme de Peterson, Gorenstein et Ziergler : 7 Calculer la matrice B et déterminer le X1 X2 . . . Xν X12 X22 . . . Xν2 Be = . .. .. .. .. . . . X1ν X2ν ... Xνν poids des e i1 e i2 · .. . erreurs : S1 S2 = .. . e iν Sν 8 Soustraire du polynôme reçu, r (x), le polynôme d’erreur e(x). 9 Le mot-code est corrigé correctement (fin de l’algorithme). 10 L’algorithme de décodage ne peut pas corriger le polynôme reçu r (x) (fin de l’algorithme). On peut alors décoder le polynôme mot-code c(x) en le divisant par le polynôme générateur du code Reed-Solomon g (x) et ainsi décoder le polynôme message m(x). Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Reprenons l’exemple du code Reed-Solomon 8−aire de longueur n = q m − 1 = 23 − 1 = 7 formé avec le polynôme primitif binaire p(x) = x 3 + x + 1 et de capacité de correction t = 2. Son polynôme générateur est : g (x) = x 4 + α3 x 3 + x 2 + αx + α3 Ce code Reed-Solomon RS(7, 3) transforme les vecteurs messages 8−aires de longueur k = 3 en vecteurs mot-codes 8−aires de longueur n = 7. Le code RS(7, 3) comprend (q m )n−r = 512 mot-codes. Cependant, à la sortie du canal de transmission les vecteurs 8−aires reçus pourront être l’un des (q m )n = 87 = 2 097 152 vecteurs 8−aires possibles de longueur 7 (il y a 2 097 152 séquences d’erreurs 8−aires de longueur 7). Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : 1er cas : r (x) = x 4 + x 2 + αx + α3 Supposons que l’on reçoive du canal de transmission le vecteur 8−aire suivant : r (x) = x 4 + x 2 + αx + α3 Le décodeur Reed-Solomon doit en premier lieu calculer les syndrômes : {Sl } = {r (αl )}l=1,2,...,2t . S1 = r (α) = α4 + α2 + α(α) + α3 S1 = (α2 + α) + α2 + α2 + (α + 1) = α2 + 1 S1 = α 6 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : S2 = r (α2 ) = (α2 )4 + (α2 )2 + α(α2 ) + α3 S2 = α8 + α4 + α3 + α3 = α + (α2 + α) S2 = α2 S3 = r (α3 ) = (α3 )4 + (α3 )2 + α(α3 ) + α3 S3 = α12 + α6 + α4 + α3 = α5 + α6 + α4 + α3 S3 = S3 = α5 S4 = r (α4 ) = (α4 )4 + (α4 )2 + α(α4 ) + α3 S4 = α16 + α8 + α5 + α3 = α2 + α + α5 + α3 S4 = α2 + α + (α2 + α + 1) + (α + 1) = α (α2 + α + 1) + (α2 + 1) + (α2 + α) + (α + 1) = α2 + α + 1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : La matrice des syndrômes A est alors : 6 S1 S2 α α2 A = = S2 S3 α2 α5 et son déterminant |A| est : 6 α α2 |A| = 2 α α5 |A| = (α6 · α5 ) − (α2 · α2 ) = α11 − α4 = α4 − α4 |A| = 0 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le déterminant |A| de la matrice des syndrômes étant nul, ceci implique que la matrice et son déterminant A est singulière (elle n’est pas de plein rang). Le rang de la matrice est donc égal à 1 (ν = 1). On construit alors une nouvelle matrice de syndrômes A0 en éliminant la dernière colonne et la dernière rangée de la matrice originale A : A0 = [S1 ] = α6 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : On peut alors déterminer le polynôme localisateur d’erreur, Λ(x), en résolvant : A0 Λ = −S [S1 ] [Λ1 ] = −Sν+1 α6 Λ1 = −S2 = −α2 = α2 α2 = α−4 = α3 Λ1 = α6 et le polynôme localisateur d’erreur est : Λ(x) = Λ1 x + Λ0 = α3 x + 1 et le localisateur (d’erreur simple) est : X1 = α3 . Donc, il n’y a qu’une seule erreur dans le vecteur reçu r (x) et elle est située à la position 3. Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le vecteur d’erreur e(x) est : e(x) = e0 + e1 x + e2 x 2 + e3 x 3 + e4 x 4 + e5 x 5 + e6 x 6 avec e0 = e1 = e2 = e4 = e5 = e6 = 0 et e3 6= 0, i.e. e3 ∈ CG(8) − {0}. On doit déterminer le poids de l’erreur à la quatrième position (i.e. e3 ) dans le vecteur reçu r (x). On calcule la matrice de localisateur d’erreur B : B = [X1 ] = α3 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : En multipliant la matrice de localisateur d’erreur B avec le vecteur d’erreur comportant l’erreur, ici e, on obtient le syndrôme correspondant : Be = A0 [X1 ] e3 = [S1 ] α 3 e3 = α 6 α6 = α3 e3 = α3 et le polynôme d’erreur (estimé) est : e(x) = e3 x 3 = α3 x 3 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le polynôme mot-code estimé, c(x) est alors : c(x) = r (x) − e(x) c(x) = (x 4 + x 2 + αx + α3 ) − (α3 x 3 ) c(x) = x 4 − α3 x 3 + x 2 + αx + α3 c(x) = x 4 + α3 x 3 + x 2 + αx + α3 Le polynôme message (estimé), m(x), est : m(x) = c(x) x 4 + α3 x 3 + x 2 + αx + α3 = 4 =1 g (x) x + α3 x 3 + x 2 + αx + α3 Le message m(x) = 1 car le polynôme mot-code est ici le polynôme générateur du code RS(7,3). Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : 2ème cas : r (x) = α2 x 6 + α2 x 4 + x 3 + α5 x 2 Supposons maintenant que nous recevions plutôt le polynôme suivant du canal de transmission : r (x) = α2 x 6 + α2 x 4 + x 3 + α5 x 2 Les 2t syndrômes correspondant à ce nouveau vecteur reçu sont : S1 = r (α) = α2 (α)6 + α2 (α)4 + (α)3 + α5 (α)2 S1 = α 8 + α 6 + α 3 + α 7 = α + α 6 + α 3 + 1 S1 = α + (α2 + 1) + (α + 1) + 1 = α2 + 1 S1 = α 6 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : S2 = r (α2 ) = α2 (α2 )6 + α2 (α2 )4 + (α2 )3 + α5 (α2 )2 S2 = α14 + α10 + α6 + α9 = 1 + α3 + α6 + α2 S2 = 1 + (α + 1) + (α2 + 1) + α2 = α + 1 S2 = α3 S3 = r (α3 ) = α2 (α3 )6 + α2 (α3 )4 + (α3 )3 + α5 (α3 )2 S3 = α20 + α14 + α9 + α11 = α6 + 1 + α2 + α4 S3 = (α2 + 1) + 1 + α2 + (α2 + α) = α2 + α S3 = α4 S4 = r (α4 ) = α2 (α4 )6 + α2 (α4 )4 + (α4 )3 + α5 (α4 )2 S4 = α26 + α18 + α12 + α13 = α5 + α4 + α5 + α6 S4 = α4 + α6 = (α2 + α) + (α2 + 1) = α + 1 S4 = α3 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : La matrice des syndrômes A est maintenant : 6 S1 S2 α α3 A = = S2 S3 α3 α4 Le déterminant de |A| est : 6 α α3 |A| = 3 α α4 |A| = (α6 · α4 ) − (α3 · α3 ) |A| = α10 − α6 = α3 − α6 |A| = (α + 1) − (α2 + 1) = α2 + α |A| = α4 6= 0 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Cette fois-ci le déterminant de la matrice A est différent de zéro et celle-ci est donc non singulière. On peut maintenant déterminer le polynôme localisateur d’erreur Λ(x). AΛ = −S Λ2 −S3 = Λ1 −S4 4 α3 Λ2 −α4 α = = α4 Λ1 −α3 α3 S1 S2 S2 S3 α6 α3 qui est un système de deux équations à deux inconnues : α6 Λ2 + α3 Λ1 = α4 3 4 α Λ2 + α Λ1 = α (1) 3 Jean-Yves Chouinard (2) Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : De la seconde équation, (2), on peut exprimer Λ2 en fonction de Λ1 : α3 Λ2 = α4 Λ1 + α3 α4 α3 Λ2 = Λ + 1 α3 α3 Λ2 = αΛ1 + 1 Jean-Yves Chouinard (3) Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : En remplaçant Λ2 par αΛ1 + 1 dans (1) : α6 (αΛ1 + 1) + α3 Λ1 = α4 α 7 Λ1 + α 6 + α 3 Λ1 = α 4 (1 + α3 )Λ1 = α4 + α6 (1 + α + 1)Λ1 = (α2 + α) + (α2 + 1) αΛ1 = α + 1 = α3 Λ1 = Jean-Yves Chouinard α3 = α2 α Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : En remplaçant Λ1 par α2 dans (2) : α 3 Λ2 + α 4 Λ1 = α 3 α3 Λ2 + α4 α2 = α3 α 3 Λ2 = α 3 + α 6 α3 Λ2 = (α + 1) + (α2 + 1) α 3 Λ2 = α + α 2 = α 4 Λ2 = Jean-Yves Chouinard α4 =α α3 Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le polynôme localisateur d’erreur Λ(x) est un polynôme du second ordre : Λ(x) = Λ2 x 2 + Λ1 x + Λ0 Λ(x) = αx 2 + α2 x + 1 Le polynôme localisateur d’erreur Λ(x) a deux racines : on dénote par α1 et α2 l’inverse de celles-ci. On peut exprimer Λ(x) sous forme d’un produit de polynômes du premier ordre : Λ(x) = (α1 x + 1) · (α2 x + 1) Λ(x) = (α1 α2 )x 2 + (α1 + α2 )x + 1 Λ(x) = αx 2 + α2 x + 1 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Il faut donc que α1 α2 = α et que α1 + α2 = α2 . En cherchant dans la table du corps de Galois CG(8), on note que : α3 · α5 = α8 = α et que α3 + α5 = (α + 1) + (α2 + α + 1) = α2 . On peut donc choisir : α1 = α3 et α2 = α5 . Λ(x) = (α3 x + 1) · (α5 x + 1) Les localisateurs d’erreurs sont donc X1 = α3 et X2 = α5 indiquant des erreurs dans le polynôme reçu r (x) aux positions i1 = 3 et i2 = 5. Le polynôme d’erreur (i.e. vecteur d’erreur) e(x) est : e(x) = e0 + e1 x + e2 x 2 + e3 x 3 + e4 x 4 + e5 x 5 + e6 x 6 avec ei1 = e3 6= 0 et ei2 = e5 6= 0 : e(x) = e3 x 3 + e5 x 5 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Il reste à déterminer le poids de ces deux erreurs dans CG(8) à l’aide de la matrice B de rang ν = 2. B = X1 X12 X2 X22 = α3 (α3 )2 α5 (α5 )2 = α3 α6 α5 α10 = α3 α6 α5 α3 On doit maintenant résoudre le système : Be = S 3 α α5 ei1 S1 = α6 α3 ei2 S2 3 6 5 α α e3 α = 6 3 α α e5 α3 α3 e3 + α5 e5 = α6 6 3 α e3 + α e5 = α (1) 3 Jean-Yves Chouinard (2) Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : De (2), on peut exprimer e3 en fonction de e5 : α6 e3 = α3 e5 + α3 α3 α3 e5 + 6 = α−3 e5 + α−3 e3 = 6 α α 4 e3 = α e5 + α4 Jean-Yves Chouinard Codes Reed-Solomon (3) Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Dans (1), en substituant e3 par α4 e5 + α4 on obtient : α3 (α4 e5 + α4 ) + α5 e5 = α6 α7 e5 + α7 + α5 e5 = α6 e5 + 1 + α5 e5 = α6 (α5 + 1)e5 = α6 + 1 ((α2 + α + 1) + 1)e5 = (α2 + 1) + 1 (α2 + α)e5 = α2 α4 e5 = α2 e5 = α2 α−4 = α−2 e5 = α 5 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Maintenant, en remplaçant e5 par α5 dans (2) : α6 e3 + α3 e5 = α3 α6 e3 + α3 (α5 ) = α3 α6 e3 = α8 + α3 α6 e3 = α + (α + 1) e3 = α−6 e3 = α Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Enfin, le polynôme d’erreur e(x) est : e(x) = e0 + e1 x + e2 x 2 + e3 x 3 + e4 x 4 + e5 x 5 + e6 x 6 t X e(x) = eil x logα Xi l=1 e(x) = ei1 x logα X1 + ei2 x logα X2 3 e(x) = e3 x logα α + e5 x logα α 5 e(x) = αx 3 + α5 x 5 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le polynôme reçu r (x) est corrigé en y additionnant le polynôme d’erreur e(x) : c(x) = r (x) + e(x) c(x) = (α2 x 6 + α2 x 4 + x 3 + α5 x 2 ) + (αx 3 + α5 x 5 ) c(x) = α2 x 6 + α5 x 5 + α2 x 4 + (1 + α)x 3 + α5 x 2 c(x) = α2 x 6 + α5 x 5 + α2 x 4 + α3 x 3 + α5 x 2 Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Exemple (décodage d’un code Reed-Solomon) : Le message m(x) est décodé en divisant le polynôme mot-code (estimé) c(x) par le polynôme générateur g (x) du code RS(7,3) : m(x) = α2 x 6 + α5 x 5 + α2 x 4 + α3 x 3 + α5 x 2 c(x) = g (x) x 4 + α3 x 3 + x 2 + αx + α3 Le polynôme message est donc : m(x) = α2 x 2 ou sous forme de vecteur 8−aire : m = (0, 0, α2 ) Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie Algorithme de décodage de Peterson, Gorenstein et Ziergler Exemple de décodage de code Reed-Solomon Codes Reed-Solomon en pratique : Les codes Reed-Solomon sont employés dans les systèmes suivants : Sonde spatiale Voyager : code Reed-Solomon RS(255, 223) dans CG(28 ) polynôme primitif : p(x) = 1 + x + x 2 + x 7 + x 8 et, Q143 polynôme générateur : g (x) = i=112 x − α11·i . Normes WiMAX, ADSL, etc : code Reed-Solomon RS(255, 239) dans CG(28 ) polynôme primitif : p(x) = 1 + x 2 + x 3 + x 4 + x 8 et, Q15 polynôme générateur : g (x) = i=0 x + αi . Norme ETSI DVB-T : code raccourci Reed-Solomon RS(204, 188) dans CG(28 ) polynôme primitif : p(x) = 1 + x 2 + x 3 + x 4 + x 8 et, Q15 polynôme générateur : g (x) = i=0 x + αi . Jean-Yves Chouinard Codes Reed-Solomon Codes Reed-Solomon Construction des codes Reed-Solomon Propriétés des codes Reed-Solomon Décodage des codes Reed-Solomon Bibliographie E.R. Berlekamp. Key Papers in the Development of Coding Theory. IEEE Press, New-York, 1974. E.R. Berlekamp. Algebraic Coding Theory. Aegean Park Press, Laguna Hills, Californie, 1984. (revised 1984 edition). R.E. Blahut. Theory and Practice of Error Control Codes. Addison-Wesley, Reading, Massachusetts, 1984. R.C. Bose and D.K. Ray-Chaudhuri. Further Results on Error Correcting Binary Group Codes. Information and Control, 3 :279–290, septembre 1960. R.C. Bose and D.K. Ray-Chaudhuri. On a Class of Error Correcting Binary Group Codes. Information and Control, 3 :68–79, mars 1960. A. Hocquenghem. Codes correcteurs d’erreurs. Chiffres, 2 :147–156, septembre 1959. Jean-Yves Chouinard Codes Reed-Solomon