Código de corrección de errores

Esquema para controlar errores en datos a través de canales de comunicación ruidosos

En informática , telecomunicaciones , teoría de la información y teoría de codificación , la corrección de errores hacia adelante ( FEC ) o codificación de canal [1] [2] [3] es una técnica utilizada para controlar errores en la transmisión de datos a través de canales de comunicación poco confiables o ruidosos .

La idea central es que el remitente codifica el mensaje de forma redundante , la mayoría de las veces mediante el uso de un código de corrección de errores o código de corrección de errores ( ECC ). [4] [5] La redundancia permite al receptor no solo detectar errores que puedan ocurrir en cualquier parte del mensaje, sino que a menudo corrige un número limitado de errores. Por lo tanto, puede que no sea necesario un canal inverso para solicitar la retransmisión. El costo es un ancho de banda de canal directo fijo y mayor.

El matemático estadounidense Richard Hamming fue pionero en este campo en la década de 1940 e inventó el primer código de corrección de errores en 1950: el código Hamming (7,4) . [5]

La FEC se puede aplicar en situaciones donde las retransmisiones son costosas o imposibles, como en enlaces de comunicación unidireccionales o cuando se transmite a múltiples receptores en multidifusión .

Las conexiones con latencia prolongada también se benefician; en el caso de satélites que orbitan planetas distantes, la retransmisión debido a errores crearía un retraso de varias horas. La FEC también se utiliza ampliamente en módems y redes celulares .

El procesamiento FEC en un receptor se puede aplicar a un flujo de bits digitales o en la demodulación de una portadora modulada digitalmente. En este último caso, el FEC es una parte integral de la conversión inicial de analógico a digital en el receptor. El decodificador Viterbi implementa un algoritmo de decisión suave para demodular datos digitales de una señal analógica alterada por ruido. Muchos decodificadores FEC también pueden generar una señal de tasa de error de bit (BER) que se puede utilizar como retroalimentación para ajustar con precisión la electrónica de recepción analógica.

La información FEC se agrega a dispositivos de almacenamiento masivo (magnético, óptico y de estado sólido/basados ​​en flash) para permitir la recuperación de datos dañados y se utiliza como memoria de computadora ECC en sistemas que requieren disposiciones especiales para mayor confiabilidad.

La proporción máxima de errores o bits faltantes que se pueden corregir está determinada por el diseño del ECC, por lo que diferentes códigos de corrección de errores directos son adecuados para diferentes condiciones. En general, un código más fuerte induce más redundancia que necesita ser transmitida utilizando el ancho de banda disponible, lo que reduce la tasa de bits efectiva mientras mejora la relación señal-ruido efectiva recibida . El teorema de codificación de canal ruidoso de Claude Shannon se puede utilizar para calcular el ancho de banda de comunicación máximo alcanzable para una probabilidad de error máxima aceptable dada. Esto establece límites en la tasa de transferencia de información máxima teórica de un canal con un nivel de ruido base dado. Sin embargo, la prueba no es constructiva y, por lo tanto, no brinda ninguna idea de cómo construir un código que logre capacidad. Después de años de investigación, algunos sistemas FEC avanzados como el código polar [3] se acercan mucho al máximo teórico dado por la capacidad del canal de Shannon bajo la hipótesis de una trama de longitud infinita.

Método

La ECC se logra añadiendo redundancia a la información transmitida mediante un algoritmo. Un bit redundante puede ser una función complicada de muchos bits de información original. La información original puede aparecer o no literalmente en la salida codificada; los códigos que incluyen la entrada sin modificar en la salida son sistemáticos , mientras que los que no lo hacen son no sistemáticos .

Un ejemplo simplista de ECC es transmitir cada bit de datos 3 veces, lo que se conoce como código de repetición (3,1) . A través de un canal ruidoso, un receptor podría ver 8 versiones de la salida, consulte la tabla a continuación.

Se recibió el tripleteInterpretado como
0000 (sin errores)
0010
0100
1000
1111 (sin errores)
1101
1011
0111

Esto permite corregir un error en cualquiera de las tres muestras mediante "votación mayoritaria" o "votación democrática". La capacidad de corrección de este ECC es:

  • Hasta 1 bit de triplete con error, o
  • Se omiten hasta 2 bits del triplete (casos no mostrados en la tabla).

Aunque es fácil de implementar y se utiliza ampliamente, esta redundancia modular triple es un código ECC relativamente ineficiente. Los códigos ECC mejores suelen examinar las últimas decenas o incluso los últimos cientos de bits recibidos previamente para determinar cómo decodificar el pequeño puñado de bits actual (normalmente en grupos de 2 a 8 bits).

