Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques GEL-7064 : Théorie et pratique des codes correcteurs Codes cycliques Notes de cours Jean-Yves Chouinard Département de génie électrique et de génie informatique Université Laval [email protected] 12 février 2013 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Plan de la présentation 1 Codes cycliques linéaires Représentation polynômiale des codes cycliques linéaires Idéals 2 Propriétés des codes cycliques linéaires 3 Codage et décodage des codes cycliques linéaires Codage des codes cycliques linéaires Décodage des codes cycliques linéaires 4 Codes cycliques linéaires systématiques Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Définition des codes cycliques linéaires Définition (code cyclique linéaire) : Un code bloc linéaire C(n, k) est dit code cyclique linéaire si pour tout mot-code c = (c0 , c1 , . . . , cn−1 ), il existe un motcode c′ = (cn−1 , c0 , . . . , cn−2 ). Dans un code cyclique linéaire C, toutes les permutations (circulaires) cycliques d’un mot-code sont aussi des mot-codes. Par exemple, si le vecteur x = (1, 0, 0, 0, 1, 1, 0) est un mot-code dans C, alors toutes ses versions décalées sont aussi des mot-codes du code cyclique linéaire : (1, 0, 0, 0, 1, 1, 0), (0, 0, 0, 1, 1, 0, 1), (0, 0, 1, 1, 0, 1, 0), . . . , (0, 1, 0, 0, 0, 1, 1) ∈ C Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Représentation polynômiale des codes cycliques linéaires Soit f (x) = a0 + a1 x + a2 x 2 + . . . + an−1 x n−1 + an x n où les coefficients ai sont des éléments (scalaires) d’un corps fini. Le degré du polynôme f (x) est la plus grande valeur de n telle que an 6= 0. Un polynôme de degré n est appelé polynôme monique si le coefficient an = 1 : f (x) = a0 + a1 x + a2 x 2 + . . . + an−1 x n−1 + x n Les éléments des mot-codes peuvent être exprimés comme les coefficients d’un polynôme mot-code : c(x) = c0 + c1 x + c2 x 2 + . . . + cn−2 x n−2 + cn−1 x n−1 où l’exposant i de x i indique la position de l’élément dans le mot-code c(x), i.e. c. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Représentation polynômiale des codes cycliques linéaires En utilisant cette notation polynômiale, les décalages circulaires (ou cycliques) d’un mot-code c, peuvent s’exprimer en multipliant le polynôme mot-code c(x) par x i où i indique le nombre de décalages circulaires vers la droite, et en réduisant le polynôme résultant modulo x n − 1. décalage circulaire i mot-code c polynôme mot-code c(x) 0 1 2 .. . n−1 (c0 , c1 , c2 , . . . , cn−1 ) (cn−1 , c0 , c1 , . . . , cn−2 ) (cn−2 , cn−1 , c0 , . . . , cn−3 ) .. . (c1 , c2 , c3 , . . . , c0 ) c(x) = c0 + c1 x + c2 x 2 + . . . + cn−1 x n−1 x c(x) = cn−1 + c0 x + c1 x 2 + . . . + cn−2 x n−1 x 2 c(x) = cn−2 + cn−1 x + c0 x 2 + . . . + cn−3 x n−1 .. . n−1 x c(x) = c1 + c2 x + c3 x 2 + . . . + c0 x n−1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Représentation polynômiale des codes cycliques linéaires Considérons un autre polynôme de la forme : a(x) = a0 + a1 x + . . . + an−1 x n−1 ∈ CG(q)[x]/x n − 1 (La notation CG(q)[x]/f (x) dénote un anneau de polynômes CG(q)[x] réduits modulo f (x).) En multipliant le polynôme mot-code c(x) par ce polynôme a(x) : a(x) · c(x) = a0 · c(x) + a1 x · c(x) + . . . + an−1 x n−1 · c(x) on obtient une combinaison linéaire des versions décalées (cycliques) du polynôme mot-code original c(x). Le polynôme produit a(x)c(x) est donc un autre polynôme du code, ou mot-code valide, du code linéaire cyclique C, c’est-à-dire : a(x)c(x) ∈ C où a(x) ∈ CG(q)[x]/x n − 1 et c(x) ∈ CG(q)[x]/x n − 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Idéals Un anneau R est un ensemble d’éléments tels que : 1 R est un groupe commutatif sous l’addition, c’est-à-dire : 1 2 3 4 2 3 (a + b) + c = a + (b + c), ∀a, b, c ∈ R (associativité), a + 0 = 0 + a = a, 0 ∈ R (élément identité), ∀a ∈ R, il existe un élément unique a−1 ∈ R tel que a + a−1 = a−1 + a = 0 : (inverse unique), ∀a ∈ R, ∀b ∈ R : a + b = b + a (commutativité). L’opération de multiplication est associative : (a · b) · c = a · (b · c), ∀a, b, c ∈ R. L’opération de multiplication est distributive sur l’addition : a · (b + c) = (a · b) + (a · c), ∀a, b, c ∈ R. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Idéals Si l’opération de multiplication est commutative, i.e. a · b = b · a, ∀a, b ∈ R, et qu’elle possède un élément identité, 1, alors l’anneau R est un anneau commutatif avec identité. L’ensemble de tous les polynômes q-aires CG(q)[x] forme un anneau commutatif avec identité. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Définition d’un idéal Définition (idéal) : Un sous-ensemble non vide I ⊆ R, où R est un anneau, est un idéal si : 1 2 le sous-ensemble I forme un groupe sous l’addition dans l’anneau R, et a · r = b ∈ I pour tous les a ∈ I et r ∈ R. Par exemple, l’ensemble I = {0, 4, 8, 12} est un idéal dans l’anneau R = {0, 1, 2, 3, . . . , 15} sous les opérations addition et multiplication modulo 16. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Définition d’un idéal principal Définition (idéal principal) : Un idéal I ⊆ R est un idéal principal si il existe un élément g ∈ I tel que chaque élément c ∈ I peut s’exprimer par : c = mg Jean-Yves Chouinard pour m ∈ R. Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Exemple (idéal principal) Considérons les éléments du corps de Galois CG(8) et les polynômes minimaux dans CG(2)[x]. On peut construire le corps de Galois CG(8) à l’aide du polynôme primitif : p(α) = α3 + α + 1 = 0 ⇒ α3 = α + 1 représentation exponentielle représentation polynômiale 0 0 1 1 α α α2 α2 α3 α +1 α4 α2 +α α5 α2 +α +1 α6 α2 +1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Exemple (idéal principal) Les classes de conjugués sont : β = 0 : =⇒ {0} β = 1 : 1, 12 = 1 =⇒ {1} 3 2 β = α : α, α2 , α2 = α4 , α2 = αα =⇒ {α, α2 , α4 } β = α3 : α3 , (α3 )2 = α6 , (α3 )4 = α12 = α5 =⇒ {α3 , α5 , α6 } et les polynômes minimaux correspondants sont : classes de conjugués {0} {1} {α, α2 , α4 } {α3 , α5 , α6 } polynômes minimaux M∗ (x) = x M0 (x) = x + 1 M1 (x) = (x + α)(x + α2 )(x + α4 ) M1 (x) = x 3 + x + 1 M3 (x) = (x + α3 )(x + α5 )(x + α6 ) M3 (x) = x 3 + x 2 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Exemple (idéal principal) Le polynôme x 7 − 1 = x 7 + 1 peut être factorisé par l’ensemble des polynômes minimaux : x 7 + 1 = M0 (x) · M1 (x) · M3 (x) x 7 + 1 = (x + 1) · (x 3 + x + 1) · (x 3 + x 2 + 1) Les idéaux principaux dans CG(2)[x]/x 7 − 1 sont : h0i, hx + 1i, hx 3 + x + 1i, hx 3 + x 2 + 1i, h(x + 1)(x 3 + x + 1)i, h(x + 1)(x 3 + x 2 + 1)i, h(x 3 + x + 1)(x 3 + x 2 + 1)i, h(x + 1)(x 3 + x + 1)(x 3 + x 2 + 1)i Il y a donc 8 idéaux principaux incluant les deux idéaux triviaux : h0i et hx 7 + 1i (i.e. h(x + 1)(x 3 + x + 1)(x 3 + x 2 + 1)i). Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Représentation polynômiale des codes cycliques linéaires Idéals Théorème (idéal) Théorème (idéals dans CG(q)[x]/x n − 1) : Si I est un idéal dans CG(q)[x]/x n − 1, alors : 1 2 3 Il existe un polynôme unique monique g (x) ∈ I de degré minimal, I est un idéal principal ayant un polynôme générateur g (x), le polynôme générateur g (x) divise le polynôme x n − 1 dans CG(q)[x]. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Propriétés des codes cycliques linéaires 1 Dans l’ensemble des polynômes mot-codes {c(x)} ∈ C, il existe un polynôme unique g (x) : g (x) = g0 + g1 x + g2 x 2 + . . . + gr −1 x r −1 + x r 2 de degré minimal r < n. Ce polynôme g (x) est le polynôme générateur du code C. Tout polynôme mot-code {c(x)} ∈ C peut être exprimé de manière unique par : c(x) = m(x)g (x) 3 où m(x) est un polynôme de degré inférieur à (n − r ) dans CG(q)[x]. Le polynôme générateur g (x) ∈ C est un facteur de (x n − 1) dans CG(q)[x] Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Propriétés des codes cycliques linéaires Le polynôme m(x) représente le message, un bloc d’information, de degré plus petit ou égal à n − r − 1, c’est-à-dire de (n − r ) éléments. Le choix des polynômes générateurs des codes cycliques linéaires est limité aux polynômes diviseurs du polynôme x n − 1. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) Supposons que l’on désire trouver les polynômes générateurs pour un code linéaire cyclique binaire de longueur n = 15. Alors g (x) doit diviser x 15 − 1. Nous avons vu que le polynôme x 15 − 1 est le produit de polynômes minimaux, obtenus des classes de conjugués, c’est-à-dire : 2 3 4 β, β q , β q , β q , β q , . . . avec q = 2, m = 4 pour x q m −1 − 1. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) Les classes de conjugués sont : β = 1 : 1, 12 = 1 =⇒ {1} 2 3 4 β = α : α, α2 , α2 = α4 , α2 = α8 , α2 = α16 = α =⇒ {α, α2 , α4 , α8 } β = α3 : α3 , (α3 )2 = α6 , (α3 )4 = α12 , (α3 )8 = α24 = α9 , (α3 )16 = α48 = α3 =⇒ {α3 , α6 , α9 , α12 } β = α5 : α5 , (α5 )2 = α10 , (α5 )4 = α20 = α5 =⇒ {α5 , α10 } β = α7 : α7 , (α7 )2 = α14 , (α7 )4 = α28 = α13 , (α7 )8 = α56 = α11 , (α7 )16 = α112 = α7 =⇒ {α7 , α11 , α13 , α14 } Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) Les polynômes minimaux sont obtenus des classes de conjugués : classes de conjugués {1} polynômes minimaux M0 (x) = x + 1 2 4 8 {α, α , α , α } M1 (x) = (x + α)(x + α2 )(x + α4 )(x + α8 ) M1 (x) = x 4 + x + 1 {α3 , α6 , α9 , α12 } M3 (x) = (x + α3 )(x + α6 )(x + α9 )(x + α12 ) M3 (x) = x 4 + x 3 + x 2 + x + 1 {α5 , α10 } M5 (x) = (x + α5 )(x + α10 ) M5 (x) = x 2 + x + 1 {α7 , α11 , α13 , α14 } M7 (x) = (x + α7 )(x + α11 )(x + α13 )(x + α14 ) M7 (x) = x 4 + x 3 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) Donc le polynôme x 15 − 1 = x 15 + 1 peut de décomposer en produit des polynômes minimaux suivants : x 15 + 1 = M0 (x) · M1 (x) · M3 (x) · M5 (x) · M7 (x) x 15 + 1 = (x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 2 + x + 1) · (x 4 + x 3 + 1) Maintenant, à l’aide des facteurs du polynôme x 15 + 1, c’est-à-dire l’ensemble des polynômes minimaux, on peut construire des polynômes générateurs de codes cycliques, g (x), de n’importe quel degré. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré polynômes générateurs 1 g (x) = M0 (x) g (x) = x + 1 2 g (x) = M5 (x) g (x) = x 2 + x + 1 3 g (x) = M0 (x) · M5 (x) g (x) = (x + 1) · (x 2 + x + 1) g (x) = x 3 + 1 4 g (x) = M1 (x) g (x) = x 4 + x + 1 g (x) = M3 (x) g (x) = x 4 + x 3 + x 2 + x + 1 g (x) = M7 (x) g (x) = x 4 + x 3 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré 5 polynômes générateurs g (x) = M0 (x) · M1 (x) g (x) = (x + 1) · (x 4 + x + 1) g (x) = x 5 + x 4 + x 2 + 1 g (x) = M0 (x) · M3 (x) g (x) = (x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 5 + 1 g (x) = M0 (x) · M7 (x) g (x) = (x + 1) · (x 4 + x 3 + 1) g (x) = x 5 + x 3 + x + 1 6 g (x) = M5 (x) · M1 (x) g (x) = (x 2 + x + 1) · (x 4 + x + 1) g (x) = x 6 + x 5 + x 4 + x 3 + 1 g (x) = M5 (x) · M3 (x) g (x) = (x 2 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 6 + x 4 + x 3 + x 2 + 1 g (x) = M5 (x) · M7 (x) g (x) = (x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 6 + x 3 + x 2 + x + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré 7 polynômes générateurs g (x) = M0 (x) · M5 (x) · M1 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x + 1) g (x) = x 7 + x 3 + x + 1 g (x) = M0 (x) · M5 (x) · M3 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 7 + x 6 + x 5 + x 2 + x + 1 g (x) = M0 (x) · M5 (x) · M7 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 7 + x 6 + x 4 + 1 8 g (x) = M1 (x) · M3 (x) g (x) = (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 8 + x 7 + x 6 + x 4 + 1 g (x) = M1 (x) · M7 (x) g (x) = (x 4 + x + 1) · (x 4 + x 3 + 1) g (x) = x 8 + x 7 + x 5 + x 4 + x 3 + x + 1 g (x) = M3 (x) · M7 (x) g (x) = (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 8 + x 4 + x 2 + x + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré 9 polynômes générateurs g (x) = M0 (x) · M1 (x) · M3 (x) g (x) = (x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 9 + x 6 + x 5 + x 4 + x + 1 g (x) = M0 (x) · M1 (x) · M7 (x) g (x) = (x + 1) · (x 4 + x + 1) · (x 4 + x 3 + 1) g (x) = x 9 + x 7 + x 6 + x 3 + x 2 + 1 g (x) = M0 (x) · M3 (x) · M7 (x) g (x) = (x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 9 + x 8 + x 5 + x 4 + x 3 + 1 10 g (x) = M5 (x) · M1 (x) · M3 (x) g (x) = (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 10 + x 8 + x 5 + x 4 + x 2 + x + 1 g (x) = M5 (x) · M1 (x) · M7 (x) g (x) = (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + 1) g (x) = x 10 + x 5 + 1 g (x) = M5 (x) · M3 (x) · M7 (x) g (x) = (x 2 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 10 + x 9 + x 8 + x 6 + x 5 + x 2 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré 11 polynômes générateurs g (x) = M0 (x) · M5 (x) · M1 (x) · M3 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) g (x) = x 11 + x 10 + x 9 + x 8 + x 6 + x 4 + x 3 + 1 g (x) = M0 (x) · M5 (x) · M1 (x) · M7 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + 1) g (x) = x 11 + x 10 + x 6 + x 5 + x + 1 g (x) = M0 (x) · M5 (x) · M3 (x) · M7 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 11 + x 8 + x 7 + x 5 + x 3 + x 2 + x + 1 12 g (x) = M1 (x) · M3 (x) · M7 (x) g (x) = (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 12 + x 9 + x 6 + x 3 + 1 13 g (x) = M0 (x) · M1 (x) · M3 (x) · M7 (x) g (x) = (x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 13 + x 12 + x 10 + x 9 + x 7 + x 6 + x 4 + x 3 + x + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) degré polynômes générateurs 14 g (x) = M5 (x) · M1 (x) · M3 (x) · M7 (x) g (x) = (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 14 + x 13 + x 12 + x 11 + x 10 + x 9 + x 8 + x 7 + x 6 + x 5 + x 4 + x 3 + x 2 + x + 1 15 g (x) = M0 (x) · M5 (x) · M1 (x) · M3 (x) · M7 (x) g (x) = (x + 1) · (x 2 + x + 1) · (x 4 + x + 1) · (x 4 + x 3 + x 2 + x + 1) · (x 4 + x 3 + 1) g (x) = x 15 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Exemple (sélection des polynômes générateurs) À partir de ces tableaux, on peut construire un code linéaire cyclique de degré r = 1 avec le polynôme générateur g (x) = x + 1. L’ensemble des messages possibles {m(x)} comprends tous les 214 = 16 384 vecteurs binaires de 14 bits. Chacun de ces message est codé par un mot-code de 15 bits : c(x) = m(x)g (x) De la même manière, si on choisit le polynôme générateur g (x) = x 2 + x + 1, on peut coder 213 = 8 192 messages distincts de 13 bits en mot-codes de 15 bits, et ainsi de suite. À la limite, on peut coder de courts messages d’un seul bit en l’un de deux mot-codes de 15 bits en utilisant le polynôme générateur g (x) de degré 14 : g (x) = x 14 + x 13 + x 12 + x 11 + x 10 + x 9 + x 8 + x 7 + x 6 + x 5 + x 4 + x 3 + x 2 + x + 1 Il s’agit d’un simple code de répétition C(n, k) = C(15, 1). Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Codage des codes cycliques linéaires Le processus de codage à l’aide de codes cycliques linéaires est effectué en multipliant le polynôme message m(x) de degré (n − r − 1) avec le polynôme générateur du code g (x) de degré r conduisant ainsi à un polynôme mot-code c(x) de degré (n − 1) Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Codage des codes cycliques linéaires Message : m(x) = m0 + m1 x + m2 x 2 + . . . + mn−r −1 x n−r −1 Générateur du code : g (x) = g0 + g1 x + g2 x 2 + . . . + gr x r Mot-code : c(x) = c0 + c1 x + c2 x 2 + . . . + cn−1 x n−1 c(x) = m(x) · g (x) c(x) = (m0 + m1 x + m2 x 2 + . . . + mn−r −1 x n−r −1 ) · g (x) c(x) = c(x) = m0 g (x) + m1 xg (x) + m2 x 2 g (x) + . . . + mn−r −1 x n−r −1 g (x) g (x) xg (x) x 2 g (x) m0 m1 m2 . . . mn−r −1 · . .. n−r −1 x g (x) Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Codage des codes cycliques linéaires En remplaçant les polynômes par des vecteurs et une matrice génératrice : m c = = m0 c0 m1 c1 m2 mn−r −1 ... c2 ... cn−1 m1 ... mn−r −1 on représente le codage cyclique par : c0 c1 ... cn−1 c = = m·G m0 g0 0 0 . .. 0 0 Jean-Yves Chouinard g1 g0 0 . . . 0 0 g2 g1 g0 . . . 0 0 ··· ··· ··· .. . ··· ··· gr gr −1 gr −2 . . . ··· ··· Codes cycliques · 0 gr gr −1 . . . ··· ··· ··· ··· ··· .. . ··· ··· 0 0 0 . . . gr gr −1 0 0 0 . . . 0 gr Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Codage des codes cycliques linéaires La matrice génératrice du code cyclique est donc : G= g0 g1 g2 0 g0 g1 0 0 g0 .. .. .. . . . 0 0 0 0 0 0 ··· ··· ··· .. . ··· ··· gr 0 gr −1 gr gr −2 gr −1 .. .. . . ··· ··· ··· ··· Jean-Yves Chouinard ··· ··· ··· .. . 0 0 0 .. . ··· ··· gr gr −1 Codes cycliques 0 0 0 .. . 0 gr Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Codage des codes cycliques linéaires La figure ci-dessous montre un codeur cyclique non systématique. ... ... + c c Jean-Yves Chouinard ... + c Codes cycliques c c Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique Dans cet exemple, on veut former un code cyclique binaire de longueur n = 7. Le polynôme générateur du code g (x) doit être un facteur de x 7 − 1 dans l’ensemble CG(2)[x]. Reprenons le polynôme primitif p(x) = x 3 + x + 1. α3 = α + 1 est racine du polynôme primitif. On obtient le corps de Galois CG (8) = {0, 1, α, α2 , α3 , α4 , α5 , α6 }. Les classes de conjugués sont : {0}, {1}, {α, α2 , α4 } et {α3 , α5 , α6 }. Les polynômes minimaux correspondants sont : M0 (x) = x + 1, M1 (x) = x 3 + x + 1 et M3 (x) = x 3 + x 2 + 1. Ils factorisent x 7 − 1 : x 7 + 1 = (x + 1) · (x 3 + x + 1) · (x 3 + x 2 + 1) Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique Choisissons, par exemple le polynôme générateur : g (x) = M0 (x) · M1 (x) = (x + 1) · (x 3 + x + 1) = x 4 + x 3 + x 2 + 1 Le degré maximal du polynôme message, m(x), est le degré maximal du polynôme mot-code moins le degré du polynôme générateur, c.-à-d. 6-4=2. Le code cyclique comprendra donc 8 messages de 3 bits. Choisissons le message m(x) = x 2 + 1, ou [101] sous forme de vecteur. La matrice génératrice correspondant au polynôme générateur g (x) = x 4 + x 3 + x 2 + 1 est donc : 1 0 1 1 1 0 0 G= 0 1 0 1 1 1 0 0 0 1 0 1 1 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique La figure montre le codeur cyclique (non-systématique) résultant. m0 m1 m2 r0 r1 c0 c1 + r2 c2 + r3 c3 + r4 r5 r6 c4 c5 c6 La séquence de codage est illustrée aux figures suivantes. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique 1 0 1 0 0 c0 c1 + Jean-Yves Chouinard 0 c2 + 0 c3 Codes cycliques + 0 0 0 c4 c5 c6 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique 1 0 1 0 c0 c1 + Jean-Yves Chouinard 1 c2 + 1 c3 Codes cycliques + 1 0 0 c4 c5 c6 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique 1 0 1 c0 c1 + Jean-Yves Chouinard 0 c2 + 1 c3 Codes cycliques + 1 1 0 c4 c5 c6 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique 1 0 c0 c1 + Jean-Yves Chouinard 0 c2 + 1 c3 Codes cycliques + 0 1 1 c4 c5 c6 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique + 1 0 c0 c1 c2 1 0 0 Jean-Yves Chouinard 0 + 1 + 0 1 1 c3 c4 c5 c6 1 0 1 1 Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de codage avec un code cyclique La séquence codée est [1001011] ou encore : c(x) = x 6 + x 5 + x 3 + 1 On vérifie que : c(x) = m(x) · g (x) c(x) = x 2 + 1 · x 4 + x 3 + x 2 + 1 c(x) = x 6 + x 5 + x 3 + 1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Décodage des codes cycliques linéaires Au décodeur, un polynôme de contrôle h(x) est employé pour décoder les mot-codes reçus (et possiblement corrompus par le canal). Pour tout polynôme générateur g (x) de degré r , il existe un polynôme de contrôle h(x) de degré k = (n − r ) tel que : g (x)h(x) = x n − 1 ou encore : g (x)h(x) = 0 modulo (x n − 1) Le polynôme mot-code c(x) étant un multiple du polynôme générateur g (x), i.e. c(x) = m(x)g (x), alors : c(x)h(x) = m(x)g (x)h(x) c(x)h(x) = m(x) · 0 modulo (x n − 1) c(x)h(x) = 0 modulo (x n − 1) Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Décodage des codes cycliques linéaires Un mot-code c(x) transmis dans un canal de transmission bruité sera vraisemblablement affecté par celui-ci et le polynôme reçu, r (x), sera différent, i.e. r (x) 6= c(x). r (x)h(x) = s(x) modulo (x n − 1) Le polynôme s(x) = s0 + s1 x + s2 x 2 + . . . + sn−k−1 x n−k−1 est le polynôme syndrôme de degré (n − k − 1). Ce polynôme syndrôme s(x) est obtenu en divisant le polynôme reçu r (x) par le polynôme générateur du code cyclique, g (x). Le reste de la division est le polynôme syndrôme : r (x) = a(x)g (x) + s(x) où le degré du polynôme syndrôme est plus petit que le degré du polynôme générateur : deg[s(x)] < deg[g (x)]. Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Décodage des codes cycliques linéaires Si r (x) = c(x), alors : r (x) = c(x) = a(x)g (x) et le message décodé est : m̂(x) = a(x). La figure montre le circuit de division cyclique. a 0 a1 ... an-1 g0 g1 + + d0 gr-1 ... d1 Jean-Yves Chouinard q0q1 + dr-2 Codes cycliques dr1 ... qj-1 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division Reprenons l’exemple du code cyclique binaire de longueur n = 7 de polynôme générateur du code g (x) = x 4 + x 3 + x 2 + 1. Le circuit de division cyclique est donné à la figure ci-dessous. g0= 1 a0 a1 a2 a3 a4 a5 a6 g 1= 0 + g 2= 1 r0 r1 d0 d1 + g 3= 1 r2 d2 Supposons que la séquence codée reçue du canal est r (x) = x 6 + x 5 + x 3 + 1. Jean-Yves Chouinard Codes cycliques + r3 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 a0 a 1 a2 a 3 a4 a 5 a6 g1= 0 + g2= 1 r0 r1 d0 d1 Jean-Yves Chouinard + Codes cycliques g3= 1 r2 d2 + r3 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 0 1 0 1 1 g1= 0 + g2= 1 + 0 0 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 0 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 0 1 0 1 g1= 0 + g2= 1 + 1 0 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 0 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 0 1 0 g1= 0 + g2= 1 + 1 1 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 0 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 0 1 g1= 0 + g2= 1 + 0 1 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 1 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 0 g1= 0 + g2= 1 + 1 0 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 1 d2 + 1 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 0 g1= 0 + g2= 1 + 1 1 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 1 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 1 g1= 0 + g2= 1 + 0 1 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 1 d2 + 1 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g0= 1 g1= 0 + g2= 1 + 0 0 d0 d1 Jean-Yves Chouinard Codes cycliques g3= 1 0 d2 + 0 d3 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division g1 = 0 g 0= 1 + g2 = 1 0 0 0 0 Jean-Yves Chouinard + g3 = 1 0 0 Codes cycliques + 1010000 0 0 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codage des codes cycliques linéaires Décodage des codes cycliques linéaires Exemple de décodage avec circuit de division Le résultat de la division du mot-code reçu, r (x), par le polynôme générateur g (x) est donc : r (x) = a(x)g (x) + s(x) r (x) = x 2 + 1 · x 4 + x 3 + x 2 + 1 + 0 Le syndrome s(x) = 0 indique donc que le mot-code reçu r (x) est un mot-code valide et le message est : m(x) = a(x) = x 2 + 1 . Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques En général, le codage cyclique résultant du produit des polynômes message et générateur c(x) = m(x)g (x) ne conduit pas à des codes systématiques. Un code systématique C est de la forme : c = (c0 , c1 , . . . , cn−k−1 , cn−k , . . . , cn−1 ) c = (c0 , c1 , . . . , cn−k−1 , m0 , . . . , mk−1 ) | {z } message où m = (m0 , . . . , mk−1 ) est le message de longueur k. Sous forme polynômiale, on a : c(x) = c0 + c1 x + c2 x 2 + . . . + cn−k−1 x n−k−1 + cn−k x n−k + . . . + cn−1 x n−1 c(x) = c0 + c1 x + c2 x 2 + . . . + cn−k−1 x n−k−1 + m0 x n−k + . . . + mk−1 x n−1 Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques Le vecteur mot-code c peut être représenté par une somme de deux vecteurs : c = (c0 , c1 , . . . , cn−k−1 , cn−k , . . . , cn−1 ) c = (0, 0, . . . , 0, m0 , . . . , mk−1 ) + (−d0 , −d1 , . . . , −dn−k−1 , 0, . . . , 0) ou encore sous forme polynômiale : c(x) = x n−k m(x) − d (x) où d (x) = d0 + d1 x + . . . + dn−k−1 x n−k−1 . Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques La figure ci-dessous montre le circuit de multiplication cyclique. ... ... 0 0 Jean-Yves Chouinard ... + 0 Codes cycliques m m Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques Or le polynôme mot-code c(x) doit aussi être un multiple du polynôme générateur g (x) de degré r : c(x) = q(x)g (x) avec g (x) = g0 + g1 x + . . . + gr x r q(x) = q0 + q1 x + . . . + qn−r −1 x et n−r −1 Étant donné que c(x) = x n−k m(x) − d (x) et que c(x) = q(x)g (x), alors : x n−k m(x) = q(x)g (x) + d (x) Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques Le polynôme d (x) est donc le reste de la division du polynôme x n−k m(x) par le polynôme générateur g (x). On peut donc former le mot-code c(x) avec les polynômes m(x) et d (x) : c(x) = −d0 − d1 x − . . . − dn−k−1 x n−k−1 + m0 x n−k + . . . + mk−1 x n−1 a 0 a1 ... an-1 g0 g1 + + d0 gr-1 ... d1 Jean-Yves Chouinard q0q1 + dr-2 Codes cycliques dr1 ... qj-1 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques Algorithme de codage cyclique systématique : Multiplication : x n−k m(x). Division par g (x) : x n−k m(x) = q(x)g (x) + d (x). Soustraction : c(x) = x n−k m(x) − d (x). Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Codes cycliques linéaires systématiques La figure ci-dessous montre un codeur cyclique systématique. g0 gr-1 g1 - + m0 + ... m1 ... + mk-1 -d0 -d1 c0 c1 Jean-Yves Chouinard ... ... -dn-k-1 m0 m1 cn-k-1 cn-k cn-k+1 Codes cycliques ... ... mk-1 cn-1 Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Circuit de multiplication (entrée inversée) Circuit de multiplication de deux polynômes avec les entrées inversées. 1 + ( ) - . + − + 1 + ! ( ) / 0 " ( ( ) ) = ($ + (%) + (# ) # + , + (& )& * ( ) ) = *$ + *%) + *# ) # + , + *' )' +( )) = ( ( )) ⋅ *( )) + ( ) ) = +$ + +%) + +# ) # + , + +& + ' −%)& + ' −% + +& + ' )& + ' + ( ) ) = ( ($ *$ ) + ( (%*$ + ($ *% ) ) + ( (# *$ + (%*% + ($ *# ) ) # + , + ( (& *' −% + (& −%*' ) ) & + ' + ( (& *' ) )& + ' Jean-Yves Chouinard Codes cycliques Codes cycliques linéaires Propriétés des codes cycliques linéaires Codage et décodage des codes cycliques linéaires Codes cycliques linéaires systématiques Circuit de multiplication (entrée non inversée) Circuit de multiplication de deux polynômes avec entrées non inversées. + =< ( ) H I 2 L + ;: 2 + 98 L + 76 −5 2 ( ) J K 43 2 C ( D ) = C? + C@D + C> D > + G + CA DA E ( D ) = E? + E@D + E> D > + G + EB DB F( D) = C ( D) ⋅ E( D) F ( D ) = F? + F@D + F> D > + G + FA + B −@DA + B −@ + FA + B DA + B F ( D ) = ( C? E? ) + ( C@E? + C? E@ ) D + ( C> E? + C@E@ + C? E> ) D > + G + ( CA EB −@ + CA −@EB ) D A + B + ( CA EB ) DA + B Jean-Yves Chouinard Codes cycliques