Detección y Corrección de Errores

Anuncio
Detección y Corrección de Errores
Comunicación de datos
Realizado por:
Antonio Russoniello
11-01-16. V1.0
1
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Las técnicas de control de errores son necesarias para la prevención frente a pérdidas y daños en
los datos y la información de control. El control de errores se implementa generalmente como dos
funciones separadas Detección de errores y Retrasmisión.
Para conseguir la detección de errores el emisor inserta una código de detección de errores en la
PDU transmitida, este código es una función de otros bits en la PDU. El receptor comprueba el
valor del código en la PDU recibida. Si se detecta un error, el receptor descarta la PDU. En caso de
no recibir el acuse de recibo de la PDU en un tiempo razonable, el emisor la retransmite. Algunos
protocolos emplean también un código de Corrección de Errores que permite que el receptor no
solo detecte si no que además pueda corregir los errores en algunos casos.
11-01-16. V1.0
2
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Tipos de Errores:
Error de bits: significa que únicamente un bit de una unidad de datos determinada (tal como byte,
carácter o paquete) cambia de 0 a 1 o de 1 a 0.
Enviado:
00000010
Recibido: 00001010
Error de ráfaga: significa que dos o más bits de la unidad de datos han sido modificados. La
longitud del error de ráfaga se mide desde el primero hasta el último bit errado
Enviado:
0100010001000011
Recibido: 0101110101100011
Longitud del error de ráfaga = 8 bits
En una transmisión el número de bits afectados depende de la tasa de datos y la duración
del ruido. Por ejemplo: si se están enviando datos a 1Kbps, un ruido de 1/100 seg puede
afectar a 10 bits, si se envían datos a 1Mbps el mismo ruido podría afectar a 10.000 bits.
11-01-16. V1.0
3
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Detección vs Corrección:
•
Detección: solo determina si ocurre un error o no.
•
Corrección: permite que el receptor no solo detecte si no que pueda corregir los
errores en algunos casos, para esto se necesita saber el número exacto de bits que
se han dañado y su posición dentro del mensaje.
Redundancia:
para poder detectar o corregir errores, es necesario enviar algunos bits extra junto con
los datos. Estos bits redundantes son añadidos en el emisor y eliminados en el
receptor. Su presencia permite al receptor detectar o corregir los bits con errores.
11-01-16. V1.0
4
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Codificación de Bloques:
Es una técnica en donde se divide un mensaje en bloques de k bits, denominados palabras
de datos. Se añaden r bits redundantes a cada bloque hasta conseguir una longitud de n = k
+ r. Los bloques resultantes de n bits se denominan palabras código. Nomenclatura C(n,k).
Con k bits se puede crear una combinación de 2k palabras de datos; con n bits, se puede
crear una combinación de 2n palabras de código, como n > k el número posible de palabras
código es mayor que el número posible de palabras de datos. Todas las palabras de código
asociadas a cada palabra de dato es conocido como código bloque. El proceso de
codificación de bloques es uno a uno; la misma palabra de datos siempre se codifica como la
misma palabra código. Esto significa que se tienen 2n - 2k palabras código que no se utilizan.
Estos códigos no utilizados son denominados inválidos o ilegales. Para que un código bloque
sea útil todas las palabras códigos deben ser distintas.
Códigos lineales: un código es lineal por bloques cuando la combinación de palabras código
da otra palabra código válida.
11-01-16. V1.0
5
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Codificación de Bloques:
Ejemplo: la codificación de bloques 4B/5B k = 4 y n = 5. por lo tanto hay 2k = 16 palabras
de datos y 2n = 32 palabras de código, 16 palabras de código se utilizan para la
transferencia de mensajes y el resto se utilizan para otros objetivos o no se utilizan.
¿Cómo pueden detectarse errores utilizando codificación de bloques?
Deben cumplirse dos condiciones para detectar un cambio en la palabra código original:
•
El receptor tiene una lista de palabras código válidas
•
La palabra código original ha cambiado a una inválida
11-01-16. V1.0
6
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Proceso de detección de errores en la codificación de bloques
11-01-16. V1.0
7
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES
Pasos para detección de errores en la codificación de bloques:
1.
El emisor crea las palabras código a partir de las palabras de datos utilizando un generador
que aplica las reglas y procedimientos de la codificación.
2.
Cada palabra código puede cambiar durante la transmisión (si ocurre un error).
3.
Si la palabra código recibida es la misma que una de las palabras código válidas se acepta la
palabra código y la palabra datos se extrae para su uso.
4.
Si la palabra recibida no es válida, se descarta.
5.
Si la palabra recibida coincide con una palabra código válida, el error no podrá ser detectado.
Este tipo de detección puede solo detectar errores en un único bit.
11-01-16. V1.0
8
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES
Proceso de detección de errores en la codificación de bloques:
Método del bit de paridad: se agrega un bit 1 a la palabra de datos para que la suma de bits 1 de como resultado
un número par.
Ejemplo:
asuma k = 2 y n = 3 (23 = 8 posibles códigos, se usan solo 4). Asumir que se envía la palabra 01 como 011 y la
envía al receptor.
1.
El receptor recibe 011. Es un código válido, el receptor
extrae la palabra 01
2.
El código se daña y se recibe 111 (se daña el bit de la
izquierda, el código no es válido y se descarta.
3.
El código se daña y se recibe 000 (se dañan dos bits de
la derecha) el código recibido es válido, el receptor
extrae la palabra 00.
Palabras de datos
Palabras código
00
000
01
011
10
101
11
110
Inconvenientes: errores en dos bits no hacen posible que el
error sea detectado y por lo tanto pueden tomarse códigos
errados como válidos
11-01-16. V1.0
9
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES
Corrección de errores en la codificación de bloques :
se agregan más bits redundantes para la corrección de errores que para la detección.
El proceso de comprobación realiza la corrección
11-01-16. V1.0
10
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES
Corrección de errores en la codificación de bloques
Ejemplo: asuma k = 2 (22 = 4 posibles datos) y n = 3 (23 = 8 posibles códigos, se usan solo 4, asuma
las palabras código dadas en el ejemplo, luego se estudiará como estas son generadas). Se añaden 3
bits redundantes (n) a cada palabra código de 2 bits obteniendo códigos de 5 bits. Se envía la
palabra dato 01 y se transmite su correspondiente palabra código 01011, en la transmisión ocurre
un error y la palabra cambia a 01001 (ocurre un error en el segundo bit de la derecha).
El receptor al recibir el código verifica que no está en su tabla y por lo tanto detecta que hubo un
error. El receptor asume que solo se ha dañado un bit y ejecuta los siguientes pasos:
1.
2.
Se compara el código recibido con el primer
código de la tabla hay dos bits diferentes ,
entonces no es el código, esto ocurre para la
tercera y cuarta opción de la tabla (cambian dos
bits)
La palabra código recibida solo tiene un bit
diferente a la segunda opción de la tabla por lo
tanto procede a realizar la corrección.
01001
01011
11-01-16. V1.0
Palabras de datos
Palabras código
00
00000
01
01011
10
10101
11
11110
11
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE
BLOQUES
Distancia Hamming
La distancia Hamming entre dos palabras (del mismo tamaño) es el número de
diferencias entre los bits correspondientes. La distancia Hamming entre dos palabras
x e y se indica como d(x,y). La distancia se puede calcular fácilmente aplicando la
operación XOR (OR exclusiva) sobre las dos palabras y contar el número de 1
resultantes. La distancia es un valor mayor que 0.
Ejemplo:
Código enviado 00000 código recibido 01101, hay tres bits con errores y la distancia Hamming entre
las dos es d(00000,01101) = 3.
11-01-16. V1.0
12
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES
Mínima distancia Hamming para detección de errores
Si se deseada detectar hasta S errores se requiere una distancia mínima dmin = S + 1 de forma que el código
recibido no coincida con un código válido.
Mínima distancia Hamming para la corrección de errores
Para la corrección de S errores se requiere una dmin = 2S + 1.
Ejemplo:
Suponga que se quiere transmitir un bloque de datos con longitud k bits. En lugar de transmitir cada bloque de k
bits se asigna cada secuencia de entrada a una única palabra codificada de n bits.
Para k = 2 y n = 5 se puede realizar la siguiente asignación:
Palabras de datos
Palabras código
00
00000
01
00111
10
11001
11
11110
11-01-16. V1.0
13
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES
Palabras de datos
Palabras código
00
00000
01
00111
10
11001
11
11110
Ahora asuma que se recibe una palabra código con el patrón de bits 00100. Esto no es una palabra código válida
por lo que el receptor detecta el error.
Calculemos la distancia Hamming: d(00000,00100) = 1; d(00111,00100) = 2; d(11001,00100) = 4; d(11110,00100)
=3
Se selecciona la distancia mínima: d(00000,00100) = 1 => se deduce que la palabra código más probable enviada
fue 000000, por lo tanto la palabra de dato enviada es 00.
11-01-16. V1.0
14
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Códigos de Paridad:
Es un código de detección de errores. Una palabra de k bits se convierte en un código de n bits con n = k +
1. El bit extra, denominado bit de paridad se selecciona de forma que el número de 1 en el código sea par
(paridad par). La mínima distancia Hamming para esta categoría es dmin = 2, es decir el código puede
detectar errores en 1 bit no puede corregir cualquier error. Existe otro método en donde la paridad es
impar, en este método un número impar de errores no se puede detectar.
Desventaja: en paridad par un número par de errores no se puede detectar y en paridad impar no podrán
detectarse un número impar de errores.
Algoritmo de código de paridad par:
1.
El emisor al enviar el código agrega un 1 (bit de paridad) a la palabra dato si la cantidad de unos del
dato es impar, si la cantidad de unos es par el bit de paridad se coloca en 0, es decir se realiza la
operación r0 = d3 + d2 + d1 + d0.
2.
El receptor recibe palabra código (dato + bit de paridad) c = d3d2d1d0r0 (d: datos y r: bit de paridad) y
realiza la operación So = d3 + d2 + d1 + d0 + r0 (S es un bit que lleva el nombre de Síndrome). Si S = 0
entonces no hay error en el código el dato se acepta, si S = 1 entonces hay un error, el dato se
descarta.
11-01-16. V1.0
15
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Código Hamming - técnica FEC (forward error correction)
¿cómo manipular los bits para descubrir en que estado se ha producido el error?
Explicación del código
Se tienen
r: redundancia
m: datos
m + r : código
De la siguiente ecuación se obtiene r:
2𝑟 ≥ 𝑚 + 𝑟 + 1 𝑅𝑒𝑙𝑎𝑐𝑖ó𝑛 𝑒𝑛𝑡𝑟𝑒 𝑚 𝑦 𝑟
Ejemplo: si m = 1 bit
2𝑟 ≥ 𝑚 + 𝑟 + 1
Se busca un valor de r que cumpla con la ecuación:
21 ≥ 1 + 1 + 1 (𝑝𝑎𝑟𝑎 𝑟 = 1; 2 ≥ 3 ⇒ 𝑙𝑎 𝑒𝑐𝑢𝑎𝑐𝑖ó𝑛 𝑛𝑜 𝑠𝑒 𝑐𝑢𝑚𝑝𝑙𝑒)
22 ≥ 1 + 2 + 1 (𝑝𝑎𝑟𝑎 𝑟 = 2; 4 ≥ 4 ⇒ 𝑙𝑎 𝑒𝑐𝑢𝑎𝑐𝑖ó𝑛 𝑠𝑖 𝑠𝑒 𝑐𝑢𝑚𝑝𝑙𝑒)
Entonces para m = 1 bit, r = 2 bits
Para m = 7 bits se obtiene r = 4 bits.
11-01-16. V1.0
16
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Algoritmo del Código de Hamming
Obtener r:
2𝑟 ≥ 𝑚 + 𝑟 + 1
Luego los bits de redundancia se intercalan en la palabra dato en las posiciones que son potencia de 2, es
decir en las posiciones 1, 2, 4, 8, 16, 32, …
donde d: datos y r: redundancia
Las combinaciones usadas para calcular cada uno de los cuatro valores de r para cada una de la secuencia
de datos es:
r1: posición de bit -> 3,5,7,9,11
r2: posición de bit -> 3,6,7,10,11
r4: posición de bit -> 5,6,7
r8: posición de bit -> 9,10,11
Los bits utilizados para calcular r1 son aquellos cuya representación binaria incluye un 1 más a la derecha,
para r2 los que tienen un 1 en el segundo bit, etc.
Para calcular el valor de los r se calcula el valor de paridad de cada combinación de bit que le corresponda.
11-01-16. V1.0
17
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Algoritmo del Código de Hamming
Regla “visual” general para construcción de la tabla:
11-01-16. V1.0
18
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Código de Hamming – Ejemplo
1. Construcción del código (asuma dato: 1001101)
r1 = d3 + d5 + d7 + d9 + d11 = 1+0+1+0+1=1
11-01-16. V1.0
19
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Código de Hamming – Ejemplo
2. Detección y corrección de error
Se envía el dato y ocurre un error en un bit:
S1 = r1+d3+d5+d7+d9+d11 = 1+1+0+0+0+1 = 1
S8 S4 S2 S1
11-01-16. V1.0
Se calculan los Síndrome sumando los bit (esto
es equivalente a calcular el valor de paridad)
20
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Verificación de Redundancia Cíclica (CRC):
Técnica muy potente de verificación de redundancia. Está basada en división binaria. A diferencia otros métodos
que suman bits para conseguir paridad, en este método se añade una secuencia de bits redundantes
denominados CRC ó resto CRC al final de la unidad de datos de forma que los datos resultantes sean divisibles
exactamente por un número binario predeterminado. En el destino la unidad de datos recibida es dividida por
este mismo número, si en la operación no hay resto quiere decir la unidad de datos es correcta, en otro caso los
datos han sufrido daño y son rechazados y el receptor podría solicitar retransmisión.
Algoritmo de CRC:
1.
Se añade una tira de n ceros a la unidad de datos. El número n es uno menos que el número de bits en el
divisor predefinido (el divisor tiene n + 1 bits)
2.
La nueva unidad de datos se divide por el divisor usando un proceso denominado división binaria. El resto
resultante de esta división es la CRC.
3.
La CRC de n bits obtenida sustituye a los ceros añadidos al final de la unidad de datos. Nota: una CRC podría
estar conformada por ceros.
4.
La unidad de datos llega al receptor con su CRC, toda la tira (dato + CRC) es tratada como una unidad y es
dividida por el mismo divisor que se usó para hallar el resto CRC.
5.
Si la tira llega sin error el comprobador obtiene un resto 0 y la unidad de datos se acepta, en otro caso la
división arrojaría un resto no nulo y por lo tanto los datos han sido dañados.
11-01-16. V1.0
21
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Ejemplo CRC: Calcular CRC usando divisor igual a 1101 y dato 100100
En la sustracción usamos la
resta binaria sin acareo,
esto es equivalente a
aplicar el operador XOR
11-01-16. V1.0
22
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Generación del divisor (CRC)
El generador CRC (el divisor) no se suele representar como una tira de unos y ceros sino como un
polinomio algebraico.
Existe una relación entre el polinomio y su representación binaria, cada potencia presente en el
polinomio es equivalente a un 1 binario y aquellas potencias no presentes son equivalentes a 0
binario.
𝑥8 + 𝑥5 + 𝑥3 + 𝑥 + 1 = 1 0 0 1 0 1 0 1 1
En el ejemplo anterior las potencias que no aparecen 𝑥 7 , 𝑥 6 , 𝑥 4 , 𝑥 2 son interpretadas como un bit 0.
La selección del polinomio debe cumplir al menos las siguientes propiedades:
1. No debería ser divisible por x (esto garantiza detección de todos los errores de ráfaga de longitud
igual al grado del polinomio)
2. Debería ser divisible por x +1 (garantiza que se detectan todos los errores de ráfaga que afectan a
un número impar de bits)
Por ejemplo no podemos elegir polinomio x (binario 10) o 𝑥 2 + 𝑥 (binario 110) como polinomios
porque son divisibles por x. Si se puede elegir x + 1 (binario 11) porque es divisible por x+1 y no por x.
11-01-16. V1.0
23
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Generación del divisor (CRC)
Ejemplo: calcular el Resto por notación polinomial.
Palabra dato = 1001 => 𝑥 3 + 1
Divisor= 1011 => 𝑥 3 + 𝑥 + 1
La palabra dato aumentada (agregar la tira de n – 1 bits ceros donde n es la cantidad de bits del divisor) se
obtiene desplazando a la izquierda la palabra 3 bits (tira de ceros), polinomiálmente esto se logra
multiplicando el polinomio de la palabra dato por 𝑥 3 , dando domo resultado 𝑥 6 + 𝑥 3
𝑥 6 + 0𝑥 5 + 0𝑥 4 + 𝑥 3 + 0𝑥 2 + 0𝑥 + 0
𝑥3 + 𝑥 + 1
𝑥3 + 𝑥
𝑥 6 + 0𝑥 5 + 𝑥 4 + 𝑥 3
𝑥4
𝑥 4+ 𝑥 2+ 𝑥
𝑥 2 +𝑥
𝑥 2 + 𝑥 = 𝑥 2 +𝑥 + 0 = 110 (Resto = CRC). Palabra código = 𝑥 6 + 𝑥 3 + 𝑥 2 + 𝑥
11-01-16. V1.0
24
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Algunos polinomios utilizados para CRC:
Utilizado en redes Ethernet
Los números 8, 12, 16, 32 hacen referencia al tamaño del resto CRC
11-01-16. V1.0
25
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Suma de Comprobación de Errores (Checksum)
Usados en protocolos alto nivel, no utilizado en el nivel de enlace.
Pasos en el Emisor:
1. La unidad se divide en k secciones, cada una de ellas de n bits.
2. Todas las secciones se suman juntas usando suma binaria (debe considerarse el acarreo)
3. La suma obtenida en 2 se complementa, esta es conocida como la suma de comprobación (checksum)
4. La suma de comprobación es enviada con los datos.
Pasos en el Receptor:
1. La unidad se divide en k secciones, cada una de ellas de n bits.
2. Todas las secciones se suman juntas usando complemento a uno para obtener la suma.
3. Se complementa la suma.
4. Si el resultado es 0, se aceptan los datos; en otro caso, se rechazan
Operaciones usadas para el cálculo del Checksum:
Suma binaria: ( A + B)
1
10011000 (A)
00010101 (+B)
------------10101101
11-01-16. V1.0
Complemento a Uno: el complemento a uno de
cualquier número es otro número de manera tal que
si sumamos los dos el resultado es igual a cero. Para
complementar un número binario se invierte un 1
en 0 y un 0 en 1. En la aritmética de complemento a
uno la suma de dos números de n bits da como
resultado otro número de n bits.
26
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Suma de Comprobación de Errores (Checksum)
Ejemplo:
11-01-16. V1.0
27
Comunicación de Datos
DETECCION Y CORRECCION DE ERRORES – CODIFICACION DE BLOQUES LINEALES
Suma de Comprobación de Errores (Checksum)
Ejemplo:
11-01-16. V1.0
28
Descargar