Promedio del ruido para reducir errores

Se podría decir que el ECC funciona "promediando el ruido"; dado que cada bit de datos afecta a muchos símbolos transmitidos, la corrupción de algunos símbolos por el ruido generalmente permite extraer los datos originales del usuario de los demás símbolos recibidos no corruptos que también dependen de los mismos datos del usuario.

  • Debido a este efecto de "agrupación de riesgos", los sistemas de comunicación digital que utilizan ECC tienden a funcionar muy por encima de una cierta relación señal/ruido mínima y en absoluto por debajo de ella.
  • Esta tendencia de todo o nada –el efecto acantilado– se vuelve más pronunciada a medida que se utilizan códigos más fuertes que se aproximan más al límite teórico de Shannon .
  • El entrelazado de datos codificados con ECC puede reducir las propiedades de todo o nada de los códigos ECC transmitidos cuando los errores de canal tienden a ocurrir en ráfagas. Sin embargo, este método tiene límites; se utiliza mejor en datos de banda estrecha.

La mayoría de los sistemas de telecomunicaciones utilizan un código de canal fijo diseñado para tolerar la tasa de error de bits esperada en el peor de los casos , y luego dejan de funcionar si la tasa de error de bits es aún peor. Sin embargo, algunos sistemas se adaptan a las condiciones de error de canal dadas: algunas instancias de solicitud de repetición automática híbrida utilizan un método ECC fijo siempre que el ECC pueda manejar la tasa de error, luego cambian a ARQ cuando la tasa de error se vuelve demasiado alta; la modulación y codificación adaptativas utilizan una variedad de tasas de ECC, agregando más bits de corrección de errores por paquete cuando hay tasas de error más altas en el canal, o eliminándolos cuando no son necesarios.

Tipos

Un código de bloque (específicamente un código Hamming ) donde se agregan bits redundantes como un bloque al final del mensaje inicial
Un código convolucional continuo donde se agregan bits redundantes continuamente a la estructura de la palabra de código.

Las dos categorías principales de códigos ECC son los códigos de bloque y los códigos convolucionales .

  • Los códigos de bloque funcionan con bloques de tamaño fijo (paquetes) de bits o símbolos de tamaño predeterminado. Los códigos de bloque prácticos generalmente se pueden decodificar en tiempo polinómico hasta su longitud de bloque.
  • Los códigos convolucionales funcionan con secuencias de bits o símbolos de longitud arbitraria. La mayoría de las veces se decodifican de forma suave con el algoritmo de Viterbi , aunque a veces se utilizan otros algoritmos. La decodificación de Viterbi permite una eficiencia de decodificación asintóticamente óptima con una longitud de restricción creciente del código convolucional, pero a expensas de una complejidad que aumenta exponencialmente . Un código convolucional que se termina también es un "código de bloque" en el sentido de que codifica un bloque de datos de entrada, pero el tamaño de bloque de un código convolucional es generalmente arbitrario, mientras que los códigos de bloque tienen un tamaño fijo dictado por sus características algebraicas. Los tipos de terminación para los códigos convolucionales incluyen "tail-biting" y "bit-flushing".

Existen muchos tipos de códigos de bloque; la codificación Reed-Solomon es notable por su uso generalizado en discos compactos , DVD y unidades de disco duro . Otros ejemplos de códigos de bloque clásicos incluyen Golay , BCH , paridad multidimensional y códigos Hamming .

El código Hamming ECC se utiliza habitualmente para corregir errores de memoria flash NAND . [6] Esto proporciona corrección de errores de un solo bit y detección de errores de 2 bits. Los códigos Hamming solo son adecuados para NAND de celda de un solo nivel (SLC) más confiable. Las NAND de celda multinivel (MLC) más densas pueden utilizar ECC de corrección de múltiples bits como BCH o Reed–Solomon. [7] [8] La memoria flash NOR normalmente no utiliza ninguna corrección de errores. [7]

Los códigos de bloques clásicos suelen decodificarse mediante algoritmos de decisión estricta [9], lo que significa que para cada señal de entrada y salida se toma una decisión estricta sobre si corresponde a un bit 1 o 0. Por el contrario, los códigos convolucionales suelen decodificarse mediante algoritmos de decisión blanda como los algoritmos Viterbi, MAP o BCJR , que procesan señales analógicas (discretizadas) y que permiten un rendimiento de corrección de errores mucho mayor que la decodificación de decisión estricta.

