Je souhaite utiliser les codes correcteurs d'erreur de Reed Solomon, j'ai implémenté la partie codage et je suis actuellement dans la partie décodage.
Ma chaîne de décodage est constitué des fonctions suivantes:
1) calcul du syndrome
2) calcul du polynôme de localisations d'erreurs ET calcul du polynôme d'amplitude des erreurs par la méthode d'Euclide
3) Avec la méthode du Chien search je calcul le polynôme d'amplitude des erreurs évalué pour tous les éléments de GF(256) ainsi que la dérivée du polynôme de localisation des erreurs évaluée pour tous les éléments de GF(256)
4) application de l'algorithme de Forney pour calculer la division entre le polynôme d'amplitude et la dérivée du polynôme de localisations des erreurs
5) enfin la correction des erreurs qui nous fournie le mot de code reconstitué
Voici l'adresse de la documentation sur laquelle je m'appuie:
http://www.sweegy.ch/documents/reports/Projet_Diplome_2005%20v1.1-dietler%20.pdf
Ma fonction 2) est fausse parce que lorsque j'introduis 2 erreurs je ne retrouve pas deux zéros dans le polynôme localisateur d'erreurs; en faite mon nombre de zéros dans le poly localisateur d'erreur dépend des valeurs introduites comme erreur or cela devrait être indépendant:
Si pour data[5] je mets 4 j'obtiens trois zéros dans le poly localisateur d'erreur, et pour data[5] je mets 6 je n'obtiens plus de zéro dans le poly localisateur d'erreur!!!
Je pense que mon problème provient de mes calculs dans le corps de Galois:
ATTENTION j'utilise un code RS(39,22)
On a donc 2t = 39-22 = 17
Soit K(x) un polynôme tel que l'addition et la multiplication sont définies comme le + et le * traditionnel. Exemple : K(x) = 7x^2 + 5
Soit L(alpha^i) un polynôme évalué pour tous les éléments de GF(256) c’est à dire i compris entre 1 et 256. L(x) = 2x^2 + x
On a donc L(alpha^1) = 2( (alpha^1) ^2) + (alpha^1)
L(alpha^2) = 2( (alpha^2) ^2) + (alpha^2)
…
L(alpha^256) = 2( (alpha^256) ^2) + (alpha^256)
ATTENTION puisqu’on est dans le corps de Galois l’addition a+b est définie par : a XOR b avec le résultat défini comme un polynôme
et dans le corps de Galois la multiplication a*b est définie par GFI( GF(a) + GF(b) MOD 255 ) avec le résultat défini comme un polynôme
On passe d’un polynôme L(x) = 2x^2 + x à un polynôme évalué L(alpha^i) en prenant :
L(alpha^i) = 2*GF(2) XOR GF(1) = 2( (alpha^i) ^2) XOR (alpha^i)
Avec ( (alpha^i) ^2) = alpha^((i+2) MOD 255)
Donc L(alpha^i) = 2(alpha^((i+2) MOD 255) XOR (alpha^i)
On doit aussi transformer 2 en GF
Alors L(alpha^i) = { ( GF(2) + (alpha^((i+2) MOD 255) ) MOD 255 } XOR (alpha^i)
Mes étapes de calculs sont-elles correctes?
Désolé mais je sais pas comment on fait pour se servir de Latex…