En la teoría de la información y la teoría de la codificación , los códigos Reed-Solomon son un grupo de códigos de corrección de errores que fueron introducidos por Irving S. Reed y Gustave Solomon en 1960. [ 1 ] Tienen muchas aplicaciones, incluidas tecnologías de consumo como MiniDiscs , CD , DVD , discos Blu-ray , códigos QR , Data Matrix , tecnologías de transmisión de datos como DSL y WiMAX , sistemas de radiodifusión como comunicaciones por satélite, DVB y ATSC , y sistemas de almacenamiento como RAID 6 .
Los códigos Reed-Solomon operan sobre un bloque de datos tratado como un conjunto de elementos de campo finito llamados símbolos. Los códigos Reed-Solomon RS( n , k ) pueden detectar y corregir múltiples errores de símbolos. Al agregar t = n − k símbolos de verificación a los datos, un código Reed-Solomon puede detectar (pero no corregir) cualquier combinación de hasta t símbolos erróneos, o localizar y corregir hasta ⌊t / 2⌋ símbolos erróneos en ubicaciones desconocidas. Como código de borrado , puede corregir hasta t borrados en ubicaciones conocidas y proporcionadas al algoritmo, o puede detectar y corregir combinaciones de errores y borrados. Los códigos Reed-Solomon también son adecuados como códigos de corrección de errores de bits en ráfaga múltiple, ya que una secuencia de b + 1 errores de bits consecutivos puede afectar como máximo a dos símbolos de tamaño b . La elección de t depende del diseñador del código y puede seleccionarse dentro de amplios límites.
En este artículo se describen dos esquemas de codificación Reed-Solomon diferentes, denominados vista original y vista BCH. La sección de historia explica sus orígenes.
Historia
Los códigos Reed-Solomon fueron desarrollados en 1960 por Irving S. Reed y Gustave Solomon , quienes entonces eran miembros del personal del Laboratorio Lincoln del MIT . Su artículo fundamental se tituló "Códigos polinomiales sobre ciertos campos finitos". [ 1 ] El esquema de codificación original descrito en el artículo de Reed y Solomon utilizaba un polinomio variable basado en el mensaje a codificar, donde solo un conjunto fijo de valores (puntos de evaluación) a codificar son conocidos por el codificador y el decodificador. El decodificador teórico original generaba polinomios potenciales basados en subconjuntos de k (longitud del mensaje sin codificar) de n (longitud del mensaje codificado) valores de un mensaje recibido, eligiendo el polinomio más popular como el correcto, lo cual era impráctico para todos excepto los casos más simples. Inicialmente, esto se solucionó modificando el esquema original para adaptarlo a un esquema compatible con el código BCH, basado en un polinomio fijo conocido tanto por el codificador como por el decodificador. Posteriormente, se desarrollaron decodificadores prácticos basados en el esquema original, aunque inicialmente más lentos que los esquemas BCH. Como resultado, existen dos tipos principales de códigos Reed-Solomon: los que utilizan el esquema de codificación original y los que utilizan el esquema de codificación BCH.
También en 1960, un decodificador polinomial fijo práctico para códigos BCH desarrollado por Daniel Gorenstein y Neal Zierler fue descrito en un informe del Laboratorio Lincoln del MIT por Zierler en enero de 1960 y más tarde en un artículo en junio de 1961. [ 2 ] El decodificador Gorenstein-Zierler y el trabajo relacionado sobre códigos BCH se describen en un libro "Error-Correcting Codes" de W. Wesley Peterson (1961). [ 3 ] Para 1963 (o posiblemente antes), JJ Stone (y otros) reconocieron que los códigos Reed-Solomon podían usar el esquema BCH de usar un polinomio generador fijo, haciendo que tales códigos fueran una clase especial de códigos BCH, [ 4 ] pero los códigos Reed-Solomon basados en el esquema de codificación original no son una clase de códigos BCH, y dependiendo del conjunto de puntos de evaluación, ni siquiera son códigos cíclicos .
En 1969, Elwyn Berlekamp y James Massey desarrollaron un decodificador mejorado del esquema BCH , que desde entonces se conoce como el algoritmo de decodificación Berlekamp-Massey .
En 1975, Yasuo Sugiyama desarrolló otro decodificador de esquema BCH mejorado, basado en el algoritmo euclidiano extendido . [ 5 ]