Casi todos los códigos de bloques clásicos aplican las propiedades algebraicas de los cuerpos finitos . Por lo tanto, los códigos de bloques clásicos suelen denominarse códigos algebraicos.

A diferencia de los códigos de bloque clásicos, que suelen especificar una capacidad de detección o corrección de errores, muchos códigos de bloque modernos, como los códigos LDPC, carecen de dichas garantías. En cambio, los códigos modernos se evalúan en términos de sus tasas de error de bits.

La mayoría de los códigos de corrección de errores directos solo corrigen cambios de bits, pero no inserciones ni eliminaciones de bits. En este contexto, la distancia de Hamming es la forma adecuada de medir la tasa de errores de bits . Algunos códigos de corrección de errores directos están diseñados para corregir inserciones y eliminaciones de bits, como los códigos de marcadores y los códigos de marca de agua. La distancia de Levenshtein es una forma más adecuada de medir la tasa de errores de bits cuando se utilizan dichos códigos. [10]

Velocidad de codificación y equilibrio entre fiabilidad y velocidad de datos

El principio fundamental del ECC es añadir bits redundantes para ayudar al decodificador a descubrir el mensaje verdadero que fue codificado por el transmisor. La tasa de codificación de un sistema ECC determinado se define como la relación entre el número de bits de información y el número total de bits (es decir, información más bits de redundancia) en un paquete de comunicación determinado. La tasa de codificación es, por tanto, un número real. Una tasa de codificación baja, cercana a cero, implica un código fuerte que utiliza muchos bits redundantes para lograr un buen rendimiento, mientras que una tasa de codificación alta, cercana a 1, implica un código débil.

Los bits redundantes que protegen la información deben transferirse utilizando los mismos recursos de comunicación que intentan proteger, lo que provoca un equilibrio fundamental entre fiabilidad y velocidad de datos. [11] En un extremo, un código fuerte (con una tasa de código baja) puede inducir un aumento importante de la relación señal-ruido (SNR) del receptor, lo que reduce la tasa de errores de bits, a costa de reducir la tasa de datos efectiva. En el otro extremo, no utilizar ningún ECC (es decir, una tasa de código igual a 1) utiliza todo el canal para fines de transferencia de información, a costa de dejar los bits sin ninguna protección adicional.

Una pregunta interesante es la siguiente: ¿qué tan eficiente en términos de transferencia de información puede ser un ECC que tiene una tasa de error de decodificación despreciable? Esta pregunta fue respondida por Claude Shannon con su segundo teorema, que dice que la capacidad del canal es la tasa de bits máxima alcanzable por cualquier ECC cuya tasa de error tiende a cero: [12] Su prueba se basa en la codificación aleatoria gaussiana, que no es adecuada para aplicaciones del mundo real. El límite superior dado por el trabajo de Shannon inspiró un largo viaje en el diseño de ECC que pueden acercarse al límite de rendimiento máximo. Varios códigos actuales pueden alcanzar casi el límite de Shannon. Sin embargo, los ECC que logran capacidad suelen ser extremadamente complejos de implementar.

Los ECC más populares tienen un equilibrio entre el rendimiento y la complejidad computacional. Por lo general, sus parámetros proporcionan un rango de posibles tasas de código, que se pueden optimizar según el escenario. Por lo general, esta optimización se realiza para lograr una baja probabilidad de error de decodificación y minimizar el impacto en la tasa de datos. Otro criterio para optimizar la tasa de código es equilibrar la baja tasa de error y el número de retransmisiones con el costo energético de la comunicación. [13]

Códigos ECC concatenados para un mejor rendimiento

Los códigos de bloque clásicos (algebraicos) y los códigos convolucionales se combinan frecuentemente en esquemas de codificación concatenados en los que un código convolucional decodificado por Viterbi de longitud de restricción corta hace la mayor parte del trabajo y un código de bloque (generalmente Reed-Solomon) con un tamaño de símbolo y una longitud de bloque mayores "limpia" los errores cometidos por el decodificador convolucional. La decodificación de una sola pasada con esta familia de códigos de corrección de errores puede producir tasas de error muy bajas, pero para condiciones de transmisión de largo alcance (como el espacio profundo) se recomienda la decodificación iterativa.

Los códigos concatenados han sido una práctica estándar en las comunicaciones por satélite y en el espacio profundo desde que la Voyager 2 utilizó por primera vez la técnica en su encuentro con Urano en 1986. La nave Galileo utilizó códigos concatenados iterativos para compensar las condiciones de tasa de error muy alta causadas por tener una antena defectuosa.

