Universidad Nacional de Quilmes Diplomatura en Ciencia y Tecnología TÉCNICAS DIGITALES CÓDIGOS DETECTORES Y CORRECTORES DE ERRORES Códigos con redundancia detectores de errores. Supongamos que se transmiten datos entre dos medios electrónicos, ya sea por red, un medio inalámbrico, a un equipo remoto, por la red telefónica (módem), o bien, la lectura de una memoria y un ruido electrónico cambie (invierta el valor), entones la lectura sería incorrecta. Supongamos que se quiere transmitir el código BCD representado en a figura 1, si se invierte un bit la lectura sería la correspondiente a un casillero adyacente en el mapa de Karnaugh (figura 2), ya que como se sabe los datos representados en casilleros adyacentes difieren en un bit. Si el dato a enviar era el 5 (0101) y se invierte un bit las situaciones posible son: a. b. c. d. 1101: la información es rechazada por no pertenecer al código. 0001: se recibe información errónea, el 1. 0111: se recibe información errónea, el 7. 0100: se recibe información errónea, el 4. Salvo en el primer caso la información es aceptada pues no se puede detectar el error. Si bien es lógico pensar que puede haber más de un bit errado, estadísticas reales indican que en este tipo de transmisión de datos la probabilidad de que ocurra un error es muy baja, siendo esta probabilidad casi nula de que en una palabra ocurran dos errores, por este motivo y por el tipo de curso nos limitaremos al estudio de detectar y corregir errores de un bit. Definiciones: Se denomina “distancia 1” en un código, cuando si a una palabra válida se le cambia un bit, se obtiene otra palabra válida. Se denomina “distancia 2” en un código, cuando es necesario cambiar 2 bits a una palabra para pasar a otra válida. “Distancia mínima de un código” es la menor de todas las distancias entre 2 palabras que lo constituyen. Recopilación y aportes: Ing. Alberto J. Mazzone Página 1 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores De acuerdo a estas definiciones los códigos de distancia mínima 2 rechazarían cualquier palabra que tenga un error de 1 bit, pues estaríamos ante una palabra fuera de código. Para detectar N bits de error es necesario utilizar códigos con distancia mínima de N+1 bits Códigos BCD de distancia 2detectores de errores. Sí modificamos el código BCD Natural agregando un cero o un 1 de modo de formar palabras con un número par de 1 (de esto proviene el nombre de bit de paridad al bit agregado). Como para codificar cada uno de los 10 dígitos decimales 4 bits alcanzan, el 5° bit o bit de paridad no aporta ninguna información, es redundante, los códigos así generados se llaman códigos redundantes. Veamos como quedan el nuevo cuadro y el mapa de Karnaugh con el agregado del bit de paridad: Como se ve para pasar de una combinación válida a otra también válida hay que cambiar por lo menos 2 bits, estamos frente a un código de distancia 2. Por ejemplo: si se envía un 4 es decir 01001, se produce un error de transmisión y se recibe 01011 (*) no es un código válido, la información será rechazada y en general se pide al transmisor que retransmita el mensaje. En el álgebra booleana la generación del bit de paridad es la siguiente: p = b3 b2 b1 b0 que expresada con compuertas es : La figura 5 muestra otros 2 códigos de distancia 2 menos utilizados, llamados respectivamente 2 entre 5 y 2 entre 7 también llamado “biquinario”. En estos códigos los pesos no son 8-4-2-1 sino los indicados en el cuadro. 2 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores Códigos con redundancia autocorrectores de errores. El uso de códigos detectores de errores implica un pedido de retransmisión del mensaje, es la forma usual y circuitalmente económica de operar, pero cuando la velocidad cuenta existen códigos que detectan e identifican el bit que se invirtió, que luego con un circuito adecuado se corrige. En el ejemplo anterior sabemos que el 01011 no es un código válido, pero no podemos saber si proviene del 01001 (4), del 00011 (1) o bien del 01010 (5), pues es imposible detectar cuál fue el bit que se invirtió. En cambio si utilizamos un código redundante de distancia mínima 3, para ello necesitamos más bits de paridad, las cosas cambian. Código de Hamming de distancia 3 autocorrector de errores. Hamming invento un método para aumentar a 3 la distancia mínima en el código redundante que de esta manera no solo detectar si la combinación recibida presenta o no un bit errado y en caso afirmativo determinar la posición del mismo para corregirlo. Comenzaremos con un repaso del contexto del problema utilizando la nomenclatura utilizada por Hamming para la construcción del código, una Ii para representar los bits de información y pi para los bits de paridad. Para una mayor sencillez comenzaremos con un código de 2 bits y 4 palabras que por ejemplo representan los dígitos 0, 1,2 y 3, por lo que los bits de información serán: I1 y I2. La transmisión simple sería: I1I2, y en la figura 6 se muestra el código a transmitir y su respectivo mapa de Karnaugh. Como en todo el código la distancia es 1 cualquier diferencia de 1 bit sería una palabra del código y será aceptada a pesar del error. Como ya hemos visto, para detectar un error de 1 bit basta con agregar un bit de paridad al que llamaremos p1. La transmisión simple sería: p1I2I3, y en la figura 7 se muestra el código a transmitir y su respectivo mapa de Karnaugh. Como la distancia entre palabras es 2, cualquier diferencia de 1 bit esta fuera de código, pero es imposible detectar cuál es la palabra efectivamente transmitida pues cada casillero en banco tiene como adyacente a más de una palabra valida como se ve en a figura 7. La distancia mínima que debe existir para detectar el error e individualizar la palabra enviada en origen para poder corregirlo, pues solo habrá que invertirlo es donde c es la cantidad de errores admitidos, en nuestro caso es: 3 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores Código de Hamming Hamming invento un método para construir códigos redundantes para detectar si las palabras recibidas presentan o no 1 bit errado, y, en caso afirmativo determinar la posición del mismo para así poder corregirlo. El método es el siguiente: 1. Determinación del número p de bits redundantes de paridad necesarios: sí tenemos bits de información, habrá posibilidades de error de 1 bit en la información, a las que se suman las posibilidades de error en los bits de paridad, 1 posibilidad de palabra sin errores. Las posibilidades que se pueden identificar con p bits es de 2p, por lo tanto deberá ser: La solución de esta inecuación se realiza, al ser p un número natural, por tanteos. 2. Construcción de las palabras del código de Hamming: El total de bits de la palabra será y se ordenaran del 1 al reservándose las potencias de 2 para los bits de paridad y el resto, en orden, para los de información. Una vez ordenado se colocan los subíndices en binario, los subíndices de los bits redundantes como so potencias de 2 solo tendrán un 1, el resto es 0, y, darán origen a subconjuntos, cada uno de los bits redundantes darán paridad a cada uno de los subconjuntos. Los subconjuntos se arman con los que tiene 1 en la posición del en cuestión. Volvamos a nuestro ejemplo donde : Si ; Se adopta entonces Como que es la cantidad de bits por palabra las potencias de 2 utilizadas como subíndices de son: 0, 1 y, es decir los bits de redundancia serán , pues: quedando el formato de la palabra de la siguiente manera: Colocando los subíndices en binario: Por lo tanto: debe dar paridad al subconjunto debe dar paridad al subconjunto debe dar paridad al subconjunto Esto es para cada elemento del código, por razones de claridad se construye una tabla para cada palabra del código que se quiere proteger generando así cada palabra del código de Hamming. p001 p010 I011 Código I3I5 p1 I3 p2 I5 p4 Palabra 0 0 0 P100 I101 0 0 0 0 0 0 0 4 0 0 0 0 Universidad Nacional de Quilmes Técnicas Digitales p001 p010 I011 Código I3I5 p1 I3 p2 I5 p4 Palabra 1 0 p1 I3 p2 I5 p4 Palabra p1 I3 p2 I5 p4 Palabra I101 0 1 0 1 1 1 1 0 0 1 1 p001 p010 I011 P100 I101 1 1 1 0 1 0 1 0 0 1 1 1 0 0 p001 p010 I011 P100 I101 Código I3I5 P100 0 Código I3I5 Códigos detectores y correctores de errores 0 1 0 1 1 1 1 1 1 1 1 1 1 1 Estas son las palabras que se emiten desde el transmisor: 00 00000 01 10011 10 11100 11 01111 En el receptor se generan 4 nuevas que llamaremos Pi y que se obtienen de la siguiente manera: 5 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores El subíndice binario del bit invertido está dado por el binario P4P2P1 si esta paridad recibida es 000 la palabra recibida no tiene error. Construiremos tablas para todos los errores posibles de las palabras de código a transmitir, en realidad los errores en los bits de paridad pi son descartados por el circuito de implementación pues no interesan, por lo tanto las direcciones del error posible son 011 o bien 101. Sin error en 00 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 0 0 0 0 0 0 0 0 0 0 Error en 0 0 0 0 0 Error en Error en 00 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 Error en Sin error en 01 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 1 0 0 1 1 1 0 0 1 0 0 0 1 6 1 0 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores Error en 01 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 Palabra p001 p010 I011 P100 I101 1 0 0 1 0 1 0 1 p1I3I5 P1 p2I3 P1 p4I5 P4 0 0 1 0 0 1 1 0 1 0 1 1 1 0 Error en 1 1 1 1 1 1 1 0 Error en Sin error en 10 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 Error en 10 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 1 1 1 0 1 0 0 1 1 1 1 1 1 0 1 0 0 1 0 0 0 1 Error en 0 0 1 1 1 0 7 0 0 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores Sin error en 11 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 0 1 1 1 1 0 1 1 1 1 Error en 0 0 1 1 0 Error en Error en 11 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 Palabra p1I3I5 P1 p2I3 P1 p4I5 P4 p001 p010 I011 P100 I101 0 1 1 1 0 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 0 Para fijar mejor este procedimiento se desarrollará algunos ejemplos tomando como base un código a transmitir cuya palabra es de 5 bits, en este caso 10110. Para calcular la cantidad de bits de paridad se resuelve la ecuación: La palabra a transmitir es del formato: que con índices binarios será: Por lo tanto: debe dar paridad al subconjunto debe dar paridad al subconjunto debe dar paridad al subconjunto 8 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores debe dar paridad al subconjunto Construiremos la tabla para un elemento del código y luego ejemplificaremos el método para algunos casos: p0001 p0010 I0011 Código I3I5I7I9 p1 I3I6I7 p2 I5I6I7 p4 I9 0 1 P0100 I0101 I0110 I0111 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 1 p1000 p8 Palabra 0 1 1 0 0 1 1 I1001 0 0 0 0 Error en I3 p0001 p0010 I0011 P0100 I0101 I0110 I0111 p1000 I1001 Error en Palabra p1I3I5I7I9 0 P1 p2I3I6I7 P2 p4I5I6I7 P4 p8I9 1 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 1 1 1 1 1 1 0 P8 0 0 0 Error en I7 p0001 p0010 I0011 P0100 I0101 I0110 I0111 p1000 I1001 Error en Palabra p1I3I5I7I9 0 P1 p2I3I6I7 P2 p4I5I6I7 P4 p8I9 1 0 1 0 0 1 1 1 0 1 0 0 P8 0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 Ya realizada la justificación analítica del método de Hamming queda por realizar el circuito que lo implementa en la práctica. Se diseñará un circuito para autocorregir la transmisión de un código con 3 bits de información que requiere de 3 bits de paridad, ya que es: . Por lo tanto la palabra a transmitir será: p1p2I3p4I5I6. 9 Universidad Nacional de Quilmes Técnicas Digitales Códigos detectores y correctores de errores Las paridades se generaran de la siguiente forma: En la recepción tendremos: Para simplificar la representación del circuito esquemático se utilizarán las formas de la figura 9. 10