Código de corrección de errores - Error correction code

En informática , telecomunicaciones , teoría de la información y teoría de la codificación , se utiliza un código de corrección de errores , a veces un código de corrección de errores , ( ECC ) para controlar errores en los datos a través de canales de comunicación ruidosos o poco fiables . La idea central es que el remitente codifica el mensaje con información redundante en forma de ECC. La redundancia permite al receptor detectar un número limitado de errores que pueden ocurrir en cualquier parte del mensaje y, a menudo, corregir estos errores sin retransmisión. El matemático estadounidense Richard Hammingfue 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) .

ECC contrasta con la detección de errores en que los errores que se encuentran pueden corregirse, no simplemente detectarse. La ventaja es que un sistema que usa ECC no requiere un canal inverso para solicitar la retransmisión de datos cuando ocurre un error. La desventaja es que hay una sobrecarga fija que se agrega al mensaje, lo que requiere un mayor ancho de banda de canal de avance. Por lo tanto, ECC se aplica en situaciones en las que las retransmisiones son costosas o imposibles, como enlaces de comunicación unidireccionales y cuando se transmite a múltiples receptores en multidifusión . Las conexiones de larga latencia también se benefician; en el caso de un satélite en órbita alrededor de Urano , la retransmisión debido a errores puede crear un retraso de cinco horas. La información ECC generalmente se agrega a los dispositivos de almacenamiento masivo para permitir la recuperación de datos corruptos, se usa ampliamente en módems y se usa en sistemas donde la memoria principal es la memoria ECC .

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

Las fracciones máximas de errores o de bits faltantes que se pueden corregir están determinadas por el diseño del código ECC, por lo que diferentes códigos de corrección de errores son adecuados para diferentes condiciones. En general, un código más fuerte induce más redundancia que debe transmitirse 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 da una idea de cómo construir un código de logro de capacidades. Después de años de investigación, algunos sistemas ECC avanzados a partir de 2016 se acercan mucho al máximo teórico.

Corrección de errores hacia adelante

En telecomunicaciones , teoría de la información y teoría de la codificación , la corrección de errores hacia adelante ( FEC ) o la codificación de canal es una técnica utilizada para controlar errores en la transmisión de datos a través de canales de comunicación ruidosos o poco confiables . La idea central es que el remitente codifique el mensaje de forma redundante , la mayoría de las veces utilizando un ECC.

La redundancia permite al receptor detectar un número limitado de errores que pueden ocurrir en cualquier parte del mensaje y, a menudo, corregir estos errores sin retransmisión. FEC le da al receptor la capacidad de corregir errores sin necesidad de un canal inverso para solicitar la retransmisión de datos, pero a costa de un ancho de banda de canal de avance fijo más alto. Por lo tanto, FEC se aplica en situaciones en las que las retransmisiones son costosas o imposibles, como enlaces de comunicación unidireccionales y cuando se transmite a múltiples receptores en multidifusión . La información FEC generalmente se agrega a dispositivos de almacenamiento masivo (magnético, óptico y de estado sólido / flash) para permitir la recuperación de datos corruptos, se usa ampliamente en módems , se usa en sistemas donde la memoria principal es la memoria ECC y en situaciones de transmisión, donde el receptor no tiene capacidad para solicitar la retransmisión o si lo hace induciría una latencia significativa. Por ejemplo, en el caso de un satélite que orbita alrededor de Urano , una retransmisión debido a errores de decodificación puede crear un retraso de al menos 5 horas.

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

La proporción máxima de errores o bits faltantes que pueden corregirse 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 debe transmitirse 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 canales ruidosos de Claude Shannon responde a la pregunta de cuánto ancho de banda queda para la comunicación de datos mientras se usa el código más eficiente que convierte la probabilidad de error de decodificación en cero. 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. Su prueba no es constructiva y, por lo tanto, no da una idea de cómo construir un código de logro de capacidad. Sin embargo, después de años de investigación, algunos sistemas FEC avanzados como el código polar logran la capacidad del canal de Shannon bajo la hipótesis de una trama de longitud infinita.

Cómo funciona

ECC se logra agregando redundancia a la información transmitida usando un algoritmo. Un bit redundante puede ser una función compleja de muchos bits de información originales. La información original puede aparecer o no literalmente en la salida codificada; los códigos que incluyen la entrada no modificada 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 puede ver 8 versiones de la salida, consulte la tabla a continuación.

Triplete recibido Interpretado como
000 0 (sin errores)
001 0
010 0
100 0
111 1 (sin errores)
110 1
101 1
011 1

Esto permite corregir un error en cualquiera de las tres muestras mediante "voto mayoritario" 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 de triplete (casos no mostrados en la tabla).

Aunque simple de implementar y ampliamente utilizado, esta triple redundancia modular es un ECC relativamente ineficiente. Los mejores códigos ECC normalmente examinan 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 de ruido para reducir errores

Se podría decir que 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 ruido normalmente permite extraer los datos originales del usuario de los otros 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 determinada relación mínima señal / ruido y no 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 acercan más al límite teórico de Shannon .
  • Intercalar datos codificados 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 en el peor de los casos esperados , y luego no funcionan en absoluto si la tasa de errores de bits es cada vez peor. Sin embargo, algunos sistemas se adaptan a las condiciones de error de canal dadas: algunas instancias de solicitud repetida automática híbrida utilizan un método ECC fijo siempre que el ECC pueda manejar la tasa de error, luego cambia a ARQ cuando la tasa de error es demasiado alta; La codificación y modulación adaptativa utiliza 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 de ECC

Una breve clasificación de los códigos de corrección de errores

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

  • Los códigos de bloque funcionan en 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 de forma rígida en tiempo polinomial a su longitud de bloque.
  • Los códigos convolucionales funcionan en flujos de bits o símbolos de longitud arbitraria. La mayoría de las veces se decodifican por software con el algoritmo de Viterbi , aunque a veces se utilizan otros algoritmos. La decodificación de Viterbi permite una eficiencia de decodificación óptima asintóticamente 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' porque 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 códigos convolucionales incluyen "mordisco" y "descarga de bits".

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

Hamming ECC se usa comúnmente para corregir errores de memoria flash NAND . Esto proporciona corrección de errores de un solo bit y detección de errores de 2 bits. Los códigos de Hamming solo son adecuados para NAND de celda de un solo nivel (SLC) más confiable . NAND de celdas multinivel más densas (MLC) puede utilizar ECC de corrección de multibits como BCH o Reed – Solomon. NOR Flash normalmente no utiliza ninguna corrección de errores.

Los códigos de bloque clásicos generalmente se decodifican usando algoritmos de decisión dura , lo que significa que para cada señal de entrada y salida se toma una decisión difícil si corresponde a un bit uno o cero. Por el contrario, los códigos convolucionales se decodifican típicamente utilizando algoritmos de decisión suave como los algoritmos Viterbi, MAP o BCJR , que procesan señales analógicas (discretizadas) y permiten un rendimiento de corrección de errores mucho mayor que la decodificación de decisión rígida.

Casi todos los códigos de bloque clásicos aplican las propiedades algebraicas de campos finitos . Por lo tanto, los códigos de bloque clásicos a menudo se denominan códigos algebraicos.

En contraste con los códigos de bloque clásicos que a menudo especifican una capacidad de detección o corrección de errores, muchos códigos de bloque modernos, como los códigos LDPC, carecen de tales 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 en reenvío corrigen solo cambios de bits, pero no inserciones o eliminaciones de bits. En esta configuración, la distancia de Hamming es la forma adecuada de medir la tasa de error de bit . Algunos códigos de corrección de errores de reenvío están diseñados para corregir inserciones y eliminaciones de bits, como códigos de marcador y códigos de marca de agua. La distancia de Levenshtein es una forma más apropiada de medir la tasa de error de bits cuando se utilizan dichos códigos.

Tasa de código y compensación entre confiabilidad y tasa de datos

El principio fundamental de ECC es agregar bits redundantes para ayudar al decodificador a encontrar el verdadero mensaje que fue codificado por el transmisor. La tasa de código de un sistema ECC dado 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 dado. La tasa de código es, por tanto, un número real. Una tasa de código baja cercana a cero implica un código fuerte que usa muchos bits redundantes para lograr un buen rendimiento, mientras que una tasa de código grande 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. Esto provoca una compensación fundamental entre confiabilidad y velocidad de datos. En un extremo, un código fuerte (con una tasa de código baja) puede inducir un aumento importante en el receptor SNR (relación señal / ruido) disminuyendo la tasa de error de bits, a costa de reducir la tasa de datos efectiva. En el otro extremo, no usar ningún ECC (es decir, una tasa de código igual a 1) usa el canal completo para propósitos 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 insignificante? Claude Shannon respondió a esta pregunta con su segundo teorema, que dice que la capacidad del canal es la tasa de bits máxima que puede alcanzar cualquier ECC cuya tasa de error tiende a cero: su prueba se basa en la codificación aleatoria gaussiana, que no es adecuada para el mundo real aplicaciones. 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 máximo de rendimiento. Varios códigos de hoy pueden alcanzar casi el límite de Shannon. Sin embargo, la capacidad de lograr ECC suele ser extremadamente compleja de implementar.

Los ECC más populares tienen un compromiso entre rendimiento y complejidad computacional. Por lo general, sus parámetros brindan 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 mientras se minimiza el impacto en la tasa de datos. Otro criterio para optimizar la tasa de código es equilibrar la tasa de error baja y el número de retransmisiones para el costo de energía de la comunicación.

Códigos ECC concatenados para un mejor rendimiento

Los códigos de bloque clásicos (algebraicos) y los códigos convolucionales se combinan con frecuencia en esquemas de codificación concatenados en los que un código convolucional decodificado por Viterbi de longitud restringida 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 más grandes "limpia" cualquier error cometido 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 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 el espacio profundo desde que la Voyager 2 utilizó por primera vez la técnica en su encuentro de 1986 con Urano . La nave Galileo utilizó códigos concatenados iterativos para compensar las condiciones de tasa de error muy altas 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 bloques lineales altamente eficientes hechos a partir de muchos códigos de verificación de paridad única (SPC). Pueden proporcionar un rendimiento muy cercano a la capacidad del canal (el máximo teórico) utilizando un enfoque de decodificación de decisión suave iterada, con una complejidad de tiempo lineal en términos de la longitud de su bloque. Las implementaciones prácticas se basan en gran medida en 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 decodificador y la introducción de los códigos Reed-Solomon , fueron ignorados en su mayoría hasta la década de 1990.