Comprobación de paridad de baja densidad (LDPC)

Los códigos de verificación de paridad de baja densidad (LDPC) son una clase de códigos de bloque lineales de alta eficiencia formados a partir de muchos códigos de verificación de paridad simple (SPC). Pueden proporcionar un rendimiento muy cercano a la capacidad del canal (el máximo teórico) utilizando un enfoque de decodificación iterado de decisión suave, con una complejidad de tiempo lineal en términos de su longitud de bloque. Las implementaciones prácticas dependen en gran medida de la decodificación de los códigos SPC constituyentes en paralelo.

Los códigos LDPC fueron introducidos por primera vez por Robert G. Gallager en su tesis doctoral en 1960, pero debido al esfuerzo computacional en la implementación del codificador y el decodificador y la introducción de los códigos Reed-Solomon , fueron en su mayoría ignorados hasta la década de 1990.

Los códigos LDPC se utilizan ahora en muchos estándares de comunicación de alta velocidad recientes, como DVB-S2 (Transmisión de video digital - Satélite - Segunda generación), WiMAX ( estándar IEEE 802.16e para comunicaciones por microondas), LAN inalámbrica de alta velocidad ( IEEE 802.11n ), [14] 10GBase-T Ethernet (802.3an) y G.hn/G.9960 (estándar ITU-T para redes sobre líneas eléctricas, líneas telefónicas y cable coaxial). Otros códigos LDPC están estandarizados para estándares de comunicación inalámbrica dentro de 3GPP MBMS (consulte los códigos fuente ).

Códigos turbo

La codificación turbo es un esquema de decodificación suave iterado que combina dos o más códigos convolucionales relativamente simples y un entrelazador para producir un código de bloque que puede funcionar con una precisión de una fracción de decibel del límite de Shannon . Preceden a los códigos LDPC en términos de aplicación práctica y ahora ofrecen un rendimiento similar.

Una de las primeras aplicaciones comerciales de la codificación turbo fue la tecnología celular digital CDMA2000 1x (TIA IS-2000) desarrollada por Qualcomm y vendida por Verizon Wireless , Sprint y otros operadores. También se utiliza para la evolución de CDMA2000 1x específicamente para acceso a Internet, 1xEV-DO (TIA IS-856). Al igual que 1x, EV-DO fue desarrollado por Qualcomm y es vendido por Verizon Wireless , Sprint y otros operadores (el nombre de marketing de Verizon para 1xEV-DO es Broadband Access , los nombres de marketing de Sprint para consumidores y empresas son Power Vision y Mobile Broadband , respectivamente).

Decodificación y prueba local de códigos

A veces, solo es necesario decodificar bits individuales del mensaje o verificar si una señal dada es una palabra de código, y hacerlo sin mirar la señal completa. Esto puede tener sentido en un entorno de transmisión, donde las palabras de código son demasiado grandes para ser decodificadas clásicamente con la suficiente rapidez y donde solo unos pocos bits del mensaje son de interés por ahora. Además, estos códigos se han convertido en una herramienta importante en la teoría de la complejidad computacional , por ejemplo, para el diseño de pruebas probabilísticamente verificables .

Los códigos decodificables localmente son códigos de corrección de errores para los cuales se pueden recuperar de manera probabilística bits individuales del mensaje observando solo una pequeña cantidad (por ejemplo, constante) de posiciones de una palabra de código, incluso después de que la palabra de código se haya corrompido en una fracción constante de posiciones. Los códigos comprobables localmente son códigos de corrección de errores para los cuales se puede verificar de manera probabilística si una señal está cerca de una palabra de código observando solo una pequeña cantidad de posiciones de la señal.

No todos los códigos de prueba se decodifican y prueban localmente.

No todos los códigos localmente decodificables (LDC) son códigos localmente comprobables (LTC) [15] ni tampoco los códigos localmente corregibles (LCC), [16] los LCC de q-query están acotados exponencialmente [17] [18] mientras que los LDC pueden tener longitudes subexponenciales . [19] [20]

Entrelazado

Una breve ilustración de la idea de entrelazamiento

El entrelazado se utiliza con frecuencia en los sistemas de comunicación y almacenamiento digitales para mejorar el rendimiento de los códigos de corrección de errores de avance. Muchos canales de comunicación no carecen de memoria: los errores suelen producirse en ráfagas en lugar de de forma independiente. Si el número de errores dentro de una palabra de código supera la capacidad del código de corrección de errores, no puede recuperar la palabra de código original. El entrelazado alivia este problema al mezclar los símbolos de origen en varias palabras de código, creando así una distribución más uniforme de los errores. [21] Por lo tanto, el entrelazado se utiliza ampliamente para la corrección de errores en ráfagas .

