Le but de la théorie du codage des canaux est de trouver des codes qui transmettent rapidement, contiennent de nombreux mots de code valides et peuvent corriger ou au moins détecter de nombreuses erreurs. Bien que ne s’excluant pas mutuellement, la performance dans ces domaines est un compromis. Ainsi, différents codes sont optimaux pour différentes applications. Les propriétés nécessaires de ce code dépendent principalement de la probabilité d’erreurs lors de la transmission. Dans un CD typique, la déficience est principalement la poussière ou les rayures.
Les CD utilisent un codage Reed–Solomon entrelacé pour répartir les données sur le disque.
Bien que ce ne soit pas un très bon code, un simple code de répétition peut servir d’exemple compréhensible. Supposons que nous prenions un bloc de bits de données (représentant le son) et l’envoyions trois fois. Au récepteur, nous examinerons les trois répétitions petit à petit et prendrons un vote à la majorité. La torsion à ce sujet est que nous n’envoyons pas simplement les bits dans l’ordre. Nous les entrelacons. Le bloc de bits de données est d’abord divisé en 4 blocs plus petits. Ensuite, nous parcourons le bloc et envoyons un bit du premier, puis du second, etc. Ceci est fait trois fois pour répartir les données sur la surface du disque. Dans le contexte du code de répétition simple, cela peut ne pas sembler efficace. Cependant, on connaît des codes plus puissants qui sont très efficaces pour corriger l’erreur de « burst » d’une rayure ou d’une tache de poussière lorsque cette technique d’entrelacement est utilisée.
D’autres codes sont plus appropriés pour différentes applications. Les communications spatiales profondes sont limitées par le bruit thermique du récepteur qui est plus de nature continue que de nature bursty. De même, les modems à bande étroite sont limités par le bruit, présent dans le réseau téléphonique et également mieux modélisé comme une perturbation continue. Les téléphones portables sont sujets à une décoloration rapide. Les hautes fréquences utilisées peuvent provoquer une décoloration rapide du signal même si le récepteur est déplacé de quelques pouces. Encore une fois, il existe une classe de codes de canal conçus pour lutter contre la décoloration.
codesEdit linéaire
Le terme théorie du codage algébrique désigne le sous-domaine de la théorie du codage où les propriétés des codes sont exprimées en termes algébriques puis étudiées plus avant.
La théorie du codage algébrique est fondamentalement divisée en deux principaux types de codes :
- Codes à blocs linéaires
- Codes convolutionnels
Elle analyse les trois propriétés suivantes d’un code – principalement:
- Longueur du mot de code
- Nombre total de mots de code valides
- La distance minimale entre deux mots de code valides, en utilisant principalement la distance de Hamming, parfois aussi d’autres distances comme la distance de Lee
Code à blocs linéairesedit
Les codes à blocs linéaires ont la propriété de linéarité, c’est-à-dire que la somme de deux mots de code quelconques est également un mot de code, et ils sont appliqués aux bits source en blocs, d’où le nom de codes de blocs linéaires. Il existe des codes de blocs qui ne sont pas linéaires, mais il est difficile de prouver qu’un code est un bon code sans cette propriété.
Les codes de blocs linéaires sont résumés par leurs alphabets de symboles (par exemple, binaires ou ternaires) et leurs paramètres (n, m, dmin) où
- n est la longueur du mot de code, en symboles,
- m est le nombre de symboles sources qui seront utilisés pour le codage à la fois,
- dmin est la distance de hamming minimale pour le code.
Il existe de nombreux types de codes à blocs linéaires, tels que les codes cycliques
- (par ex., codes de Hamming)
- Codes de répétition
- Codes de parité
- Codes polynomiaux (par exemple, codes BCH)
- Codes Reed–Solomon
- Codes géométriques algébriques
- Codes Reed–Muller
- Codes parfaits
Les codes blocs sont liés au problème de l’emballage de la sphère, qui a reçu une certaine attention au fil des ans. En deux dimensions, il est facile à visualiser. Prenez un tas de sous à plat sur la table et poussez-les ensemble. Le résultat est un motif hexagonal comme un nid d’abeille. Mais les codes de blocs reposent sur plus de dimensions qui ne peuvent pas être facilement visualisées. Le puissant code de Golay (24,12) utilisé dans les communications spatiales utilise 24 dimensions. Si elles sont utilisées comme un code binaire (ce qui est généralement le cas), les dimensions font référence à la longueur du mot de code tel que défini ci-dessus.
La théorie du codage utilise le modèle de sphère à N dimensions. Par exemple, combien de centimes peuvent être emballés dans un cercle sur une table, ou en 3 dimensions, combien de billes peuvent être emballées dans un globe. Autres considérations entrez le choix d’un code. Par exemple, un emballage hexagonal dans la contrainte d’une boîte rectangulaire laissera un espace vide aux coins. À mesure que les dimensions s’agrandissent, le pourcentage d’espace vide diminue. Mais à certaines dimensions, l’emballage utilise tout l’espace et ces codes sont les codes dits « parfaits ». Les seuls codes parfaits non triviaux et utiles sont les codes de Hamming distance-3 avec des paramètres satisfaisants (2r-1, 2r-1-r, 3), et les codes de Golay binaires et ternaires.
Une autre propriété de code est le nombre de voisins qu’un seul mot de code peut avoir.Encore une fois, considérez les sous comme un exemple. D’abord, nous emballons les sous dans une grille rectangulaire. Chaque centime aura 4 voisins proches (et 4 dans les coins les plus éloignés). Dans un hexagone, chaque centime aura 6 voisins proches. Lorsque nous augmentons les dimensions, le nombre de voisins proches augmente très rapidement. Le résultat est que le nombre de façons pour le bruit de faire en sorte que le récepteur choisisse un voisin (d’où une erreur) augmente également. C’est une limitation fondamentale des codes de bloc, et même de tous les codes. Il peut être plus difficile de causer une erreur à un seul voisin, mais le nombre de voisins peut être suffisamment important pour que la probabilité d’erreur totale en souffre réellement.
Les propriétés des codes de blocs linéaires sont utilisées dans de nombreuses applications. Par exemple, la propriété d’unicité syndrome-coset des codes de blocs linéaires est utilisée dans la mise en forme de treillis, l’un des codes de mise en forme les plus connus.
Code de convolution
L’idée derrière un code de convolution est de faire de chaque symbole de mot de code la somme pondérée des différents symboles de message d’entrée. C’est comme la convolution utilisée dans les systèmes LTI pour trouver la sortie d’un système, lorsque vous connaissez l’entrée et la réponse impulsionnelle.
On trouve donc généralement la sortie du codeur convolutif du système, qui est la convolution du bit d’entrée, par rapport aux états du codeur de convolution, registres.
Fondamentalement, les codes convolutifs n’offrent pas plus de protection contre le bruit qu’un code bloc équivalent. Dans de nombreux cas, ils offrent généralement une plus grande simplicité de mise en oeuvre sur un code bloc de puissance égale. Le codeur est généralement un circuit simple qui a une mémoire d’état et une logique de rétroaction, normalement des portes XOR. Le décodeur peut être implémenté dans un logiciel ou un micrologiciel.
L’algorithme de Viterbi est l’algorithme optimal utilisé pour décoder les codes convolutionnels. Il existe des simplifications pour réduire la charge de calcul. Ils comptent sur la recherche uniquement des chemins les plus probables. Bien qu’ils ne soient pas optimaux, ils se sont généralement avérés donner de bons résultats dans des environnements à faible bruit.
Les codes convolutifs sont utilisés dans les modems à bande vocale (V.32, V.17, V.34) et dans les téléphones mobiles GSM, ainsi que dans les appareils de communication par satellite et militaires.