En 1977, los códigos Reed-Solomon se implementaron en el programa Voyager en forma de códigos de corrección de errores concatenados . La primera aplicación comercial en productos de consumo de producción masiva apareció en 1982 con el disco compacto , donde se utilizan dos códigos Reed-Solomon entrelazados. Hoy en día, los códigos Reed-Solomon se implementan ampliamente en dispositivos de almacenamiento digital y estándares de comunicación digital , aunque están siendo reemplazados gradualmente por códigos Bose-Chaudhuri-Hocquenghem (BCH) . Por ejemplo, los códigos Reed-Solomon se utilizan en el estándar de radiodifusión de vídeo digital (DVB) DVB-S , junto con un código interno convolucional , pero los códigos BCH se utilizan con LDPC en su sucesor, DVB-S2 .
En 1986, se desarrolló un decodificador de esquema original conocido como el algoritmo de Berlekamp-Welch .
En 1996, Madhu Sudan y otros desarrollaron variaciones de los decodificadores del esquema original, denominados decodificadores de lista o decodificadores suaves, y el trabajo continúa en este tipo de decodificadores (véase el algoritmo de decodificación de lista de Guruswami-Sudan ).
En 2002, Shuhong Gao desarrolló otro decodificador de esquema original, basado en el algoritmo euclidiano extendido . [ 6 ]
Alrededor de 2015 se desarrolló un decodificador de síndrome de esquema original (autor desconocido). [ 7 ]
Aplicaciones
Almacenamiento de datos
La codificación Reed-Solomon se utiliza ampliamente en sistemas de almacenamiento masivo para corregir los errores puntuales asociados a defectos en los medios de almacenamiento.
La codificación Reed-Solomon es un componente clave del disco compacto . Fue el primer uso de una codificación de corrección de errores robusta en un producto de consumo de producción masiva, y los DAT y DVD utilizan esquemas similares. En el CD, dos capas de codificación Reed-Solomon separadas por un entrelazador convolucional de 28 vías dan como resultado un esquema llamado Codificación Reed-Solomon Entrelazada Cruzada ( CIRC ). El primer elemento de un decodificador CIRC es un código Reed-Solomon interno (32,28) relativamente débil, abreviado de un código (255,251) con símbolos de 8 bits. Este código puede corregir hasta 2 errores de byte por bloque de 32 bytes. Más importante aún, marca como borrados cualquier bloque no corregible, es decir, bloques con más de 2 errores de byte. Los bloques decodificados de 28 bytes, con indicaciones de borrado, son luego distribuidos por el desentrelazador a diferentes bloques del código externo (28,24). Gracias al desentrelazado, un bloque de 28 bytes borrado del código interno se convierte en un solo byte borrado en cada uno de los 28 bloques de código externos. El código externo corrige esto fácilmente, ya que puede manejar hasta 4 borrados de este tipo por bloque.
El resultado es un CIRC que puede corregir completamente ráfagas de errores de hasta 4000 bits, o aproximadamente 2,5 mm en la superficie del disco. Este código es tan robusto que la mayoría de los errores de reproducción de CD casi con certeza se deben a errores de seguimiento que provocan que el láser salte de pista, y no a ráfagas de errores incorregibles. [ 8 ]
Los DVD utilizan un esquema similar, pero con bloques mucho más grandes, un código interno (208,192) y un código externo (182,172).
La corrección de errores Reed-Solomon también se utiliza en los archivos de archivo que se publican habitualmente junto con archivos multimedia en USENET . El servicio de almacenamiento en línea distribuido Wuala (que dejó de funcionar en 2015) también utilizaba Reed-Solomon para dividir archivos.
Código de barras
Casi todos los códigos de barras bidimensionales, como PDF-417 , MaxiCode , Datamatrix , QR Code , Aztec Code y Han Xin, utilizan la corrección de errores Reed-Solomon para permitir una lectura correcta incluso si una parte del código de barras está dañada. Cuando el escáner de códigos de barras no puede reconocer un símbolo, lo interpreta como un borrado.
La codificación Reed-Solomon es menos común en los códigos de barras unidimensionales, pero la utiliza la simbología PostBar .
Transmisión de datos
Las formas especializadas de códigos Reed-Solomon, específicamente Cauchy -RS y Vandermonde -RS, pueden utilizarse para superar la naturaleza poco fiable de la transmisión de datos a través de canales de borrado . El proceso de codificación presupone un código RS( N , K ) que genera N palabras clave de longitud N símbolos, cada una de las cuales almacena K símbolos de datos, las cuales se envían a través de un canal de borrado.
Cualquier combinación de K palabras clave recibidas en el otro extremo es suficiente para reconstruir las N palabras clave. La tasa de codificación se suele establecer en 1/2, a menos que la probabilidad de borrado del canal pueda modelarse adecuadamente y se observe que es menor. En conclusión, N suele ser 2K , lo que significa que al menos la mitad de las palabras clave enviadas deben recibirse para reconstruir todas las palabras clave enviadas.
Los códigos Reed-Solomon también se utilizan en los sistemas xDSL y en las especificaciones del protocolo de comunicaciones espaciales de CCSDS como una forma de corrección de errores hacia adelante .
Transmisión espacial