El análisis de códigos iterados modernos, como los códigos turbo y los códigos LDPC , generalmente supone una distribución independiente de errores. [22] Por lo tanto, los sistemas que utilizan códigos LDPC suelen emplear un entrelazado adicional entre los símbolos dentro de una palabra de código. [23]

Para los códigos turbo, un intercalador es un componente integral y su diseño adecuado es crucial para un buen rendimiento. [21] [24] El algoritmo de decodificación iterativa funciona mejor cuando no hay ciclos cortos en el gráfico de factores que representa al decodificador; el intercalador se elige para evitar ciclos cortos.

Los diseños de intercaladores incluyen:

  • intercaladores rectangulares (o uniformes) (similares al método que utiliza factores de salto descrito anteriormente)
  • entrelazadores convolucionales
  • intercaladores aleatorios (donde el intercalador es una permutación aleatoria conocida)
  • Entrelazador S-aleatorio (donde el entrelazador es una permutación aleatoria conocida con la restricción de que ningún símbolo de entrada dentro de una distancia S aparece dentro de una distancia de S en la salida). [25]
  • un polinomio de permutación cuadrática libre de contención (QPP). [26] Un ejemplo de uso es el estándar de telecomunicaciones móviles 3GPP Long Term Evolution . [27]

En sistemas de comunicación multiportadora , se puede emplear el entrelazado entre portadoras para proporcionar diversidad de frecuencia , por ejemplo, para mitigar el desvanecimiento selectivo de frecuencia o la interferencia de banda estrecha. [28]

Ejemplo

Transmisión sin entrelazado :

Mensaje sin errores: aaaabbbbccccddddeeeeffffggggTransmisión con un error de ráfaga: aaaabbbbccc____deeeeffffgggg

Aquí, cada grupo de la misma letra representa una palabra de código de corrección de errores de un bit y 4 bits. La palabra de código cccc se modifica en un bit y se puede corregir, pero la palabra de código dddd se modifica en tres bits, por lo que no se puede decodificar en absoluto o se puede decodificar de forma incorrecta .

Con intercalado :

Palabras de código sin errores: aaaabbbbccccddddeeeeffffggggIntercalado: abcdefgabcdefgabcdefgabcdefgTransmisión con un error de ráfaga: abcdefgabcd____bcdefgabcdefgPalabras de código recibidas después del desentrelazado: aa_abbbbccccdddde_eef_ffg_gg

En cada una de las palabras clave "aaaa", "eeee", "ffff" y "gggg", solo se altera un bit, por lo que el código de corrección de errores de un bit decodificará todo correctamente.

Transmisión sin entrelazado :

Oración original transmitida: ThisIsAnExampleOfInterleavingSe recibió una oración con un error de ráfaga: ThisIs______pleOfInterleaving

El término “UnEjemplo” resulta en su mayor parte ininteligible y difícil de corregir.

Con intercalado :

Oración transmitida: EsteEsUnEjemploDeIntercalado...Transmisión sin errores: TIEpfeaghsxlIrv.iAaenli.snmOten.Sentencia recibida con un error de ráfaga: TIEpfe______Irv.iAaenli.snmOten.Sentencia recibida tras desentrelazar: T_isI_AnE_amp_eOfInterle_vin_...

Ninguna palabra se pierde completamente y las letras que faltan se pueden recuperar con un mínimo de conjeturas.

Desventajas del entrelazado

El uso de técnicas de entrelazado aumenta el retardo total. Esto se debe a que se debe recibir todo el bloque entrelazado antes de que se puedan decodificar los paquetes. [29] Además, los entrelazadores ocultan la estructura de los errores; sin un entrelazador, los algoritmos de decodificación más avanzados pueden aprovechar la estructura de los errores y lograr una comunicación más confiable que un decodificador más simple combinado con un entrelazador [ cita requerida ] . Un ejemplo de dicho algoritmo se basa en las estructuras de redes neuronales [30] .

Software para códigos de corrección de errores

