Detección y corrección de errores

En matemáticas, computación y teoría de la información, la detección y corrección de errores es una importante práctica para el mantenimiento e integridad de los datos a través de canales ruidosos y medios de almacenamiento poco confiables.

Contenido

Introducción

La comunicación entre varias computadoras produce continuamente un movimiento de datos, generalmente por canales no diseñados para este propósito (línea telefónica), y que introducen un ruido externo que produce errores en la transmisión.

Por lo tanto, debemos asegurarnos que si dicho movimiento causa errores, éstos puedan ser detectados. El método para detectar y corregir errores es incluir en los bloques de datos transmitidos bits adicionales denominados redundancia.

Se han desarrollado dos estrategias básicas para manejar los errores:

  • Incluir suficiente información redundante en cada bloque de datos para que se puedan detectar y corregir los bits erróneos. Se utilizan códigos de corrección de errores.
  • Incluir sólo la información redundante necesaria en cada bloque de datos para detectar los errores. En este caso el número de bits de redundancia es menor. Se utilizan códigos de detección de errores.

Si consideramos un bloque de datos formado por m bits de datos y r de redundancia, la longitud final del bloque será n, donde n = m + r.

Tipo de códigos detectores

Paridad simple (paridad horizontal)

Consiste en añadir un bit de más a la cadena que queremos enviar, y que nos indicará si el número de unos (bits puestos a 1) es par o es impar. Si es par incluiremos este bit con el valor = 0, y si no es así, lo incluiremos con valor = 1.

Ejemplo de generación de un bit de paridad simple:

Queremos enviar la cadena “1110100”:
1º Contamos la cantidad de unos que hay: 4 unos
2º El número de unos es par por tanto añadimos un bit con valor = 0
3º La cadena enviada es 11101000

El receptor ahora, repite la operación de contar la cantidad de “unos” que hay (menos el último bit) y si coincide, es que no ha habido error.

Problemas de este método:

Hay una alta probabilidad de que se cuelen casos en los que ha habido error, y que el error no sea detectado, como ocurre si se cambian dos números en la transmisión en vez de uno.

Paridad cruzada (paridad horizontal-vertical)

Para mejorar un poco el método anterior, se realiza una paridad que afecte tanto a los bits de cada cadena o palabra como a un conjunto de todos ellos. Siempre se utilizan cadenas relativamente cortas para evitar que se cuelen muchos errores.

Para ver más claro este método, se suelen agrupar los bits en una matriz de N filas por K columnas, luego se realizan todas las paridades horizontales por el método anterior, y por último, se hace las misma operación de calcular el número de unos, pero ahora de cada columna.

La probabilidad de encontrar un solo error es la misma, pero en cambio, la probabilidad de encontrar un número par errores ya no es cero, como en el caso anterior. Aun así, existen todavía una gran cantidad de errores no detectables

Un ejemplo de paridad cruzada (o de código geométrico)

1º Tenemos este código para transmitir: 1100101111010110010111010110
2º Agrupamos el código en cada una de las palabras, formando una matriz de N x K:

1100101
1110101
1001011
1010110

3º Añadimos los bits de paridad horizontal:

1100101 0
1110101 1
1001011 0
1010110 0

4º Añadimos los bits de paridad vertical:

1100101 0
1110101 1
1001011 0
1010110 0

0001101 1

Una vez creada la matriz, podemos enviar ésta por filas, o por columnas. Enviando las palabras por columnas aumentamos la posibilidad de corregir una palabra que haya sufrido un error de ráfaga (errores que afectan a varios bits consecutivos, debidos a causas generalmente electrónicas, como chispazos, y que harían que se perdiera toda una palabra completa).

Códigos de redundancia cíclica también llamados CRC

Intentando mejorar los códigos que sólo controlan la paridad de bit, aparecen los códigos cíclicos. Estos códigos utilizan la aritmética modular para detectar una mayor cantidad de errores, se usan operaciones en módulo 2 y las sumas y restas se realizan sin acarreo (convirtiéndose en operaciones de tipo Or-Exclusivo o XOR). Además, para facilitar los cálculos se trabaja, aunque sólo teóricamente, con polinomios.

La finalidad de este método es crear una parte de redundancia la cual se añade al final del código a transmitir (como en los métodos de paridad) que siendo la más pequeña posible, detecte el mayor número de errores que sea posible.

