Está en la página 1de 10

ALGORITMO DE CORRECCION Y DETECCION DE ERRORES

INTRODUCCION
La comunicacin entre varias computadoras produce continuamente un movimiento de datos, generalmente por canales no diseados para este propsito (lnea telefnica), y que introducen un ruido externo que produce errores en la transmisin. Por lo tanto, debemos asegurarnos que si dicho movimiento causa errores, stos puedan ser detectados. El mtodo para detectar y corregir errores es incluir en los bloques de datos transmitidos bits adicionales denominados redundancia. Se han desarrollado dos estrategias bsicas para manejar los errores: Incluir suficiente informacin redundante en cada bloque de datos para que se puedan detectar y corregir los bits errneos. Se utilizan cdigos de correccin de errores. Incluir slo la informacin redundante necesaria en cada bloque de datos para detectar los errores. En este caso el nmero de bits de redundancia es menor. Se utilizan cdigos de deteccin 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.

TIPOS DE DETECTORES Paridad simple (paridad horizontal)


Consiste en aadir un bit de ms a la cadena que queremos enviar, y que nos indicar si el nmero 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 generacin de un bit de paridad simple: Queremos enviar la cadena 1110100: 1 Contamos la cantidad de unos que hay: 4 unos 2 El nmero de unos es par por tanto aadimos un bit con valor = 0 3 La cadena enviada es 1110100

El receptor ahora, repite la operacin de contar la cantidad de unos que hay (menos el ltimo bit) y si coincide, es que no ha habido error. Problemas de este mtodo: 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 nmeros en la transmisin en vez de uno.

Paridad cruzada (paridad horizontal-vertical)

Para mejorar un poco el mtodo 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 ms claro este mtodo, se suelen agrupar los bits en una matriz de N filas por K columnas, luego se realizan todas las paridades horizontales por el mtodo anterior, y por ltimo, se hace las misma operacin de calcular el nmero 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 nmero par errores ya no es cero, como en el caso anterior. Aun as, existen todava una gran cantidad de errores no detectables
Un ejemplo de paridad cruzada (o de cdigo geomtrico) 1 Tenemos este cdigo para transmitir: 1100101111010110010111010110 2 Agrupamos el cdigo en cada una de las palabras, formando una matriz de N x K: 1100101 1110101 1001011 1010110 3 Aadimos los bits de paridad horizontal: 1100101 1110101 1001011 1010110 0 1 0 0

4 Aadimos los bits de paridad vertical: 1100101 1110101 1001011 1010110 0 1 0 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 rfaga (errores que afectan a varios bits consecutivos, debidos a causas generalmente electrnicas, como chispazos, y que haran que se perdiera toda una palabra completa).

Cdigos de redundancia cclica tambin llamados CRC


Intentando mejorar los cdigos que slo controlan la paridad de bit, aparecen los cdigos cclicos. Estos cdigos utilizan la aritmtica modular para detectar una mayor cantidad de errores, se usan operaciones en mdulo 2 y las sumas y restas se realizan sin acarreo (convirtindose en operaciones de tipo Or-Exclusivo o XOR). Adems, para facilitar los clculos se trabaja, aunque slo tericamente, con polinomios. La finalidad de este mtodo es crear una parte de redundancia la cual se aade al final del cdigo a transmitir (como en los mtodos de

paridad) que siendo la ms pequea posible, detecte el mayor nmero de errores que sea posible. Pero adems de esto, debe ser un mtodo sistemtico, es decir, que con un mismo cdigo a transmitir (y un mismo polinomio generador) se genere siempre el mismo cdigo 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 slo incrementa la longitud en un aproximado 1,6%.
(16bits / (128bytes * 8bitsporbyte)) * 100 = 1,5625

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

usado

normalmente

en

las