Simular el comportamiento de los códigos de corrección de errores (ECC) en software es una práctica habitual para diseñar, validar y mejorar los ECC. El próximo estándar inalámbrico 5G plantea una nueva gama de aplicaciones para los ECC de software: las redes de acceso por radio en la nube (C-RAN) en un contexto de radio definida por software (SDR) . La idea es utilizar directamente los ECC de software en las comunicaciones. Por ejemplo, en el 5G, los ECC de software podrían estar ubicados en la nube y las antenas conectadas a estos recursos informáticos: mejorando así la flexibilidad de la red de comunicaciones y, en última instancia, aumentando la eficiencia energética del sistema.

En este contexto, hay varios programas de código abierto disponibles que se enumeran a continuación (sin carácter exhaustivo).

  • AFF3CT(A Fast Forward Error Correction Toolbox): una cadena de comunicación completa en C++ (muchos códigos soportados como Turbo, LDPC, códigos Polar, etc.), muy rápida y especializada en codificación de canales (puede usarse como un programa para simulaciones o como una biblioteca para el SDR).
  • IT++ : una biblioteca C++ de clases y funciones para álgebra lineal, optimización numérica, procesamiento de señales, comunicaciones y estadísticas.
  • OpenAir: implementación (en C) de las especificaciones 3GPP relativas a las redes centrales de paquetes evolucionadas.

Lista de códigos de corrección de errores

DistanciaCódigo
2 (detección de un solo error)Paridad
3 (corrección de un solo error)Triple redundancia modular
3 (corrección de un solo error)Hamming perfecto como Hamming(7,4)
4 ( SECCIONADO )Hamming extendido
5 (corrección de doble error)
6 (detección de doble error/triple error)Código de Nordstrom-Robinson
7 (corrección de tres errores)Código binario perfecto de Golay
8 (TECFED)Código binario Golay extendido

Véase también

