INVESTIGACION SOBRE EL CODIGO DE REDUNDANCIA CICLICA (CRC)

 

 

 

 

 

 

 

 

INTEGRANTES DEL EQUIPO

 

 

Aguayo Castellanos Roberto

Arriaga Fuentes Ricardo

Romero Salas Victor

Brenda

 

 

 

 

 

 

Mayo 2001

 

 

INVESTIGACION SOBRE EL CODIGO DE REDUNDANCIA CICLICA (CRC)

 

 

INDICE

 

                                                            PAGINA

 

1.- Objetivo                                                  3

 

2.- Introducción                                           3

 

3.- Antecedentes                                         4

 

4.- Marco teórico                                          6

 

5.- Desarrollo                                               8

 

6.- Ejemplo                                                  10

 

7.- Resumen                                               11

 

8.- Conclusión                                             11

 

9.- Referencias                                            12

 

 

 

 

 

 

 

 

INVESTIGACION SOBRE EL CODIGO DE REDUNDANCIA CICLICA (CRC)

 

 

 

1.- Objetivo

 

Comprender e ilustrar con ejemplos el principio de funcionamiento del código de redundancia cíclica, sus estándares  y aplicaciones en la detección de errores de transmisión de datos.

 

 

2.- Introducción

 

En la primera parte de esta investigación brindaremos algunos antecedentes para ubicar al lector de cómo ha evolucionado las técnicas de codificación de datos a través de la historia.

 

Con el marco teórico damos algunas definiciones útiles para comprensión del código de redundancia cíclica. En esta misma parte analizamos los motivos de la codificación de datos, vemos la protección de errores y resumimos como  han evolucionado los códigos de detección de errores hasta llegar a los códigos polinómicos como es el caso del código de redundancia cíclica.

 

En la parte fuerte de la investigación definimos al código de redundancia cíclica, damos el procedimiento de la creación de este código, el cálculo de la redundancia, las normas internacionales de este código, su implementación y un ejemplo de la creación de este código ante una trama de bits de entrada.

 

 

 

 

 

 

 

 

 

3.- Antecedentes

 

 LA CODIFICACIÓN DE LAS SEÑALES EN LA HISTORIA

 

Las sociedades antiguas han empleado siempre unas señales convencionales para transmitir los mensajes más urgentes y de uso más corriente, los contenidos más importantes que se codificaron por su significado secreto moderno datan de finales del siglo XVII, hechos por la Armada, en donde vemos la aplicación de la codificación en la marina.

 

A partir de aquella época cada marina puso en uso su propio código de señales, y con ello aparecieron distintos métodos y sistemas. Posteriormente se hizo evidente la necesidad de disponer de un código internacional de señales que solucionara el inconveniente de la diversidad de idiomas e hiciera posible las comunicaciones entre personas de habla distinta.  

 

{short description of image}

El primer código internacional fue recopilado por el Ministerio de Comercio Británico y comprendía, 7.000 señales utilizando 18 banderas. Estaba divido en dos partes: La primera edición se publicó en 1887, e inmediatamente fue objeto de varias revisiones y modificaciones (Conferencia Internacional de Washington, 1.889; Conferencia Internacional de Madrid, 1932; Asamblea de la I.M.C.O. de 1961, que acordó efectuar una revisión total y adaptarla a las exigencias actuales).

 

 

 

Las señales contenidas en el código pueden ser transmitidas con todo los medios de comunicación, que son:

·         Banderas.                                {short description of image}

 

·         Señales de Humo                  {short description of image}

{short description of image}·         Señales de Luz                               {short description of image}

 

·         Destellos, empleados los signos del alfabeto Morse.

   

·         Sonidos, con símbolos Morse.

·         Oral con megáfono.

·         Brazos, y utilizando el semáforo o Morse.

·         Radiotelegrafía y Radiotelefonía.

.        Comunicaciones alámbricas de datos 

.        Comunicaciones via satélite de datos

 