Una aplicación importante de la codificación Reed-Solomon fue la codificación de las imágenes digitales enviadas por el programa Voyager .
La sonda Voyager introdujo la codificación Reed-Solomon concatenada con códigos convolucionales , una práctica que desde entonces se ha generalizado en las comunicaciones espaciales profundas y por satélite (por ejemplo, la radiodifusión digital directa).
Los decodificadores Viterbi tienden a producir errores en ráfagas cortas. La mejor manera de corregir estos errores es mediante códigos Reed-Solomon cortos o simplificados.
Las versiones modernas de la codificación convolucional concatenada decodificada mediante Reed-Solomon/Viterbi se utilizaron y se siguen utilizando en las misiones Mars Pathfinder , Galileo , Mars Exploration Rover y Cassini , donde su rendimiento se sitúa entre 1 y 1,5 dB por debajo del límite máximo, la capacidad de Shannon .
Estos códigos concatenados están siendo reemplazados por códigos turbo más potentes :
Construcciones (codificación)
El código Reed-Solomon es en realidad una familia de códigos, donde cada código se caracteriza por tres parámetros: un tamaño de alfabeto q , una longitud de bloque n y una longitud de mensaje k , conEl conjunto de símbolos del alfabeto se interpreta como el campo finito .del ordeny por lo tanto,debe ser una potencia prima . En las parametrizaciones más útiles del código Reed-Solomon, la longitud del bloque suele ser un múltiplo constante de la longitud del mensaje, es decir, la tasaes alguna constante y, además, la longitud del bloque es igual al tamaño del alfabeto o uno menos que él, es decir,o.
La visión original de Reed y Solomon: La palabra clave como una secuencia de valores.
Existen diferentes procedimientos de codificación para el código Reed-Solomon y, por lo tanto, existen diferentes maneras de describir el conjunto de todas las palabras clave. En la visión original de Reed y Solomon, cada palabra clave del código Reed-Solomon es una secuencia de valores de función de un polinomio de grado menor que. [ 1 ] Para obtener una palabra clave del código Reed-Solomon, los símbolos del mensaje (cada uno dentro del alfabeto de tamaño q) se tratan como los coeficientes de un polinomio.de grado menor que, sobre el campo finitoconelementos. A su vez, el polinomiose evalúa en un conjunto depuntos distintos en cualquier ordendel campoy la secuencia de valores es la palabra clave correspondiente. Las opciones comunes para un conjunto de puntos de evaluación incluyen:,, o para,, ... , dóndees un elemento primitivo de.
Formalmente, el conjuntoEl conjunto de palabras clave del código Reed-Solomon se define de la siguiente manera: Dado que cualesquiera dos polinomios distintos de grado menor queestar de acuerdo en como máximopuntos, esto significa que cualesquiera dos palabras clave del código Reed-Solomon discrepan en al menosposiciones. Además, hay dos polinomios que coinciden enpuntos pero no son iguales y, por lo tanto, la distancia del código Reed-Solomon es exactamenteEntonces la distancia relativa es, dóndees la tasa. Esta compensación entre la distancia relativa y la tasa es asintóticamente óptima ya que, por la cota Singleton , cada código satisfaceAl ser un código que logra este equilibrio óptimo, el código de Reed-Solomon pertenece a la clase de códigos separables de máxima distancia .
Mientras que el número de polinomios diferentes de grado menor que k y el número de mensajes diferentes son ambos igualesy, por lo tanto, cada mensaje puede mapearse de forma única a dicho polinomio; existen diferentes maneras de realizar esta codificación. La construcción original de Reed y Solomon interpreta el mensaje x como los coeficientes del polinomio p , mientras que las construcciones posteriores interpretan el mensaje como los valores del polinomio en los primeros k puntos.y obtener el polinomio p interpolando estos valores con un polinomio de grado menor que k . Este último procedimiento de codificación, si bien es ligeramente menos eficiente, tiene la ventaja de que da lugar a un código sistemático , es decir, el mensaje original siempre está contenido como una subsecuencia de la palabra clave. [ 1 ]
Procedimiento de codificación simple: El mensaje como una secuencia de coeficientes
En la construcción original de Reed y Solomon, el mensajese asigna al polinomiocon La palabra clave dese obtiene mediante evaluaciónendiferentes puntosdel campo. [ 1 ] Por lo tanto, la función de codificación clásicaEl código Reed-Solomon se define de la siguiente manera:
Esta funciónes una aplicación lineal , es decir, satisfacepara lo siguiente-matrizcon elementos de.
Esta matriz es una matriz de Vandermonde sobreEn otras palabras, el código Reed-Solomon es un código lineal y, en el procedimiento de codificación clásico, su matriz generadora es.
Procedimiento de codificación sistemática: El mensaje como una secuencia inicial de valores.
Existen procedimientos de codificación alternativos que producen un código Reed-Solomon sistemático . Un método utiliza la interpolación de Lagrange para calcular polinomios.de tal manera queEntoncesse evalúa en los otros puntos.
Esta funciónes una aplicación lineal. Para generar la matriz de codificación sistemática G correspondiente, multiplique la matriz A por la inversa de la submatriz cuadrada izquierda de A.
para lo siguiente-matrizcon elementos de.
Transformada discreta de Fourier y su inversa
Una transformada discreta de Fourier es esencialmente lo mismo que el procedimiento de codificación; utiliza el polinomio generador.para asignar un conjunto de puntos de evaluación a los valores del mensaje como se muestra arriba:
La transformada inversa de Fourier podría utilizarse para convertir un conjunto libre de errores de n < q valores de mensaje de nuevo en el polinomio de codificación de k coeficientes, con la restricción de que para que esto funcione, el conjunto de puntos de evaluación utilizados para codificar el mensaje debe ser un conjunto de potencias crecientes de α :
Sin embargo, la interpolación de Lagrange realiza la misma conversión sin la restricción del conjunto de puntos de evaluación o el requisito de un conjunto de valores de mensaje sin errores y se utiliza para la codificación sistemática, y en uno de los pasos del decodificador de Gao .
La perspectiva BCH: La palabra clave como una secuencia de coeficientes
Tenga en cuenta que el código BCH y la mayoría de las implementaciones de la vista BCH tienen el término más significativo primero. En esta vista, el mensaje se interpreta como los coeficientes de un polinomio.:
Un polinomio generadorse define como el polinomio cuyas raíces son potencias secuenciales del campo primitivo de Galois Para un "código de sentido estricto",.
La codificación calcula un polinomio de palabra clave.que es un múltiplo exacto de.
Procedimiento de codificación simple
El remitente calcula un polinomio relacionado.de gradodóndey envía el polinomio. El polinomiose construye multiplicando el polinomio del mensaje, que tiene grado, con el polinomio generadorde gradoque es conocido tanto por el remitente como por el receptor..
Esta funciónes una aplicación lineal , es decir, satisfacepara lo siguiente-matrizcon elementos de.
para lo siguientematrizcon elementos de.
Procedimiento de codificación sistemática
El procedimiento de codificación para la vista BCH de los códigos Reed-Solomon se puede modificar para producir un procedimiento de codificación sistemático , en el que cada palabra clave contiene el mensaje como prefijo y simplemente agrega símbolos de corrección de errores como sufijo. Aquí, en lugar de enviar, el codificador construye el polinomio transmitidode tal manera que los coeficientes de laLos monomios más grandes son iguales a los coeficientes correspondientes dey los coeficientes de orden inferior deson elegidos de tal manera quese vuelve exactamente divisible por. Entonces los coeficientes deson una subsecuencia de los coeficientes dePara obtener un código que sea sistemático en general, construimos el polinomio del mensaje.interpretando el mensaje como la secuencia de sus coeficientes.
Formalmente, la construcción se realiza mediante la multiplicaciónporpara dejar espacio para elsímbolos de verificación, dividiendo ese producto porpara hallar el resto y luego compensar ese resto restándolo.Los símbolos de verificación se crean calculando el resto.:
El resto tiene como máximo un grado, mientras que los coeficientes deen el polinomioson cero. Por lo tanto, la siguiente definición de la palabra clavetiene la propiedad de que el primeroLos coeficientes son idénticos a los coeficientes de:
Como resultado,es exactamente divisible por: [ 11 ]
Esta funciónes una función lineal. Para generar la matriz de codificación sistemática G correspondiente, multiplique la matriz A por la inversa de la submatriz cuadrada izquierda de A (o establezca la submatriz cuadrada izquierda de G como la matriz identidad y codifique cada fila).
para lo siguientematrizcon elementos de.
Propiedades
El código Reed-Solomon es un código [ n , k , n − k + 1]; en otras palabras, es un código de bloques lineal de longitud n (sobre F ) con dimensión k y distancia de Hamming mínima.El código de Reed-Solomon es óptimo en el sentido de que la distancia mínima tiene el valor máximo posible para un código lineal de tamaño ( n , k ); esto se conoce como la cota Singleton . Dicho código también se denomina código separable de distancia máxima (MDS) .
La capacidad de corrección de errores de un código Reed-Solomon está determinada por su distancia mínima, o equivalentemente, por, la medida de redundancia en el bloque. Si no se conocen de antemano las ubicaciones de los símbolos de error, entonces un código Reed-Solomon puede corregir hastasímbolos erróneos, es decir, puede corregir la mitad de errores que símbolos redundantes añadidos al bloque. A veces, las ubicaciones de los errores se conocen de antemano (por ejemplo, "información lateral" en las relaciones señal-ruido del demodulador ); estos se denominan borrados . Un código Reed-Solomon (como cualquier código MDS ) es capaz de corregir el doble de borrados que de errores, y cualquier combinación de errores y borrados puede corregirse siempre que se cumpla la relación 2 E + S ≤ n − k , dondees el número de errores yes el número de borrados en el bloque.

