F U N DA M E N T O S D E L A T E C N O L O G Í A I N A L Á M B R I C A : T É C N I C A S D E C O R R E C C I Ó N Y D E T E C C I Ó N D E E R RO R ES

Texto completo

(1)

F U N DA M E N T O S D E L A

T E C N O L O G Í A I N A L Á M B R I C A : T É C N I C A S D E C O R R E C C I Ó N

Y D E T E C C I Ó N D E E R R O R E S

PROFESORA MARIA ELENA VILLAPOL

Universidad Central de Venezuela Facultad de Ciencias Escuela de Computación Redes Móviles e Inalámbricas

O C T U B R E D E L 2 0 1 0 .

(2)

TÉCNIC AS DE C ONT RO L DE E RROR ES E N R E DES INALÁM BRIC A S

Las técnicas de control de errores incluyen aquellas para detectar y/o corregir errores. Las aproximaciones más comunes son:

 Códigos para la detección de errores, tales como Chequeo de Paridad y Chequeo Cíclico Redundante (Cyclic Redundancy Check, CRC): son capaces de detectar la presencia de errores en una secuencia de bits más no pueden corregirlos. Ellos confían en técnicas tales como la de Requerimiento de Repetición Automática y Retransmisiones para el tratamiento de tramas con errores.

 Códigos para la corrección de errores, entre los que se encuentran: Códigos para la Corrección de Errores de Bloque, Código de Hamming, Códigos Cíclicos, Códigos BCH, Intercalamiento de Bloques, Códigos Convolucionales, Codificación Turbo, son usualmente usados en ambientes de comunicación inalámbricas, dada su propiedad de poder detectar y corregir algunos errores, lo que reduce el uso de retransmisiones que pueden ocasionar mucho overhead en éste tipo de enlaces, caracterizados por tener poco ancho de banda.

 Requerimiento de Repetición Automática (Automatic Repeat Request, ARQ):

incluyen técnicas para la retransmisión de tramas no reconocidas después de cierto intervalo de tiempo.

PRINCIPIOS GENERALES DE LA CORRECCIÓN Y DETECCIÓN DE ERRORES

Cada bloque de m bits es codificado con un bloque de (m+r) bits denominado palabra código (codeword). El algoritmo suma r bits al bloque de datos de m bits con la finalidad de poder detectar o incluso corregir errores. 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.