Otro gran avance de las radiocomunicaciones se produjo en 1950 con la miniaturización de los componentes y la aparición del transistor. Esto hizo posible el uso de frecuencias más altas y mayores potencias a un consumo más bajo e instalaciones menos costosas.  

 

Después de 1962, cuando fue puesto en órbita el primer satélite de comunicaciones "Telstar", se hizo posible transmitir mensajes por radio vía satélite, que eran reemitidos a cualquier punto deseado de la Tierra.

 

Con esta breve reseña vemos como a través de la historia  siempre ha habido la necesidad de emplear códigos estándares para el transmisor y el receptor para poder comunicarse con un mismo lenguaje, sin importar a veces de que país sean o que lengua hablen.

 

Pero aunado a este tipo de codificación el la actualidad aparte de los códigos que empleamos para transmitir las señales también necesitamos agregarle un nuevo código a nuestra señal para poder detectar errores en la transmisión.

 

Estos nuevos códigos de detección de errores  serán explicados en el marco teórico de la presente investigación.

 

 

 

 

 

 

 

 

4.- Marco Teórico

 

Primero empezaremos definiendo el termino datos, este se refiere a toda aquella  información que  represente un mensaje ya sea de tipo analógico o digital. El traslado de estos datos entre dos puntos situadas a cierta distancia es la transmisión de datos.

 

 

Entendemos por codificación de datos las técnicas que vamos a usar para mandar un tipo de datos utilizando señales analógicas o digitales. 

 

 Motivos de la codificación:

 

Aprovechar ancho de banda.

Sincronización. A partir de la señal que mando me gustaría poder recuperar el reloj del emisor.

Inmunidad ante el ruido e interferencias.

Abaratar los costos.

Disminuir la complejidad

 

En la transmisión de datos además de los códigos originales de la información, los equipos de comunicación de datos añaden bits de control que permiten detectar si ha habido algún error en la transmisión. Los errores se deben principalmente a ruido en el canal de transmisión que provoca que algunos bits o dígitos binarios se mal interpreten. La forma mas común de evitar estos errores es añadir a cada palabra (conjunto de bits) un bit que indica si el número de 1 en la palabra es par o impar. Según sea lo primero o lo segundo se dice que el control de paridad es par o impar. Este simple mecanismo permite detectar la mayor parte de errores que aparecen durante la transmisión de la información

 

Protección contra Errores

 

En toda transmisión pueden aparecer errores. Se determina la tasa de error por la relación entre el numero de bits erróneos y los bit totales. Lo mismo que con bits, se puede establecer una tasa para caracteres o bloques. Se denomina Error Residual al número de bits erróneos no corregidos en relación al total de bits enviados. Las  señales emitidas suelen sufrir dos tipos de deformación; atenuación (reducción de su amplitud); y desfase, siendo esta ultima la que más afecta a la transmisión. Otros factores que afectan a la señal son: ruido blanco (por los componentes eléctricos de los transformadores), ruido impulsivo, ecos, diafonias, etc. Las distorsiones físicas de la señal las trata el Equipo Terminal de Tratamiento de Datos y los problemas a nivel de bit los trata el Equipo Terminal del Circuito de Datos

 

 

 

 

Los sistemas de protección contra errores realizan una codificación del mensaje de datos y una posterior decodificación. En ambos casos se trabaja con dato binarios a nivel de enlace. Los errores se pueden detectar y/o corregir. La corrección la puede realizar el propio decodificador (corrección directa) o se realiza por retransmisión.

 

A los datos enviados se les asocian bits de control (se añade redundancia al mensaje). Estos se pueden calcular para cada bloque de datos, o en función de bloques precedentes (recurrentes).

 

