Códigos y Detección de Errores

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

INTRODUCCIÓN

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.

Se van a describir y a ejemplificar, a continuación, los principales códigos de computadoras


utilizados, así como los códigos de hamming y los códigos de detección y corrección de errores.
CODIGOS ESTANDARES

Como se dijo en la sección anterior, un código es un uso sistemático, y de preferencia estandarizado,


de un conjunto dado de símbolos para representar información.

Tres tipos importantes de códigos para computadora son el numérico, el de caracteres y el de


detección y corrección de errores.

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.

 Números de punto fijo.

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.

Código con exceso 8.

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

 Números de punto flotante.

Un número de punto flotante es un número N que se escribe como, N = M × r E donde M, la mantisa,


es un número de punto fijo que contiene los dígitos significativos de N y E, el exponente o
característica, es un entero de punto fijo.

Al deducir la representación de un número de punto flotante, la mantisa y la característica se


codifican por separado. La base es implícita y no se incluye en la representación.

La mantisa, muchas veces, se codifica con magnitud y signo, por lo general como una fracción.
CODIGOS DE CARACTERES

 Código Decimal Codificado en Binario (BCD).

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.

Codificar el número N = (9750)10 en BCD.

Después se concatenan los códigos individuales para obtener

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:

Se suman utilizando las reglas de la suma binaria.

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.

Para convertir de código gray a binario, se siguen los pasos siguientes:

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:

Decimal Binario Gray


0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000
CÓDIGO DE DETECCIÓN DE ERRORES

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:

 Transmisor, remitente o fuente


 Canal o medio de almacenamiento
 Receptor

En la práctica, un canal de comunicación está sujeto a una a diversidad de perturbaciones que


resultan en una distorsión del mensaje que se está trasmitiendo. Cualquier alteración de estas se
llama ruido. La forma en la cual el ruido puede aparecer depende del canal.

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.

La longitud de una palabra x que se denota L(x) es el número de símbolos de la palabra.

Cuando los mensajes originalmente expresados en un lenguaje, se transforman en un mensaje en


otros lenguajes, de una manera que sea comprensible para ambos, el transmisor y el receptor, de
modo que estos mensajes se puedan transformar sin ambigüedades al regreso, entonces se puede
decir que estos mensajes están codificados.

El proceso de codificación de o enciframiento es un procedimiento para asociar palabras de un


lenguaje, con ciertas palabras de otro lenguaje de una manera uno a uno. De igual manera el
proceso de decodificación o desciframiento, o es la operación inversa, o alguna otra transformación
uno a uno.En la mayoría de las aplicaciones el canal de comunicación está limitado a un alfabeto
valuado de manera binaria cuyas señales se pueden denotar como 0 y 1. Un canal así se llama canal
binario

Ejemplo 5.

Codifique el alfabeto de 8 símbolos denotados con el conjunto [A, B, C,...H].

Cada una de las letras se puede representar con una secuencia de tres dígitos binarios.

Un código posible es el siguiente:

Símbolo Código original


A 000
B 001
C 010
D 011
E 100
F 101
G 110
H 111
Si en este ejemplo se cambia un mensaje transportado por un canal, debido a alteraciones o ruido,
entonces el receptor cometerá un error indetectable e incorregible porque cualquiera intercambio de
0 y 1 en una secuencia de código en especial resulta en una secuencia de códigos diferentes. Por
ejemplo, si la secuencia 000 para A se cambia por ruido a 100 entonces se identificará como 100,
entonces, se decodificará como E.Se modificará ahora el código al añadirle el dígito extra o
redundante a cada secuencia de 3 bits como se muestra en la siguiente tabla:

Símbolo Código original Código redundante


A 000 0000
B 001 0011
C 010 0101
D 011 0110
E 100 1001
F 101 1010
G 110 1100
H 111 1111

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.

Ninguna de estas secuencias resultantes aparece en el código y de inmediato se detecta un error.


Así la redundancia en el código permite detectar un error de un dígito por secuencia de código.

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.

Se tendrán en cuenta las siguientes definiciones:

Un error en un dato binario se define como un valor incorrecto en uno más bits.

Un ERROR SIMPLE es un valor incorrecto en un solo bit.

Un ERROR MULTIPLE se refiere a la existencia de uno o más bits incorrectos.

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.

Suponga que la distancia mínima entre dos palabras codificadas es al menos K + 1.

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.

El recíproco se deja como ejercicio.

Ejemplo 6.

Considere la función de codificación e: B3 →B8 definida por:

e(000) = 00000000 e(101) = 10001001

e(001) = 10111000 e(110) = 00011100

e(010) = 00101101 e(111) = 00110001

e(011) = 10010101

e(100) = 10100100

¿Cuántos errores detectará e?


La distancia mínima de e es 3. Por tanto, el código detectara K o menos errores si y sólo si su
distancia mínima es al menos K + 1.Como la distancia mínima es 3, se tiene que 3 ≥ K + 1, o K ≤
2,Así, el código detectará 2 o menos errores. En cursos más avanzados se verán procedimientos
para generar ciertos códigos llamados códigos de grupo.

DECODIFICACIÓN Y CORRECCIÓN DE ERRORES.

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.

Se puede demostrar que se corrigen k o menores errores sí y sólo sí la distancia mínima de e es al


menos 2k+1.

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?

Considere la función de decodificación d: B3m → Bm tal que

Y = y1y2…ymym+1y2my2m+1…y3m, donde d(y)= z1 z2…zm

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.

POSICIÓN DE LOS BITS

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?

Posiciones de los bits.

7 6 5 4 3 2 1
1 1 1 0 1 0 1

En la tabla anterior se puede observar lo siguiente:

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.

También podría gustarte