Code d'effacement
En thĂ©orie de l'information, un code d'effacement est un code de correction d'erreur directe pour le canal binaire d'effacement qui transforme un message composĂ© de symboles en un message plus long composĂ© de symboles tel que le message original peut ĂȘtre retrouvĂ© Ă partir d'un sous-ensemble de ces symboles. La fraction est appelĂ© « dĂ©bit du code ». La fraction , oĂč reprĂ©sente le nombre de symboles requis pour restaurer le message est appelĂ©e efficacitĂ© de la rĂ©ception.
Codes d'effacement optimal
Les codes d'effacement optimaux possÚdent la propriété que symboles de mots-code quelconques, appartenant à l'ensemble des symboles de mots-code, sont suffisants pour restaurer le message original (en d'autres termes, ils possÚdent une efficacité de réception optimale). Les codes d'effacement optimaux sont des codes séparables de distance maximum (codes MDS).
Les codes d'effacement optimaux sont souvent couteux (en termes d'utilisation mĂ©moire, de temps processeur, ou les deux) lorsque est grand. A lâexception de schĂ©mas trĂšs simple, les solutions pratiques ont, en gĂ©nĂ©ral, un codage et un dĂ©codage quadratique. En utilisant les techniques de transformation de Fourier rapide, la complexitĂ© peut ĂȘtre rĂ©duit Ă ; Ce qui reste toutefois inexploitable.
ContrÎle de la parité
Le contrĂŽle de la paritĂ© est un cas spĂ©cial oĂč . Depuis un ensemble de valeurs , une somme de contrĂŽle est calculĂ©e et ajoutĂ©e aux valeurs sources :
L'ensemble des k + 1 valeurs est cohĂ©rent par rapport Ă la somme de contrĂŽle. Si l'une de ces valeurs, , est effacĂ©e, elle peut ĂȘtre retrouvĂ©e facilement en sommant les variables restantes tel que :
Exemple : Err-mail (k = 2)
Dans le cas simple oĂč k = 2, les symboles redondants peuvent ĂȘtre crĂ©Ă©s par Ă©chantillonnage de diffĂ©rents points le long de la ligne entre deux symboles originaux. Ceci est prĂ©sentĂ© grĂące Ă un exemple simple appelĂ© err-mail:
Alice veut envoyer son numéro de téléphone (555629) à Bob en utilisant err-mail. Err-mail fonctionne comme l'e-mail sauf que :
- Approximativement la moitié du courrier est perdue.
- Les messages plus grand que 5 caractĂšres sont interdits.
- Le prix est prohibitif (comme pour le courrier par avion)
Au lieu de demander à Bob d'acquitter les messages qu'elle envoie, Alice invente le schéma suivant.
- Elle dĂ©coupe son numĂ©ro de tĂ©lĂ©phone en 2 parties a = 555, b = 629, et envoie 2 messages - "A = 555" et "B = 629" â a Bob.
- Elle construit une fonction linéaire, , dans le cas présent , tel que et .
- Elle calcule les valeurs f(3), f(4), et f(5), puis transmet 3 messages redondants : "C = 703", "D = 777" et "E = 851".
Bob sait que f(k) est dĂ©fini par , oĂč a et b sont les deux parties de son numĂ©ro de tĂ©lĂ©phone.
Maintenant, supposons que Bob reçoive "D = 777" et "E = 851".
Bob peut retrouver le numéro de téléphone d'Alice en calculant les valeurs de a et b à partir des valeurs (f(4) et f(5)) qu'il a reçu. Bob peut effectuer cette procédure en utilisant n'importe quel couple de deux valeurs err-mail, donc le code d'effacement de cet exemple a un taux de 40%.
Notons qu'Alice ne peut pas coder son numéro de téléphone dans une seule valeur err-mail, car il contient six caractÚres, et la longueur maximum d'un message err-mail est de cinq caractÚres. Si elle envoie son numéro de téléphone en morceaux, demandant à Bob d'acquitter la réception de chacun de ces morceaux, il faudrait au moins quatre messages pour l'envoyer de toute façon (deux d'Alice et deux acquittements de Bob). Donc, le code d'effacement dans cet exemple, qui requiert cinq messages, est économique.
Cet exemple est bien sûr inventé dans le cas présent. Pour qu'un vrai code d'effacement générique fonctionne sur n'importe quel jeu de données, nous aurions besoin de quelque chose de plus pertinent que la fonction f(i).
Cas général
La construction linĂ©aire ci-dessus peut ĂȘtre gĂ©nĂ©ralisĂ©e en interpolation polynomiale. De plus, les points sont calculĂ©s dans un corps fini.
PremiĂšrement, on choisit un corps fini F d'ordre minimum n, usuellement une puissance de 2. L'Ă©metteur Ă©numĂšre les symboles de donnĂ©es de 0 Ă k-1 et les envoie. Il construit ensuite un polynĂŽme de Lagrange p(x) d'ordre k tel que p(i) est Ă©gal au symbole de donnĂ©e i. Puis, il envoie p(k),...,p(n-1). Le rĂ©cepteur peut alors utiliser une interpolation polynomiale pour retrouver les paquets perdus, Ă condition qu'il reçoive k symboles correctement. Si l'ordre de F est infĂ©rieur Ă 2b, ou b est le nombre de bits d'un symbole, alors plusieurs polynĂŽmes peuvent ĂȘtre utilisĂ©s.
LâĂ©metteur peut construire les symboles k Ă n-1 « Ă la volĂ©e », c'est-Ă -dire distribuer la charge de travail de maniĂšre Ă©gale entre la transmission des symboles. Si le rĂ©cepteur veut faire ses calculs « Ă la volĂ©e », il peut construire un nouveau polynĂŽme q, tel que q(i) = p(i) si le symbole i < k est reçu correctement et q(i) = 0 quand le symbole i < k n'a pas Ă©tĂ© reçu. Maintenant, soit r(i) = p(i) â q(i). En premier lieu, nous savons que r(i) = 0 si le symbole i < k a bien Ă©tĂ© reçu. Ensuite, si le symbole i >= k a Ă©tĂ© reçu correctement, alors r(i) = p(i) â q(i) peut ĂȘtre calculĂ©. Donc nous avons suffisamment de points de donnĂ©es pour construire r et lâĂ©valuer afin de trouver les paquets manquants. Donc lâĂ©metteur et le rĂ©cepteur ont besoin tous deux de o(n (n â k)) opĂ©rations et seulement o(n â k) d'espace pour fonctionner « Ă la volĂ©e ».
Implémentation concrÚte
Ce processus est implémenté par le code de Reed-Solomon, avec des mots construits dans un corps fini en utilisant le matrice de Vandermonde.
Codes d'effacement quasi-optimaux
Les codes d'effacement quasi-optimaux requiĂšrent (1 + Δ)k symboles pour retrouver le message (ou Δ>0). La rĂ©duction de Δ peut ĂȘtre effectuĂ©e au dĂ©triment du temps CPU. Les codes d'effacement quasi-optimaux dĂ©favorisent les capacitĂ©s de correction au profit de la complexitĂ© calculatoire: Les algorithmes utilisĂ©s en pratique peuvent coder et dĂ©coder avec une complexitĂ© en temps linĂ©aire.
Les codes fontaines (aussi appelĂ©s codes d'effacement sans dĂ©bit) sont des exemples notables de codes d'effacement quasi-optimaux. Ils peuvent transformer un message composĂ© de k symboles en une forme codĂ©e quasi infinie, c'est-Ă -dire qu'ils peuvent gĂ©nĂ©rer un nombre quelconque de symboles redondants qui peuvent ĂȘtre tous utilisĂ©s pour effectuer la correction d'erreurs. Les rĂ©cepteurs peuvent commencer Ă dĂ©coder aprĂšs qu'ils ont reçu un peu plus de k symboles codĂ©s.
Les codes rĂ©gĂ©nĂ©rants rĂ©solvent le problĂšme de reconstruction (appelĂ© aussi rĂ©paration) des fragments codĂ©s perdus Ă partir de fragments codĂ©s existants. Ce problĂšme survient dans les systĂšmes de stockage distribuĂ©s oĂč la communication maintenant la redondance codĂ©e est imparfaite.
Exemples
Des exemples de ce type de code sont présentés ci-dessous :
Codes d'effacement quasi-optimaux
- codes Tornado
- LDPC
Codes fontaine quasi-optimaux
- codes en ligne
- codes LT
- codes Raptor
Codes d'effacement optimaux
- Somme de contrÎle: utilisé dans les systÚmes de stockage RAID.
- Parchive
- Tahoe-LAFS includes zfec
- Code de Reed-Solomon
- Erasure Resilient Systematic Code, un code MDS dĂ©passant les performances de ReedâSolomon en un nombre maximum de paquets redondants, voir RS(4,2) with 2 bits or RS(9,2) avec 3 bits
- Code régénérants[1].
- tout autre code MDS
Autre
Voir aussi
- Code correcteur.
- Secret réparti (diffÚre dans le fait que le secret original est chiffré et caché jusqu'à ce que le quorum de décodage soit atteint)
Références
Liens Externes
- Jerasure is a Free Software library implementing Reed-Solomon and Cauchy erasure code techniques with SIMD optimisations.
- Software FEC in computer communications by Luigi Rizzo describes optimal erasure correction codes
- Feclib is a near optimal extension to Luigi Rizzo's work that uses band matrices. Many parameters can be set, like the size of the width of the band and size of the finite field. It also successfully exploits the large register size of modern CPUs. How it compares to the near optimal codes mentioned above is unknown.
- Coding for Distributed Storage wiki for regenerating codes and rebuilding erasure codes.