Referencias

  1. ^ Charles Wang; Dean Sklar; Diana Johnson (invierno de 2001-2002). "Forward Error-Correction Coding". Enlace cruzado . 3 (1). The Aerospace Corporation. Archivado desde el original el 14 de marzo de 2012 . Consultado el 5 de marzo de 2006 .
  2. ^ Charles Wang; Dean Sklar; Diana Johnson (invierno de 2001-2002). "Forward Error-Correction Coding". Enlace cruzado . 3 (1). The Aerospace Corporation. Archivado desde el original el 14 de marzo de 2012 . Consultado el 5 de marzo de 2006 . Cómo funcionan los códigos de corrección de errores hacia adelante]
  3. ^ ab Maunder, Robert (2016). "Descripción general de la codificación de canales".
  4. ^ Glover, Neal; Dudley, Trent (1990). Diseño práctico de corrección de errores para ingenieros (Revisión 1.1, 2.ª ed.). Colorado, EE. UU.: Cirrus Logic . ISBN 0-927239-00-0.
  5. ^ ab Hamming, Richard Wesley (abril de 1950). "Códigos de detección y corrección de errores". Bell System Technical Journal . 29 (2). EE. UU.: AT&T : 147–160. doi :10.1002/j.1538-7305.1950.tb00463.x. hdl : 10945/46756 . S2CID  61141773.
  6. ^ "Códigos Hamming para dispositivos de memoria flash NAND" Archivado el 21 de agosto de 2016 en Wayback Machine . EE Times-Asia. Aparentemente basado en "Micron Technical Note TN-29-08: Hamming Codes for NAND Flash Memory Devices" Archivado el 29 de agosto de 2017 en Wayback Machine . 2005. Ambos dicen: "El algoritmo Hamming es un método aceptado por la industria para la detección y corrección de errores en muchas aplicaciones basadas en flash NAND SLC".
  7. ^ ab "¿Qué tipos de ECC se deben utilizar en la memoria flash?" (Nota de aplicación) . Spansion. 2011. Tanto el algoritmo Reed-Solomon como el algoritmo BCH son opciones ECC comunes para la memoria flash NAND MLC. ... Los códigos de bloque basados ​​en Hamming son los ECC más utilizados para SLC.... tanto Reed-Solomon como BCH pueden manejar múltiples errores y se utilizan ampliamente en la memoria flash MLC.
  8. ^ Jim Cooke (agosto de 2007). "Las verdades incómodas de la memoria flash NAND" (PDF) . p. 28. Para SLC, un código con un umbral de corrección de 1 es suficiente. Se requiere t=4... para MLC.
  9. ^ Baldi, M.; Chiaraluce, F. (2008). "Un esquema simple para la decodificación de códigos BCH y RS mediante propagación de creencias en transmisiones multimedia". Revista internacional de radiodifusión multimedia digital . 2008 : 1–12. doi : 10.1155/2008/957846 .
  10. ^ Shah, Gaurav; Molina, Andres; Blaze, Matt (2006). "Teclados y canales encubiertos". USENIX . Consultado el 20 de diciembre de 2018 .
  11. ^ Tse, David; Viswanath, Pramod (2005), Fundamentos de la comunicación inalámbrica , Cambridge University Press , Reino Unido
  12. ^ Shannon, CE (1948). "Una teoría matemática de la comunicación" (PDF) . Bell System Technical Journal . 27 (3–4): 379–423 y 623–656. doi :10.1002/j.1538-7305.1948.tb01338.x. hdl : 11858/00-001M-0000-002C-4314-2 .
  13. ^ Rosas, F.; Brante, G.; Souza, RD; Oberli, C. (2014). "Optimización de la tasa de código para lograr comunicaciones inalámbricas energéticamente eficientes". Actas de la Conferencia de redes y comunicaciones inalámbricas del IEEE (WCNC) . pp. 775–780. doi :10.1109/WCNC.2014.6952166. ISBN . 978-1-4799-3083-8.
  14. ^ Estándar IEEE, sección 20.3.11.6 "802.11n-2009" Archivado el 3 de febrero de 2013 en Wayback Machine ., IEEE, 29 de octubre de 2009, consultado el 21 de marzo de 2011.
  15. ^ Kaufman, Tali ; Viderman, Michael. "Códigos comprobables localmente frente a códigos decodificables localmente".
  16. ^ Brubaker, Ben (9 de enero de 2024). «El esquema de corrección de errores «mágico» resultó ser intrínsecamente ineficiente». Quanta Magazine . Consultado el 9 de enero de 2024 .
  17. ^ Kothari, Pravesh K.; Manohar, Peter (2023). "Un límite inferior exponencial para códigos corregibles localmente de 3 consultas lineales". arXiv : 2311.00558 [cs.CC].
  18. ^ Kerenidis, Iordanis; de Wolf, Ronald (9 de junio de 2003). "Límite inferior exponencial para códigos localmente decodificables mediante dos consultas a través de un argumento cuántico". Actas del trigésimo quinto simposio anual de la ACM sobre teoría de la computación . ACM. págs. 106–115. arXiv : quant-ph/0208062 . doi :10.1145/780542.780560. ISBN . 978-1-58113-674-6.S2CID10585919  .
  19. ^ Yekhanin, Sergey (febrero de 2008). "Hacia códigos decodificables localmente de longitud subexponencial con 3 consultas". Revista de la ACM . 55 (1): 1–16. doi :10.1145/1326554.1326555. ISSN  0004-5411. S2CID  14617710.
  20. ^ Efremenko, Klim (31 de mayo de 2009). "3-query locally decodable codes of subexponencial length". Actas del cuadragésimo primer simposio anual de la ACM sobre teoría de la computación . ACM. págs. 39–44. doi :10.1145/1536414.1536422. ISBN . 978-1-60558-506-2.S2CID263865692  . {{cite book}}: |journal=ignorado ( ayuda )
  21. ^ ab Vucetic, B.; Yuan, J. (2000). Códigos turbo: principios y aplicaciones . Springer Verlag . ISBN 978-0-7923-7868-6.
  22. ^ Luby, Michael ; Mitzenmacher, M.; Shokrollahi, A.; Spielman, D.; Stemann, V. (1997). "Códigos prácticos resistentes a pérdidas". Proc. 29.º Simposio anual de la Association for Computing Machinery (ACM) sobre teoría de la computación .
  23. ^ "Transmisión de vídeo digital (DVB); Estructura de trama de segunda generación, codificación de canal y sistemas de modulación para radiodifusión, servicios interactivos, recopilación de noticias y otras aplicaciones de banda ancha por satélite (DVB-S2)". En 302 307 (V1.2.1). ETSI . Abril de 2009.
  24. ^ Andrews, KS; Divsalar, D.; Dolinar, S.; Hamkins, J.; Jones, CR; Pollara, F. (noviembre de 2007). "El desarrollo de códigos Turbo y LDPC para aplicaciones en el espacio profundo". Actas del IEEE . 95 (11): 2142–2156. doi :10.1109/JPROC.2007.905132. S2CID  9289140.
  25. ^ Dolinar, S.; Divsalar, D. (15 de agosto de 1995). "Distribuciones de peso para códigos turbo usando permutaciones aleatorias y no aleatorias". Informe de progreso de la TDA . 122 : 42–122. Código Bibliográfico :1995TDAPR.122...56D. CiteSeerX 10.1.1.105.6640 . 
  26. ^ Takeshita, Oscar (2006). "Intercaladores polinomiales de permutación: una perspectiva algebraico-geométrica". IEEE Transactions on Information Theory . 53 (6): 2116–2132. arXiv : cs/0601048 . Bibcode :2006cs........1048T. doi :10.1109/TIT.2007.896870. S2CID  660.
  27. ^ 3GPP TS 36.212, versión 8.8.0, página 14
  28. ^ "Transmisión de vídeo digital (DVB); Estructura de trama, codificación de canal y modulación para un sistema de transmisión de televisión digital terrestre de segunda generación (DVB-T2)". En 302 755 (V1.1.1). ETSI . Septiembre de 2009.
  29. ^ Techie (3 de junio de 2010). "Explicación del entrelazado". Blog de W3 Techie . Consultado el 3 de junio de 2010 .
  30. ^ Krastanov, Stefan; Jiang, Liang (8 de septiembre de 2017). "Decodificador probabilístico de redes neuronales profundas para códigos estabilizadores". Scientific Reports . 7 (1): 11003. arXiv : 1705.09334 . Bibcode :2017NatSR...711003K. doi : 10.1038/s41598-017-11266-1 . PMC 5591216 . PMID  28887480. 
  31. ^ Nordstrom, AW; Robinson, JP (1967), "Un código no lineal óptimo", Información y Control , 11 (5–6): 613–616, doi : 10.1016/S0019-9958(67)90835-2
  32. ^ Perry, Jonathan; Balakrishnan, Hari; Shah, Devavrat (2011). "Códigos espinales sin velocidad". Actas del 10.º taller de la ACM sobre temas de actualidad en redes . págs. 1–6. doi :10.1145/2070562.2070568. hdl : 1721.1/79676 . ISBN. 9781450310598.

