Algorithmes de détection et de correction d'erreur. Codes Reed-Solomon. Exemple simple

L'avantage de l'utilisation des codes Reda-Solomon est que la probabilité d'épargner des erreurs dans des données décodées est généralement beaucoup moins que la probabilité d'erreurs si les codes du Solomon Reda ne sont pas utilisés. Ceci est souvent appelé codage gagnant.

Exemple. Soit un système de télécommunication numérique qui fonctionne avec BER (ratio d'erreur bit) égal à 10 -9, c'est-à-dire Pas plus de 1 bits sur 10 9 sont transmis avec une erreur. Ce résultat peut être obtenu en augmentant la puissance de l'émetteur ou en appliquant des codes RIDA-SOLOMON (ou d'autres types de correction d'erreur). Algorithme de Reda Solomon Permet au système d'atteindre le niveau BR requis avec une puissance de sortie inférieure de l'émetteur.

Codes de codage et de décodage Architecture Reda Solomon Codes

Le codage et le décodage du Solomon Reda peuvent être effectués du matériel ou des logiciels.

Galua Fini Field Arithmétique

Les codes Reda-Solomon sont basés sur une section spéciale de mathématiques - champoi (GF) ou champs finis. Les actions arithmétiques (+, -, x, /, etc.) au-dessus des éléments du champ final donnent le résultat, ce qui est également un élément de ce champ. Le codeur ou le décodeur du Rydasolon devrait pouvoir effectuer ces opérations arithmétiques. Ces opérations nécessitent des équipements spéciaux ou spécialisés logiciel.

Polynôme

Le mot de code du Solomon Reda est formé avec l'implication d'un polynôme spécial. Tous les mots de code correct doivent être divisés sans équilibre à ces formage polynomial. Forme générale formage polynomial A l'apparence

g (x) \u003d (x - a i) (x - a i + 1) ... (x - a i + 2t)

et le mot de code est formé à l'aide de l'opération

c (x) \u003d g (x) .Je (x)

où g (x) est former des polynômes, I (x) est un bloc d'information, c (x) est un mot de code appelé élément simple du champ.

Exemple. Générateur pour Rs (255, 249)

g (x) \u003d (x - a 0) (x - a 1) (x - a 2) (x - a 3) (x - a 4) (x - a 5) g (x) \u003d x 6 + g 5 x 5 + g 3 x 3 + g 2 x 2 + g 1 x 1 + g 0

Architecture de codeur

Les symboles de parité 2T dans le mot de code Rida-Solomon sont déterminés à partir de la relation suivante:

Vous trouverez ci-dessous le schéma de mise en œuvre du codeur de la version RS (255.249):


Figure. 4.6.

Chacun des 6 registres contient un symbole (8 bits). Les opérateurs arithmétiques effectuent une addition ou une multiplication sur un symbole en tant qu'élément du champ final.

Décodeur d'architecture

Le schéma de décodage général des codes Reda-Solomon est présenté ci-dessous à la Fig. 4.7.


Figure. 4.7.

Désignation:

  • r (x) - le mot de code obtenu
  • SI - Syndromes
  • L (x) - Emplacement d'erreur polynomiale
  • XI - Positions d'erreur
  • Yi - Valeurs d'erreur
  • c (x) - mot de code restauré
  • v - Nombre d'erreurs

Le mot de code obtenu R (x) est le mot de code original (transmis) de code C (x) plus des erreurs:

r (x) \u003d c (x) + e (x)

Le décodeur REDA Solomon tente de déterminer la position et la valeur de l'erreur pour t erreurs T (ou 2t perte) et corriger les erreurs et les pertes.

Calcul du syndrome

Le calcul du syndrome est similaire au calcul de la parité. Le mot de code de Solomon Reda a 2T sindromeCela dépend uniquement des erreurs (et non des mots de code transmis). Les syndromes peuvent être calculés par substitution 2T racines formage polynomial G (x) dans r (x).

Trouver des postes d'erreur symbolique

Cela se fait en résolvant le système d'équations avec T inconnu. Il existe plusieurs algorithmes rapides pour résoudre cette tâche. Ces algorithmes utilisent les caractéristiques de la structure de la matrice des codes de rhyrasolone et réduisent vivement la puissance informatique nécessaire. Cela se fait en deux étapes.

1. Définition de l'emplacement d'erreur polynomiale.

Cela peut être fait à l'aide de l'algorithme Berlekamp-Massey ou d'un algorithme d'euclide. L'algorithme d'euklide est utilisé plus souvent dans la pratique, car il est plus facile de le mettre en œuvre, mais l'algorithme Berlekamp-Massey vous permet d'obtenir une mise en œuvre plus efficace des équipements et des programmes.

2. Trouver les racines de ce polynôme. Ceci est fait avec l'attraction de l'algorithme de recherche de chien.

Trouver des valeurs d'erreur symbolique

Il doit également résoudre le système d'équations avec T inconnu. Pour résoudre, un algorithme de Forney rapide est utilisé.

Mise en œuvre du codeur et du décodeur de Rida Solomon. Mise en œuvre du matériel

Il existe plusieurs implémentations matérielles commerciales. Il existe de nombreux circuits intégrés développés conçus pour coder et décoder des codes Reed-Solomon. Ces IP autorisent un certain niveau de programmation (par exemple, Rs (255, K), où T peut prendre des valeurs de 1 à 16).

Mise en œuvre du logiciel

Jusqu'à récemment, les mises en œuvre du programme dans le "temps réel" nécessitaient trop de puissance de calcul pour presque tous les codes de Solomon Reda. La principale difficulté de la mise en œuvre du programme des codes Reda-Solomon était le fait que les transformateurs usage général Ne supportez pas les opérations arithmétiques pour le champ de Galua. Toutefois, la compilation optimale des programmes associée à une puissance de calcul accrue vous permet d'obtenir des résultats assez acceptables pour des taux de transmission de données relativement élevés.

Les codes Reed-Solomon appartiennent à des codes malheureux, de bloc, de résistance au bruit et peuvent être utilisés dans la zone de stockage d'informations pour éviter la perte. informations endommagées. Je vous avertit que cette approche ne sera pas rationnelle dans de nombreux cas, mais vous permettra de mettre en œuvre le codage résistant au bruit des données avec le pourcentage de variation des informations récupérées.

Lorsque vous travaillez avec des codes Reed-Solomon, le pourcentage de symboles redondants est 2 fois plus grand que les données récupérables. Je vais expliquer sur l'exemple: si nous avons une séquence de 10 caractères et que nous voulons pouvoir restaurer des erreurs à 3 d'entre elles (30% des informations source), nous devons stocker 10 + 3 * 2 \u003d 16 caractères. Appelons chaque variable: N - 10, le nombre de symboles d'information; F - 3, le nombre de caractères récupérables; G - 16, la longueur de la séquence codée. Ainsi, la formule peut être écrite comme suit: g \u003d n + f * 2. Ces mouvements sont plus compacts que les codes d'héming par 1 caractère.

Pour travailler avec des informations lors de l'encodage et du décodage des données, toutes les opérations arithmétiques sont effectuées dans les champs de galoa. L'arithmétique dite polynomiale ou l'arithmétique de champs de galois est utilisé. Ainsi, le résultat de toute opération est également un élément de ce champ. Le champ spécifique de Galois consiste en une plage de nombres fixe. La caractéristique de terrain est appelée un nombre simple p. Ordre de champ, c'est-à-dire Le nombre de ses éléments est un degré naturel de la particularité du PM, où M n. Avec M \u003d 1, le champ s'appelle simple. Dans les cas où M\u003e 1, pour former un champ, un degré de génération multiiniode M est nécessaire, un tel champ est appelé élargi. Gf (p m) - désignation de champ de galois.

Pour travailler avec des données numériques, il est naturel d'utiliser p \u003d 2 comme caractéristique de champ. À M \u003d 1, l'élément de la séquence de code sera un peu, avec m \u003d 8 à 8 bits, c'est-à-dire d'octet. Les codes réels du Solomon Reda fonctionnant avec des octets sont les plus courants.

Détail Informations sur l'arithmétique des champs de Galua j'ai publié sur Habrahabr. Dans le même article, nous parlons des applications des champs de Galois pour codage, décodage Codes d'information de Reda Solomon.

Pour la commodité des calculs, je donnerai 2 tables de l'article dédié aux champs de Galois.

Table de multiplication

Degrés de table

Avant de commencer le codage, nous avons décidé avec le champ nécessaire GF (Q), où q \u003d p m. La longueur de la séquence de code doit être Q-1. Ainsi, dans notre cas, avec GF (8), la séquence de code est composée de 7 éléments. Ensuite, vous devez savoir quels articles seront des informations et quels tests (redondants). Au tout début, nous avons parlé du fait que le nombre d'excès de caractères devrait être deux fois plus que le nombre de caractères erronés que nous souhaitons restaurer. S'il est nécessaire de corriger une double erreur (T \u003d 2 - la multiplicité de l'erreur), donc, en conséquence, quatre caractères de contrôle doivent être utilisés. Appliquez ceci à notre exemple: de sept éléments pour corriger une double erreur, quatre redondants, ce qui signifie que trois autres informations sont nécessaires. La séquence de code est la suivante:

C \u003d (C 0, C 1, C 2, C 3, C 4, C 5, C 6), où C 0, C 1, C 2 - Information, C 3, C 4, C 5, C 6 - vérification .

Je veux faire attention au fait que la correction d'une double erreur dans la séquence de code de sept éléments signifie qu'il est possible de faire face à une erreur, dont la probabilité n'est pas supérieure à R OSH \u003d 2 / 7≈0,29. Si la probabilité d'une erreur est plus élevée, vous devez augmenter le nombre de caractères de vérification, sinon vous ne pouvez pas restaurer les informations déformées de toute façon.

Encoder la séquence C \u003d (4, 6, 7, 0, 0, 0, 0, 0), les quatre derniers symboles sont des contrôles, sont zéro.

Imaginez notre séquence en tant que polynôme:

C (x) \u003d 4 x x 0 + 6 x x 1 + 7 x x 2 + 0 x + 0 + 0 x x 4 + 0 x x 5 + 0 x x 6 \u003d 4 + 6 x + 7 x 2

Le codage est effectué à l'aide de la conversion de Fourier inverse discret (IDFT). La formule de codage: C J "\u003d C (z j), où Z \u003d 2 est un élément primitif du champ.

c 0 "\u003d C (2 0) \u003d C (1) \u003d 4 + 6 + 7 \u003d 5
c 1 "\u003d C (2 1) \u003d C (2) \u003d 4 + 6 ∙ 2 + 7 ∙ 4 \u003d 4 + 7 + 1 \u003d 2
c 2 "\u003d C (2 2) \u003d C (4) \u003d 4 + 6 ∙ 4 + 7 ∙ 6 \u003d 4 + 5 + 4 \u003d 5
c 3 "\u003d C (2 3) \u003d C (3) \u003d 4 + 6 ∙ 3 + 7 ∙ 5 \u003d 4 + 1 + 6 \u003d 3
c 4 "\u003d C (2 4) \u003d C (6) \u003d 4 + 6 ∙ 6 + 7 ∙ 2 \u003d 4 + 2 + 5 \u003d 3
c 5 "\u003d C (2 5) \u003d C (7) \u003d 4 + 6 ∙ 7 + 7 ∙ 3 \u003d 4 + 4 + 2 \u003d 2
c 6 "\u003d C (2 6) \u003d C (5) \u003d 4 + 6 ∙ 5 + 7 ∙ 7 \u003d 4 + 3 + 3 \u003d 4

Séquence enregistrée: C "\u003d (5,2,5,3,3,2,4). Sous forme de polynôme: C (x) \u003d 5 x 0 + 2 x x 1 + 5 x 2 + 3 x 3 + 3 ∙ x 4 + 2 x x 5 + 4 x x 6 .

Formule pour décodage C J \u003d C "(Z -J).

c 0 \u003d c "(2 0) \u003d C" (1) \u003d 5 + 2 + 5 + 3 + 3 + 2 + 4 \u003d 4
c 1 \u003d c "(2 -1) \u003d C" (5) \u003d 5 + 2 ∙ 5 + 5 ∙ 7 + 3 ∙ 6 + 3 ∙ 3 + 2 4 + 4 + 4 2 \u003d 5 + 1 + 6 + 1 + 5 + 3 + 3 \u003d 6
c 2 \u003d C "(2 -2) \u003d C" (7) \u003d ⋯ \u003d 7
c 3 \u003d C "(2 -3) \u003d C" (6) \u003d ⋯ \u003d 0
c 4 \u003d c "(2 -4) \u003d c" (3) \u003d ⋯ \u003d 0
c 5 \u003d c "(2 -5) \u003d C" (4) \u003d ⋯ \u003d 0
c 6 \u003d c "(2 -6) \u003d c" (2) \u003d ⋯ \u003d 0

Pendant le décodage, une séquence (4, 6, 7, 0, 0, 0, 0, 0) a été obtenue, ce qui correspond à la première. Pour vérifier si la distorsion de l'information s'est produite suffisamment pour regarder des caractères redondants. S'ils sont toujours nuls, il n'y a aucune erreur.

Une erreur est une autre séquence cumulée avec codé. Supposons que l'erreur de vecteur ait le formulaire: F "\u003d (0, 0, 5, 0, 3, 0, 0), puis la séquence de code avec une erreur:

C F "\u003d C" + F "\u003d (5,2,0,3,0,2,4)

Essayons de décoder le mot de code obtenu: C F "\u003d 5 x 0 + 2 x x 1 + 0 x x 2 + 3 ∙ x 3 + 0 x x 4 + 2 x x 5 + 4 x x 6 \u003d 5 + 2 x 1 + 3 ∙ x 3 + 2 x x 5 + 4 x x 6

C 0 F \u003d C "(2 0) \u003d C" (1) \u003d 5 + 2 + 0 + 3 + 0 + 2 + 4 \u003d 2
c 0 F \u003d C "(2 -1) \u003d C" (5) \u003d 5 + 2 ∙ 5 + 3 ∙ 6 + 2 4 + 4 + 4 ∙ 2 \u003d 5 + 1 + 1 \u003d 5
c 0 F \u003d C "(2 -2) \u003d C" (7) \u003d 5 + 2 ∙ 7 + 3 ∙ 2 + 2 ∙ 6 + 4 ∙ 4 \u003d 5 + 5 + 6 + 7 + 6 \u003d 7
c 0 F \u003d C "(2 -3) \u003d C" (6) \u003d 5 + 2 ∙ 6 + 3 ∙ 7 + 2 ∙ 5 + 4 ∙ 3 \u003d 5 + 7 + 2 + 1 + 7 \u003d 6
c 0 F \u003d C "(2 -4) \u003d C" (3) \u003d 5 + 2 ∙ 3 \u200b\u200b+ 3 ∙ 4 + 2 2 + 4 + 4 ∙ 6 \u003d 5 + 6 + 7 + 4 + 5 \u003d 5
c 0 F \u003d C "(2 -5) \u003d C" (4) \u003d 5 + 2 ∙ 4 + 3 ∙ 5 + 2 ∙ 3 \u200b\u200b+ 4 ∙ 7 \u003d 5 + 3 + 4 + 6 + 1 \u003d 5
c 0 F \u003d C "(2 -6) \u003d C" (2) \u003d 5 + 2 ∙ 2 + 3 ∙ 3 + 2 ∙ 7 + 4 ∙ 5 \u003d 5 + 4 + 5 + 5 + 2 \u003d 3

C F \u003d (2, 5, 7, 6, 5, 5, 3) est une séquence décodée. Comme nous le voyons, les quatre derniers éléments ne sont pas égaux à zéro, ce qui, en fait, témoigne de la présence d'une erreur. Pour corriger une erreur, il est d'abord nécessaire de déterminer les positions des caractères déformés. Pour ce faire, il est nécessaire de calculer les localisateurs d'erreur polynomiale dont les racines indiquent la position d'erreur. Dans la forme matricielle par des erreurs de localisateur polynomial ressemblent à L \u003d. Depuis dans notre exemple, nous voulons corriger l'erreur de la multiplicité 2, puis l \u003d.

Boire les quatre derniers caractères - Syndrome d'erreur:

Parmi ceux-ci, nous formons une matrice et une colonne de vecteur nécessaire au calcul de L. sous la forme générale:

Dans notre exemple:

Calculez M -1, en tenant compte du fait que nous travaillons avec la gamme d'arithmétiques de champ de Galua

Juste au cas où, vous pouvez vérifier l'exactitude des calculs:

Écrivez L sous forme de polynôme:

Calculez les racines du polynôme obtenu par simple prospérité:

L (2 0) \u003d L (1) \u003d 1 + 4 + 2 \u003d 7
L (2 1) \u003d L (2) \u003d 1 + 4 ∙ 2 + 2 ∙ 4 \u003d 1
L (2 2) \u003d L (4) \u003d 1 + 4 ∙ 4 + 2 ∙ 6 \u003d 1 + 6 + 7 \u003d 0
L (2 3) \u003d L (3) \u003d 1 + 4 ∙ 3 + 2 ∙ 5 \u003d 1 + 7 + 1 \u003d 7
L (2 4) \u003d L (6) \u003d 1 + 4 ∙ 6 + 2 ∙ 2 \u003d 1 + 5 + 4 \u003d 0
L (2 5) \u003d L (7) \u003d 1 + 4 ∙ 7 + 2 ∙ 3 \u200b\u200b\u003d 1 + 1 + 6 \u003d 6
L (2 6) \u003d L (5) \u003d 1 + 4 ∙ 5 + 2 ∙ 7 \u003d 1 + 2 + 5 \u003d 2

Reçu que les erreurs sont présentes dans C 2 "et C 4".

Maintenant, il est nécessaire de trouver les valeurs correctes. Pour commencer, nous donnons L (x) à la forme normale:

L (x) \u003d 1 + 4x + 2x 2 | 5

Nous écrivons le vecteur d'erreur (les 4 derniers caractères - les valeurs du syndrome). Sur les lieux de symboles de l'information - les signes de la question et doivent être calculés.

Nous effectuons une convolution pour F 0, F 1, F 2, puis calculez leurs valeurs:

Reçu f \u003d (6, 3, 0, 6, 5, 5, 3), étant donné que l'erreur a été résumée avec une séquence codée, nous produirons une opération de codage sur F:

F (x) \u003d 6 + 3x + 6x 3 + 5x 4 + 5x 5 + 3x 6

Puisque nous connaissons déjà la position d'erreurs, il suffit de calculer uniquement F 2 "\u003d F (2 2) et F 4" \u003d F (2 4), tous les autres seront nuls. Mais pour m'assurer de cela, considérez honnêtement tout le sens:

f 0 "\u003d F (2 0) \u003d F (1) \u003d 6 + 3 + 6 + 5 + 5 + 3 \u003d 0
f 1 "\u003d F (2 1) \u003d F (2) \u003d 6 + 3 ∙ 2 + 6 ∙ 3 + 5 ∙ 6 + 5 ∙ 7 + 3 ∙ 5 \u003d 6 + 6 + 1 + 3 + 6 + 4 \u003d 0
f 2 "\u003d F (2 2) \u003d F (4) \u003d 6 + 3 4 + 6 ∙ 5 + 5 ∙ 2 + 5 ∙ 3 + 3 ∙ 7 \u003d 6 + 7 + 3 + 1 + 4 + 2 \u003d 5
f 3 "\u003d F (2 3) \u003d F (3) \u003d 6 + 3 ∙ 3 + 6 ∙ 4 + 5 ∙ 7 + 5 ∙ 2 + 3 ∙ 6 \u003d 6 + 5 + 5 + 6 + 1 + 1 \u003d 0
f 4 "\u003d F (2 4) \u003d F (6) \u003d 6 + 3 ∙ 6 + 6 ∙ 7 + 5 ∙ 4 + 5 ∙ 5 + 3 3 ∙ 3 \u003d 6 + 1 + 4 + 2 + 7 + 5 \u003d 3
f 5 "\u003d F (2 5) \u003d F (7) \u003d 6 + 3 ∙ 7 + 6 ∙ 2 + 5 ∙ 5 + 5 ∙ 6 + 3 ∙ 4 \u003d 6 + 2 + 7 + 7 + 3 + 7 \u003d 0
f 6 "\u003d F (2 6) \u003d F (5) \u003d 6 + 3 ∙ 5 + 6 ∙ 6 + 5 ∙ 3 + 5 4 + 3 3 ∙ 2 \u003d 6 + 4 + 2 + 4 + 2 + 6 \u003d 0

Reçu f "\u003d (0, 0, 5, 0, 3, 0, 0). Déplacement du vecteur d'erreur avec une séquence de code déformée:

C "\u003d c f" + f "\u003d (5,2,0,3,0,2,4) + (0,0,5,0,3,0,0) \u003d (5,2,5,3, 3,2,4)

En conséquence, la séquence codée correcte a été obtenue lors du décodage, nous obtenons les bons symboles d'information.


Mots clés:

Grâce aux codes REDA-SOLOMON, vous pouvez lire un CD avec plusieurs rayures ou transférer des informations dans une connexion avec un grand nombre d'interférences. En moyenne, la redondance du code pour le CD (c'est-à-dire caractères supplémentairesGrâce aux quelles informations peuvent être restaurées) est d'environ 25%. Vous pouvez restaurer la quantité de données égale à la moitié de redondant. Si la capacité du disque est de 700 Mo, elle s'avère, elle s'avère théoriquement de restaurer jusqu'à 87,5 Mo sur 700. Dans ce cas, nous n'avons pas besoin de savoir quel symbole est transmis avec une erreur. Il convient de noter que, ensemble avec le codage, utilise Mewing lorsque les octets de différents blocs sont mélangés dans un certain ordre, ce qui vous permet de lire des disques avec des dégâts importants, localisés les uns des autres (par exemple, des rayures profondes), car après l'opération , la confiture inverse, des dégâts étendus se transforme en erreurs seulement dans une variété de blocs de code réduits.

Prenons un exemple simple et essayons d'aller tout le chemin - du codage jusqu'à ce que les données source soient obtenues au récepteur. Devons-nous transmettre le mot de code C composé de deux nombres - 3 et 1 dans une telle séquence, c'est-à-dire Nous devons transférer le vecteur C \u003d (3.1). Supposons que nous voulions corriger un maximum de deux erreurs, ne pas savoir exactement où ils peuvent apparaître. Pour ce faire, vous devez prendre 2 * 2 \u003d 4 symboles redondants. Nous les écrivons avec des zéros dans notre mot, c'est-à-dire C est maintenant égal (3,1,0,0,0). Ensuite, vous devez traiter un peu de fonctionnalités mathématiques.

Champs de Galua

Beaucoup connaissent l'histoire romantique sur un jeune homme qui n'a vécu que 20 ans et une fois que la nuit a écrit sa théorie mathématique et, le matin, il a été tué pour des duels. C'est l'évariateur de Galua. Il a également essayé d'entrer plusieurs fois dans des universités, mais les examinateurs ne comprenaient pas ses décisions et il a échoué aux examens. Je devais apprendre lui-même. Ni Gauss, ni Poisson, qu'il a envoyé son travail, ne les a également pas compris, mais sa théorie était parfaite dans les années 60 du XXe siècle et est activement utilisé à notre époque pour les calculs théoriques dans de nouvelles sections de mathématiques et de pratique .

Nous utiliserons des conclusions assez simples, à la suite de sa théorie du groupe. L'idée principale est le nombre final (et non infini) de nombres appelé le champ, avec lequel toutes les opérations mathématiques connues peuvent être effectuées. Le nombre de chiffres dans le champ doit être un nombre simple dans une mesure naturelle, mais dans le cas de simples codes de Rida-Solomon, considéré ici, la dimension de champ est un nombre simple à degré 1. Dans les codes étendus du Solomon Reda degré de plus de 1.
Par exemple, pour la dimension de champ de galois 7, c'est-à-dire GF (7), toutes les opérations mathématiques se produiront avec des chiffres 0,1,2,3,4,5,6.
Exemple d'ajout: 1 + 2 \u003d 3; 4 + 5 \u003d 9 MOD 7 \u003d 2. L'ajout dans les champs de Galoah est une addition de modulus. La soustraction et la multiplication sont également effectuées dans le module.
Un exemple de division: 5/6 \u003d 30/36 \u003d 30 / (36 MOD 7) \u003d 30/1 \u003d 30 \u003d 30 MOD 7 \u003d 2.
La construction du degré est similaire à la multiplication.

La propriété utile se trouve dans les champs Halua lors de son érection. Comme vous pouvez le constater s'il est élevé au degré de numéro 3 ou 5 dans le champ de Galois GF (7) sélectionné, il existe tous des éléments du champ de galoi actuel, sauf 0. Ces numéros sont appelés éléments primitifs. Dans les codes de Reed-Solomon, le plus grand élément primitif du champ choisi de Galua est généralement utilisé. Pour GF (7), il est 5.
On peut noter que les chiffres dans les champs de Galua sont simultanément les abstractions qui ont une connexion plus étroite entre eux que les chiffres habituels.

Interpolation

Comme beaucoup de gens le savent de l'année scolaire, l'interpolation est de trouver un degré minimum dans cet ensemble de points. Par exemple, il y a trois points et trois valeurs d'une sorte de fonction à ces points. Vous pouvez trouver une fonctionnalité qui répond à ces données d'entrée. Par exemple, il est très facile de faire avec la transformation de la Lagrange. Une fois la fonction trouvée, vous pouvez construire quelques points de plus, et ces points seront associés à trois points de départ. La formation d'excès de symboles lors de l'encodage est une opération similaire à celle d'une interpolation.

Transformation de Fourier discrète inverse (IDFT)

La transformation de Fourier, ainsi que la théorie des groupes de Galua, constitue un autre pic de pensée mathématique, qui est actuellement utilisé dans de nombreux domaines. Certains croient même que la transformation de Fourier décrit l'une des lois fondamentales de l'univers. L'essence principale: tout signal non périodique de la longueur finale peut être représenté comme la somme de la sinusoïde de différentes fréquences et phases, il est alors possible de reconstruire le signal source. Cependant, ce n'est pas la seule description. Les numéros dans les champs de galois ressemblent à la différence dans les différentes fréquences de la sinusoïde, de sorte que la transformation de Fourier peut également être utilisée pour eux.
La transformation discrète de Fourier est une formule de transformation de Fourier pour des valeurs discrètes. La transformation a deux directions - directes et inverse. La transformation inverse est plus facile mathématiquement, alors codifiez le mot c \u003d (3,1,0,0,0) avec elle. Les deux premiers symboles sont des informations, les quatre derniers sont redondants et toujours égaux à 0.
Nous écrivons le mot de code avec le polynôme: C \u003d 3 * x 0 + 1 * x 1 + 0 * x 2 + ... \u003d 3 + x. En tant que champ de galois, nous prenons le gf (7) mentionné, où l'élément primitif \u003d 5. Faire une ligne de façade est les valeurs du polynôme C pour un élément primitif z de différents degrés. Formule IDFT: C J \u003d C (z J). C'est-à-dire que nous trouvons les valeurs de la fonction C (z), où J est les éléments du champ Galois GF (7). Nous calculons à J \u003d N-2 \u003d 7-2 \u003d 5 degrés. En regardant la table de degrés, vous pouvez deviner pourquoi: en sixième, la valeur est à nouveau 1, c'est-à-dire Il est répété à la suite de laquelle il serait impossible de déterminer quel degré a été érigé - en 6ème ou 0.
C 0 \u003d C (z 0) \u003d 3 + 1 * Z 0 \u003d 3 + 1 * 5 0 \u003d 4
C 1 \u003d C (Z 1) \u003d 3 + 1 * Z 1 \u003d 8 \u003d 1
C 2 \u003d c (z 2) \u003d 3 + 1 * z 2 \u003d 0

Ainsi, avec (3,1,0,0,0,0) \u003d\u003e C (4,1,0,2,5,6).

Nous transmettons le mot c (4,1,2,5,6).

Erreur

Une erreur est un autre mot qui est résumé avec le transmis. Par exemple, une erreur F \u003d (0,0,0,2,6,6). Si vous faites C + F, nous obtenons avec F (4,1,5,5).

Transformation directe de Fourier (DFT). Décodage. Syndrome

Au récepteur, nous avons eu le mot C + F \u003d C F (4,1,5,5,5). Comment vérifier s'il y avait des erreurs pendant la transmission? On sait que nous avons codé des informations utilisant IDFT dans GF (7). DFT (transformation de Fourier discrète) est une conversion, inverse Idft. L'avoir fait, vous pouvez obtenir les informations originales et quatre zéro (c'est-à-dire avec (3,1,0,0,0,0,0)), au cas où il n'y avait pas d'erreurs. Si les erreurs étaient, alors au lieu de ces quatre zéros, il y aura d'autres numéros. Nous faisons DFT pour avec F et vérifie s'il y a des erreurs. Formule DFT: avec K \u003d N -1 * C (Z -KJ). L'élément primitif Z \u003d 5 des champs GF (7) est toujours utilisé.
C 0 \u003d C (5 -0 * J) / 6 \u003d (4 * 5 -0 * 0 + 1 * 5 -1 * 0 + 0 * 5 -2 * 0 + 4 * 5 -3 * 0 + 5 * 5 -4 * 0 + 5 * 5 -5 * 0) / 6 \u003d (4 + 1 + 4 + 0 + 5 + 5) / 6 \u003d 19/6 \u003d 5/6 \u003d 30/36 \u003d 30 \u003d 2;
C 1 \u003d C (5 -1 * J) / 6 \u003d (4 * 5 -0 * 1 + 1 * 5 -1 * 1 + 0 * 5 -2 * 1 + 4 * 5 -3 * 1 + 5 * 5 -4 * 1 + 5 * 5 -5 * 1) / 6 \u003d (4 + 3/15 + 24/750 + 20/2500 + 25/15625) / 6 \u003d (4 + 3 + 24 + 20 + 25) / 6 \u003d 76/6 \u003d 456/36 \u003d 456 \u003d 1;
C 2 \u003d C (5 -2 * J) / 6 \u003d (4 * 5 -0 * 2 + 1 * 5 -1 * 2 + 0 * 5 -2 * 2 + 4 * 5 -3 * 2 + 5 * 5 -4 * 2 + 5 * 5 -5 * 2) / 6 \u003d (4 + 2 + 4 + 10 + 20) / 6 \u003d 40/6 \u003d 240/36 \u003d 240 \u003d 2;

avec f (4,1,0,5,5) \u003d\u003e c f (2,1, 2,1,0,5 ). Les caractères sélectionnés seraient des zéros s'il n'y avait pas d'erreurs. Maintenant, il est clair que l'erreur était. Dans ce cas, les symboles de 2,1,0,5 sont appelés syndrome d'erreur.

ALGORITHM BERLECAMPAMA-MESTI pour calculer la position d'erreur

Pour corriger l'erreur, vous devez savoir quels caractères sont transmis avec une erreur. À ce stade, il est calculé là où il y a des caractères erronés, combien d'erreurs étaient, et il est également possible de réparer un tel certain nombre d'erreurs.
L'algorithme Berekampa-Messi est engagé dans une recherche polynomiale qui, lorsqu'il multiplie une matrice spéciale, préparé à partir des numéros de syndrome (exemple ci-dessous), donnera un vecteur zéro. La preuve de l'algorithme montre que les racines de ce polynôme contiennent des informations sur les positions des caractères avec des erreurs dans le code de texte reçu.
Comme quantité maximale Les erreurs pour le cas à l'étude peuvent être 2, nous écrivons la formule du polynôme souhaité sous forme de matrice pour deux erreurs (degré polynomial 2): \u200b\u200bg \u003d.
Maintenant, nous écrivons le syndrome (2,1,0,5) dans le format de la matrice de Töpliza. Si vous regardez le syndrome et la matrice résultante, vous remarquerez immédiatement le principe de création d'une telle matrice. La dimension de la matrice est due au polynôme R, désigné ci-dessus.

L'équation à résoudre:

Les éléments sous les signes de la question n'affectent pas le résultat. Il est nécessaire de trouver G1 et G2, ils sont responsables des positions d'erreur. Nous augmenterons progressivement la dimension avec laquelle nous travaillons. Nous commençons par 1 et du bord inférieur gauche de la matrice (vert marqué) avec une dimension minimale 1x1.

Augmenter la dimension. Supposons qu'il n'y ait aucune erreur dans la position de G1. Alors g1 \u003d 0.

Nous devons obtenir à droite, ou au moins un 0 en premier lieu pour augmenter la dimension des calculs, mais en premier lieu. Nous pouvons choisir une telle valeur pour G1 (qui est maintenant 0) à droite de Obtenez le requis 0. Le processus de sélection G1 dans l'algorithme est optimisé. Nous écrivons les deux équations considérées par votre et retirons également la troisième équation, qui calcule M1. Les fleurs montrent ce qui se passe.

Ceux. Г1 \u003d 3. Je vous rappelle que le comptage va à GF (7). Il convient également de noter que la valeur de G1 est temporaire. Pendant les calculs du G2, cela peut changer. Nous considérons le côté droit:

Reçu 0 droit, augmente maintenant la dimension. Nous le supposons par analogie que r2 \u003d 0. Nous utilisons le G1 trouvé \u003d 3.

Tout d'abord, au lieu de la troïka, vous devez obtenir 0. Les actions correspondent à la précédente. Ensuite, sélectionnez la valeur de G2.


Nous écrivons une nouvelle valeur de R2 \u003d 2 à l'équation principale et essayez à nouveau de trouver les valeurs à droite:

Tâche cette chasse Ce n'était que le premier zéro, mais la volonté du deuxième élément de la matrice s'est également révélée être zéro, c'est-à-dire La tâche est résolue. S'il n'était pas zéro, nous aurions une fois de nouveau sélectionné les valeurs (cette fois pour G1 et pour R2), augmentant ainsi la dimension de la sélection. Si vous êtes intéressé par cet algorithme, voici deux autres exemples.
Donc, R1 \u003d 3, G2 \u003d 2. Les valeurs non nulles pour G1 et G2 indiquent qu'il y avait 2 erreurs. Nous écrivons la matrice R sous forme de polynôme: g (z) \u003d 1 + 3x + 2x 2. Racines prenant en compte les degrés de l'élément primitif dans lequel le résultat est obtenu 0:
G (5 3) \u003d 1 + 3 * 6 + 2 * 6 2 \u003d 91 \u003d 13 * 7 \u003d 0.
G (5 5) \u003d 1 + 3 * 3 + 2 * 3 2 \u003d 28 \u003d 0.
Cela signifie que les erreurs dans les positions 3 et 5.
De même, vous pouvez trouver les valeurs restantes pour vous assurer qu'ils ne donneront pas à Zeros:
R \u003d\u003e g (z j) \u003d (3,5,5,0,4.0). Comme vous pouvez le constater, IDFT est utilisé à nouveau dans GF (7).

Correction d'erreur par forn

À l'étape précédente, la position d'erreur a été calculée, il reste maintenant à trouver les bonnes valeurs. Erreurs de décrivant polynôme: g (z) \u003d 1 + 3x + 2x 2. Nous l'écrivons sous forme normale, multipliant par 4 et en utilisant les propriétés de GF (7): g (z) \u003d x 2 + 5x + 4.
La méthode Forn est basée sur l'interpolation de Lagrange et utilise les polynômes que nous avons utilisés dans l'algorithme Berekampa-Messi.
La méthode est en outre calculée par ces symboles qui se tiennent sur des endroits qui ne sont pas liés au syndrome. Ce sont les positions correspondant à des valeurs réelles, cependant, d'autres valeurs sont calculées pour elles, qui sont obtenues à partir de la convolution du syndrome d'erreur et de polynôme. Ces nouvelles valeurs calculées avec le syndrome forment un masque d'erreur. Ensuite, IDFT est en cours d'exécution et le résultat est une erreur directe qui a déjà été résumée avec le mot de code transmis. Il sera déduit du mot résultant et nous obtenons le mot transmis initial. Ensuite, effectuez DFT pour le mot de code transmis et finalement obtenir des informations. Suivant - comme cela arrive dans le contexte de l'exemple à l'étude.

Nous écrivons le vecteur d'erreur F (les 4 derniers caractères - le syndrome, que nous utilisons constamment, deux signes de la question - sur les lieux de symboles d'information, il s'agit d'un masque d'erreur) et nous désignons chaque symbole de la lettre:

Les symboles du polynôme du localisateur de l'erreur G (z) \u003d x2 + 5x + 4 sont notés:
La multiplication du polynôme g sur la matrice Töplits dans le paragraphe précédent était, en fait, le fonctionnement de la convolution cyclique: si les équations linéaires obtenues à partir de la matrice peuvent être constatées que les valeurs extraites du syndrome ( Les valeurs de la matrice Töpliza), de l'équation à l'équation, changent simplement dans des endroits, se déplaçant séquentiellement de manière spécifique, ce qui s'appelle une convolution. J'ai spécifiquement affiché des polynômes F et G les uns des autres au début de ce paragraphe afin que vous puissiez faire des convilios (multiplier l'élément dans un certain ordre), déplacer les polynômes visuellement. Révélant l'équation matricielle du paragraphe précédent et en utilisant les désignations des polynômes F et R, l'introduit juste:
G0 * F4 + G1 * F3 + G2 * F2 \u003d 0
G0 * F5 + G1 * F4 + G2 * F3 \u003d 0
Auparavant, la convolution n'a été effectuée que pour le syndrome, dans la méthode Fori, vous devez faire une convolution pour F0 et F1, et après avoir trouvé leurs valeurs:
G0 * F3 + G1 * F2 + G2 * F1 \u003d 0
G0 * F2 + G1 * F1 + G2 * F0 \u003d 0
F0 \u003d -G0 * F3 - G1 * F2 \u003d 0
F1 \u003d -G0 * F2 - G1 * F1 \u003d 6
C'est-à-dire f \u003d (6,0,1,1,0,5). Nous effectuons l'ifft, car l'erreur résumée avec le mot, qui était sous la forme de ifft codée: F \u003d (0,0,0,2,0,6).
Nous soustrayons l'erreur F du mot de code CF obtenu: (4,1,0,5,5,5) - (0,0,0,2,6) \u003d C (4,1,0,5,5,6)
Nous ferons DFT pour ce mot: C (4,1,0,2,5,6) \u003d\u003e C \u003d (3,1,0,0,0,0). Et voici nos personnages 3 et 1 à transmettre.

Conclusion

Habituellement utilisé des codes étendus de Reda-Solomon, c'est-à-dire que le champ de galoah est un degré de deux (GF (2 m)), par exemple le codage des octets d'informations. Les algorithmes de travail sont similaires à ceux désassemblés dans cet article.
Il existe de nombreuses variétés de l'algorithme en fonction des applications, ainsi que de l'âge de chaque variété et de la société du développeur. L'algorithme plus jeune qu'il n'est plus difficile.

Aussi de nombreux appareils utilisent tables finies Erreurs calculées à l'avance. Sous l'utilisation de l'arithmétique de Galois, le montant final est obtenu erreurs possibles. Cette propriété est utilisée pour réduire la quantité de calculs. Ici, dans le cas où le syndrome s'avère non nul, il est simplement comparé à la table des syndromes erronés possibles.

Le cours de la théorie de codage pour beaucoup est souvent l'un des plus difficiles. Je serai heureux que cet article aidera à comprendre ce sujet plus rapidement.

Laissez q \u003d 2 être la longueur de code requise et la distance minimale α - élément primitif du champ GF (16) et - quatre contrats des degrés de fonctionnement de l'élément α . Ils appartiennent à deux classes cyclotomiques au-dessus du champ GF (2), qui correspondent aux polynômes irréductibles, puis le polynome comporte des éléments comme racines et constitue le polynôme de code PCH générant avec des paramètres (15,7,5) .

Code Reda Solomon

Les codes de la Reda-Solomon sont un cas privé important du MDP, les racines du polynôme dont se trouvent dans le même champ, sur quel code (m \u003d 1) est construit α - élément du champ GF (Q) de l'ordre n. Si un α - primitifarticle, alors sa commande est égale q-1 c'estPuis normalisé par polynôme du degré minimum sur le champ racine dont d-1.dans une rangée de degrés d'élément α , est un générateur du code REDA - Solomon sur le terrain Gf (q).

Où - certains entier (y compris 0 et 1), avec lequel il est parfois possible de simplifier le codeur. S'appuie habituellement. Le degré de polynôme est égal d-1. .

Longueur du code résultant n., distance minimale rÉ.(Distance minimale rÉ.le code linéaire est minimal de toutes les distances de la chimition de toutes paires de mots de code, voir code linéaire). Le code contient r \u003d d - 1 \u003dvérifiez les caractères où indique le degré de polynôme; Nombre de symboles d'information k \u003d n-r \u003d n -d + 1.

De cette façon d \u003d n-k-1et le code Reda - Solomon est code séparé avec une distance maximale.

CODA polynôme c (x) peut être obtenu à partir d'un polynôme d'information m (x),

Propriétés

Code RedA - Salomon sur Gf (q)Formant t. les erreurs nécessitent 2t. vérifiez les caractères et utiliser des packages d'erreur arbitraires longs t. et moins. Selon le théorème sur la limite de ragrer, les codes de Reda Solomon sont optimaux en termes de rapport de la longueur de l'emballage et de la possibilité de corriger des erreurs.

Théorème (frontière de Reigger) . Chaque code de bloc linéaire, fixant la longueur de tous les paquets t.et moins devrait contenir au moins 2 t.vérifiez les caractères.

Correction de plusieurs erreurs

Le code REDA-SOLOMON est l'un des codes les plus puissants qui corrigent plusieurs packages d'erreur. Il est utilisé dans les canaux où les packages d'erreur peuvent être formés de manière si souvent qu'ils peuvent déjà être corrigés à l'aide de codes qui corrigent les erreurs simples.

code RedA - Solomon sur la distance de code de champ peut être considérée comme un code sur le champ Gf (q)qui peut corriger toute combinaison d'erreurs axées dans t. ou moins de blocs de m.symboles. Le plus grand nombre de blocs de longueur m.qui peut affecter le paquet de longueur où ne dépasse pas donc le code qui peut corriger t.blocs d'erreur, peut toujours réparer toute combinaison de p.forfaits de longueur générale l., si un

Un exemple de construction:

16-Rica (15,11) RedA Code - Salomon

Laisser être t.= 2,l.0 \u003d 1. Alors

g.(x.) = (x.− α)( x.- α2) ( x.- α3) ( x.- α4) \u003d x.4 + α13 x.3 + α6. x.2 + α3. x.+ α10.

Pouvoir g.(x.) égal à 4, n.k.\u003d 4 I. k.\u003d 11. Chaque élément du champ GF (16) peut être comparé 4 bits. Le polynôme d'information est une séquence de 11 caractères de GF (16), ce qui équivaut à 44 bits, et l'ensemble du mot de code est un ensemble de 60 bits.

Codage

Dans l'opération de codage, le polynôme d'information est multiplié par le polynôme générateur. Multiplication du mot original S.longueur k.sur le polynôme irréductible avec un codage systématique peut être effectué comme suit:

· Au premier mot est attribué à 2 t.zéros, il s'avère être polynom

· Ce polynôme est divisé en polynôme soufflant G., il y a un résidu R,

· Cet équilibre sera le code correctif du Reda - Solomon, il est attribué au bloc source des caractères. Le mot de code résultant

Le codeur est construit à partir de registres de cisaillement, d'additionneurs et de multiplicateurs. Le registre de cisaillement consiste en des cellules de mémoire, chacune ayant un élément du champ de galoa.

Décodage

· Calcule le syndrome d'erreur

· Construit des erreurs polynônes

· Convient aux racines de ce polynôme

· Détermine la nature de l'erreur

· Corrige les erreurs

Calcul du syndrome d'erreur

Le calcul du syndrome d'erreur est effectué par le décodeur syndromique, qui divise le mot de code sur le polynôme générateur. Si le solde se produit pendant la division, le mot a une erreur. La balance de la division est un syndrome d'erreur.

Construire une erreur polynomiale

Le syndrome d'erreur calculé n'indique pas la position des erreurs. Le degré du polynôme du syndrome est de 2 t.beaucoup moins de mots de code n.. Pour obtenir une conformité entre l'erreur et sa position dans le message est construite par des erreurs polynomiales. Des erreurs polynomiales sont implémentées à l'aide de l'algorithme Berlekampa - Messi, ou à l'aide de l'algorithme d'euclide. L'algorithme Euclidée a une implémentation simple, mais nécessite des coûts importants des ressources. Par conséquent, un algorithme plus complexe, mais moins coûteux de Berlekampa - Messi est utilisé. Les coefficients du polynôme trouvé correspondent directement aux coefficients de caractères erronés dans le mot de code.

Trouver des racines

À ce stade, les racines de l'erreur polynomiale sont recherchées pour déterminer la position des caractères déformés dans le mot de code. Il est mis en œuvre à l'aide de la procédure Chan, équivalente à l'accouplement complet. Dans des erreurs polynomiales, toutes les valeurs possibles sont substituées séquentiellement lorsque le polynomique est dessiné à zéro - les racines sont trouvées.

Définition de la nature de l'erreur et de sa correction

Selon le syndrome d'erreur et les racines polynomiales trouvées à l'aide de l'algorithme de foren, la nature de l'erreur est déterminée et le masque des caractères déformés est construit. Ce masque est superposé au mot code à l'aide de l'opération XOR et des caractères déformés sont restaurés. Après cela, les caractères de test sont supprimés et un mot d'information restauré est obtenu.

Sélection d'un polynôme dans le code cyclique

Génération de polynomial cyclique ( n, K.) Code C.appelé de tels polynomes non nuls:

de C., dont le degré est le plus petit et le coefficient de degré senior 1

Théorème 1.

Si un C.- cyclique (N, k)le code et son polynôme générateur, alors le degré est égal à chaque mot de code peut être le seul moyen présenté sous la forme

où degré m (x) Moins ou égal k-1

Théorème 2.

Cyclique générateur de polyan ( n, K.) Le code est un diviseur bin

Corollaire: ainsi, dans la qualité du polynôme générateur, vous pouvez choisir n'importe quel polynôme, le degré de diviseur de polynôme sélectionné déterminera le nombre de symboles de vérification. r,nombre de symboles d'information

Coder (décodeur) Witerby

L'essence de la méthode.

Le meilleur schéma de décodage des codes correctifs décodage par le procédé de probabilité maximale lorsque le décodeur définit un ensemble de probabilités conditionnelles de la correspondance à tous les vecteurs de code possibles et la solution prend en faveur du mot de code correspondant au maximum.

Pour un canal symétrique binaire sans mémoire (canal dans lequel les probabilités de transmission 0 et 1, ainsi que les probabilités d'erreurs de type 0 -\u003e 1 et 1 -\u003e 0 même, des erreurs de j.-M I. jE.- Symboles de code indépendant) Le décodeur véridique maximum est réduit au décodeur de l'ourchie minimum de la distance. Ce dernier calcule la distance d'hémissage entre la séquence acceptée ret tous les vecteurs de code possibles et rend une décision en faveur du vecteur qui s'avère être plus proche de l'adoption. Naturellement, en général, un tel décodeur s'avère très complexe et pour les grandes tailles de codes. n. et k. pratiquement non réalisé. La structure caractéristique des codes convolutionnels (répétabilité de la structure en dehors de la fenêtre n. ) Vous permet de créer un décodeur tout à fait acceptable du maximum de vraisemblance.

Principe du décodeur de travail

Le segment de segment arrive sur l'entrée du décodeur r lena b. Dépassement de la longueur du code n. . Nom b. fenêtre de décodage. Comparez tous les mots de code de ce code (dans la longueur du segment b. ) Avec un mot accepté et choisissez un mot de code plus proche de l'adoption. La première image d'information du mot code sélectionné est adoptée comme une estimation du cadre d'information du mot décodé. Après cela, le décodeur introduit n.0 nouveaux personnages et présenté précédemment le plus ancien n.0 Les SMIS sont réinitialisés et le processus est répété pour déterminer la prochaine image d'information. Ainsi, le décodeur Viterbi traite régulièrement le cadre derrière le cadre, se déplaçant le long de la grille similaire au codeur utilisé. À chaque moment de temps, le décodeur ne sait pas quel nœud est l'encodeur et n'essaie pas de le décoder. Au lieu de cela, le décodeur de la séquence adoptée détermine le chemin le plus crédible à chaque nœud et détermine la distance entre chaque passage et la séquence acceptée. Cette distance s'appelle la mesure de déplacement du chemin. Comme estimation de la séquence adoptée, un segment est sélectionné ayant la plus petite mesure de divergence. Le chemin avec la plus petite mesure de divergence s'appelle les survivants.

Dans les systèmes modernes télévision numérique Pour assurer une transmission sans bruit des signaux de télévision numériques sur la chaîne radio, le plus parfait reda Solomon codes(Reed-Solomon), nécessitant l'ajout de deux caractères de contrôle par erreur unique corrigée. Les codes Reed-Solomon ont des propriétés correctives élevées, elles ont développé des méthodes de codage relativement simples et constructives. Les codes Reed-Solomon ne sont pas binaires. Cela doit être compris en ce sens que les symboles des mots de code ne sont pas des signes binaires, mais des éléments d'un ensemble de nombres constitué de plus de deux caractères (bien entendu, chaque symbole est remplacé par une combinaison binaire correspondante).

Reed-Solomon Codes liés à la classe codes cycliquesformer un sous-groupe codes de blocs. Elles sont obtenues à partir de toute combinaison permise par décalage cyclique de ses rejets. Codage et décodage, détection et correction des erreurs - ce sont des procédures informatiques qui sont correctement implémentées pour les codes cycliques comme actions avec des polynômes et la mise en œuvre sous la forme de appareils numériques sur la base des registres de changement de vitesse avec obligations inverse.

Pour obtenir une idée plus détaillée des codes de Reda Solomon, voyons quel endroit ils occupent dans la classification des codes correctifs (Fig. 4.4).

Les codes correctifs sont divisés en bloc et convolutionnels (continu). Codes de blocsbasé sur le transcodage de la combinaison de code source (bloc) contenant k.symboles d'information dans la combinaison de code transmis contenant n.>k.symboles. Supplémentaire r = n.k.les caractères ne dépendent que sur k.symboles de la combinaison de code source. Par conséquent, le codage et le décodage sont toujours effectués dans une combinaison de code (bloc). Contrairement à cela dans codes de convolutionnelsle codage et le décodage sont effectués en continu sur la séquence de caractères binaires.

Les codes de bloc sont séparables et indissociables. DANS codes séparablesvous pouvez spécifier dans chaque combinaison de code que les symboles sont informatifs et qui sont vérifiés. DANS codes inséparablesil n'y a pas de telle possibilité.

Prochaine étape de la classification - codes systématiques. Ils se distinguent par le fait qu'ils sont des symboles d'inspection formés à partir de symboles d'information en fonction de certaines règles exprimées par des ratios mathématiques. Par exemple, chaque symbole de test h. p J. Il s'avère une combinaison linéaire de symboles d'information

Figure. 4.4.Lieu de codes de Reda Solomon dans la classification des codes correctifs


- coefficients prenant des valeurs 0 ou 1;
. Le rapport pour la formation d'une vérification des bits pour la vérification de la parité est un cas particulier.

Passons à une connaissance plus détaillée. avec des codes cycliques.

Tout d'abord, nous introduisons un enregistrement de la combinaison de code ou, comme cela est souvent appelé dans la littérature, le vecteur de code sous forme de polynôme. Que la combinaison de code uNE. 0 uNE. 1 uNE. 2 ...uNE. n. -1, où mais 0 - code junior, uNE. n. -1 - Code de code senior. Le polynomique correspondant

,

h.- une variable formelle entrée uniquement pour obtenir une combinaison de code sous la forme d'un polynôme.

Sur les polynômes représentant des combinaisons de code, une opération mathématique de multiplication est déterminée. La particularité de cette opération par rapport aux mensonges généralement acceptés dans le fait que les coefficients sont h.tous les degrés sont résumés par module 2 et les indicateurs degrés h.en multipliant, le module est résumé n., donc h. n. = 1.

Ensuite, nous introduisons le concept produisant du polynôme. Produire une commande polynomiale ( n.k.) peut être polynôme avec un degré plus ancien h.égal n.k.), qui est divisé sans résidu (1 + h. n.). Les combinaisons de code autorisées sont obtenues en multipliant la procédure k. - 1, exprimant des combinaisons de code source, sur la production de polynômes.

Les codes cycliques ont la propriété de base suivante. Si la combinaison de code uNE. 0 uNE. 1 uNE. 2 ...uNE. n. -1 est autorisé, puis la combinaison de code obtenue de celui-ci par décalage cyclique uNE. n. –1 uNE. 0 uNE. 1 ...uNE. n. -2 est également autorisé dans ce code. Lors de l'enregistrement sous forme de polynômes, le fonctionnement du décalage cyclique du mot de code est réduit à la multiplication du polynôme correspondant sur h.compte tenu des règles de l'exécution de l'opération de multiplication.

Code cyclique avec polynôme produisant
construit comme suit.

1. Les polynômes sont pris
,
,
, ...,
.

2. Les combinaisons de code correspondant à ces polynômes sont enregistrées sous forme de chaînes matricielles. G., appelé matrice de production.

3. Un ensemble de combinaisons de code autorisés est formé. Il comprend une combinaison de code zéro, k. Combinaisons de code spécifiés dans la clause 1, ainsi que les sommes de leur toutes sortes de combinaisons. La sommation est basée sur les bits, et chaque catégorie est additionnée par module 2. Le nombre total de combinaisons de code résolues obtenues de cette manière est 2 k. Ce qui correspond au nombre de décharges d'informations du code.

Pour la construction du décodeur, d'abord produits produisant du polynôme
ordre k.pour la construction matrice de fixationN.:

.

Lignes de matrice de fixation N.il y aura des combinaisons de code déterminées par des polynômes
,
, ...,

- Ceci est enregistré dans l'ordre inverse par Polynom
. La matrice de correction a n.colonnes I. n.k.lignes.

Lors du décodage, la combinaison de code adoptée uNE. 0 uNE. 1 uNE. 2 ...uNE. n. -1 multiplié scellaire par chaque chaîne de correction de la matrice. Cette opération peut être enregistrée sous la forme d'une relation:

h. ji. - Éléments j.Les lignes de la matrice N.. Obtenu n.k.nombres c. j. Forme vecteur formantou alors syndrome. S'il n'y a pas d'erreurs, alors tous c. j. \u003d 0. Si une erreur se produit lors de la transmission de cette combinaison de code, certains numéros c. j. Pas égal à 0. Par quels éléments du vecteur correctif différent de zéro, on peut conclure que, dans quelles décharges de la combinaison de code acceptée, il existe une erreur et corrige donc ces erreurs.

Considérons un exemple qui se trouve souvent dans la littérature. Nous construisons un code cyclique avec n.= 7;k.\u003d 4. Pour ce faire, imaginez 1 + h. 7 sous la forme d'un travail:

En algèbre classique, cette égalité est, bien sûr, n'est pas exécuté, mais si elle est utilisée pour apporter ce lieu d'addition d'habitude, l'opération de sommation modulo 2, et lorsque les taux de degré sont plus, le fonctionnement de la sommation du module 7, Ensuite, l'égalité sera juste.

En tant que polynôme producteur, prenez 1 + h.+h. 3. Multipliez-le sur h.,h. 2 I. h. 3 et obtenir des polynômes h.+h. 2 +h. 4 ;h. 2 +h. 3 +h. 5 ;h. 3 +h. 4 +h. 6 Puis écrivez la matrice produite G.et dans chaque ligne de la matrice, la décharge junior de la combinaison de code est située d'abord à gauche.

.

Ensuite, nous formons un ensemble de 15 combinaisons de code autorisés: 00000000, 1101000, 0110100, 0011010, 0001101, 1011100, 0101101, 10111100, 0101110, 00101111111, 10100011, 1000110, 0100011, 1001011. Dans ces dossiers, plus jeunes bits suivants, et anciens - droite.

En alternance des deux premiers êtres, nous obtenons le polynôme de production pour la matrice de correction: 1 + h.+h.+h. quatre. Puis multipliez-le sur h.et h. 2 et obtenez deux autres lignes de cette matrice, ce qui en résulte un tel type (par opposition à la matrice G.ici, les plus jeunes décharges des polynômes correspondants sont situés à droite):

.

Supposons que la combinaison de code 0001101 soit prise en un ensemble admissible. Trouver des œuvres scalaires de cette combinaison de code avec toutes les lignes de la matrice N.:

Laissez maintenant la combinaison de code de 0001100, dans laquelle le dernier bit (senior) contient une erreur. Les œuvres scalaires de la combinaison de code acceptée sur la ligne de matrices de fixation sont les suivantes:

Ainsi, le syndrome (1, 0, 0) est obtenu. Si l'erreur s'avère être dans un autre bit de la combinaison de code, elle éteint un autre syndrome.

L'un des avantages importants des codes cycliques est la possibilité de construire des dispositifs de codage et de décodage sous la forme de registres de cisaillement avec des réactions à travers les additionneurs du module 2.

Différents types de codes cycliques sont obtenus à l'aide de divers polynômes produisant divers polynômes. Il y a une théorie mathématique développée de ce problème. Parmi le grand nombre de codes cycliques au nombre de codes de Bose-Chowudhuri-Hokwingham les plus efficaces et largement utilisés, citons (Bose, Chaudhuri, Hockwinhami, dans le compte russophone des codes), figurent parmi les premières lettres. généraliser les codes d'hémingen cas d'envoi de plusieurs erreurs. Ils forment le meilleur parmi la classe célèbre codes non aléatoirespour les canaux dans lesquels des erreurs de caractères en série se produisent de manière indépendante. Par exemple, le code BCH (63, 44) utilisé dans le système de diffusion numérique par satellite vous permet de corriger 2 ou 3 erreurs, détecter des erreurs 4 ou 5 à chaque bloc de 63 caractères. La vitesse relative de ce code est égale R= 44/63 = 0,698.

L'un des types de codes Tous est les codes de Reda Solomon. Ces codes sont liés à proche codesPuisque les symboles d'entre eux peuvent être des nombres binaires à plusieurs chiffres, tels que des octets entiers. Dans la norme européenne de télévision numérique DVB utilisée code Reda Solomonenregistré comme (204, 188, 8), où 188 est la quantité d'informations d'octets dans le package de transport de transport MPEG-2, le nombre d'octets dans l'emballage après ajout de caractères de test, 8 est la distance minimale de code entre les combinaisons de code valides . Ainsi, des emballages de flux de transport entiers contenant 1888 \u003d 1504 de bits d'information sont pris sous forme de combinaisons de code et les caractères de test vérifiés ajoutent 168 \u003d 128 bits. La vitesse relative de ce code est de 0,92. Ce code REDA Solomon vous permet de corriger efficacement 8 erreurs d'octets dans chaque package de véhicule.

Nous notons également que le code Reda Solomon utilisé dans la diffusion de la télévision numérique est souvent appelé. raccourcir. La signification de ce terme est la suivante. À partir de la théorie des codes Reda-Solomon, il s'ensuit que si le symbole de code est octet, la longueur du mot de code doit être de 255 octets (239 informations et 16 tests). Cependant, le flux de transport PackAgempeg-2 contient 188 octets. Pour correspondre à la taille de l'emballage avec les paramètres de code, 51 informations d'information zéro sont ajoutés avant de coder au début de chaque package de transport et après le codage, ces octets zéro supplémentaires sont supprimés.

Dans le récepteur pour chaque package de transport reçu contenant 204 octets, les syndromes sont calculés et il existe deux polynômes: "localisateur", dont les racines montrent la position des erreurs et le "correcteur" (évaluateur), qui donne la valeur des erreurs. . Les erreurs sont ajustées si possible. Si la correction n'est pas possible (par exemple, l'octet erroneux de plus de 8) Les données de l'emballage ne changent pas et que le paquet lui-même est marqué en installant le drapeau (premier bit après synchrobate), comme contenant des erreurs déraisonnables. Dans les deux cas, 16 excédents d'octets sont éliminés et après décodage, la longueur de l'emballage de transport devient 188 octets.

Avez-vous aimé l'article? Partager avec des amis: