Códigos Detectores y Correctores de Error
Códigos Detectores y Correctores de Error
Códigos Detectores y Correctores de Error
Estrategias
Hasta el momento, los mecanismos que hemos estudiado se encuadran dentro de los
métodos de detección de errores, con capacidad de detección pero no de corrección. A
continuación vamos a desarrollar los métodos de corrección de errores.
Introducción [editar]
Ejemplo [editar]
Ejemplo [editar]
Los códigos Reed-Solomon son particularmente útiles para corregir burst error (cuando
una serie de bits en el código de palabra se reciben con error).
Decodificación [editar]
Cada uno de los seis registros contiene un símbolo (8bits). Los operadores aritméticos
llevan la suma o multiplicación de campo finito en un símbolo completo.
Arquitectura del decodificador [editar]
Donde:
Encontrar el lugar del símbolo erróneo implica resolver de forma simultánea ecuaciones
con t incógnitas. Varios algoritmos rápidos existen para realizar lo anterior.
Estos algoritmos toman ventaja de la estructura matricial especial de los códigos Reed-
Solomon y reducen de gran forma el esfuerzo computacional requerido. En general dos
pasos se requieren:
algoritmo de Forney.
Implementación de Codificadores y Decodificadores Reed-Solomon
[editar]
Hasta hace poco implementación en software para aplicaciones en tiempo real requería
demasiado poder computacional para todos excepto los más simples códigos Reed-
Solomon (es decir, códigos con pequeños valores de t). El mayor problema de
implementar los códigos Reed-Solomon en software es que procesadores de propósito
general no soportan aritmética de campo de Galois. Por ejemplo, para implementar un
campo de Galois que multiplique en software requiere un test de cero, dos revisiones en
tablas logarítmicas, sumatoria en módulo, y búsqueda en tabla de antilogaritmo. Sin
embargo con el aumento en el rendimiento de los procesadores y un diseño cuidadoso
significa que implementación en software pueden trabajar con tasas de bits
relativamente altas. La siguiente tabla muestra un ejemplo de pruebas hechas en un
Pentium de 166Mhz PC:
Estas tasas de datos son solamente para decodificación, para la codificación se vuelve
mucho más rápido debido a que requiere menos cálculos.
Un bit de paridad es un dígito binario que indica si el número de bits con un valor de 1
en un conjunto de bits es par o impar. Los bits de paridad conforman el método de
detección de errores más simple.
Hay dos tipos de bits de paridad: bit de paridad par y bit de paridad impar.
La paridad par es un caso especial del control de redundancia cíclica (CRC), donde el
bit de CRC se genera por el polinomio x+1.
Nótese que este método detecta los errores, pero no los corrige (salvo en el caso de que
la palabra transmitida sea de tamaño 1 bit).
Si por algún error, obtenemos otro símbolo del alfabeto, no tenemos manera de
detectarlo.
Si al código anterior le añadimos un bit al final, se podrán detectar algunos
errores determinados.
Si el bit que hemos añadido lo ponemos a cero, y por un error se produce un
cambio en el último bit, se detectaría que ese símbolo recibido es un símbolo
inválido.
Por ejemplo si recibimos un 001 en vez de un 000, sabríamos que el símbolo recibido es
erróneo puesto que no existe en nuestro alfabeto.
Normalmente el valor del bit o de los bits de redundancia se pone con un valor que sea
función de alguno o algunos de los bits anteriores, de forma que ayude a identificar
errores de comunicación en otros bits. Habitualmente esta función es la suma o XOR de
todos los bits anteriores.
Este bit de paridad se determina de forma que el número total de bits 1 a transmitir sea
par (código de paridad par) o impar (código de paridad impar).
Ejemplos: Tenemos el carácter original 0111001. Vemos que la trama a transmitir tiene
un número par de unos (4). Al añadir el bit de paridad obtendremos el siguiente carácter,
que es el que se transmitirá a destino:
Si usamos paridad par, ya hay un número par de unos, por tanto se añade un 0, y
transmitiremos 00111001
Si usamos paridad impar, como hay un número par de unos, hemos de añadir
otro 1 para conseguir un número impar, y transmitiremos 10111001
Si se envía un dato y durante la transmisión se produce un único error, el destinatario
puede detectarlo al comprobar la paridad en destino. Usando los ejemplos anteriores, y
alterando un solo bit de la trama transmitida, nos quedaría.
Este método, aunque resulta satisfactorio en general, sólo es útil si los errores no
cambian un número par de bits a la vez, ya que un número par de errores no afecta a la
paridad final de los datos.
Además de esta paridad simple, véase también los códigos de paridad de bloques para
detectar y corregir errores en un bloque de datos transmitidos