Los clculos que realiza el equipo transmisor para calcular su CRC son: Aade tantos ceros por la derecha al mensaje original como el grado del polinomio generador Divide el mensaje con los ceros incluidos entre el polinomio generador El resto que se obtiene de la divisin se suma al mensaje con los ceros incluidos Se enva el resultado obtenido Estas operaciones generalmente son incorporadas en el hardware para que pueda ser calculado con mayor rapidez, pero en la teora se utilizan los polinomios para facilitar los clculos.

Ejemplo de obtencin 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 x10 + x9 + x7 + x4 mensaje por x4 (aadir 4 ceros por la derecha):

3 Dividir en binario el mensaje por el polinomio generador y sacar el resto: x2 + 1 4 Concatenar el mensaje x10 + x9 + x7 + x4 + x2 + 1 5 Transmitir el mensaje con el resto (en mdulo 2 tambin):

El equipo receptor debe comprobar el cdigo CRC para detectar si se han producido o no errores.
Ejemplo de los clculos del receptor: 1 Mediante el protocolo correspondiente acuerdan el polinomio generador 2 Divide el cdigo recibido entre el polinomio generador 3 Comprueba el resto de dicha operacin

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 cdigos correctores

En resumen, este mtodo 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 rfagas con una longitud menor que el grado del polinomio generador: todos Otras rfagas: un porcentaje elevado y cercano al 100%

Suma de comprobacin
Es un mtodo sencillo pero eficiente slo con cadenas de palabras de una longitud pequea, es por esto que se suele utilizar en cabeceras de tramas importantes u otras cadenas importantes y en combinacin con otros mtodos. 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 nmero entero numerado segn el sistema de numeracin 2L 1. A continuacin se suma el valor de todas las palabras en las que se divide el mensaje, y se aade 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 numeracin: 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 aadir el nmero 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 mtodo al ser ms sencillo es ptimo para ser implementado en software ya que se puede alcanzar velocidades de clculo similares a la implementacin en hardware.

Distancia de Hamming basada en comprobacin

Si queremos detectar d bit errneos en una palabra de n bits, podemos aadir 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 mnima 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 cdigo (con una distancia de Hamming x <= d+1 la palabra no pertenece al cdigo) detecta correctamente si es una palabra errnea. An ms, d o menos errores nunca se convertirn en una palabra vlida debido a que la distancia de Hamming entre cada palabra vlida es de al menos d+1, y tales errores conducen solamente a las palabras invlidas que se detectan correctamente. Dado un conjunto de m*n bits, podemos detectar x <= d bits errores correctamente usando el mismo mtodo en todas las palabras de n bits. De hecho, podemos detectar un mximo de m*d errores si todas las palabras de n bits son transmitidas con un mximo de d errores. Ejemplo Palabras a enviar: 000001 000001 000010 Codificadas con distancia mnima de Hamming = 2 000001 0000 000001 0011 000010 1100 Si las palabras recibidas tienen una distancia de Hamming < 2, son palabras incorrectas.

ALGORITMO DE CHECKSUM DE INTERNET


La idea en la que se basa la suma de chequeo de Internet es muy sencilla: se suman todas las palabras de 16 bits que conforman el mensaje y se