Como ejemplos de procedimientos de control de errores se pueden citar:

 

  Ø       Control de paridad por carácter: consiste en hacer el número de unos que aparecen en el dato (byte) par o impar. Puede fijarse también la paridad a un valor de 1 (Mark) ó 0 (Space).

 

  Ø       Control de paridad por Matriz de caracteres: se determina la paridad de filas y columnas, y se envían los bits de control por filas. Permite tanto la detección como la corrección de los errores.

 

  Ø       Códigos Lineales: el conjunto de todos los bloques de datos posibles y sus respectivos bits de control, forman las palabras del código corrector. Cada palabra de n bits se componen de k bits de datos y n – k  bits de control (se llaman códigos n,k). Cada palabra de un código linear se determina multiplicando el vector de datos por una matriz generatriz. El decodificador determina si la palabra recibida pertenece al código o no (caso de un error).

 

Ø       Códigos Polinomicos: es un código lineal donde cada palabra del código es múltiplo de un polinomio generador. Los bits de control pueden obtenerse del resto de dividir los bits de información por el polinomio generador

 

 Ø       Códigos Cíclicos: son códigos lineales en los que cualquier permutación del vector pertenece al código. Los elementos del vector se consideran como coeficientes de un polinomio. La codificación/decodificación se realiza gracias a registros de desplazamiento (multiplicación o división del vector información con el generador). Un polinomio  generador CRC – 16 (X16 + X15 + X2 + 1) puede detectar errores en grupos de 16 bits, disminuyendo la tasa de error.

 

 Existen otros códigos de detección y corrección de errores pero para nuestro estudio analizaremos el código de redundancia cíclica.

 

 

 

 

 

 

 

5.- Desarrollo

 

El código de redundancia cìclica ( también conocido como código de redundancia cíclica o código CRC). Los códigos polinomicos se basan en el tratamiento de series de bits como si fueran representaciones de polinomios, con coeficientes de valor 0 y 1 únicamente.

 

Una trama de k bits se ve como una lista de coeficientes de un polinomio con k términos, cubriendo un rango desde Xk-1 hasta X0. A este tipo de polinomio se le conoce como polinomio de grado (k - 1).

 

El bit de orden mas alto (el de más a la izquierda) es el coeficiente correspondiente al termino Xk-1; el siguiente bit es el coeficiente de Xk-2, y así sucesivamente.

 

Por ejemplo, el código 110001 tiene 6 bits y, por consiguiente, representa a un polinomio de seis términos, que contiene los siguientes coeficientes 1, 1, 0, 0, 0, y 1, es decir: X5 + X4 + X0.

 

De acuerdo con las reglas de la teoría del campo algebraico, la aritmética del polinomio se realiza en modulo 2. No hay términos de acarreo para la suma ni de préstamo para la resta; las dos operaciones son idénticas al OR EXCLUSIVO.

 

Por ejemplo:

 

 

                                  10011011    00110011    11110000   01010101

                               + 11001010 + 11001101 - 10100110 - 10101111

                                   01010001   11111110    01010110   11111010

 

 

La división larga se realiza de la misma manera que en el caso binario, con excepción de la resta que se efectúa en módulo 2, como en el caso anterior. Se dice que el divisor "cabe en" el dividendo, si tiene tantos bits como este último.

 

 

 

Cuando se emplea el método del código polinomico, el emisor y el receptor deberán estar de acuerdo respecto a un polinomico generador, G(x), en forma anticipada. Los bits de orden superior e inferior del generador deben ser 1. Para calcular el código de redundancia de alguna trama con m bits, correspondiente al polinomio M(x), la trama deberá ser mas grande que el polinomio generador.

La idea básica consiste en incluir un código de redundancia al final de la trama, de tal manera que, el polinomio representado por la trama con el código de redundancia sea divisible por G(x). Cuando el receptor recibe la trama de suma comprobada, intenta dividirla entre G(x). Si existe un resto, habrá ocurrido un error de transmisión.

 

Cálculo  de la redundancia

 

1.-Sea r el grado de G(x). Agregar r bits a cero al extremo de orden inferior de la trama, de tal manera que ahora contenga m + r bits, y corresponda al polinomio xr M(x).

2-Dividir la serie de bits correspondientes a xr M(x) entre la serie de bits correspondientes a G(x), empleando la división en modulo 2.

