distance minimale, matrice génératrice, vérificatrice
bornes de Hamming et de Singleton, codes parfaits, MDS
codes cycliques = idéaux de \(\F_q[x]/x^n-1\), polynôme générateur, vérificateur. Générateur de l’orthogonal.
factorisation de \(x^n-1\) dans \(\F_q[x]\).
Si \(q\wedge n=1\) et \(\alpha\) est une racine \(n\)-ième primitive de l’unité, \(x^n-1=\prod_{i\in\Z/n\Z}(x-\alpha^i)\) se factorise sur \(\F_q\) en \(\prod_I f_I(x)\) où \(I\) parcourt les \(q\)-orbites de \(\Z/n\Z\) et \(f_I(x)=\prod_{i\in I}(x-\alpha^i)\).
codes de Reed-Solomon pour \(n\mid q-1\), ils sont MDS.
codes BCH (distance prévue)
Note
Soit \(\alpha\) une racine nième de l’unité ; si \(g(x)\) s’annule en \(r\) puissances consécutives \(\alpha^{i+1},\dots \alpha^{i+r}\), alors le code est de distance minimale \(\geq r+1\) (Ecrire la matrice de Vandermonde codant l’annulation d’un polynôme de poids \(r\)).
Factoriser \(x^{23}-1\) sur \(\F_2\).
\(G_{23}\) est un \([23,12]\) code cyclique binaire. Montrer qu’il existe deux tels codes.
factor(x^23-1 % 2)
Calculer un polynôme générateur de \(G_{23}\).
Le polynôme
g := x^11 + x^9 + x^7 + x^6 + x^5 + x + 1
convient.
>>> factor(x^23-1)
(x + 1) * (x^11 + x^9 + x^7 + x^6 + x^5 + x + 1) * (x^11 + x^10 + x^6 +
x^5 + x^4 + x^2 + 1)
Le polynôme
>>> g = x^11 + x^9 + x^7 + x^6 + x^5 + x + 1
convient.
Écrire une matrice génératrice \(G\) de \(G_{23}\)
G := matrix(12, 23, (l,c)->coeff(g*x^l,c))
>>> G = matrix(11,23) ## pb
>>> G = pari("matrix(12,23)")
>>> for i in range(12):
... gi = g * x^i % (x^23-1)
... for j in range(23)
... G[i,j] = gi[j]
>>> G.lift()
Le code étendu consiste à rajouter le bit de parité, ou à partir du polynôme \((x-1)g(x)\)
>>> Gb = pari("matrix(12,24)")
>>> for i in range(12):
... b = 0
... for j in range(23):
... Gb[i,j] = G[i,j]
... b += G[i,j]
... Gb[i,23] = b
>>> Gb.lift()
Montrer que \(d(G_{23})\geq 5\) (utiliser la borne BCH).
On veut déterminer les racines de \(g\). En notant \(x\mod g\) une racine, on voit que les autres sont les \(x^j\) pour \(j\in\set{1, 2, 4, 8, 16, 9, 18, 13, 3, 6, 12}\).
Calculer une matrice génératrice \(\overline G\) du code étendu \(\overline{G_{23}}\), obtenu en ajoutant un bit de parité (\(\sum x_i=0\)).
Le code étendu consiste à rajouter le bit de parité, ou à partir du polynôme \((x-1)g(x)\)
GE := matrix(12, 24, (l,c)->coeff(rem(g*(x-1%2)*x^l,x^23-1),c))%0
Vérifier que \(\overline{G_{23}}\) est auto-orthogonal.
>>> lift( Gb * GB.mattranspose() )
GE * transpose(GE)
Montrer que les mots de \(\overline{G_{23}}\) ont un poids divisible par \(4\).
C’est vrai sur chacun des vecteurs de base
Montrer que \(\overline{G_{23}}\) est de distance \(8\).
Montrer que \(G_{23}\) est un code parfait.
Le code de Golay ternaire \(G_{11}\) est un code cyclique de dimension \(k=6\) et de longueur \(n=11\).