El límite de error teórico se puede describir mediante la siguiente fórmula para el canal AWGN para FSK : [ 12 ] y para otros esquemas de modulación: dónde,,,es la tasa de error de símbolo en el caso AWGN no codificado yes el orden de modulación.
Para usos prácticos de los códigos de Reed-Solomon, es común utilizar un campo finito.conelementos. En este caso, cada símbolo puede representarse como unvalor de bits. El remitente envía los puntos de datos como bloques codificados, y el número de símbolos en el bloque codificado es. Por lo tanto, un código Reed-Solomon que opera con símbolos de 8 bits tienesímbolos por bloque. (Este es un valor muy popular debido a la prevalencia de los sistemas informáticos orientados a bytes ). El número, con, de símbolos de datos en el bloque es un parámetro de diseño. Un código comúnmente utilizado codificasímbolos de datos de ocho bits más 32 símbolos de paridad de ocho bits en un-bloque de símbolos; esto se denota como unEl código es capaz de corregir hasta 16 errores de símbolos por bloque.
Las propiedades del código Reed-Solomon, descritas anteriormente, lo hacen especialmente adecuado para aplicaciones donde los errores se producen en ráfagas . Esto se debe a que, para el código, no importa cuántos bits de un símbolo presenten errores: si varios bits están dañados, se considera un único error. Por el contrario, si un flujo de datos no se caracteriza por ráfagas de errores o pérdidas de datos, sino por errores aleatorios de un solo bit, un código Reed-Solomon suele ser una mala elección en comparación con un código binario.
El código Reed-Solomon, al igual que el código convolucional , es un código transparente. Esto significa que si los símbolos del canal se han invertido en algún punto de la secuencia, los decodificadores seguirán funcionando. El resultado será la inversión de los datos originales. Sin embargo, el código Reed-Solomon pierde su transparencia cuando se acorta ( véase «Observaciones» al final de esta sección ). Los bits «faltantes» en un código acortado deben rellenarse con ceros o unos, según si los datos están complementados o no. (Dicho de otro modo, si los símbolos están invertidos, el relleno de ceros debe invertirse a un relleno de unos). Por este motivo, es imprescindible determinar el sentido de los datos (es decir, verdadero o complementado) antes de la decodificación Reed-Solomon.
Que el código de Reed-Solomon sea cíclico o no depende de detalles sutiles de su construcción. En la visión original de Reed y Solomon, donde las palabras clave son los valores de un polinomio, se puede elegir la secuencia de puntos de evaluación de tal manera que el código sea cíclico. En particular, sies una raíz primitiva del campo, entonces por definición todos los elementos no nulos detomar la formapara, dóndeCada polinomioencimada lugar a una palabra clave. Dado que la funciónTambién es un polinomio del mismo grado, esta función da lugar a una palabra clave.; desdesostiene que esta palabra clave es el desplazamiento cíclico a la izquierda de la palabra clave original derivada de. Por lo tanto, elegir una secuencia de potencias de raíces primitivas como puntos de evaluación hace que el código Reed-Solomon original sea cíclico . Los códigos Reed-Solomon en la vista BCH son siempre cíclicos porque los códigos BCH son cíclicos .
Observaciones
Los diseñadores no están obligados a usar los tamaños "naturales" de los bloques de código Reed-Solomon. Una técnica conocida como "acortamiento" permite generar un código más pequeño del tamaño deseado a partir de uno más grande. Por ejemplo, el código (255,223), ampliamente utilizado, se puede convertir en un código (160,128) rellenando la parte no utilizada del bloque original con 95 ceros binarios y sin transmitirlos. En el decodificador, esa misma parte del bloque se carga localmente con ceros binarios.
El código QR, versión 3 (29×29), utiliza bloques intercalados. El mensaje tiene 26 bytes de datos y está codificado mediante dos bloques de código Reed-Solomon. Cada bloque es un código Reed-Solomon (255,233) acortado a un código (35,13).
El teorema de Delsarte-Goethals-Seidel [ 13 ] ilustra un ejemplo de aplicación de códigos Reed-Solomon acortados. Paralelamente al acortamiento, una técnica conocida como perforación permite omitir algunos de los símbolos de paridad codificados.
decodificadores de vista BCH
Los decodificadores descritos en esta sección utilizan la representación BCH de una palabra clave como una secuencia de coeficientes. Utilizan un polinomio generador fijo conocido tanto por el codificador como por el decodificador.
Decodificador Peterson-Gorenstein-Zierler
Daniel Gorenstein y Neal Zierler desarrollaron un decodificador que Zierler describió en un informe del Laboratorio Lincoln del MIT en enero de 1960 y posteriormente en un artículo en junio de 1961. [ 14 ] [ 15 ] El decodificador Gorenstein-Zierler y el trabajo relacionado sobre códigos BCH se describen en el libro Error Correcting Codes de W. Wesley Peterson (1961). [ 3 ]
Formulación
El mensaje transmitido,, se considera como los coeficientes de un polinomio
Como resultado del procedimiento de codificación de Reed-Solomon, s ( x ) es divisible por el polinomio generador. donde α es un elemento primitivo.
Dado que s ( x ) es un múltiplo del generador g ( x ), se deduce que "hereda" todas sus raíces: Por lo tanto,
El polinomio transmitido se corrompe durante la transmisión por un polinomio de error. para producir el polinomio recibido
El coeficiente e i será cero si no hay error en esa potencia de x , y distinto de cero si hay un error. Si hay ν errores en distintas potencias i k de x , entonces
El objetivo del decodificador es encontrar el número de errores ( ν ) , las posiciones de los errores ( ik ) y los valores de error en esas posiciones ( eik ) . A partir de estos, se puede calcular e ( x ) y restarlo de r ( x ) para obtener el mensaje original enviado s ( x ).
Decodificación del síndrome
El decodificador comienza evaluando el polinomio tal como se recibe en los puntos. Llamamos a los resultados de esa evaluación los "síndromes" S j . Se definen como Tenga en cuenta queporquetiene raíces en, como se muestra en la sección anterior.
La ventaja de analizar los síndromes radica en que el polinomio del mensaje se elimina. En otras palabras, los síndromes solo se relacionan con el error y no se ven afectados por el contenido real del mensaje transmitido. Si todos los síndromes son cero, el algoritmo se detiene e informa que el mensaje no se corrompió durante la transmisión.
Localizadores de errores y valores de error
Para mayor comodidad, definamos los localizadores de error X k y los valores de error Y k como
Entonces, los síndromes se pueden escribir en términos de estos localizadores de errores y valores de error como
Esta definición de los valores del síndrome es equivalente a la anterior ya que.
Los síndromes dan un sistema de n − k ≥ 2 ν ecuaciones con 2 ν incógnitas, pero ese sistema de ecuaciones es no lineal en X k y no tiene una solución obvia. Sin embargo, si se conociera X k (véase más adelante), entonces las ecuaciones del síndrome proporcionan un sistema de ecuaciones lineal. lo cual se puede resolver fácilmente para los valores de error Y k .
En consecuencia, el problema consiste en encontrar X k , porque entonces se conocería la matriz de la izquierda, y ambos lados de la ecuación podrían multiplicarse por su inversa, obteniendo Y k
En la variante de este algoritmo donde las ubicaciones de los errores ya se conocen (cuando se utiliza como código de borrado ), este es el final. Las ubicaciones de los errores ( X k ) ya se conocen por algún otro método (por ejemplo, en una transmisión FM, las secciones donde el flujo de bits no estaba claro o se vio afectado por interferencias se pueden determinar probabilísticamente a partir del análisis de frecuencia ). En este escenario, hastaLos errores pueden corregirse.
El resto del algoritmo sirve para localizar los errores y requerirá valores de síndrome hasta, en lugar de solo elutilizados hasta ahora. Por eso es necesario añadir el doble de símbolos correctores de errores de los que se pueden corregir sin conocer su ubicación.
polinomio localizador de errores
Existe una relación de recurrencia lineal que da lugar a un sistema de ecuaciones lineales . Resolver esas ecuaciones permite identificar las ubicaciones de los errores X k .
Definimos el polinomio localizador de errores Λ( x ) como
Los ceros de Λ( x ) son los recíprocos. Esto se deduce de la construcción de notación de producto anterior, ya que si, entonces uno de los términos multiplicados será cero,, lo que hace que todo el polinomio se evalúe a cero:
Dejarsea cualquier número entero tal queMultiplica ambos lados pory seguirá siendo cero:
Suma para k = 1 a ν , y seguirá siendo cero:
Suma cada término por separado:
Extraer los valores constantes deque no se ven afectados por la suma:
Estas sumas ahora son equivalentes a los valores del síndrome, que conocemos y podemos sustituir. Por lo tanto, esto se reduce a
Restarde ambos lados rinde
Recordemos que j se eligió como cualquier entero entre 1 y v inclusive, y esta equivalencia es válida para todos esos valores. Por lo tanto, tenemos v ecuaciones lineales, no solo una. Este sistema de ecuaciones lineales se puede resolver para los coeficientes Λ i del polinomio de localización de errores: Lo anterior supone que el decodificador conoce el número de errores ν , pero este número aún no se ha determinado. El decodificador PGZ no determina ν directamente, sino que lo busca probando valores sucesivos. El decodificador primero asume el valor más grande para un valor de prueba ν y establece el sistema lineal para ese valor. Si las ecuaciones se pueden resolver (es decir, el determinante de la matriz es distinto de cero), entonces ese valor de prueba es el número de errores. Si el sistema lineal no se puede resolver, entonces el valor de prueba ν se reduce en uno y se examina el siguiente sistema más pequeño. [ 16 ]
Halla las raíces del polinomio localizador de errores.
Utilice los coeficientes Λ i encontrados en el último paso para construir el polinomio de localización de errores. Las raíces del polinomio de localización de errores se pueden encontrar mediante una búsqueda exhaustiva. Los localizadores de errores X k son los recíprocos de esas raíces. El orden de los coeficientes del polinomio de localización de errores se puede invertir, en cuyo caso las raíces de ese polinomio invertido son los localizadores de errores.(no sus recíprocos)). La búsqueda de Chien es una implementación eficiente de este paso.
Calcular los valores de error
Una vez que se conocen los localizadores de error X k , se pueden determinar los valores de error. Esto se puede hacer mediante la solución directa de Y k en la matriz de ecuaciones de error dada anteriormente, o utilizando el algoritmo de Forney .
Calcular las ubicaciones de error
Calcula i k tomando la base logarítmicade X k . Esto generalmente se hace utilizando una tabla de búsqueda precalculada .
Corrige los errores
Finalmente, e ( x ) se genera a partir de i k y e i k y luego se resta de r ( x ) para obtener el mensaje enviado originalmente s ( x ), con los errores corregidos.
Ejemplo
Consideremos el código Reed-Solomon definido en GF (929) con α = 3 y t = 4 (este se utiliza en los códigos de barras PDF417 ) para un código RS(7,3). El polinomio generador es Si el polinomio del mensaje es p ( x ) = 3 x 2 + 2 x + 1 , entonces una palabra clave sistemática se codifica de la siguiente manera: Los errores en la transmisión podrían provocar que se reciba esto en su lugar: Los síndromes se calculan evaluando r en potencias de α : cediendo el sistema
Utilizando la eliminación gaussiana , entonces con raíces x 1 = 757 = 3 −3 y x 2 = 562 = 3 −4 . Los coeficientes se pueden invertir: para producir raíces 27 = 3 3 y 81 = 3 4 con exponentes positivos, pero normalmente esto no se usa. El logaritmo de las raíces invertidas corresponde a las ubicaciones de error (de derecha a izquierda, la ubicación 0 es el último término en la palabra clave).
Para calcular los valores de error, aplique el algoritmo de Forney :
RestarA partir del polinomio recibido r ( x ) se reproduce la palabra clave original s .
Decodificador Berlekamp - Massey
El algoritmo de Berlekamp-Massey es un procedimiento iterativo alternativo para encontrar el polinomio localizador de errores. Durante cada iteración, calcula una discrepancia basada en una instancia actual de Λ( x ) con un número supuesto de errores e : y luego ajusta Λ( x ) y e de modo que un Δ recalculado sea cero. El artículo sobre el algoritmo de Berlekamp-Massey contiene una descripción detallada del procedimiento. En el siguiente ejemplo, C ( x ) se utiliza para representar Λ( x ).
Ejemplo
Utilizando los mismos datos que en el ejemplo de Peterson Gorenstein Zierler anterior:
El valor final de C es el polinomio localizador de errores, Λ( x ).
Decodificador de Sugiyama
Otro método iterativo para calcular tanto el polinomio localizador de errores como el polinomio de valor de error se basa en la adaptación de Sugiyama del algoritmo euclidiano extendido .
Definimos S ( x ), Λ( x ) y Ω( x ) para t síndromes y e errores:
La ecuación clave es:
Para t = 6 y e = 3:
Los términos intermedios son cero debido a la relación entre Λ y los síndromes.
El algoritmo euclidiano extendido puede encontrar una serie de polinomios de la forma
donde el grado de R disminuye a medida que i aumenta. Una vez que el grado de R i ( x ) < t /2, entonces
B ( x ) y Q ( x ) no necesitan guardarse, por lo que el algoritmo queda así:
R −1 := x t R 0 := S ( x ) A −1 := 0 A 0 := 1 i := 0 mientras grado de R i ≥ t /2 i := i + 1 Q := R i -2 / R i -1 R i := R i -2 - Q R i -1 A i := A i -2 - Q A i -1
Para establecer el término de orden inferior de Λ( x ) a 1, divida Λ( x ) y Ω( x ) por A i (0):
A i (0) es el término constante (de orden bajo) de A i .
Ejemplo
Utilizando los mismos datos que en el ejemplo de Peterson-Gorenstein-Zierler anterior:
Decodificador mediante transformada discreta de Fourier
Se puede utilizar una transformada discreta de Fourier para la decodificación. [ 17 ] Para evitar conflictos con los nombres de los síndromes, sea c ( x ) = s ( x ) la palabra clave codificada. r ( x ) y e ( x ) son los mismos que los anteriores. Definimos C ( x ), E ( x ) y R ( x ) como las transformadas discretas de Fourier de c ( x ), e ( x ) y r ( x ). Dado que r ( x ) = c ( x ) + e ( x ), y dado que una transformada discreta de Fourier es un operador lineal, R ( x ) = C ( x ) + E ( x ).
Transforme r ( x ) en R ( x ) utilizando la transformada discreta de Fourier. Dado que el cálculo para una transformada discreta de Fourier es el mismo que el cálculo para síndromes, los coeficientes t de R ( x ) y E ( x ) son los mismos que los de los síndromes:
Usara través decomo síndromes (son lo mismo) y genere el polinomio localizador de errores utilizando los métodos de cualquiera de los decodificadores anteriores.
Sea v = número de errores. Genere E ( x ) utilizando los coeficientes conocidos.a, el polinomio localizador de errores y estas fórmulas
Luego, calcula C ( x ) = R ( x ) − E ( x ) y toma la transformada inversa ( interpolación polinómica ) de C ( x ) para producir c ( x ).
Decodificación más allá del límite de corrección de errores
El límite de Singleton establece que la distancia mínima d de un código de bloque lineal de tamaño ( n , k ) está limitada superiormente por n - k + 1. Generalmente, se entendía que la distancia d limitaba la capacidad de corrección de errores a ⌊( d - 1) / 2⌋ . El código de Reed-Solomon alcanza este límite con igualdad y, por lo tanto, puede corregir hasta ⌊( n - k ) / 2⌋ errores. Sin embargo, este límite de corrección de errores no es exacto.
En 1999, Madhu Sudan y Venkatesan Guruswami del MIT publicaron "Improved Decoding of Reed–Solomon and Algebraic-Geometry Codes" introduciendo un algoritmo que permitía la corrección de errores más allá de la mitad de la distancia mínima del código. [ 18 ] Se aplica a los códigos de Reed–Solomon y, más generalmente, a los códigos geométricos algebraicos . Este algoritmo produce una lista de palabras clave (es un algoritmo de decodificación de listas ) y se basa en la interpolación y factorización de polinomios sobre GF (2 m ) y sus extensiones.
En 2023, los teóricos de la codificación demostraron que los códigos Reed-Solomon definidos sobre puntos de evaluación aleatorios pueden alcanzar la capacidad de decodificación de listas (hasta n - k errores) sobre alfabetos de tamaño lineal con alta probabilidad . [ 19 ] [ 20 ] [ 21 ] Estos resultados no proporcionan un algoritmo para realizar la decodificación.
Decodificación suave
Los métodos de decodificación algebraica descritos anteriormente son métodos de decisión rígida, lo que significa que para cada símbolo se toma una decisión rígida sobre su valor. Por ejemplo, un decodificador podría asociar a cada símbolo un valor adicional correspondiente a la confianza del demodulador de canal en la corrección del símbolo. La aparición de los códigos LDPC y turbo , que emplean métodos iterados de decodificación de propagación de creencias de decisión suave para lograr un rendimiento de corrección de errores cercano al límite teórico , ha impulsado el interés en aplicar la decodificación de decisión suave a los códigos algebraicos convencionales. En 2003, Ralf Koetter y Alexander Vardy presentaron un algoritmo de decodificación de lista algebraica de decisión suave en tiempo polinomial para códigos Reed-Solomon, que se basó en el trabajo de Sudan y Guruswami. [ 22 ] En 2016, Steven J. Franke y Joseph H. Taylor publicaron un nuevo decodificador de decisión suave. [ 23 ]
Decodificadores de vista original de Reed Solomon
Los decodificadores descritos en esta sección utilizan la concepción original de Reed Solomon de una palabra clave como una secuencia de valores polinómicos, donde el polinomio se basa en el mensaje que se va a codificar. Tanto el codificador como el decodificador utilizan el mismo conjunto de valores fijos, y el decodificador recupera el polinomio de codificación (y, opcionalmente, un polinomio de localización de errores) del mensaje recibido.
decodificador teórico
Reed y Solomon describieron un decodificador teórico que corregía errores al encontrar el polinomio de mensaje más popular. [ 1 ] El decodificador solo conoce el conjunto de valoresay qué método de codificación se utilizó para generar la secuencia de valores de la palabra clave. El mensaje original, el polinomio y cualquier error son desconocidos. Un procedimiento de decodificación podría utilizar un método como la interpolación de Lagrange en varios subconjuntos de n valores de la palabra clave tomados de k en k para producir repetidamente polinomios potenciales, hasta que se produzca un número suficiente de polinomios coincidentes para eliminar razonablemente cualquier error en la palabra clave recibida. Una vez que se determina un polinomio, entonces cualquier error en la palabra clave puede corregirse recalculando los valores correspondientes de la palabra clave. Desafortunadamente, en todos los casos excepto en el más simple, hay demasiados subconjuntos, por lo que el algoritmo es impracticable. El número de subconjuntos es el coeficiente binomial ,y el número de subconjuntos es inviable incluso para códigos modestos. Para un código (255,249) que puede corregir 3 errores, el decodificador teórico ingenuo examinaría 359 mil millones de subconjuntos.
Decodificador Berlekamp Welch
En 1986, se desarrolló un decodificador conocido como algoritmo de Berlekamp-Welch, capaz de recuperar el polinomio del mensaje original, así como un polinomio "localizador" de errores que genera ceros para los valores de entrada que corresponden a errores, con una complejidad temporal de O ( n³ ) , donde n es el número de valores en un mensaje. El polinomio recuperado se utiliza posteriormente para recuperar (recalcular según sea necesario) el mensaje original.
Ejemplo
Utilizando RS(7,3), GF(929) y el conjunto de puntos de evaluación a i = i − 1
- a = {0, 1, 2, 3, 4, 5, 6}
Si el polinomio del mensaje es
- p ( x ) = 003 x 2 + 002 x + 001
La palabra clave es
- c = {001, 006, 017, 034, 057, 086, 121}
Los errores en la transmisión podrían provocar que se reciba esto en su lugar.
- b = c + e = {001, 006, 123, 456, 057, 086, 121}
La ecuación clave es:
- b i E ( a i ) - Q ( a i ) = 0
Supongamos que el número máximo de errores es e = 2. La ecuación clave se convierte en:
- b i ( e 0 + e 1 a i ) - ( q 0 + q 1 a i + q 2 a 2 i + q 3 a 3 i + q 4 a 4 i ) = - b i a 2 i
Utilizando la eliminación gaussiana :
- Q ( x ) = 003 x 4 + 916 x 3 + 009 x 2 + 007 x + 006
- E ( x ) = 001 x 2 + 924 x + 006
- Q ( x ) / E ( x ) = P ( x ) =003 x² + 002 x + 001
Recalcular P ( x ) donde E ( x ) = 0 : {2, 3} para corregir b, lo que resulta en la palabra clave corregida:
- c = {001, 006, 017, 034, 057, 086, 121} }}
Decodificador Gao
En 2002, Shuhong Gao desarrolló un decodificador mejorado, basado en el algoritmo extendido de Euclides. [ 24 ]
Ejemplo
- Interpolación de Lagrange deparaa
- generaryhasta grado de, por ejemplo
- Q ( x ) = R 2 = 266 x 4 + 086 x 3 + 798 x 2 + 311 x + 532
- E ( x ) = A 2 = 708 x 2 + 176 x + 532
Para duplicar los polinomios generados por Berlekamp Welsh, divida Q ( x ) y E ( x ) por el coeficiente más significativo de E ( x ) = 708.
- Q ( x ) = 003 x 4 + 916 x 3 + 009 x 2 + 007 x + 006
- E ( x ) = 001 x 2 + 924 x + 006
- Q ( x ) / E ( x ) = P ( x ) =003 x² + 002 x + 001
Recalcular P ( x ) donde E ( x ) = 0 : {2, 3} para corregir b, lo que resulta en la palabra clave corregida:
- c = {001, 006, 017, 034, 057, 086, 121}
Decodificador de síndromes
Alrededor de 2015, se desarrolló un decodificador mejorado. [ 25 ] El decodificador genera síndromes y, de forma similar a la vista BCH, la ecuación clave entre el polinomio localizador de errores y los síndromes es la misma, pero el polinomio localizador de errores tiene raíces que corresponden ay se utiliza una tabla de búsqueda para convertir las raíces en desplazamientos de palabras clave.
Inicialización: Se define un polinomio:. Un conjunto deLos polinomios se definen de la siguiente manera:. Un conjunto dese generan valores. Un conjunto deSe generan polinomios:
Decodificación: se recibe una palabra clave con posibles errores. Se genera un polinomio de síndrome .. Sientonces no se detectan errores, de lo contrario Euclides extendido comienza con ,,, y continúa hasta grado de El polinomio localizador de errores es y el polinomio del valor de error esyse dividen por el término menos significativo de La derivada formal dese genera: Los desplazamientosde los errores corresponden a las raíces de para raíz =, El valor de error paraes .
Sientonces un valor de error correspondiente a Se ha detectado en el desplazamientoy se calcula un valor de error independiente: , el conjunto decorrespondientes a las raíces decoeficiente más significativo de
Ejemplo
Utilizando los mismos datos que en el ejemplo de Berlekamp Welch
Inicialización:
Descodificación: Euclides:
dividirypor 925
Véase también
Notas
- ↑ Los autores en Andrews et al. (2007) proporcionan resultados de simulación que muestran que para la misma tasa de codificación (1/6), los códigos turbo superan a los códigos concatenados Reed-Solomon hasta en 2 dB ( tasa de error de bits ). [ 10 ]
Referencias
- 1 2 3 4 5 6 Reed, Irving S. ; Solomon, Gustave (1960). "Códigos polinomiales sobre ciertos campos finitos" (PDF) . Journal of the Society for Industrial and Applied Mathematics . 8 (2): 300– 304. doi : 10.1137/0108018 .
- ↑ Gorenstein, D.; Zierler, N. (junio de 1961). "Una clase de códigos correctores de errores lineales cíclicos en p m símbolos". J. SIAM . 9 (2): 207– 214. doi : 10.1137/0109020 . JSTOR 2098821 .
- 1 2 Peterson, W. Wesley (1961). Códigos correctores de errores . MIT Press. ISBN 978-0262160063OCLC 859669631
{{cite book}}: Incompatibilidad de ISBN/Fecha ( ayuda ) - ↑ Peterson, W. Wesley; Weldon, EJ (1996) [1972]. Códigos correctores de errores (2.ª ed.). MIT Press. ISBN 978-0-585-30709-1OCLC 45727875
- ↑ Sugiyama, Y.; Kasahara, M.; Hirasawa, S.; Namekawa, T. (1975). "Un método para resolver la ecuación clave para decodificar códigos Goppa" . Information and Control . 27 (1): 87– 99. doi : 10.1016/S0019-9958(75)90090-X .
- ↑ Gao, Shuhong (enero de 2002), Nuevo algoritmo para decodificar códigos Reed-Solomon (PDF) , Clemson.
- ↑ "Códigos generalizados de Reed-Solomon" (PDF) . Archivado del original (PDF) el 3 de diciembre de 2020.
- ↑ Immink, KAS (1994), "Códigos Reed-Solomon y el disco compacto", en Wicker, Stephen B.; Bhargava, Vijay K. (eds.), Códigos Reed-Solomon y sus aplicaciones , IEEE Press , ISBN 978-0-7803-1025-4
- ↑ Hagenauer, J.; Offer, E.; Papke, L. (1994). "11. Emparejamiento de decodificadores Viterbi y decodificadores Reed-Solomon en un sistema concatenado". Códigos Reed-Solomon y sus aplicaciones . IEEE Press. pág. 433. ISBN 9780470546345OCLC 557445046
- 1 2 Andrews, KS; Divsalar, D.; Dolinar, S.; Hamkins, J.; Jones, CR; Pollara, F. (2007). "El desarrollo de códigos turbo y LDPC para aplicaciones en el espacio profundo" (PDF) . Actas del IEEE . 95 (11): 2142– 56. doi : 10.1109/JPROC.2007.905132 . S2CID 9289140 .
- ↑ Lin, Shu; Costello, Daniel J. (1983). Codificación de control de errores: fundamentos y aplicaciones (ed. Nachdr .). Englewood Cliffs, NJ: Prentice-Hall. pág. 171. ISBN 978-0-13-283796-5.
- ↑ "Expresiones analíticas utilizadas en bercoding y BERTool" . Archivado del original el 1 de febrero de 2019. Consultado el 1 de febrero de 2019 .
- ↑ Pfender, Florian; Ziegler, Günter M. (septiembre de 2004), "Números de besos, empaquetamientos de esferas y algunas pruebas inesperadas" (PDF) , Notices of the American Mathematical Society , 51 (8): 873–883 , archivado (PDF) del original el 9 de mayo de 2008 , recuperado el 28 de septiembre de 2009.Explica el teorema de Delsarte-Goethals-Seidel tal como se utiliza en el contexto del código de corrección de errores para discos compactos .
- ↑ Peterson, W. (septiembre de 1960). "Procedimientos de codificación y corrección de errores para los códigos de Bose-Chaudhuri". IEEE Transactions on Information Theory . 6 (4): 459– 470. Bibcode : 1960IRTIT...6..459P . doi : 10.1109/TIT.1960.1057586 .
- ↑ Gorenstein, Daniel; Zierler, Neal (junio de 1961). "Una clase de códigos correctores de errores en símbolos $p^m$". Journal of the Society for Industrial and Applied Mathematics . 9 (2): 207– 214. doi : 10.1137/0109020 .
- ↑ Gill, John (s.f.). "Apuntes de EE387 n.º 7, Material complementario n.º 28" (PDF) . Universidad de Stanford. Archivado del original (PDF) el 30 de junio de 2014. Consultado el 21 de abril de 2010 .
- ↑ Lin, Shu; Costello, Daniel J. (2004). Codificación de control de errores: fundamentos y aplicaciones (2.ª ed.). Upper Saddle River, NJ: Pearson/Prentice Hall. pp. 255–262 . ISBN 978-0130426727.
- ↑ Guruswami, V.; Sudan, M. (septiembre de 1999), "Decodificación mejorada de códigos Reed-Solomon y códigos de geometría algebraica", IEEE Transactions on Information Theory , 45 (6): 1757–1767 , CiteSeerX 10.1.1.115.292 , doi : 10.1109/18.782097
- ↑ Brakensiek, Joshua; Gopi, Sivakanth; Makam, Visu (2 de junio de 2023). "Los códigos genéricos de Reed-Solomon alcanzan la capacidad de decodificación de listas" . Actas del 55.º Simposio Anual de la ACM sobre Teoría de la Computación . STOC 2023. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 1488–1501 . arXiv : 2206.05256 . doi : 10.1145 /3564246.3585128 . ISBN 978-1-4503-9913-5.
- ↑ Guo, Zeyu; Zhang, Zihan (2023). "Los códigos Reed-Solomon con puntuación aleatoria alcanzan la capacidad de decodificación de listas sobre alfabetos de tamaño polinomial" . 2023 IEEE 64th Annual Symposium on Foundations of Computer Science (FOCS) . FOCS 2023, Santa Cruz, CA, EE. UU., 2023. pp. 164–176 . arXiv : 2304.01403 . doi : 10.1109/FOCS57990.2023.00019 . ISBN 979-8-3503-1894-4.
- ↑ Alrabiah, Omar; Guruswami, Venkatesan; Li, Ray (2025), "Los códigos aleatorios de Reed-Solomon alcanzan la capacidad de decodificación de listas con alfabetos de tamaño lineal", Advances in Combinatorics , arXiv : 2304.09445 , doi : 10.19086/aic.2025.8
- ↑ Koetter, Ralf; Vardy, Alexander (2003). "Decodificación algebraica de decisión suave de códigos Reed-Solomon". IEEE Transactions on Information Theory . 49 (11): 2809– 2825. Bibcode : 2003ITIT...49.2809K . CiteSeerX 10.1.1.13.2021 . doi : 10.1109/TIT.2003.819332 .
- ↑ Franke, Steven J.; Taylor, Joseph H. (2016). "Decodificador de decisión suave de código abierto para el código Reed-Solomon JT65 (63,12)" (PDF) . QEX (mayo/junio): 8–17 . Archivado (PDF) del original el 9 de marzo de 2017. Recuperado el 7 de junio de 2017 .
- ↑ "Un nuevo algoritmo para decodificar códigos Reed-Solomon" (PDF) . Archivado del original (PDF) el 12 de julio de 2012.
- ↑ "Códigos generalizados de Reed-Solomon" (PDF) . Archivado del original (PDF) el 3 de diciembre de 2020.
Enlaces externos
Información y tutoriales
- Welch, LR (1997), La visión original de los códigos Reed-Solomon (PDF) , Apuntes de clase
- Koetter, Ralf (2005), Códigos Reed-Solomon , Apuntes de clase del MIT 6.451 (Vídeo), archivado del original el 13 de marzo de 2013.
- Introducción a los códigos Reed-Solomon: principios, arquitectura e implementación (CMU)
- Geisel, William A. (agosto de 1990), Tutorial sobre codificación de corrección de errores Reed-Solomon , Memorando técnico, NASA , TM-102162
- Reid, Jeff A. (abril de 1995), CRC y Reed Solomon ECC (PDF)
Implementaciones
- La biblioteca FEC escrita en C por Phil Karn (también conocido como KA9Q) incluye el códec Reed-Solomon, tanto en su versión arbitraria como optimizada (223,255).
- Biblioteca de decodificación suave Reed-Solomon de código abierto en C++
- Implementación en Matlab de la decodificación Reed-Solomon de errores y borrados.
- Detección y corrección de errores
- Teoría de la codificación