Les codes cycliques.
Les codes cycliques sont des codes linéaires en blocs.
Plaçant à l'entrée du codeur un bloc de k bits, celui-ci
renvoie un bloc de n bits (avec bien sûr n > k). En utilisant
des codeurs systématiques, on peut faire en sorte que les k
premiers bits de sortie soient les mêmes que les bits entrés,
le codeur se contentant alors de rajouter (n-k) bits dits bits de
contrôle de parité.
Dans le cas particulier des codes cycliques C(n,k,d), les mots du
code doivent être stables par permutation circulaire. On peut
alors modéliser le codage mathématiquement à l'aide de
polynômes, à coefficients dans le corps de base (Z/2Z si on
travaille sur des éléments binaires, mais GF(2m) de
façon plus générale), définis modulo le polynôme Dn
- 1.
Chaque mot du code est alors représenté par un polynôme c(D)
de degré < n correspondant à la séquence de ses bits, de
même pour les séquences de bits d'information représentés par
des polynômes i(D) de degré < k.
Tous les mots du code peuvent être obtenus à partir d'un
polynôme générateur g(D) en multipliant celui-ci par un
polynôme de degré < k (le polynôme d'information en
général). g(D) est un polynôme de degré r = n-k divisant Dn-1,
c'est à dire que Dn - 1 = g(D).h(D), où h(D) est le
polynôme de parité.
Les bits de parité, appelé dans ce cas CRC pour Cyclic
Redundant Checksum, sont obtenus en prenant le reste de la
division euclidienne de Dr.i(D) par g(D), ce qui donne
un polynôme de degré n-k. Les bits correspondants à ce
polynôme constituent le CRC.
On obtient alors c(D) = Dr.i(D) + n(D), où n(D) est
le CRC correspondant à i(D).
Lors de la réception d'un mot y(D), on calcule le reste de la
division euclidienne de y(D) par g(D). Si ce reste est nul, y(D)
est un mot du code et sera donc accepter, sinon il y a erreurs.
GSM utilise, pour les 50 bits de la classe Ia du canal de parole,
un code cyclique C(53,50,2)de polynôme générateur G0 = 1+D+D3,
ce qui protège les bits de la classe Ia par 3 bits de parité.
Les codes convolutionnels.
Les codes convolutionnels fonctionnent sur le principe des
registres à décalage par blocs. On code une trame de k bits par
un bloc de n bits, mais le codage fait intervenir également la
donnée des L-1 trames précédentes. Une fonction logique permet
de faire le calcul de n bits de sortie à partir des (k * L) bits
dans les registres. Une fois les calculs faits, les trames sont
décalées par blocs de k bits, une nouvelle trame est introduite
à l'entrée du codeur et on peut recommencer le calcul.
On peut représenter le calcul de la fonction logique par
polynômes : A chacun des n bits de sortie sont associés k
polynômes. On dispose ainsi d'une matrice de polynômes [Gij(D)]
( 1 i k, 1 j n ). Le coefficient d'indice r de Gij(D)
représentant la contribution du ieme bit du rième
registre sur le jème bit de sortie. Les polynômes Gij(D) sont
donc de degré < L. Ceci vaut si les contributions des
différents bits sont additives.
La valeur des bits de sortie peut alors se calculer de façon
formelle à l'aide de calcul de produits de polynômes.
Les caractéristiques du code sont alors :
Exemple : Prenons un codeur convolutif de rendement R=1/2
et de longueur de contrainte L=3. Son entrée est constituée par
des blocs de k=1 éléments binaires et sa sortie par des blocs
de n=2 éléments binaires.
Dans le cas GSM, pour coder le signal de parole, on utilise un
code convolutionnel, de longueur de fenêtre L=5 (c'est à dire
qu'il faut 4 registres), les blocs ne contiennent dans ce cas
qu'un seul bit (k=1), et le codeur fournit pour chacun deux bits
de sortie (n=2).