transmite, junto con el mensaje, el resultado de dicha suma (este resultado recibe el nombre de checksum). Al llegar el mensaje a su destino, el receptor realiza el mismo clculo sobre los datos recibidos y compara el resultado con el checksum recibido. Si cualquiera de los datos transmitidos, incluyendo el mismo checksum, esta corrupto, el resultado no concordar y el receptor sabr que ha ocurrido un error. El checksum se realiza de la siguiente manera: los datos que sern procesados (el mensaje) son acomodados como una secuencias de enteros de 16 bits. Estos enteros se suman utilizando aritmtica complemento a uno para 16 bits y, para generar el checksum, se toma el complemento a uno para 16 bits del resultado. En aritmtica complemento a uno, un entero negativo -x se representa como el complemento de x; es decir, cada bit de x es invertido. Cuando los nmeros se adicionan, si se obtiene un acarreo (carry) en el bit ms significativo, se debe incrementar el resultado. Por ejemplo, sumemos -5 y -3 en aritmtica complemento a uno con enteros de 4 bits. En este caso +5 se representara con 0101 y -5 con 1010; +3 se representara con 0011 y -3 con 1100. Al sumar 1010 y 1100, ignorando el acarreo (carry) que queda en el bit ms significativo, tendremos como resultado 0110. En la aritmtica complemento a uno, cuando una operacin genera un acarreo (carry) en el bit ms significativo, se debe incrementar el resultado; es decir que 0110 se convierte en 0111, que es la representacin complemento a uno de -8 (obtenido de invertir los bits 1000). El uso del algoritmo de checksum de Internet en los headers de los protocolos se puede resumir en tres pasos simples. Los octetos adyacentes que se deben verificar con al suma de chequeo deben ser acomodados para formar enteros de 16 bits, luego se calcula la suma complemento a uno de estos enteros (de 16 bits) Para generar el checksum, el campo de checksum del header del PDU que ser transmitido es puesto en cero, luego la suma complemento a uno es calculada sobre los octetos correspondientes y el complemento a uno de esta suma se coloca en el campo de checksum. Para revisar el checksum, la suma es calculada sobre los mismo octetos, incluyendo el campo de checsum. Si el resultado es 16 bits con valor 1 (-0 en aritmtica complemento a uno), el chequeo es correcto. Como un ejemplo sencillo del clculo del checksum supongamos que tenemos tres "palabras" de 16 bits 0110011001100110 0101010101010101 0000111100001111 La suma de las dos primeras palabras sera: 0110011001100110 0101010101010101 1011101110111011

Adicionando ahora la tercera "palabra" al resultado anterior tenemos 1011101110111011 0000111100001111 1100101011001010 La suma complemento a uno se obtiene convirtiendo todos los ceros en unos y todos los unos en ceros. De esta forma la suma complemento a uno de 1100101011001010 sera 0011010100110101. Que vendra a ser el checksum. Al llegar al receptor las cuatro palabra de 16 bits, incluyendo el checksum son sumados y el resultado debe ser 1111111111111111. Si uno de los bits es cero, un error ha sido detectado. Dependiendo del protocolo, se deben seleccionar ciertos campos de los headers para realizar los clculos del checksum. En IP el checksum se calcula slo sobre los octetos que componen el header del datagrama (RFC791), en UDP (RFC768) se calcula sobre un seudo-header , el header UDP y los datos que transporta UDP y en TCP (RFC793) se hace un clculo similar que en UDP. Si desea conocer los detalles del cculo del checksum puede ver los siguientes ejemplos. Clculo del campo de checksum en el header de IP Clculo del campo de checksum en el header de UDP Clculo del campo de checksum en el header de TCP El RFC1071, Computing the Internet Checksum, discute mtodos para calcular de manera eficiente el checksum de Internet que se utiliza en los protocolos IP, UDP y TCP. La siguiente rutina es una implementacin directa del algoritmo de checksum de Internet. El argumento cantidad trae la longitud del buffer medido en unidades de 16 bits. La rutina asume que buffer ha sido rellenado de ceros (0) para que se ajuste a un tamao mltiplo de 16 bits.
u_short checksum (u_short *buffer, int cantidad) { register u_long suma = 0; while (cantidad--) { suma += *buffer++; if (suma & 0xFFFF0000) { /* hubo acarreo, se debe incrementar el resultado */ suma &= 0xFFFF; suma++; } } return ~(suma & 0xFFFF); }

Este cdigo asegura que el clculo utiliza aritmtica complemento a uno, antes que aritmtica complemento a dos que es la utilizada por la mayora de mquinas. Observe el if dentro del ciclo while. Si existe un acarreo (carry) al final de la suma de 16 bits, entonces se incrementa suma.

