Técnicas de Detección y Corrección de
Errores
Profesora María Elena Villapol
[email protected]
Técnicas de Detección y Corrección de
Errores
• Los canales inalámbricos proporcionan los
índices de error que suelen
en torno a 10-2.
• Estas altas tasas de error son el multipath fading
que caracterizan a los canales de radio móvil.
• Existen dos aproximaciones para poder tratar
este problema:
– Corrección de Error Hacia Adelante (Forward Error
Correction, FEC).
– Requerimiento de Repetición Automática (Automatic
Repeat Request, ARQ).
Deteccion vs Correccion
• Existen tecnicas para detectar errores y
otras para corregir errores.
Técnicas de
detección y
correción de
errores
Detección
Código de
Paridad
Corrección
Códigos de
bloques
Códigos de
bloques
Lineales
Lineales
Cíclicos
Cíclicos
Chequeo Ciclico
Redundante
(CRC)
Chequeo Ciclico
Redundante
(CRC)
Código
Convolucionales
Código de
Hamming
Redundancia
• Para detectar o corregir errores se
necesita agregar cierta redundancia a los
bits de información.
FEC
• Códigos de bloques.
– Lineales
• cíclicos
• Códigos convolucionales.
Códigos para la detección de errores
• Cada bloque de k bits es codificado con un bloque de
(k+r) bits denominado palabra código (codeword).
• La palabra código es la que se transmite.
• En el receptor varias cosas pueden pasar:
– Si no hay errores, la salida de decodificador es igual al código
original.
– Para ciertos errores, el decodificador puede detectar y corregir
los mismos.
– Para ciertos patrones de errores, el decodificador puede
detectar el error pero no corregirlo.
– Para ciertos errores el decodificador no puede detectar el error y
produce una señal de salida que difiere de la original.
Codificación por Bloques
Códigos por Bloques Lineales
• Casi todos los códigos de bloque utilizado
hoy en día pertenecen a un subgrupo
llamado bloque de códigos lineales.
• Un código de bloque lineal es un código
en el que el OR exclusivo (adición
módulo-2) de dos palabras de código
válidas crea otra palabra de código válida
Detección de Errores
Principios de la detección de errores
• El algoritmo suma r bits al bloque de datos de m bits.
• Los k bits en la señal original se transmiten en la palabra código de
(k+r) bits.
• La distancia de Hamming, d(v1,v2) se define como el número de
bits en los cuales v1 y v2 difieren.
• La distancia mínima para una palabra código que consiste de
w1,w2, …ws donde s = 2n .
dmin = minij [d(wi,wj)]
• Por ejemplo, si v1 = 011011 y v2 = 110001 d(v1,v2) = 3
• La función de la forma vc = f(vd) donde vd es un vector de data de
m bits y vc la palabra código.
• El radio de redundancia (ie redundancia) es r/k.
• La tasa del código es k/(k+r) y mide la cantidad adicional de ancho
de banda que se necesita.
Principios de la detección de errores
• Las siguientes consideraciones se deben tener en el
diseño de un código:
– Dado k y r, nos gustaría el valor más grande de dmin.
– El codificador debería ser sencillo requiriendo un mínimo de
memoria y tiempo de procesamiento.
– Nos gustaría un pequeño número de extra bits r, para reducir el
ancho de banda.
– Nos gustaría una gran número de extra bits r para reducir la tasa
de error.
• Note que los dos últimos objetivos están en conflicto y
deben negociarse.
Principios de la detección de errores
• Para detectar d errores se requiere una
distancia de d+1. Por ejemplo, bit de
paridad.
• Para corregir d errores, se requiere una
distancia de 2d+1.
Bit de Paridad
• Sumar un bit al final
de un bloque de data.
• De forma tal que, el
carácter tiene:
– Un número par de
unos (paridad par).
– Un número impar de
unos (paridad impar).
• Ventajas:
– Simple
• Desventajas:
– Un número par de errores
no se pueden detectar.
• Ejemplos (paridad par):
–
–
–
–
Data = 1110011
Transmite (A)= 11100111
Llega = 11100101
Calculo en el receptor (B) =
11100100
– |Distancia A-B| = 2
Chequeo Cíclico Redundante (CRC)
• Para un bloque de k bits,
el transmisor genera una
secuencia de r bits.
• El transmisor transmite
una secuencia de k+r bits,
la cual es exactamente
divisible por un número.
• La secuencia de r bits se
llama secuencia de
chequeo de trama (frame
check sequence, FCS).
• Lógica aritmética
– T = trama de (r+k)
bits, r <k
– M= mensaje de k
bits.
– F = secuencia FCS
de r bits.
– P = divisor con un
patrón
predeterminado.
– Tienen r+1 bits.
Chequeo Cíclico Redundante (CRC)
•
•
•
•
•
•
•
El objetivo es que T/P no tenga resto.
Es claro que:
T = 2rM + F
– 2rM desplaza el mensaje a la izquierda y lo rellena de ceros (0).
Dividir 2rM entre P:
2rM/P= Q + R/P
Usemos R como el FCS
T = 2rM + R y T/P = 2rM /P+ R/P = Q + (R/P + R/P) = Q
Así que no hay resto.
Esto es por la suma modulo 2 basada en la operación OR-exclusivo:
0  0 = 0 0  1 = 1 1  0 = 1 1  1 = 0.
Entonces, dividir 2rM entre P y usar el resto como el FCS.
Chequeo Cíclico Redundante (CRC)
• Se puede demostrar que los siguientes errores
son detectables:
– Errores de un bit
– Errores de dos bits siempre que P tiene tres términos
en 1.
– Cualquier número de errores impares, si el divisor
contiene un factor x+1.
– Cualquier error en el cual la longitud del error (en
ráfaga) es menor que la longitud del FCS.
– La mayoría de ráfagas largas de error.
CRC: Representación Polinomial/Ejemplo
• M = 1010001101 (10 bits) <->
X9+X7+X3+X2+1
• P = 110101 (6 bits) <-> X5+X4+X2+1
• FCS = ?
• K = 10
• n=6–1=5
• Genere el mensaje a ser transmitido.
Lógica Digital
• CRC puede ser representado usando un circuito
con compuertas XOR y un registro de
desplazamiento.
• El circuito es implementado:
– El registro contiene r bits (la long del FCS).
– Hay hasta r compuertas XOR.
– La presencia o ausencia de una compuerta
corresponde con la presencia o ausencia de un
termino en el divisor polinomial, P(X), excluyendo el
término 1 y Xr.
Representación Digital
P(X)= X5+X4+X2+1
Corrección de Errores
FEC: Principios
• El algoritmo FEC suma (n-k) bits al bloque de datos de k bits.
• Los k bits en la señal original se transmiten en la palabra código de
n bits.
• La distancia de Hamming, d(v1,v2) se define como el número de bit
en los cuales v1 y v2 difieren.
• Por ejemplo, si v1 = 011011 y v2 = 110001 d(v1,v2) = 3
• La función de la forma vc = f(vd) donde vd es un vector de data de k
bits y vc la palabra código.
• Dentro de un bloque de código (n,k) hay 2K códigos válidos de 2n
códigos posibles.
• El radio de redundancia (ie redundancia) es (n-k)/k.
• La tasa del código es k/n y mide la cantidad adicional de ancho de
banda que se necesita.
FEC: Principios
• La distancia mínima para una palabra código que consiste de
w1,w2, …ws donde s = 2n .
dmin = minij [d(wi,wj)]
• Las siguientes condiciones se cumplen:
– dmin >= 2t+1, el código puede corregir hasta e incluyendo t bits.
– dmin >= 2t puede corregir todos los errores <= t-1 bits y los
errores de t bits pueden ser detectados.
• Otra forma de expresar esta relación es:
– El máximo número de errores corregibles es:
• t=[(dmin-1)/2]
• [x] el más grande de los enteros que no excede x.
– El máximo número de errores que pueden ser detectados es:
• t=dmin-1
FEC: Ejemplo
• k=2 y n=5
• Suponga que se
recibe 00100.
• El cual es un código
inválido.
• La distancia de
Hamming a cada
código válido es:
Distancia mínima
Bloque de
datos
Palabra Código
00
00000
01
00111
10
11001
11
11110
FEC: Ejemplo
Obsérvese que si ocurren dos errores no se pueden corregir.
FEC: Principios
• Las siguientes consideraciones se deben tener
en el diseño de un código de bloque:
– Dado n y k, nos gustaría el valor más grande de dmin.
– El codificador debería ser sencillo requiriendo un
mínimo de memoria y tiempo de procesamiento.
– Nos gustaría un pequeño número de extra bits (n-k),
para reducir el ancho de banda.
– Nos gustaría una gran número de extra bits (n-k) para
reducir la tasa de error.
• Note que los dos últimos objetivos están en
conflicto y deben negociarse.
FEC: Código de Hamming
• Diseñado para corregir errores de bit simples.
• Familia de bloques de corrección de error (n,k) con los siguientes
parámetros:
– Longitud del bloque:
n = 2m – 1
– Número de bits de dato: k = 2m – m – 1
– Número de bits de chequeo: n – k = m
– Distancia mínima: dmin = 3
• El proceso de codificación/descodificación tiene la misma estructura
del FEC.
• En el receptor el resultado de la comparación (XOR de la señal
recibida y otra de la calculada) es realizada.
• El resultado se conoce como palabra síndrome.
FEC: Código de Hamming
• La palabra síndrome tiene un rango de 2(nk) – 1.
• 0 indica no error entonces no se cuenta.
• Como un error puede ocurrir en los k bits
de data o (n-k) bit de chequeo:
• 2(n-k) - 1 >= k+(n-k) = n
• Esto nos permite calcular el número de
bits de chequeo.
FEC: Código de Hamming
• Codificación: k bits de datos + (n -k) bits de chequeo.
• Decodificación: compara los (n-k) bits recibido con los (n -k) bits
calculados bits usando XOR.
• Los (n-k) bits resultantes se llaman palabra síndrome.
• El rango del síndrome esta entre 0 y 2(n-k)-1.
• El síndrome indica:
– Si contiene solo 0s, no se han detectados errores.
– Si el síndrome contiene un solo bit en 1 entonces un error ha ocurrido
en uno de los bits de chequeo. Por lo tanto, no se requiere corrección.
– Si el síndrome contiene más de un bit en 1, entonces el valor numérico
del síndrome indica la posición de un bit de data en error. El bit en error
es invertido para su corrección.
FEC: Código de Hamming-Ejemplo
Bloque de datos = 00111001
FEC: Código de Hamming-Ejemplo
Bit con error
Códigos Cíclicos
• Pueden ser codificados y decodificados usando
registros (LFSRs).
• Para un código cíclico, un código válido (c0, c1,
…, cn-1), desplazado hacia la izquierda un bit
(cn-1, c0, …, cn-2), es también un código válido.
• La entrada de longitud fija (k) toma y produce un
código (n-k).
Códigos Cíclicos
• Codificación: los k bits de data son usados como entrada para
producir un código de chequeo de (n-k) bits.
• Decodificación: la entrada recibe un stream de bits de longitud n (ie
k bits de data seguidos de (n-k) bits de chequeo).
– Se procesan los bits recibidos para calcular el código síndrome (en la
misma manera que se calcularon los bits de chequeo).
– Si todos los bits del síndrome son cero, no se ha detectado error.
– En caso contrario, se ejecuta procesamiento adicional del síndrome
para corregir el error.
Códigos Cíclicos
• Parámetros:
– T = trama de n bits que se transmite.
– D = data de k bits de longitud (los primeros k bits de
T).
– P = patrón de (n–k+1) bits predeterminados.
– Q = Cociente.
– C = Resto.
• Representación polinomial: los coeficientes
corresponden a los bits en el número binario.
Ejemplo,
P(X) = 1 +  I=1n-k-1AiXi + X n-k
Códigos Cíclicos
• Para que T/P no tenga resto entonces
comenzar por:
T(X) = Xn-kD(X) + C(X)
• Si se divide Xn-kD(X) entre P(X) el
resultado da un cociente y un resto:
Xn-kD(X)/P(X)= Q(X) + C(X)/P(X)
Códigos Cíclicos
• Si uno o más errores ocurren el bloque recibido
tendrá la forma:
Z(X) = T(X) + E(X)
• E(X) es el polinomio de n bits con un 1 en cada
posición de bit que es un error en Z(X).
• Si se pasa Z(X) por el mismo LFSR se tiene:
Z(X)/P(X)= B(X) + S(X)/(P(X)
• S(X) es el síndrome de longitud (n-k) bits.
Códigos Cíclicos
• Se puede demostrar que E(X)/P(X) produce el mismo
resto que Z(X)/P(X) es decir S(X)/P(X).
Z(X)/P(X) = B(X)+S(X)/P(X)
(T(X)+E(X))/P(X) = B(X) + S(X)/P(X)
Q(X)+E(X)/P(X) = B(X) + S(X)/P(X)
E(X)/P(X)=[Q(X)+B(X)]+ S(X)/P(X)
• Entonces S(X) depende solo de los bits de error.
• Así que los bits de error se pueden corregir usando un
suma simple:
Z(X) + E(X) = T(X) + E(X) + E(X) = T(X)
Códigos Cíclicos: Ejemplo
• Código (7,4), es decir, n=7, k=4, n-k =3.
• P(X) = X3+X2+1 ó 1101.
• Para que un código se capaz de corregir errores
simples:
• n<= (2n-k-1)
• Ya que n=7 = 23-1=7 este código es capaz de
corregir un error.
• Ver tabla (a) a continuación, note que la
distancia mínima es 3, entonces se confirma lo
anterior de acuerdo lo que se muestro
anteriormente.
Códigos Cíclicos: Ejemplo
Códigos Cíclicos: Ejemplo
• Para cada patrón de error E(X) calcular el síndrome
S(X).
• Proceder como se muestra a continuación para cada
patrón de error.
• Así se obtiene la tabla (b) en la lámina anterior.
E(X)=X6
110
Código BCH
• Para un par de enteros positivos m y t un código
BCH (n,k) tiene los siguientes parámetros:
– Longitud del bloque: n = 2m – 1
– Número de bits de chequeo: n – k  mt
– Distancia mínima: dmin >= 2t + 1
• Corrige combinaciones de t o menos errores.
• Permite gran flexibilidad en la elección de los
siguientes parámetros
• Longitud del bloque y tasa del código
Código Reed-Solomon
• Sub clase de lo códigos BCH.
• La data es procesada en trozos de m bits,
llamados símbolos.
• Un código RS (n,k) tiene los siguientes
parámetros:
– Longitud del símbolo: m bits por símbolo
– Longitud del bloque: n = 2m – 1 símbolos = m(2m – 1)
bits
– Longitud de la data: k símbolos
– Tamaño del código de chequeo: n – k = 2t símbolos =
m(2t) bits
– Distancia mínima: dmin = 2t + 1 símbolos
Código Reed-Solomon: Ejemplo
• Sea t=1 y m=2. Denotemos los símbolos
0,1,2,3 que se pueden escribir en forma
binaria como 0=00, 1=01, 2=10 y 3=11. El
código tiene los siguientes parámetros:
– n= 22-1 = 3 símbolos = 6 bits
– (n-k) = 2 símbolos = 4 bits
• Este código puede corregir una ráfaga de
errores que se expande en un símbolo de
2 bits
Intercalamiento de bloques
• La data es escrita y leída de la memoria en ordenes diferentes.
• Una técnica muy común consiste en almacenar la data para ser
transmitida en arreglos rectangulares en los cuales cada fila
consiste de n bits.
• La data es leída por columnas.
• Los bits de datos y bits de chequeo son expandidos y salpicada con
los bits de otros bloques.
• En el receptor la data es des intercalada para recuperar el orden
original.
• Si errores por ráfagas ocurren, el error es expandido sobre un
número de bloques haciendo posible la corrección.
Códigos Convolucionales
•
•
•
•
•
•
•
•
Generan bit redundantes continuamente.
Chequeo y corrección de errores realizados continuamente.
Código representado como (n, k, K).
El proceso de entrada procesa k bits en un determinado tiempo.
La salida produce n bits por cada k bits de entrada.
K = factor de restricción
k y n generalmente muy pequeños.
La salida de n bits del código (n,k,K) depende de:
– Bloque en curso de k bits de entrada.
– Los K-1 bloques previos de k bits de entrada.
• La tasa de un código convolucional es k/n.
Codificación
un-1,un-2
Códigos Convolucionales: Codificación
• Existen varias maneras de representar
gráficamente un codificador convencional:
– Árbol de código.
– Enramado (trellis).
– Diagrama de Estado.
Códigos Convolucionales :
Descodificación
• El código de Viterbi es uno de los más importantes
algoritmos de corrección para los códigos
convolucionales.
• Código de Viterbi – algoritmo de corrección:
– Compara la secuencia recibida con todas las posibles
secuencias transmitidas.
– El algoritmo elige el camino a través del diagrama de enramado
cuya posible secuencia transmitida difiere en el menor número
de sitios.
– Una vez una camino válido es seleccionado como el camino
correcto, el decodificador puede recuperar la data de entrada de
los bits del código de salida.
Diagrama de Enramado del Codificador en la
Figura Previa
Códigos Convolucionales : Descodificación
• Existen diversa variaciones del algoritmo
de Viterbi.
• Ellas dependen de la métrica usada para
medir las deferencias entre las secuencias
recibidas y las secuencias validas.
• Una de las mas comunes es usar la
distancia de Hamming.
Códigos Convolucionales : Descodificación
• El algoritmo opera de la siguiente manera:
• El algoritmo procede en pasos o niveles, j.
• M<=j<=L, M= K-1 (memoria del codificador, L es la long
de la secuencia del mensaje entrante.
• En cada nodo del enramado se comparan las dos
trayectorias (path) que entran al nodo.
• Se retiene la trayectoria con menor métrica.
• Estas trayectorias se llaman sobrevivientes o activas.
Códigos convolucionales : Descodificación
• Paso por paso el algoritmo opera de la siguiente
manera:
• Paso (nivel) 0:
– Se marca como 0 el estado más a la izquierda del
enramado.
– Pues en este punto no hay discrepancia.
– Se identifican todas las trayectorias sobrevivientes.
– Se almacenan las trayectorias sobrevivientes y su
métrica para cada estado del enramado.
Códigos Convolucionales : Descodificación
• Paso (nivel) j+1:
– Se calcula la métrica para todas las trayectorias que
entran en cada estado del enramado.
– Esto consiste en la suma del la métrica de las
ramas entrantes a las métrica de la trayectoria
sobreviviente conectora desde el paso j.
– Se identifican todas las trayectorias sobrevivientes (la
trayectoria con la métrica más baja).
– Se almacenan las trayectorias sobrevivientes y su
métrica para cada estado del enramado.
Códigos Convolucionales : Descodificación
• Paso final:
– Continua el calculo hasta que el algoritmo completa su
búsqueda hacia delante.
– Si la secuencia recibida es muy grande (casi infinita) el
requerimiento de memoria para el algoritmo pude ser alto.
– Para solventar el problema se establece una ventana de
descodificación.
– Esta tiene una longitud b.
– El algoritmo se interrumpe después de b pasos.
– Se toma un decisión con respecto a la mejor trayectoria y se
libera al usuario el símbolo asociado con la primera de rama de
esa trayectoria.
– Se mueve la ventana un intervalo de tiempo y se toma una
decisión sobre la siguiente trama.
Otro
Ejemplo
Dmin (00,01) = 1
Dmin (11,01) = 1
00
n = 2, k=1, K=3
Tasa del código 1/2
11
(Dmin (00,00) = 0)+1 =1
(Dmin (11,00) = 2)+1=3
(dmin(10,00)=1)+1=2
(dmin(01,00)=1)+1=2
10
01
Secuencia enviada
0000000…
Secuencia recibida
0100010000…
Secuencia enviada
0000000…
Secuencia recibida
1100010000…
Decodificación
incorrecta de la
secuencia de
puros ceros
recibidas
Revisar este Link
• http://www.brianjoseph.com/viterbi/worksh
op.htm
Descargar

Detección y Corrección de Errores