Códigos y Detección de Errores
Códigos y Detección de Errores
Códigos y Detección de Errores
Las computadoras procesan y almacenan la información en forma de dígitos o bits binarios, por tanto,
en un sistema digital un número decimal se representa con una cadena de bits. Así, por ejemplo, si
se asigna 000 al decimal 0, 0001 al 1, 0010 al 2 y 0011 al 3, entonces el número decimal de tres
dígitos 123 se puede representar con la cadena de 12 bits 0001 0010 0011. En la práctica se suele
agrupar un número decimal de 2 dígitos en un byte de 8 bits, que por tanto puede representar
cualquier número decimal comprendido entre 0 y 99.
Como se verá más adelante, un código como el anterior se llama código de dígitos decimales
codificados en binario o código BCD.
En general, cualquier conjunto de objetos se puede representar mediante una serie de cadenas de
bits en las que las diferentes combinaciones de bits representan distintos objetos. Este conjunto de
combinaciones de bits se llama código, y una cadena de bits particular dentro del conjunto se llama
palabra código.
La asignación de las palabras del código a los objetos se hace mediante una expresión algebraica o
una tabla.
Códigos Numéricos
Los códigos numéricos sirven para representar números con fines de procesamiento y
almacenamiento. Los números de punto fijo y de punto flotante son ejemplos de estos códigos.
Se utilizan para representar tanto enteros con signo como fracciones con signo. En ambos casos se
usan los mismos sistemas de magnitud y signos de complemento a dos o de complemento a uno
para representar los valores con signo. Los enteros de punto fijo tienen un punto binario implícito a la
derecha del bit menos significativo; las fracciones de punto fijo tienen un punto binario implícito entre
el bit de signo y el bit más significativo.
Ejemplo 1.
Dar dos posibles interpretaciones del número de punto fijo de ocho bits 01101010 usando el sistema
de complemento a dos. Como el bit de signo es 0, el número representa el entero positivo 1101010, o
bien la fracción positiva 0.1101010.
Ejemplo 2.
Dar dos posibles interpretaciones del número de punto fijo de 8 bits 11101010, usando el sistema de
complemento a dos. El bit del signo es 1, por tanto el número representa a -0010110, o bien
-0.0010110.
Representaciones con exceso o sesgadas.
Una representación con exceso K de un código C se forma sumando el valor K a cada palabra del
código C. Las representaciones con exceso se utilizan a menudo para representar los exponentes de
los números de punto flotante.
La representación con exceso 8 de la tabla siguiente, se obtiene al sumar (1000) 2 al código de 4 bits.
Decimal
Representación binaria Exceso 8
7 0111 1111
6 0110 1110
5 0101 1101
4 0100 1100
3 0011 1011
2 0010 1010
1 0001 1001
0 0000 1000
La mantisa, muchas veces, se codifica con magnitud y signo, por lo general como una fracción.
CODIGOS DE CARACTERES
Sirve para representar los dígitos decimales del 0 al 9 y es un ejemplo de un código ponderado, es
decir, cada posición de bit en el código tiene un valor o peso numérico fijo asociado a ella.
Este código asigna una representación binaria sin signo de 4 bits a cada dígito entre 0 y 9, no
usándose las palabras del código entre 1010 y 1111.
La conversión entre las representaciones BCD y decimal se puede llevar a cabo simplemente
sustituyendo 4 dígitos BCD por cada dígito decimal y viceversa. Sin embargo, en la práctica se
suelen agrupar dos dígitos BCD en un byte de 8 bits, que por tanto puede representar cualquier valor
comprendido entre 0 y 99.
Ejemplo 3.
N = (1001011101010000)
El código BCD se puede utilizar en operaciones aritméticas. La suma es la más importante de estas
operaciones, ya que las otras tres se pueden llevar a cabo utilizando la suma. Para sumar dos
números en formato BCD se siguen los siguientes pasos:
Si una suma de cuatro bits es igual o menor que 9, es un número BCD válido.
Si una suma de 4 bits es mayor que 9, o si se genera un acarreo en el grupo de 4 bits, el resultado no
es válido. En este caso, se suma 6 (0110) al grupo de 4 bits para saltar así los 6 estados no válidos y
pasar al código BCD. Si se genera un acarreo al sumar 6, éste se suma al grupo de 4 bits siguiente.
Código ASCII.
Es el código de caracteres más utilizado en las aplicaciones de cómputo. Por sus siglas en ingles se
llama Código estándar americano para intercambio de información.
En general, una cadena de bits puede representar cualquier carácter, numérico o no. Dado que la
mayoría de los procesadores de datos incluyen texto, los caracteres que se usan mas
frecuentemente forman parte de un alfabeto, que se representa en el computador con una cadena de
bits particular.
En este código, cada carácter se representa con una cadena de 7 bits. Este código codifica 128
caracteres diferentes, incluyendo mayúsculas y minúsculas, números, algunos signos de puntuación,
y una serie de caracteres de control.
Cada una de las palabras del código ASCII suele almacenar en un byte, que incluye un bit de paridad
extra que se usa para detección de errores.
Código Gray.
Un código cíclico se puede definir como cualquier código en el que, para cualquier palabra de código,
un corrimiento circular produce otra palabra del código. El código Gray es uno de los tipos más
comunes de códigos cíclicos y tiene la característica de que las palabras de código para dos
números consecutivos difieren sólo en un bit. Es decir, la distancia entre las dos palabras de código
es 1. En general la distancia entre dos palabras de código binario es igual al número de bits en que
difieren las dos palabras.
Para la conversión de código binario a código gray se siguen los siguientes pasos:
El bit más significativo en el código gray, es el mismo de código binario.
Yendo de izquierda a derecha, sumar cada par adyacente de los bits en código binario para obtener
el siguiente bit en código gray. Se descartan los acarreos.
El bit más significativo en código binario, es el mismo que el correspondiente bit en código gray.
A cada bit del código binario generado, se le suma el bit en código gray de la siguiente posición
adyacente. Se descartan los acarreos.
Ejemplo 4.
Defina un código Gray para codificar los números decimales del 0 al 15.
Solución.
Se necesitan cuatro bits para representar todos los números, y podemos construir el código
necesario asignando al bit i de la palabra de código el valor 0 sí los bits i e i + 1 del número binario
correspondientes son iguales, y 1 en caso contrario.
El bit más significativo del número siempre se debe comparar con 0 al utilizar esta técnica. El código
resultante es:
Un proceso de comunicación puede tener lugar en diversas formas: por ejemplo, al hacer una
llamada telefónica, al enviar un telegrama, al usar un lenguaje de signos. En tales casos, el proceso
involucra el flujo de información a través de un medio, el cual va del remitente al receptor. El medio
que lleva la información puede ir de la mímica al habla, o la electricidad al agua, o una secuencia de
dígitos binarios y puede ser tan intangible como cualquier cosa mediante la cual una mente humana
puede afectar a otra. En cualquier caso, un proceso de comunicación involucra un flujo de
información a través de un sistema.
Un sistema de comunicación ideal se puede representar por tres partes esenciales a saber:
Por ejemplo, en una conversación entre dos personas, el canal puede estar sujeto a ruidos, tales
como el viento, un carro que pasa, otras voces. En cualquier caso, se trata de minimizar las pérdidas
debidas al ruido y recuperar de una manera óptima el mensaje original cuando se ha contaminado
por la presencia del ruido.
Un dispositivo que se puede usar para mejorar la eficiencia del canal de comunicación es un
codificador que transforma el mensaje que llega de tal manera que se puede detectar la presencia
del ruido en el mensaje transformado. El uso de un codificador requiere que se use un decodificador
para transformar el mensaje codificado a su forma original que el receptor pueda entender.
Es posible no sólo detectar la distorsión debida al ruido si no también corregir el mensaje al usar un
codificador apropiado y mostrar la presencia del ruido en el canal. El modelo sería así:
Esta parte se ocupa de los canales de comunicación que manejan símbolos de un conjunto
especifico llamado alfabeto del lenguaje de comunicación. Cualquier elemento del alfabeto se llamará
un símbolo, letra o carácter. Una secuencia finita de caracteres se llama mensaje o palabra.
Ejemplo 5.
Cada una de las letras se puede representar con una secuencia de tres dígitos binarios.
Un error sencillo en una secuencia de código en particular produce otra secuencia que no pertenece
al código. Por ejemplo, la secuencia de código 0000 para A se podría transformar por el ruido en
cualquiera de las secuencias 0001, 0010, 0100, 1000.
Obsérvese que la secuencia 0001 se puede producir por un error de un solo dígito de las secuencias
para A, B, C, o E, por consiguiente, no es posible corregir el error. Al introducir redundancias
adicionales, es posible tanto detectar como corregir uno o más errores por secuencia de códigos.
Un error en un dato binario se define como un valor incorrecto en uno más bits.
Sean I y J palabras de información binaria de n bits. El peso de I, w(I), se define como el número de
bits de I igual a 1.La DISTANCIA entre I Y J que se designa por d(I, J), es igual al número de bits en
que difieren I y J.
TEOREMA
m →
Una función de codificación e: B Bn puede detectar K ó menos errores si y sólo si su distancia
mínima es al menos K + 1.
Demostración.
Sea b ∈ Bm, y sea x = e(b) ∈ B n la palabra codificada que representa a b. Entonces x es transmitida
y recibida como xt1. Si xt fuera una palabra codificada diferente de x, entonces d(x, x e) ≥ K + 1 de
modo que x sería transmitida con K ó menos errores, entonces x t no puede ser una palabra
codificada. Esto significa que e puede detectar K ó menos errores.
Ejemplo 6.
e(011) = 10010101
e(100) = 10100100
Considérese una función de codificación e: Bm → Bn. Una vez la palabra x = e(b) ∈ B n con b ∈ Bm, es
recibida como la palabra xt, surge el problema de identificar la palabra b que era el mensaje original.
Una función sobre d: Bn → Bm es una función de codificación asociada a e sí d(xt) = b’ ∈ Bm. Si el
canal de transmisión no tiene unido, entonces b’ = b.
La función de decodificación debe ser sobre, para que cada palabra recibida pueda decodificarse
para obtener una palabra de Bm. Esta función decodifica en forma adecuada las palabras recibidas de
manera correcta, pero la decodificación de las palabras recibidas en forma inadecuada puede o no
ser correcta.
Una función e de codificación y una función d de decodificación corrige k o menos errores si siempre
que x = e(b) se trasmite en forma correcta, o k o menos errores, y se recibe x t, entonces d (xt) = b. así
xt se decodifica como el mensaje correcto b.
Ejemplo 7.
Considérese la función de codificación definida como e: B m→ B3m definida como e(b) = b1 b2…bmb1
b2…bmb1 b2…bm donde b= b1 b2…bm.
O sea:
E(000)= 000000000
E(001)= 001001001
E(010)= 010010010
E(011)= 011011011
E(101)= 101101101
E(110)= 110110110
E(100)= 100100100
E(111)= 111111111
Si, por ejemplo, se supone b = 011 y que el canal de transmisión recibe 011111011. Esta no es una
palabra codificada, por lo que se ha detectado un error. Así es posible detectar un error simple y dos
errores arbitrarios cualesquiera.
¿Cómo se corregiría?
Es decir la función de decodificación d examina el i-ésimo dígito en cada uno de los tres bloques
trasmitidos.
Se elige el dígito que aparece al menos dos veces en estos tres bloques como el i-esimo dígito
decodificado.
Por ultimo, el tercer dígito también se decodifica como uno, por una razón análoga, por tanto
d(xt)=011. Es decir, este código corrige cualquier error simple.
Hay códigos que permiten simultáneamente detectar y corregir errores; para ello basta usar un
código con una distancia mínima de 2x + y + 1, que permite corregir hasta x errores de un solo bit y
detectar hasta y errores adicionales
CODIGOS DE HAMMING
Es un método general propuesto por R. W Hamming usando una distancia mínima m. Con este
método, por cada entero m existe un código de hamming de 2m-1 bits que contiene m bits de paridad
y 2m-1-m bits de información. En este código, los bits de paridad y los bits de paridad se encuentran
entremezclados de la siguiente forma: Si se numeran las posiciones de los bits desde 1 hasta 2 m-1,
los bits en la posición 2k, donde , son los bits de paridad y los bits restantes son bits de
información.
El valor de cada bit de paridad se escoge de modo que el total de unos en un número específico de
bits sea par, y estos grupos se escogen de tal forma que ningún bit de información se cubra con la
misma combinación de bits de paridad. Es lo anterior lo que proporciona al código su capacidad de
corrección.Para cada bit de paridad en la posición 2 k, su grupo de bits de información
correspondiente incluye todos esos bits de información correspondiente cuya representación binaria
tenga un uno en la posición 2 k. La siguiente tabla muestra los grupos de paridad para un código de
hamming de 7 bits o sea de la forma 2 m-1 con m = 3. En este ejemplo, los bits de información son 4 y
los bits de paridad son 3. Los bits de información están en las posiciones 7, 6, 5 ,3. Los bits de
paridad están en las posiciones 1, 2, 4.
7 6 5 4 3 2 1
X X X X
X X X X
X X X X
En la tabla anterior, el grupo de paridad del bit de paridad situado en la posición 4 son los bits de
información situados en las posiciones 7, 6, 5 que contienen unos en la posición 2 k o sea 4 cuando
k= 2.
El grupo de paridad del bit de paridad situado en la posición 2 son los bits de información situados en
las posiciones 7, 6, 3 que contienen unos en la posición 2k o sea 2 cuando k = 1.
El grupo de paridad del bit de paridad situado en la posición 1 son los bits de información situados en
las posiciones 7, 5, 3 que contienen unos en la posición 2k o sea 1 cuando K = 0.
De acuerdo con estos grupos de paridad, el valor del bit de paridad de la posición 1 tiene que
elegirse de modo que el número de unos en las posiciones 7, 5, 3, 1 sea par, mientras el bit de
paridad en la posición 2 hace el número de unos par 7, 6, 3, 2 y el valor del bit de paridad en la
posición cuatro hace el número de unos par en las posiciones 7, 6, 5, 4.
Es fácil observar que, en estas condiciones, la distancia mínima es 3, o sea que tienen que haber al
menos tres cambios de un bit para convertir una palabra de código en otra.
Para probar que un cambio de un bit siempre genera una palabra que no pertenece al código, hay
que observar que un cambio de un bit en una palabra del código afecta al menos un bit de paridad.
Ejemplo 12.
Supóngase que se transmite una palabra de código y se recibe una palabra que no
pertenece al código y que es 1110101. ¿Cuál fue la palabra correcta transmitida?
7 6 5 4 3 2 1
1 1 1 0 1 0 1
Cuando se cuenta el número de unos que hay en los bits, 7, 6, 5, 4 de la palabra del
código recibida, se encuentra que este número es impar. De forma similar, se encuentra
que los bits 7, 6, 3, 2 contienen un número0 impar de unos. Por tanto hay un error en
los bits de paridad 4 y 2. Como la suma de los números en esas posiciones es 6, se sabe
que el error se ha producido en el bit de posición 6 y por tanto la palabra transmitida fue
1010101.