Lectura adicional

  • MacWilliams, Florence Jessiem ; Sloane, Neil James Alexander (2007) [1977]. Escrito en AT&T Shannon Labs, Florham Park, Nueva Jersey, EE. UU. The Theory of Error-Correcting Codes . North-Holland Mathematical Library. Vol. 16 (impresión digital de la 12.ª impresión, 1.ª ed.). Ámsterdam / Londres / Nueva York / Tokio: North-Holland / Elsevier BV . ISBN 978-0-444-85193-2. Número de serie  76-41296.(xxii+762+6 páginas)
  • Clark, Jr., George C.; Cain, J. Bibb (1981). Codificación de corrección de errores para comunicaciones digitales . Nueva York, EE. UU.: Plenum Press . ISBN. 0-306-40615-2.
  • Arazi, Benjamin (1987). Swetman, Herb (ed.). Un enfoque de sentido común para la teoría de códigos de corrección de errores . MIT Press Series in Computer Systems. Vol. 10 (1.ª ed.). Cambridge, Massachusetts, EE. UU./Londres, Reino Unido: Instituto Tecnológico de Massachusetts . ISBN 0-262-01098-4. Código de artículo  87-21889.(x+2+208+4 páginas)
  • Wicker, Stephen B. (1995). Sistemas de control de errores para comunicaciones y almacenamiento digitales . Englewood Cliffs, Nueva Jersey, EE. UU.: Prentice-Hall . ISBN 0-13-200809-2.
  • Wilson, Stephen G. (1996). Modulación y codificación digital . Englewood Cliffs, Nueva Jersey, EE. UU.: Prentice-Hall . ISBN 0-13-210071-1.
  • "Código de corrección de errores en memorias flash NAND de celda de un solo nivel" 2007-02-16
  • "Código de corrección de errores en memorias NAND Flash" 2004-11-29
  • Observaciones sobre errores, correcciones y confianza en sistemas dependientes, por James Hamilton, 26 de febrero de 2012
  • Empaquetamientos de esferas, redes y grupos, por JH Conway, Neil James Alexander Sloane, Springer Science & Business Media , 2013-03-09 – Matemáticas – 682 páginas.
  • Morelos-Zaragoza, Robert (2004). "La página de códigos correctores (ECC)" . Consultado el 5 de marzo de 2006 .
  • Zoológico de corrección de errores. Base de datos de códigos de corrección de errores.
  • lpdec: biblioteca para decodificación LP y cosas relacionadas (Python)
Obtenido de "https://es.wikipedia.org/w/index.php?title=Código_de_corrección_de_errores&oldid=1241071121#Corrección_de_errores_de_reenvío"