3.-Restar el resto (que siempre tiene r o menos bits) de la serie de bits correspondientes a xr M(x), empleando la resta en modulo 2. El resultado es la trama lista para transmitir. Llámese T(x) a este polinomio.

 

Normas internacionales

 

CRC-12 = x12 + x11 + x3 + x2 + x1 + 1

CRC-16 = x16 + x15 + x2 + 1

CRC-ITU-T = x16 + x12 + x5 + 1

CRC32-ITU-T = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 +  1

 

Los tres contienen el término x + 1 como factor primo. El CRC-12 se utiliza cuando la longitud del carácter es de 6 bits; en tanto que los otros dos se emplean para caracteres de 8 bits. Un código de redundancia de 16 bits, como las normas CRC-16 o CRC-CCITT, captura todos los errores simples y dobles, todos los errores con un numero impar de bits, todos los errores de ráfagas con longitudes de 16 o menos bits. 99.997% de los errores de ráfagas de 17 bits y 99.998% de los errores de ráfagas de longitudes de 18 bits o mayores.

 

Implementación

 

Aunque el cálculo requerido para obtener los bits de redundancia puede parecer complicado, Peterson y Brown (1961) han demostrado que un simple circuito de registro de desplazamiento puede construirse para calcular y comprobar los bits de redundancia por hardware. En la practica, casi siempre se utiliza este hardware.

 

6.- Ejemplo

 

Cálculo para la trama 1101011011 y G(x) =x4+x+1.

Deberá quedar claro que T(x) es divisible (modulo 2) por G(x). En cualquier problema de división, si se le disminuye el resto al dividendo, lo que queda es divisible por el divisor.

7.- Resumen

 

El CRC es una de las herramientas más comunes y potentes para la detección de errores. Este consiste en considerar los bits de entrada como los coeficientes de un polinomio. Se utiliza el llamado "polinomio generador" compartido por el emisor y el receptor. La idea es construir con el polinomio de entrada un segundo polinomio que sea divisible por el polinomio generador. El mensaje que se transmite es el polinomio calculado. El polinomio recibido si no ha sufrido errores seguirá siendo divisible por el polinomio generador. Si no es divisible, es que se han producido errores

 

Dado un bloque de datos de k bits, el transmisor genera una secuencia de m bits, de forma que la trama resultante está formada por los k bits más los m bits generados. El código permite detectar todas las ráfagas de error que afectan a m bits, además de detectar todas las ráfagas que afecten a un número impar de bits.

 

 

8.- Conclusión

 

De esta investigación sobre el código de redundancia cíclica, concluimos primero que los códigos de detección y corrección de errores en cualquier transmisión de datos es de suma importancia ya que con estos evitamos que se tenga que reenviar la información por causa de un error y aseguramos que nuestra información llegará adecuadamente.

 

Dentro de las ventajas que encontramos con el código de redundancia cíclica en primera es que no solo detectamos un error en la transmisión sino que detectamos en donde ocurrió este error y asì podemos realizar la corrección de errores fácilmente, y además que la implementación de este código es muy sencilla por lo que con unos simples registros de corrimiento por hardware podemos efectuar la generación de la trama de redundancia en el transmisor y la detección y corrección de errores en el receptor siempre y cuando se acuerde en ambas partes el polinomio generador que ocupen. Y dentro de las desventajas que encontramos con este código es que al aumentarle la trama de redundancia al mensaje de transmisión requerimos un mayor ancho de banda.

 

9.- Referencias

 

Historia de la transmisión de datos . [ON LINE]. http://www.foromaritimovasco.com

TANUNBAUM, Andrew S. Redes de Computadoras. Tercera Edición. Prentice-Hall Hispanoamericana, S.A., México, 1997.

W. Wesley Peterson and E. J. Weldon. Error-Correcting Codes, Second Edition. MIT Press,1972.

 

Stanford University; Error-Correcting Codes.

http://www.stanford.edu/class/ee387/, 2000-2001