Los códigos LDPC ahora se utilizan en muchos estándares recientes de comunicación de alta velocidad, 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 ), 10GBase-T Ethernet (802.3an) y G.hn/G.9960 (Estándar ITU-T para redes a través de 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 (ver 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 intercalador para producir un código de bloque que puede funcionar dentro de una fracción de un decibel del límite de Shannon . Al ser anteriores a los códigos LDPC en términos de aplicación práctica, ahora ofrecen un rendimiento similar.

Una de las primeras aplicaciones comerciales de 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 comercial de Verizon para 1xEV-DO es Broadband Access , los nombres comerciales de Sprint para consumidores y empresas para 1xEV-DO son Power Vision y Mobile Banda ancha , respectivamente).

Decodificación local y prueba 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 lo suficientemente rápido y donde solo unos pocos bits del mensaje son de interés por ahora. Además, dichos 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 comprobables probabilísticamente .

Los códigos decodificables localmente son códigos de corrección de errores para los cuales se pueden recuperar probabilísticamente bits individuales del mensaje mirando solo un pequeño número (digamos 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 comprobar probabilísticamente si una señal está cerca de una palabra de código con solo mirar un pequeño número de posiciones de la señal.

Entrelazado

Una breve ilustración de la idea de entrelazado

El entrelazado se utiliza con frecuencia en los sistemas de almacenamiento y comunicación digital para mejorar el rendimiento de los códigos de corrección de errores hacia adelante. Muchos canales de comunicación no carecen de memoria: los errores suelen ocurrir en ráfagas en lugar de de forma independiente. Si el número de errores dentro de una palabra de código excede 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 fuente en varias palabras de código, creando así una distribución más uniforme de errores. 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 códigos turbo y códigos LDPC , generalmente asume una distribución independiente de errores. Por lo tanto, los sistemas que utilizan códigos LDPC emplean típicamente un entrelazado adicional a través de los símbolos dentro de una palabra de código.

Para los códigos turbo, un intercalador es un componente integral y su diseño adecuado es crucial para un buen rendimiento. 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:

  • entrelazadores rectangulares (o uniformes) (similar al método que usa factores de omisión descritos anteriormente)
  • intercaladores convolucionales
  • intercaladores aleatorios (donde el intercalador es una permutación aleatoria conocida)
  • Intercalador S-aleatorio (donde el intercalador es una permutación aleatoria conocida con la restricción de que no aparecen símbolos de entrada dentro de la distancia S dentro de una distancia de S en la salida).
  • un polinomio de permutación cuadrática libre de contención (QPP). Un ejemplo de uso es el estándar de telecomunicaciones móviles 3GPP Long Term Evolution .

En los sistemas de comunicación de múltiples portadoras , 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.

Ejemplo

Transmisión sin entrelazado :

Error-free message:                                 aaaabbbbccccddddeeeeffffgggg
Transmission with a burst error:                    aaaabbbbccc____deeeeffffgggg

Aquí, cada grupo de la misma letra representa una palabra de código de corrección de errores de un bit de 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 incorrectamente .

Con entrelazado :

Error-free code words:                              aaaabbbbccccddddeeeeffffgggg
Interleaved:                                        abcdefgabcdefgabcdefgabcdefg
Transmission with a burst error:                    abcdefgabcd____bcdefgabcdefg
Received code words after deinterleaving:           aa_abbbbccccdddde_eef_ffg_gg

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

Transmisión sin entrelazado :

Original transmitted sentence:                      ThisIsAnExampleOfInterleaving
Received sentence with a burst error:               ThisIs______pleOfInterleaving

El término "UnEjemplo" termina siendo en su mayoría ininteligible y difícil de corregir.

Con entrelazado :

Transmitted sentence:                               ThisIsAnExampleOfInterleaving...
Error-free transmission:                            TIEpfeaghsxlIrv.iAaenli.snmOten.
Received sentence with a burst error:               TIEpfe______Irv.iAaenli.snmOten.
Received sentence after deinterleaving:             T_isI_AnE_amp_eOfInterle_vin_...

Ninguna palabra se pierde por completo 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 retraso total. Esto se debe a que debe recibirse todo el bloque intercalado antes de que los paquetes puedan decodificarse. También los intercaladores ocultan la estructura de los errores; sin un intercalador, los algoritmos de decodificación más avanzados pueden aprovechar la estructura de error y lograr una comunicación más confiable que un decodificador más simple combinado con un intercalador. Un ejemplo de tal algoritmo se basa en estructuras de redes neuronales .

Software para códigos de corrección de errores

Simular el comportamiento de los códigos de corrección de errores (ECC) en el software es una práctica común 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 de radio en la nube (C-RAN) en un contexto de radio definido por software (SDR) . La idea es utilizar ECC de software directamente en las comunicaciones. Por ejemplo, en el 5G, los ECC de software podrían ubicarse en la nube y las antenas conectadas a estos recursos informáticos: mejorando de esta manera la flexibilidad de la red de comunicación y eventualmente aumentando la eficiencia energética del sistema.

En este contexto, hay varios software de código abierto disponibles que se enumeran a continuación (no exhaustivos).

  • AFF3CT (A Fast Forward Error Correction Toolbox): una cadena de comunicación completa en C ++ (muchos códigos compatibles como Turbo, LDPC, códigos polares, etc.), muy rápida y especializada en codificación de canales (se puede utilizar como 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 Evolved Packet Core Networks.

Lista de códigos de corrección de errores

Distancia Código
2 (detección de error único) Paridad
3 (corrección de un solo error) Redundancia modular triple
3 (corrección de un solo error) Hamming perfecto como Hamming (7,4)
4 ( SEGUNDO ) Hamming extendido
5 (corrección de doble error)
6 (corrección de error doble / detección de error triple)
7 (corrección de tres errores) código Golay binario perfecto
8 (TECFED) código Golay binario extendido

Ver también

Referencias

Otras lecturas

enlaces externos