Al utilizar este checksum, se agregan 16 bits al mensaje original como cdigo de deteccin de errores, pero esta no es una tcnica fuerte de deteccin de errores. por qu? Por ejemplo, si una pareja de bits individuales, uno de los cuales incrementa una palabra de 16 bits, de las que conforman el mensaje, en cierta cantidad y el otro bit decrementa otra palabra de 16 bits en la misma cantidad, al realizar la suma de chequeo no ser detectado el error. La razn por la cual un algoritmo como ste es utilizado, aunque tenga una proteccin dbil contra errores, es simple: este algoritmo es fcil de implementar en software (el algoritmo de CRC utilizado en los protocolos de la capa de enlace, como Ethernet y Token Ring se implementan en el hardware de las tarjetas de red). Adems la experiencia observada en ARPANET sugiri que un checksum era adecuado: este checksum es la ltima lnea de defensa en los protocolos de TCP/IP pues la gran mayora de errores son descubiertos por algoritmos de deteccin de errores ms fuertes, tales como los CRCs utilizados en la capa de enlace (capa 2 del modelo OSI).

VITERBI DECODIFICADOR
El algoritmo de Viterbi es una programacin dinmica algoritmo para encontrar la ms probable secuencia de estados ocultos - llamada la ruta de Viterbi - que se traduce en una secuencia de eventos observados, especialmente en el contexto de las fuentes de informacin de Markov , y, en general, los modelos ocultos de Markov . El algoritmo de avance es un algoritmo estrechamente relacionados para calcular la probabilidad de una secuencia de hechos observados. Estos algoritmos pertenecen al reino de la teora de la probabilidad . El algoritmo realiza una serie de supuestos: En primer lugar, tanto en los hechos observados y los eventos ocultos debe estar en una secuencia. La secuencia es a menudo temporal, es decir, para el momento del suceso. En segundo lugar, estas dos secuencias deben ser alineados: un ejemplo de un hecho observado debe corresponder exactamente a una instancia de un evento oculto. En tercer lugar, la computacin en la secuencia oculta ms probable (que conduce a un estado en particular), hasta un cierto punto t debe depender slo en el caso observado en el punto t , y la secuencia ms probable es que conduce a ese estado en el punto t - 1.

Estos supuestos se satisfacen en un modelo oculto de Markov de primer orden. Los trminos "camino Viterbi" y "algoritmo de Viterbi" se aplican tambin a los relacionados con algoritmos de programacin dinmica que descubre la explicacin ms probable para una observacin. Por ejemplo, en el anlisis estadstico de un algoritmo de programacin dinmica se puede utilizar para descubrir el contexto nico sin ms probable derivacin (anlisis) de una cadena, que es a veces llamado el "Viterbi analizar". El algoritmo de Viterbi fue concebido por Andrew Viterbi en 1967 como un algoritmo de decodificacin de cdigos convolucionales ms ruidosos los

enlaces de comunicacin digital.Para ms detalles sobre la historia de la evolucin del algoritmo ver David Forney artculo 's. [ 1 ] El algoritmo ha encontrado una aplicacin universal en la descodificacin de los cdigos convolucionales utilizados tanto en CDMA y GSM celular digital, dialup mdems, satlites, en el fondo -espacio de las comunicaciones, y 802.11 LAN inalmbricas. Ahora es tambin de uso general en el reconocimiento de voz , deteccin de palabras clave , la lingstica computacional y bioinformtica . Por ejemplo, en la voz a texto (reconocimiento de voz), la seal acstica se considera como la secuencia de los eventos observados, y una cadena de texto es considerado como la "causa oculta" de la seal acstica. El algoritmo de Viterbi encuentra la cadena ms probable del texto dado la seal acstica.

