UNIVERSIDAD FERMÍN TORO VICE-RECTORADO ACADÉMICO ESCUELA DE INGENIERÍA NÚCLEO CABUDARE
Parte III
Integrantes: Juan C. Hernández Gabriel Lugo Ricardo Cordero Sección: TI-17
CABUDARE, NOVIEMBRE DEL 2015
PARTE 3. Códigos.
Código Exceso 3 El código Exceso 3 se obtiene sumando "3" a cada combinación del código BCD natural. Ver la tabla inferior a la derecha. El código exceso 3 es un código en donde la ponderación no existe (no hay "pesos" como en el código BCD natural y código Aiken. Al igual que el código Aiken cumple con la misma característica de simetría. Cada cifra es el complemento a 9 de la cifra simétrica en todos sus dígitos. Ver la simetría en el código exceso 3 correspondiente a los decimales: 4 y 5, 3 y 6, 2 y 7, 1 y 8, 0 y 9 Es un código muy útil en las operaciones de resta y división.
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
Codigo Hamming En el proceso de transmisión de la información, se puede presentar distorsión sobre las señales que llevan esa información, dando origen a múltiples errores.
Estas distorsiones en muchos casos son generados por variables externas en el medio de comunicación. Entonces debido a que estas señales son alteradas en dicho proceso, existe la posibilidad de que la información en el receptor sea diferente a la información en el transmisor. Este problema se soluciona mediante la aplicación de diferentes algoritmos, en donde la clave es adicionar redundancia a la cadena de transmisión que permita analizar los datos en dicha cadena. Los diseñadores de redes han desarrollado dos estrategias básicas para manejar los errores. Una es dividir la cadena de datos a transmitir en bloques e incluir suficiente información redundante en cada bloque de datos transmitido, para que el receptor con base en lo anterior pueda deducir la información transmitida. La otra estrategia es incluir suficiente redundancia para que el receptor pueda determinar que ha ocurrido un error y entonces solicite una retransmisión. Asi la capacidad del código de detectar y corregir errores, está determinada por la cantidad de símbolos redundantes. Detección de errores Para detectar un error, en el caso de un código binario, se debe agregar un símbolo binario (0 o 1) a cada cadena de datos de K símbolos de información de forma tal que la cantidad total de unos en la cadena codificada sea par, es decir, que la cadena tenga paridad par. La distorsión de algunos símbolos traslada la palabra codificada permisible al conjunto de las palabras prohibidas, lo que se detecta en el extremo receptor, debido a la cantidad impar de unos. La propiedades de detección y corrección de errores de un código depende de su distancia de Haming. Esta representa la cantidad de símbolos en los que una cadena de datos se diferencia de otra cadena y se simboliza con la letra "d". Para determinar la cantidad de bits diferentes, en el caso de una cadena binaria, basta aplicar una operación OR exclusivo a las dos cadenas y contar la cantidad de bits 1 en el resultado, por ejemplo: d=3, N=8 10001001 OR 10110001 = 00111000 En el caso anterior, se muestra que la distancia de Hamming es: d=3 y la longitud de la cadena de datos es: N=8. La manera de saber si una cadena recibida tiene errores es identificando si dicha cadena es un código permisible. Entonces si se tiene un código con longitud N=3, indica que se tiene el siguiente código binario: [000, 001, 010, 011, 100, 101, 110, 111]
Del código anterior se puede aplicar una distancia d=2, esto indica que el codigo anterior se divide en un código permisible y un código prohibido. [000, 011, 101, 110] Código permisible. [001, 010, 100, 111] Código prohibido El decodificador después de la recepción puede realizarse de forma tal que la palabra codificada recibida se identifique con aquella palabra permisible que se encuentre con ella. Si el receptor encuentra que el código que llego es una palabra prohibida, detecta que hubo un error y pide retransmisión. Interpretacion geometrica de los codigos correctores Cualquier palabra codificada binaria de n posiciones puede ser interpretada como el vértice de una figura geométrica n-dimensional con una longitud de arista unitaria. Para N=2, las palabras codificadas se ubican en los vértices de un cuadrado. Para N=3, las palabras codificadas se ubican en los vértices de un cubo unitario. Para N=4 las palabras codificadas se ubican en los vértices de un cubo tetradimensional. d=2
d=3
d=4
En general el cubo unitario n-dimensional tiene 2n vértices que es igual a la mayor cantidad posible de palabras del código. Este código brinda una interpretación geométrica sencilla a la distancia entre diferentes palabras del código, que corresponde a la menor cantidad de aristas del cubo unitario por las que es necesario pasar para ir de una palabra a otra.
Corrección de errores Hamming es un método de codificación en el que la información se toma por bloques a los que se les añade bits redundantes. La cantidad de bits redundantes depende de la siguiente fórmula establecida por Hamming: N=2k-1 Donde N es el número total de bits a transmitir, k es el número de bits de redundancia y k-N el número de bits de datos. Entonces con base en lo anterior, se tiene las siguientes combinaciones de códigos: (7,4): Indica que se transmiten bloques de 7 bits en donde 4 son de datos y 3 de redundancia. (15,11): Indica que se transmiten bloques de 15 bits en donde 11 son de datos y 4 de redundancia. (31,26): Indica que se transmiten bloques de 31 bits en donde 26 son de datos y 5 de redundancia. Suponiendo que se desea trabajar con el código (7,4). La información que se desea enviar son 4 bits (D0, D1, D2, D3), a los que se le añaden 3 bits redundantes. Hamming define una matriz generadora la cual está conformada
por la matriz identidad Iy por la Matriz de Hamming H que tiene las siguientes características: •
Cada Fila de la matriz debe tener paridad Par
•
Cada columna de la matriz debe tener la cantidad de unos mayor que la de ceros.
Con esta matriz se puede generar la palabra de código a transmitir, ya que esta palabra un vector resultante de la multiplicación de la matriz generadora transpuesta y el vector de código de datos (D 0, D1, D2, D3).
Donde los bits (P0, P1, P2) son los bits de redundancia. Estos bits se calculan mediante la OR Exclusiva de los bits a la que corresponden como se indica en la matriz anterior. La ubicación de cada uno de estos bits corresponde a una potencia de 2 •
P0= 20 = 1
•
P1= 21 = 2
•
P2= 22 = 4
Entonces, si se desea transmitir el código 1000, los bits de redundancia seran: •
P0 =D1 +D2 +D3 = 0+0+0 = 0
•
P1 =D0 +D2 +D3 = 1+0+0 = 1
•
P2 =D0 +D1 +D3 = 1+0+0 = 1
Dando como resultado la siguiente cadena a transmitir:
P0 P1 D0 P2 D1 D2 D3 0 1 1 1 0 0 0 En el receptor se debe construir la siguiente Matriz y realizar la OR Exclusiva entre los bits de las columnas:
Si se recibe correctamente la informaci贸n transmitida, la matriz queda construida de la siguiente manera
El codigo resultante fue 000, lo cual indica que el codigo recibido no tubo errores. Si se tiene el siguiente codigo transmitido y recibido: P0 P1 D0 P2 D1 D2 D3 Codigo transmitido 0 1 1 1 0 0 0 P0 P1 D0 P2 D1 D2 D3 Codigo recibido 0 1 0 1 0 0 0 Se construye la siguiente matriz:
El código resultante es 011, lo que indica que el tercer bit de la cadena de recepción tuvo un error. Entonces el receptor corrige dicho bit, formando la cadena correcta. P0 P1 D0 P2 D1 D2 D3 Código recibido 0 1 0 1 0 0 0 P0 P1 D0 P2 D1 D2 D3 Código corregido 0 1 1 1 0 0 0 El bloque de datos recibido después de la decodificación es: D0 D1 D2 D3 1 0 0 0 Ahora, si se tiene el siguiente código transmitido y recibido: P0 P1 D0 P2 D1 D2 D3 código transmitido 0 1 1 1 0 0 0 P0 P1 D0 P2 D1 D2 D3 código recibido 0 1 1 1 1 0 0 Se construye la siguiente matriz:
El codigo resultante es 101, lo que indica que el quinto bit de la cadena de recepción tubo un error. P0 P1 D0 P2 D1 D2 D3 Codigo recibido 0 1 1 1 1 0 0 P0 P1 D0 P2 D1 D2 D3 código corregido 0 1 1 1 0 0 0 El bloque de datos recibido después de la decodificación es:
D0 D1 D2 D3 1 0 0 0 En un sistema de transmisión de datos, la información es muy vulnerable y propensa a tener errores. Los métodos de detección de errores permiten conocer si hubo o no un error en la cadena de datos recibido, pero no está en condiciones de corregir dichos errores. Cuando se detecta un error por medio de un metodo de detección de errores, la manera de corregir la información es que el receptor pida una retransmisión de la información. Por medio del código de corrección de errores de Hamming, es posible no solo detectar, sino también corregir los errores ocurridos sobre la cadena de información en el receptor. La detección y corrección de errores en un sistema de transmisión de información, depende de la inclusión de redundancia sobre la cadena de transmisión, es decir, a los datos se le añade información que permiten dar una pequeña descripción de los mismos datos. La cantidad de errores a detectar o corregir en un sistema con código de Hamming, depende de la distancia de Hamming "d". Código ASCII: La memoria de un ordenador guarda toda la información en formato digital. No hay forma de almacenar caracteres directamente. Cada uno de los caracteres tiene un código digital equivalente. Esto se denomina código ASCII (American Standard Code for Information Interchange). El código ASCII básico representaba caracteres utilizando 7 bits (para 128 caracteres posibles, enumerados del 0 al 127). Los códigos de 0 al 31 no se utilizan para caracteres. Éstos se denominan caracteres de controla que se utilizan para acciones como: •
•
Retorno de carro (CR)
•
Timbre (BEL)
•
Los códigos 65 al 90 representan las letras mayúsculas.
•
Los códigos 97 al 122 representan las letras minúsculas
Tabla de caracteres de ASCII extendido El ASCII se desarrolló para utilizarse con el idioma inglés. No posee caracteres acentuados, o caracteres específicos de otros idiomas. Para codificar estos caracteres, se necesitaba un sistema de códigos distinto. El código ASCII se extendió a 8 bits (el equivalente a un byte) a fin de codificar más caracteres (esto se denomina código ASCII extendido).
Este código asigna los valores del 0 al 255 (codificados en 8 bits, es decir, en 1 byte) para las mayúsculas, las minúsculas, los dígitos, las marcas de puntuación y otros símbolos (incluyendo los caracteres acentuados del código iso-latin1). Los dos grupos de caracteres más comunes del código ASCII extendido son: Código extendido ASCII OEM, que estaba integrado en el primer PC de IBM. •
Código extendido ASCII ANSI, utilizado por los sistemas operativos actuales. •
Códigos de paridad (telecomunicaciones) Los códigos de paridad se usan en telecomunicaciones para detectar, y en algunos casos corregir, errores en la transmisión. Para ellos se añade en origen un bit extra llamado bit de paridad a los n bits que forman el carácter original.
Este valor del bit de paridad se determina de forma que el número total de bits 1 a transmitir sea par (código de paridad par) o impar (código de paridad impar). Así, para el código de paridad par el número de unos contando el carácter original y el bit de paridad tiene que ser par. Por lo tanto, el bit de paridad será un 0 si el número total de unos a transmitir es par y un 1 para un número impar de unos. Por el contrario, para el código de paridad impar el número de unos contando el carácter original y el bit de paridad ha de ser impar. De esta forma, el bit de paridad será un 0 si el número total de unos es impar y un 1 para un número par de unos. Normalmente el bit de paridad se añade a la izquierda del carácter original. Este método, aunque resulta satisfactorio en general, puede detectar sólo un número impar de errores de transmisión. Es decir, sólo es útil si los errores no cambian un número par de bits a la vez, ya que un número par de errores no afecta a la paridad final de los datos.
Ejemplos: Tenemos el carácter original 0111001. Vemos que la trama a transmitir tiene un número par de unos (4 unos). Al añadir el bit de paridad obtendremos el siguiente carácter, que es el que se transmitirá a destino: •
Si usamos paridad par, ya hay un número par de unos, por tanto se añade un 0, y transmitiremos 00111001.
•
Si usamos paridad impar, como hay un número par de unos, añadiremos otro 1 para conseguir un número impar, y transmitiremos 10111001.
Si se envía un dato y durante la transmisión se produce un único error, el destinatario puede detectarlo al comprobar la paridad en el destino. Usando los ejemplos anteriores, y alterando un solo bit de la trama transmitida, nos quedaría. •
Paridad par: se recibe 00110001 en vez de 00111001. En la comprobación, al contar el número de unos salen 3 (impar), por lo que se ha producido un error.
•
Paridad impar: se recibe 10110001 en vez de 10111001. En la comprobación, al contar el número de unos salen 4 (par), por lo que se ha producido un error.
Siguiendo los ejemplos anteriores, y alterando dos bits en la transmisión, veremos como el método de detección de errores falla: •
Paridad par: se recibe 00110101 en vez de 00111001. Al comprobar el número de unos salen 4 (par), y no se detectan los errores.
•
Paridad impar: se recibe 10110101 en vez de 10111001. Al comprobar el número de unos salen 5 (impar), y no se detectan los errores.