Pero además de esto, debe ser un método sistemático, es decir, que con un mismo código a transmitir (y un mismo polinomio generador) se genere siempre el mismo código final.

El polinomio generador: es un polinomio elegido previamente y que tiene como propiedad minimizar la redundancia. Suele tener una longitud de 16 bits, para mensajes de 128 bytes, lo que indica que la eficiencia es buena. Ya que sólo incrementa la longitud en un aproximado 1,6%:

(16bits / (128bytes * 8bitsporbyte)) * 100 = 1,5625

Un ejemplo de polinomio generador usado normalmente en las redes WAN es: g(x) = x16 + x12 + x5 + 1

Los cálculos que realiza el equipo transmisor para calcular su CRC son:

  1. Añade tantos ceros por la derecha al mensaje original como el grado del polinomio generador
  2. Divide el mensaje con los ceros incluidos entre el polinomio generador
  3. El resto que se obtiene de la división se suma al mensaje con los ceros incluidos
  4. Se envía el resultado obtenido

Estas operaciones generalmente son incorporadas en el hardware para que pueda ser calculado con mayor rapidez, pero en la teoría se utilizan los polinomios para facilitar los cálculos.

Ejemplo de obtención del CRC:

Datos:
Mensaje codificado en binario: 1101001
Polinomio generador: x4 + x + 1

Operaciones:

1º Obtener el polinomio equivalente al mensaje: x6 + x5 + x3 + 1

2º Multiplicar el mensaje por x4 (añadir 4 ceros por la derecha): x10 + x9 + x7 + x4

3º Dividir en binario el mensaje por el polinomio generador y sacar el resto: x2 + 1

4º Concatenar el mensaje con el resto (en módulo 2 también): x10 + x9 + x7 + x4 + x2 + 1

5º Transmitir el mensaje

El equipo receptor debe comprobar el código CRC para detectar si se han producido o no errores.

Ejemplo de los cálculos del receptor:

1º Mediante el protocolo correspondiente acuerdan el polinomio generador
2º Divide el código recibido entre el polinomio generador
3º Comprueba el resto de dicha operación

 3.1 Si el resto es cero, no se han producido errores
 3.2 Procesar el mensaje

 3.1 Si el resto es distinto de cero, significa que se han producido errores
 3.2 Reenviar el mensaje

 3.2 Intentar corregir los errores mediante los códigos correctores

En resumen, este método requiere de un polinomio generador que, elegido correctamente, puede llegar a detectar gran cantidad de errores:

  • Errores simples: todos
  • Errores dobles: todos
  • Errores en las posiciones impares de los bits: todos
  • Errores en ráfagas con una longitud menor que el grado del polinomio generador: todos
  • Otras ráfagas: un porcentaje elevado y cercano al 100%

Suma de comprobación

Es un método sencillo pero eficiente sólo con cadenas de palabras de una longitud pequeña, es por esto que se suele utilizar en cabeceras de tramas importantes u otras cadenas importantes y en combinación con otros métodos.

Funcionalidad: consiste en agrupar el mensaje a transmitir en cadenas de una longitud determinada L no muy grande, de por ejemplo 16 bits. Considerando a cada cadena como un número entero numerado según el sistema de numeración 2L − 1. A continuación se suma el valor de todas las palabras en las que se divide el mensaje, y se añade el resultado al mensaje a transmitir, pero cambiado de signo.

Con esto, el receptor lo único que tiene que hacer es sumar todas las cadenas, y si el resultado es 0 no hay errores.

Ejemplo:

Mensaje 101001110101

1º Acordar la longitud de cada cadena: 3

2º Acordar el sistema de numeración: 23 − 1 = 7

3º Dividir el mensaje: 101 001 110 101

4º Asociar cada cadena con un entero: 5 1 6 5

5º Sumar todos los valores y añadir el número cambiado de signo: -17

6º Enviar 5 1 6 5 -17 codificado en binario
El receptor:

1º Suma todos los valores; si la suma es 0, procesa el mensaje; si no, se ha producido un error.

Este método al ser más sencillo es óptimo para ser implementado en software ya que se puede alcanzar velocidades de cálculo similares a la implementación en hardware

Distancia de Hamming basada en comprobación