Informacin general
Los supuestos enumerados anteriormente pueden ser elaborados de la siguiente manera. El algoritmo de Viterbi opera en una mquina de estados suposicin. Es decir, en cualquier momento el sistema que se modela est en uno de un nmero finito de estados. Mientras que varias secuencias de estados (caminos) puede conducir a un estado determinado, por lo menos uno de ellos es un camino ms probable para ese estado, llamada la "ruta de los sobrevivientes". Esta es una premisa fundamental del algoritmo porque el algoritmo examina todos los posibles caminos que conducen a un estado y slo mantener la ms probable. De esta manera el algoritmo no tiene que realizar un seguimiento de todos los caminos posibles, slo uno por estado. Un segundo supuesto fundamental es que una transicin de un estado anterior a un nuevo estado se caracteriza por un incremento mtricas, por lo general un nmero. Esta transicin se calcula a partir del evento. El supuesto de tercera clave es que los sucesos se acumulan ms de un camino en cierto sentido, habitualmente adicional. As que el quid del algoritmo es mantener un nmero para cada estado. Cuando ocurre un evento, el algoritmo analiza avanzar hacia un nuevo conjunto de estados mediante la combinacin de la mtrica de un estado anterior es posible con la mtrica incrementales de la transicin, debido al evento y elige lo mejor. La mtrica incremental asociado a un evento depende de la posibilidad de transicin desde el estado anterior al nuevo Estado. Por ejemplo, en comunicaciones de datos, es posible que slo transmiten la mitad de los smbolos de un estado con nmeros impares y la otra mitad de un estado de pares. Adems, en muchos casos, el grfico de transicin de estado no est totalmente conectado. Un ejemplo sencillo es un coche que tiene tres estados - adelante, detener y revertir - y no se le permite experimentar una transicin de avance a retroceso sin entrar en el estado de parada. Despus de calcular las combinaciones de mtricas adicionales y el estado mtricas, slo los mejores sobreviven y todos los otros caminos se descartan. Hay modificaciones en el algoritmo bsico que permiten una bsqueda hacia adelante, adems de la una hacia atrs se describe aqu.

La historia de ruta debe ser almacenada. En algunos casos, el historial de bsqueda es completa, porque la mquina del Estado en el codificador se inicia en un estado conocido y no hay memoria suficiente para guardar todos los caminos. En otros casos, una solucin de programacin debe ser encontrado por los recursos limitados: un ejemplo es la codificacin convolucional, donde el decodificador debe truncar la historia, a una profundidad suficiente para mantener el rendimiento a un nivel aceptable. Aunque el algoritmo de Viterbi es muy eficiente y hay modificaciones que reducen la carga computacional, los requisitos de memoria tienden a permanecer constantes.

Algoritmo
Supongamos que tenemos un modelo oculto de Markov (HMM) con los estados Y , las probabilidades iniciales i de estar en el estado i , y las probabilidades de transicin una i , j de la transicin del estado i al estado j . Decir que observamos las salidas . La secuencia de estados ms probable que han producido las observaciones est dado por las relaciones de recurrencia:

Aqu V t , k es la probabilidad de la secuencia de estado ms probable responsable de la primera t + 1 observaciones (se aade una indexacin, ya comenz a 0) que tiene k como su estado final. El camino Viterbi puede ser recuperada por el ahorro punteros que recordar que el estado y se utiliz en la segunda ecuacin. Vamos Ptr ( k , t ) es la funcin que devuelve el valor de y utiliza para calcular V t , k si t > 0 , o k si t = 0 . Entonces:

La complejidad de este algoritmo es

BIBLIOGRAFIA
http://webcache.googleusercontent.com/search? q=cache:NZFj0TDPLd4J:es.wikipedia.org/wiki/Correcci %C3%B3n_de_errores_hacia_adelante+algoritmo+de+correcion+de+datos &cd=2&hl=es&ct=clnk&gl=pe http://es.wikipedia.org/wiki/Detecci%C3%B3n_y_correcci %C3%B3n_de_errores http://www.arcesio.net/checksum/checksuminternet.html http://en.wikipedia.org/wiki/Viterbi_decoder http://en.wikipedia.org/wiki/Viterbi_algorithm

También podría gustarte