Adicionalmente, se puede medir la cantidad de bits en las cuales dos secuencias difieren. Esta es conocida como la distancia de Hamming, d. Así, d(v1,v2) se define como el número de bits en los cuales las siguientes secuencias, v1 y v2, difieren. La distancia mínima para una palabra código que consiste de w1,w2, …ws donde s = 2n.

) , (

min mini jd wi wj

d

Por ejemplo, si v1 = 011011 y v2 = 110001, entonces d(v1,v2) = 3

(3)

Para detectar d errores se requiere una distancia de d+1. Para corregir d errores, se requiere una distancia de 2d+1 [3].

El radio de redundancia (o solamente redundancia) es r/m. Mientras que la tasa del código es m/(m+r) y mide la cantidad adicional de ancho de banda que se necesita.

DETECCIÓN DE ERRORES

A continuación se describirá una técnica muy común para la detección de errores en sistemas de comunicación, tal como lo es el Chequeo Cíclico Redundante (CRC). Otra técnica ampliamente conocida es el chequeo de paridad, la cual no es descrita en este documento, pero cuya descripción puede ser encontrada en [3].

CHEQUEO CÍCLICO REDUNDANTE (CRC)

Para un bloque de k bits, el transmisor genera una secuencia de n bits. El transmisor transmite una secuencia de k+n bits, la cual es exactamente divisible por un número. La secuencia de n bits se llama secuencia de chequeo de trama (Frame Check Sequence, FCS).

Sea T la trama de (n+k) bits, n <k, M el mensaje de k bits, F la secuencia FCS de n bits y P el divisor con un patrón predeterminado, cuya longitud es n+1 bits. Para obtener la FCS se debe multiplicar 2n por M (es decir 2nM) y dividirlo (división módulo 2) por el generador polinomial P.

El resto de dicha división se envía en la trama como el FCS. En el receptor se debe realizar la misma operación, sobre M’, la cual es la trama recibida.

T, M y P puede ser representados en forma polinomial, usando una variable X, con los coeficientes binarios. Los coeficientes se corresponden con los bits en el número binario.

El CRC puede ser implementado usando un circuito con compuertas XOR y un registro de desplazamiento de la siguiente forma:

 El registro contiene n bits (la longitud del FCS)

 Hay hasta n compuertas XOR.

 La presencia o ausencia de una compuerta corresponde con la presencia o ausencia de un término en el divisor polinomial, P (X), excluyendo el término 1 y Xn.

El siguiente un ejemplo de cómo funciona CRC:

M (mensaje) = 1010001101 (10 bits) (representación polinomial es D(X) = X9+X7+X5+X2+1)

P (generador polinomial) = 110101 (6 bits) (P(X) = X5+X4+X2+1) Así, n+k = 15, k= 100 y n = 5.

25M= 101000110100000 y es dividido entre P de la siguiente manera (ver Ilustración 1):

(4)

+

Ilustración 1: CRC: Ejemplo

Se suma módulo 2 el resto, R, a 101000110100000, dando como resultado.

101000110100000 01110 = 101000110101110 = T

La trama T es la que se envía. Si no hay errores cuando la trama T es recibida y dividida entre P, el resto debería ser 0.

La Ilustración 2 muestra el circuito digital representado en el ejemplo anterior

Ilustración 2: Circuito digital el divisor polinomial P(X) = X5+X4+X2+1.

.

CÓDIGOS DE CORRECCIÓN DE ERRORES POR BLOQUE 1101010110 (Q)

_______________

110101 /101000110100000 110101

--- 111011 110101 ---

111010 y entonces:

110101 T: 101000110101110 --- FCS 111110

110101 --- 101100

110101 --- 110010 110101 ---

01110 (R )

entrada

Registro de desplazamiento de un bit Circuito OR Exclusivo

entrada

Registro de desplazamiento de un bit Circuito OR Exclusivo

(5)

Las técnicas de detección de errores combinadas con las técnicas de ARQ son inadecuadas en ambientes inalámbricos porque:

 La tasa de error de bit es alta.

 En algunos casos, como lo son los satélites, el retardo de propagación es largo comparado con el tiempo de transmisión de una trama.

Por lo tanto sería deseable que un sistema fuera capaz de corregir errores contenidos en una transmisión. Un esquema de cómo esto podría ser realizado se muestra en Ilustración 3. El codificador FEC (Corrección de Error Hacia Adelante) 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 (codeword) de n bits (Ver Ilustración 3). Dentro de un bloque de código (n,k) hay 2K códigos válidos de los 2n códigos posibles. El radio de redundancia (es decir, 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.

Ilustración 3: Proceso de FEC.

Otra definición importante cuando se está trabajando con los códigos de detección de errores por bloques es la distancia mínima, dmin, (ver Sección 0), la cual es determinada como se muestra a continuación:

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 se da a continuación. El máximo número de errores corregibles es:

 

min 1 /2

 d

t Eq 1.1

Codificador FEC

codeword data

k bits n bits

Codificador

FEC data

No hay error o es corregible

Error detectado pero no corregible

Indicación del error

codeword

Emisor

Receptor Codificador

FEC

codeword data

k bits n bits

Codificador

FEC data

No hay error o es corregible

Error detectado pero no corregible

Indicación del error

codeword

Emisor

Receptor

(6)

Donde [x] el más grande de los enteros que no excede x.

El máximo número de errores que pueden ser detectados es:

min 1

 d

t Eq 1.2

Para ilustrar lo antes expuesto se presenta un ejemplo. En el siguiente ejemplo se tiene que k=2 y n=5. La Tabla 1 muestra la relación entre el bloque de datos y la palabra código (es decir, las palabras válidas). La distancia mínima entre los código válidos, es decir, dmin (00000, 00111, 11001, 11110) es 3 (ver Sección 0), por lo tanto el número de errores que se puede corregir es t = 1 y detecta errores de 2 bits (ver Eq 1.1 y 1.2).

Bloque de datos Palabra código

00 00000

01 00111

10 11001

11 11110

Tabla 1: Relación de la secuencia de datos con la palabra código

Ahora, suponga que se recibe la siguiente secuencia 00100, la cual es un código inválido (ya que no está en la Tabla 1). La distancia de Hamming desde dicha secuencia a cada código válido es:

d(00000,00100) = 1 (distancia mínima); d(00111,00100) =2; d(11001,00100)=4;

d(11110,00100)=3

Ya que la distancia mínima es uno, que significa que existe un cambio en un bit de la secuencia, debería ser posible corregir el error, buscando la palabra código cuya distancia a la secuencia recibida es 1. En este caso la palabra código que cumple tal condición es la 00000 y la palabra transmitida es 00. Este hecho se puede observar en la Ilustración 4.

Ahora, si la secuencia recibida es 01010, la distancia mínima a las palabras códigos es de 2:

d(00000,01010) = 2 (distancia mínima); d(00111, 01010) =3; d(11001, 01010)=3; d(11110, 01010)=2 (distancia mínima)

(7)

Ilustración 4: Ejemplo de FEC (tomado de [1]).

Por lo tanto, el error puede ser detectado, pero no puede ser corregido porque, como se ve en la Ilustración 4 (observar códigos en el rectángulo), dicha secuencia recibida puede corresponderse a dos palabras códigos válidos y no hay forma de conocer cuál de ellas es.

CÓDIGOS CÍCLICOS

Los códigos cíclicos son códigos de corrección de errores por bloques que siguen los principios generales enunciados anteriormente. Los mismos 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). A continuación se describe el procedimiento de codificación/descodificación:

Codificación: los k bits de data son usados como entrada para producir un código de chequeo de (n-k) bits (siguiendo el mismo procedimiento explicado en la sección 0).

Decodificación: la entrada recibe un stream de bits de longitud n (es decir, k bits de data seguidos de (n-k) bits de chequeo). Se procesan los bits recibidos para calcular el código síndrome (de 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.

Ejemplo: Los siguientes parámetros se utilizan en la explicación:

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

(8)

Sea un código (7,4), es decir, n=7, k=4, n-k =3. P(X) = X3+X2+1 ó 1101.

Para que un código sea capaz de corregir errores simples:

n<= (2n-k-1) (ver [1])

Ya que n=7= 23-1 este código es capaz de corregir un error. La Ilustración 5 muestra todas las palabras códigos generadas usando el polinomio P(X) = X3+X2+1 y el procedimiento descrito en la Sección 0. Por ejemplo, el procedimiento para calcular la palabra código asociado al bloque de datos D=0000, fue multiplicar 23M = 0000000. Este resultado se divide módulo 2 entre P(X).

Esto da como resto R= 000. Por lo tanto la palabra código es 0000000000. Así se continua con cada uno de los bloque de data.

Note en la Ilustración 5 que la distancia mínima entre las palabra códigos es de 3. Lo que confirma que solo se puede corregir un error (usar Eq 1.1).

Ilustración 5: Palabras códigos válidas para el ejemplo.

Desde que solo un error puede ser corregido, los patrones de error (E(X)) posibles se muestran en la Ilustración 6. En este caso, el bit en uno (1) indica que se ha producido un error en esa posición del stream de datos. Entonces, para cada patrón de error E(X) calcular el síndrome S(X) (ver Ilustración 6). Para ello se debe dividir, módulo 2, E(X) entre el polinomio P(X). El resto es el síndrome [1].

(9)

Ilustración 6: Síndromes para errores simples.

Suponga que se recibe el bloque de data Z(X) = X6+X5+X3+X2+1 (1101101). Decodificar Z(X), dividiéndolo entre P(X). Si el resto es 0 no hay errores. En caso contrario, buscar el resto, S(X), en tabla de la Ilustración 6. En este caso el resto es, S(X) = X2+1 (101), por lo tanto E(X)

= X3 (0001000). Para obtener la palabra correcta, se realiza la suma lógica (módulo 2) de Z e E, es decir T =Z E. Se busca el resultado, T, en la tabla de la Ilustración 5 para obtener el bloque de datos. En este caso,

T = Z E = 1101101 0001000 = 1100101 Por lo tanto, el bloque de datos transmitido es 1100.

CÓDIGO DE HAMMING

Está diseñado para corregir errores de bit simples. Los códigos de Hamming son una familia de bloques de corrección de error de (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 realizado, dando como resultado lo que se conoce como palabra síndrome.

Codificación

A los k bits de datos se le suman los (n -k) bits de chequeo. Como un error puede ocurrir en los k bits de datos o en los bits de chequeo, se tiene que la siguiente relación se mantiene (ver [1]):

2(n-k) - 1 >= k+(n-k) = n

Esto nos permite calcular el número de bits de chequeo. Así, por ejemplo, para un bloque de datos de k=8 bits, se requieren 4 bits de chequeo (es decir, n-k=4.

Para el cálculo de la palabra código a ser enviada se deben seguir los siguientes pasos:

Los bits de datos y de chequeo se reorganizan como se describe a continuación:

Partiendo de la posición menos significativa (mas a la derecha), los (n-k) bits de chequeo de Hamming se insertan en las posiciones que son potencias de 2 (es decir, posiciones 1,2, 4,… 2(n-

k)).

+

+

+

(10)

Los bits restantes son bits de datos.

Para calcular los valores de los bits de chequeo se tiene que, para cada uno de los bits de datos que tienen un valor de 1, se debe representar su posición en binario. Por ejemplo, si el bit en la novena posición tiene un valor de uno, su posición es representada como 1001.

Todos los valores posiciónales calculados anteriormente son relacionados usando un XOR.

Por ejemplo, asuma que se tiene un bloque de datos 00111001. Entonces se tiene que hay k = 8 bits de datos y (n-k) = 4 bts de chequeo. Los cuales se insertan como se muestra en la Ilustración 7 (ver fila de check bit). También se puede observar que cuatro de los bits de datos tienen el valor de 1 (están sombreados en la ilustración) y por lo tanto los valores de sus posiciones han sido relacionados usando la función del XOR (ver tabla (b) de la ilustración). El código de Hamming resultante es 0111 y el bloque transmitido es 001101001111.

Ilustración 7: Ejemplo del cálculo del código de Hamming (tomado de [3]).

Descodificación

El receptor compara los (n-k) bits recibido con los (n -k) bits calculados bits usando la función 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.

(11)

 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.

El procedimiento de decodificación en el receptor es como sigue:

 Todos los valores binarios de las posiciones donde hay un 1 son relacionados con la función XOR. En este caso se incluyen tanto los bits de datos como los de chequeo.

 Si el resultado es cero, el error no es detectado.

 De lo contrario el resultado es el síndrome y su valor es igual a la posición del bit que esta errado.

Siguiendo con el ejemplo anterior, suponga que el bit de datos 3, en la posición 6, llega con error, siendo el bloque recibido de 001101101111. El receptor realiza el XOR como explicado anteriormente y como se muestra en la Ilustración 8. Note que en la tabla (d), el resultado de realizar un XOR de todas las posiciones donde están los código de chequeo cuyo valor es 1 es 0111 (es decir, 0001 xor 0010 xor 0110).

Finalmente el resultado de XOR es 0110, que es diferente de 0 e indica la posición donde ocurrió el error, es decir, el bit en la posición 6.

Ilustración 8: Ejemplo de aplicación del código de Hamming en el receptor (tomado de [3]).

CÓDIGOS BCH

Los códigos BCH constituyen una de las clases más importantes y poderosas de los códigos de bloques lineales. Los códigos BCH más comunes son los códigos BCH binarios, que están caracterizados por cualquiera entero positivo m, igual o mayor a 3 y t menor que (2m – 1)/2 mediante los siguientes parámetros:

Longitud del bloque: n = 2m – 1

(12)

Número de bits de chequeo: n – k  mt Distancia mínima: dmin >= 2t + 1

Corrige combinaciones de t o menos errores. Una explicación detallada de la construcción de los códigos BCH está más allá del objetivo de este documento, pero se puede encontrar en [1].

Para proporcionar una idea de su capacidad se muestran los parámetros en la Ilustración 9 y los polinomios generadores en Ilustración 10.

Ilustración 9: Parámetros de los Códigos BCH (tomado de [3]).

Ilustración 10: Polinomios generadores para los códigos BCH (tomado de [3]).

CÓDIGOS REED-SALOMON

Los códigos Reed-Salomon (códigos RS) son una subclase de los códigos BCH no binarios, ya que el codificador de un código RS opera sobre un bloque de bits en vez de bits individuales como en el caso de los códigos binarios. Así, la data es procesada en trozos de m bits, llamados símbolos. Y un código RS (n,k) tiene los siguientes parámetros:

(13)

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

Similarmente al caso anterior una explicación más detallada de cómo se codifica/decodifica un código RS esta fuera del alcance de este documento pero se puede encontrar en [1].

CÓDIGOS CONVOLUCIONALES

Similarmente a los códigos por bloques los códigos convolucionales son ampliamente usados en los sistemas de comunicación inalámbricos. Sin embargo, a diferencia de los primeros, estos generan bit redundantes continuamente y el chequeo y corrección de errores realizados continuamente.

Un código convolucional es representado como (n, k, K). Así, el proceso de entrada procesa k bits en un determinado tiempo y la salida produce n bits por cada k bits de entrada. A diferencia de los códigos por bloques estos códigos tienen memoria, así la salida de n bits del código (n,k,K) depende del bloque en curso de k bits de entrada y los K-1 bloques previos de k bits de entrada. K es un factor de restricción y k y n son generalmente muy pequeños.

CODIFICACIÓN

El proceso de codificación de un código convolucional se explicará usando un ejemplo el cual es mostrado en la Ilustración 11. Note que las dos representaciones son equivalentes, una a través de un registro de desplazamiento y la otra un diagrama de estado. Otras formas graficas de representar un codificador convolucional y que son totalmente equivalentes a la del diagrama de estado son el árbol de código (ver [2]) y el enramado (ver Sección 0).

Así para un código de (n,k;K) el registro de desplazamiento contiene las más recientes K x k entradas de bits. El registro es inicializado en cero. El codificador produce n bits por cada k bits (n > k). Lo que significa que la tasa de un código convolucional es k/n. En el ejemplo se usa un código (2,1,3), lo que implica que k=1 y la longitud del registro es de K=3. En el ejemplo, el codificador convierte un bit de entra un en dos bits vn1 y vn2, usando los tres bits más recientes.

vn1 = un  un-1  un-2. vn2 = un  un-2.

Un código convolucional puede representarse como una máquina de estado con 2k(K-1) estados. El número de estado es debido a que para una entrada de k bits hay 2k(K-1) diferentes funciones que concuerdan k bits de entrada en n bits de salida. La transición de un estado a otro está determinada por los k bits más recientes y produce n bits. El estado es inicial corresponde al estado de todos ceros.

Siguiendo con el ejemplo, se tiene una maquina con 2k(K-1) = 2 (3-1) = 4 estados. La entrada del próximo bit causa una transición de estados y produce una salida de n= 2 bits. Por ejemplo, si los últimos bits fueron 10 (estado b) y el próximo bit es 1, el próximo estado es el d(11).

(14)

vn1 = un-2  un-1  un = 0 1 1 = 0 vn2 = un-2  un = 0 1 = 1

Ilustración 11: Codificador convolucional con (n,k,K) = (2,1,3) (tomado de [3]).

DESCODIFICACIÓN

El código de Viterbi es uno de los más importantes algoritmos de corrección para los códigos convolucionales. Antes de explicar este código se debe explicar en qué consiste en diagrama de enramado mostrado en Ilustración 12. Para simplificar la explicación se hará uso del diagrama de estado mostrado en la Ilustración 11b. Si el diagrama está en posición vertical como en este caso, el diagrama expandido, llamado enramado (trellis) se organiza en forma tal que se reproducen los estados de forma horizontal. Las transiciones entre estados corresponden a tiempo o data de entrada. Este diagrama se lee de izquierda a derecha. Por ejemplo, si se está en el estado a=00 y el bit de entrada es un 1, la salida será 11 y el próximo estado es b(10). Esto coincide con la salida generada usando el registro de desplazamiento y el diagrama de estado de la Ilustración 11.

(15)

Ilustración 12: Diagrama de trellis para el codificador de la Ilustración 11 (tomado de [3]).

El código de Viterbi 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 plazas. Una vez un 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.

Existen diversas variaciones del algoritmo de Viterbi. Ellas dependen de la métrica usada para medir las diferencias entre las secuencias recibidas y las secuencias válidas. Una de las más comunes es usar la distancia de Hamming. El algoritmo procede en pasos o niveles, j y opera de la siguiente manera. Sea M<=j<=L, M= K-1 la memoria del codificador y L la longitud de la secuencia del mensaje entrante. En cada nodo del enramado se comparan las dos trayectorias (paths) que entran al nodo, la secuencia codificada representada por la trayectoria calculada y la secuencia recibida, y se retiene la trayectoria con menor métrica. Estas trayectorias se llaman sobrevivientes o activas.

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.

Paso (nivel) j+1:

Sea j=0,1,2,…

(16)

En el nivel (tiempo de reloj) j+1, se calcula la métrica para todas las trayectorias que entran en cada estado del enramado para dicho tiempo, agregando la métrica de las ramas entrantes a la métrica de la trayectoria sobreviviente conectora desde el nivel 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.

Paso final:

Se continúa el cálculo 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 puede 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 una 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.

Por ejemplo, la Ilustración 13 muestra la aplicación del algoritmo de Viterbi a la secuencia recibida 10010100101100 con un decodificador cuya ventana es b=7. Las líneas en la figura representan las trayectorias validas a través del enramado y las líneas gruesas las trayectorias activas. En el paso 0 se inicializa el estado a en cero, 0. En el paso 1, se ha recibido la secuencia 10. Las dos secuencias válidas son 00 y 11 (ver Ilustración 12). Para ambos casos hay una distancia de 1 con respecto a la secuencia recibida. Por ejemplo d(10,00) = 1. Las dos trayectorias activas se definen con un estado con etiqueta 1.

En el paso 2, se tiene la secuencia recibida de 01. Se calcula la métrica para cada uno de los 4 posibles estados (ver Ilustración 12). De arriba hacia abajo, los valores son 2,2,3,1. Para ilustrar el procedimiento se muestra como se calculó el valor de la métrica en el estado a. La métrica para la trayectoria sobreviviente conectora del paso 1 es 1. A esto se le suma la métrica para la distancia entre la secuencia válida y la recibida, es decir d(01,00)=1. Dando un total de 2. Similarmente se procede en los otros casos. Dado que existe una sola trayectoria para cada estado, todas las trayectorias se marcan como sobrevivientes.

En el paso 3, se procede de forma similar que en el paso 2. Pero en este caso se tiene que cada trayectoria termina en un estado para el cual existe otra trayectoria válida. Por lo tanto, algunas trayectorias no sobreviven como trayectorias activas (o sobrevivientes). Por ejemplo, la secuencia de estado a-a-a-a tiene una discrepancia de 3 mientras que la secuencia a-b-c-a tiene una discrepancia de 4. En el paso 7, el algoritmo finaliza. Note que todas las trayectorias activas pasan a través del lado a-b que tiene una salida 11, corrigiendo así los dos primeros de bits de la secuencia de entrada de 10 a 11. Fíjense que si b=5 el error no se hubiese podido corregir porque hay dos trayectorias sobrevivientes.

(17)

Ilustración 13: Algoritmo de Viterbi para w= 10010100101100 con b=7 para el codificador de la Ilustración 12 (tomado de [3]).

RE FE RE NCI AS

[1] Morelos-Zaragoza R. The Art of error Correcting Coding. John Wiley and Sons. 2002.

[2] Haykyn S. Sistemas de Comunicación. Limusa Wiley. 2001.

[3] Stallings W. Wireless Communications and Networks. Prentice Hall. 2002.

Figure

Actualización...

Referencias

Actualización...

Related subjects :