Hipercubo binario de dimensión cuatro.

Si queremos detectar d bit erróneos en una palabra de n bits, podemos añadir a cada palabra de n bits d+1 bits predeterminados al final, de forma que quede una palabra de n+d+1 bits con una distancia mínima de Hamming de d+1. De esta manera, si uno recibe una palabra de n+d+1 bits que no encaja con ninguna palabra del código (con una distancia de Hamming x <= d+1 la palabra no pertenece al código) detecta correctamente si es una palabra errónea. Aún más, d o menos errores nunca se convertirán en una palabra válida debido a que la distancia de Hamming entre cada palabra válida es de al menos d+1, y tales errores conducen solamente a las palabras inválidas que se detectan correctamente. Dado un conjunto de m*n bits, podemos detectar x <= d bits errores correctamente usando el mismo método en todas las palabras de n bits. De hecho, podemos detectar un máximo de m*d errores si todas las palabras de n bits son transmitidas con un máximo de d errores.

Ejemplo

Palabras a enviar:

  1. 000001
  2. 000001
  3. 000010
Codificadas con distancia mínima de Hamming = 2
000001 0000
000001 0011
000010 1100

Si las palabras recibidas tienen una distancia de Hamming < 2, son palabras incorrectas.

Lista de los métodos de corrección y detección de errores

Enlaces externos


Wikimedia foundation. 2010.

Mira otros diccionarios:

  • Corrección de errores en transmisiones digitales — Saltar a navegación, búsqueda Las técnicas de corrección de error son procedimientos utilizados en tratamiento digital de señal para revertir errores detectados durante la transmisión de señales digitales. Contenido 1 Origen de los errores 2… …   Wikipedia Español

  • Corrección de errores hacia adelante — Saltar a navegación, búsqueda La corrección de errores hacia adelante (en inglés, Forward Error Correction o FEC) es un tipo de mecanismo de corrección de errores que permite su corrección en el receptor sin retransmisión de la información… …   Wikipedia Español

  • Detección de errores — ► locución TELECOMUNICACIONES Método de protección contra los errores de transmisión o registro. * * * En el ordenador, los datos están moviéndose continuamente: teclado memoria, memoria pantalla, etc. Por lo tanto, debemos asegurarnos que dicho… …   Enciclopedia Universal

  • Capa de enlace de datos — Pila OSI. El nivel de enlace de datos (en inglés data link level) o capa de enlace de datos es la segunda capa del modelo OSI, el cual es responsable de la transferencia fiable de información a través de un circuito de transmisión de datos.… …   Wikipedia Español

  • Códigos detectores y correctores de error — Los códigos detectores y correctores de error se refieren a los errores de transmisión en las líneas se deben a mucho a diversos factores, como el ruido térmico, ruido impulsivo y ruido de intermodulación. Dependiendo del medio de transmisión y… …   Wikipedia Español

  • SLIP — Saltar a navegación, búsqueda Serial Line Internet Protocol (SLIP) Familia: Protocolos de enlace punto a punto Función: Transmisión de datagramas IP no estándar en líneas serie. Ubicación en la pila de protocolos …   Wikipedia Español

  • Serial Line Internet Protocol — (SLIP) Familia: Protocolos de enlace punto a punto Función: Transmisión de datagramas IP no estándar en líneas serie. Ubicación en la pila de protocolos Aplicación FTP, SMTP, HTTP …   Wikipedia Español

  • Memoria de acceso aleatorio — Para otros usos de este término, véase RAM (desambiguación). DIMM normal y corriente de memoria RAM tipo DDR3 de 240 contactos. La memoria de acceso aleatorio (en inglés: random access memory, cuyo acrónimo es RAM) es la memoria desde donde el …   Wikipedia Español

  • Código Hamming — En informática, el código de Hamming es un código detector y corrector de errores que lleva el nombre de su inventor, Richard Hamming. En los datos codificados en Hamming se pueden detectar errores en un bit y corregirlos, sin embargo no se… …   Wikipedia Español

  • Bluetooth (especificación) — Bluetooth es una especificación que define redes de área personal inalámbricas (wireless personal area network, WPAN). Está desarrollada por Bluetooth SIG y, a partir de su versión 1.1, sus niveles más bajos (en concreto, el nivel físico y el… …   Wikipedia Español


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.