Está en la página 1de 20

SEMANA 14

Códigos de bloques/lineales
Es parecido a los códigos por paridad. Se tiene un conjunto de bit de datos en un
grupo de ‘K’ bits de información con sus ‘n-K’ bits de información

Los ‘n-K’ bits se obtienen mediante sumas ponderadas o sumas a complemento a 2


de los bits de información. Esto es como en paridad donde se sumaban los bits y
dependiendo de eso se agregaba un ‘1’ o un ‘0’

Cada bit ‘n-K’ es una suma ponderada con valores ponderados para cada bit ‘K’.
Dichos valores de ponderación a_ij solo pueden ser ‘1’ o ’0’. En el caso de la
paridad par el a_ij solo tomaba valor ‘1’

Forma de detección de errores


Antes de codificar entran ‘K’ bits por lo que entre ellos existen 2^K combinaciones
posibles. Para cada grupo de ‘K’ bits de genera un grupo de ‘n’ bits donde están los
de información y codificación. En este 2do grupo existirán 2^n combinaciones
posibles.

Dentro de ese grupo total de 2^n, las combinaciones posibles solo son las 2^k
combinaciones del inicio. Si existe uno o más bits errados, lo que va a pasar es que
esa nueva combinación errada ya no va a estar dentro del pequeño conjunto de
2^k (punto rojo en el dibujo)

En conclusión, tengo un universo de 2^n combinaciones de bits, de ese universo


solo selecciono un grupo pequeño que son los códigos válidos. Cualquier bit errado
que se introduzca va a hacer que el código válido se transforme en cualquier otro
código que no esté dentro del grupito válido mencionado anteriormente, por ello se
detecta el bit errado.

SEMANA 14 1
En los cíclicos se sabía que, si se aumentaba el orden del polinomio, el código se
volvía más robusto y podía detectar mayor cantidad o una mayor ráfaga de bits
errados. Pero en este caso, ¿qué es lo define esa capacidad?

EJEMPLO
Código de Hamming 4/7: Donde los bits de información se van agrupando en grupo de
4 bits y se generan 7 bits codificados

Para los bits ‘n-K’ se establece una suma ponderada con los bits ‘K’ de información

Luego de esos 4 bits de información en el ejemplo, tengo 2^4=16 posibles


combinaciones, cada una obviamente con sus bits de codificación. Aunque por el
número de bits de la codificación se tenga la posibilidad de hacer 128

SEMANA 14 2
combinaciones solo se tomarán las 16 del inicio. Se establece la codificación para
cada combinación con la regla de ponderación ya establecida

Se establece un parámetro que se explicará después que es el peso del código W


(weight) que es la cantidad de ‘1’ que hay en código

Ahora me pregunto, cómo sé cuántos bits errados tengo una vez que detecto el error

Matriz de Hamming
1. Tengo mi ponderación para b5, b6 y b7

2. A cada uno le saco sus propios “bits de codificación aplicados a sí mismo”, por
ejemplo, para el b5 sería el mismo b5 (1011) y el código asociado con b5, b6 y b7
(100) y así con todos los bits de codificación. Esos 3 bits de codificación tanto para
el b5+b5, b6+b6 y b7+b7, van a ser los mismos siempre (100, 010, 001) para esa
ponderación. Y como en esa ponderación es la dada al principio cuando se hace
b5+b5 es 1 (100), cuando se hace b6+b6 es 1 (010) y cuando es b7+b7 es 1 (001)

3. Luego esos coeficientes los paso a una matriz que será mi HAMMING MATRIX, la
cual al multiplicarse por los bits codificados o transmitidos siempre darán ‘0’ como
resultado, si es que no ha habido bits errados

4. Finalmente armo mi matriz DE VERIFICACIÓN con los coeficientes de ponderación


y la matriz identidad (100, 010, 001)

SEMANA 14 3
Analizando el funcionamiento
Después de mi codificación se obtiene una matriz de bits de transmisión [C], la cual
pasa por el canal de comunicación y al final se le agregan los bits errados
representados como otra matriz de error [E]. Cuando no existan bits errados, la
matriz de error será ‘0’.

Para ver cuántos bits errados puede detectar mi código voy agregan primero 1 bit
errado, luego 2 y 3 hasta que no logre detectarlos más

Se suma el error a mi matriz [C] y luego multiplico dicha suma con mi matriz de
verificación [H] para ver que, si hay bits errados, dicha matriz contiene bits errados
y no es cero como debiera ser

A la multiplicación de mi matriz de verificación Hamming con la matriz de bits


recibidos se le conoce como matriz SYNDROME

Al simplificar, me doy cuenta que para detectar bits errados solo basta con
multiplicar [H] con la matriz de bits errados

SEMANA 14 4
Para el ejemplo de 4/7
Veremos si se puede detectar 1 bit errado, para ello primero hallamos la matriz [S]

Cabe notar que al multiplicar el error por la matriz de verificación el resultado es el


número de la columna en el que esté la posición del error. Si error es [0010000]
entonces el resultado será la 3ra columna de la matriz [H]. Por lo tanto, siempre se
detectará al menos un bit errado si todas las columnas de [H] son distintas de ‘0’

Para 2 bits errados


Ahora hago lo mismo para 2 bits errados. En este caso, puede detectar el error para 2
bits solo si no existen 2 columnas que sean iguales, de lo contrario saldrá ‘0’ y me dará

SEMANA 14 5
un falso positivo. En el ejemplo como ninguna columna es igual a la otra entonces
siempre podrá detectar 2 bits errados cualesquiera

Para 3 bits errados

Vemos que existen combinaciones en la matriz de error [E] que crean falsos
positivos en [S]. Por lo tanto, puedo deducir que siempre va a poder detectar hasta
2 bits errados siempre y cuando ninguna columna sea 0 y no haya 2 columnas
iguales

OJO que cada vez que tenga un falso positivo es porque mi matriz de error [E] es
un código válido, ya que solo cuando multiplico [H] con códigos válidos obtengo ‘0’
y eso se puede verificar

SEMANA 14 6
Distancia de Hamming
Me sirve para hallar el máximo de bits errados que puede detectar mi codificación

Se puede definir como la diferencia de bits entre 2 códigos válidos. En el ejemplo


primero donde se definió las 128 combinaciones y el “weight” tenemos que la d_H
(distancia de Hamming) entre el primer código valido y el segundo es 4, entre el
2do y el 3ro es 3, entre el 1ero y el último es 7

Se define la distancia mínima que es la mínima distancia de Hamming del conjunto


de códigos válidos. Por ejemplo, si regresamos al ejemplo de 4/7 tenemos que
analizar todas las combinaciones posibles y ver cuál es la diferencia mínima entre
todas ellas, osea de entre 16 combinaciones tengo que restar parejas de 2, para
ello tendría que hacer (16*15)/(2!) =120.

Otra forma de hallar la distancia de Hamming es con los pesos (weight). Entonces
si sumo 2 códigos válidos y calculo su peso ‘W’, el resultado me da la distancia de
Hamming.

Simplificando me doy cuenta que LA SUMA DE 2 CÓDIGOS VÁLIDOS ME DA


OTRO CÓDIGO VÁLIDO. Por lo tanto, la distancia de Hamming que se puede
hallar con el peso de la suma de 2 códigos válidos también puede ser el peso de un
solo código válido

Finalmente concluyo que la distancia mínima equivale a hallar el mínimo weight de


cualquier código válido. EXCEPTUANDO EL PESO ‘0’. Para mi ejemplo de 4/7 el
weight mínimo es ‘3’

SEMANA 14 7
Con la distancia mínima uno puede calcular la máxima cantidad de bits errados que
se podrán detectar en un código. Para mi ejemplo, como me salió ‘3’, significa que
como mínimo tengo que tener 3 bits errados para confundirlo y tener un falso
positivo. Si erro 2 bits entonces sí o sí se va a detectar, tengo que cambiar como
mínimo 3 bits para confundir la detección.

Entonces el máximo de bits errados que puedo detectar siempre es (d_min - 1)

OJO que el máximo de bits errados que puede corregir es (d_min-1)/2

Interleaving
Es una estrategia para detectar bits errados en canales inalámbricos o de radio.
Esto debido a que los canales de radio sufren los que se conoce como
desvanecimiento por multicamino, donde se interfiere consigo misma al reflejarse
en otras superficies. Eso ocasiona que la potencia pueda estar normal y de repente
tenga valles o FADING por la interferencia destructiva. Estos FADING en la señal
suelen durar milisegundos, pero debido a la velocidad de transmisión, ello puede
significar cientos o miles de bits errados, lo cual es incorregible.

Con esta estrategia no se introduce ningún bit adicional, solo se reordena la matriz.
Los bits que van llegando los coloco en una matriz (por ejemplo, desde el bit_1
hasta el bit_100) y cambio las filas por las columnas y recién los transmito. Cosa
que cuando se presente el FADING este afecte a una ráfaga de bits en una fila (por
ejemplo, b1, b11, b21, etc.) pero ahora esos bits no son una ráfaga en sí sino son
los primeros bits de cada fila antes de hacer el Interleaving. Por ello cuando se
haga el DE-INTERLEAVING los bits que estarán errados no estarán en ráfaga y
será más sencillo corregirlos

SEMANA 14 8
En conclusión, si tengo un FADING de 10 bits consecutivos, en vez de tener una ráfaga
de 10 bits errados sobre 10 bits codificados, se convierte a 1 bit errado por cada 10 bits
codificados

Códigos convolucionales
Son los códigos más empleados en la técnica FEC, en la corrección de errores

En los códigos anteriores se tenía que para un grupo de ‘K’ bits se los codificaba en
‘n’ bits donde ‘K’ bits eran de información y ‘n-K’ eran de codificación

En este caso se tiene el bloque actual de ‘K’ bits, pero también se conserva una
parte de los ‘K’ bits anteriores. Debido a esto necesita capacidad de memoria

Se puede hacer la detección y corrección de bits errados mediante la convolución


del bloque actual con lo que se conservó del bloque anterior

SEMANA 14 9
1. Entran los bits y pasan por registros de memoria o Flipflops que van cambiando de
acuerdo a un reloj. En términos de transformadas Z son varias (Z^-1)

2. A partir de esa secuencia de posiciones de memoria, se genera salidas codificadas


y se toma varias salidas y se suman, lo mismo con las entradas.

3. Cada una de las nuevas salidas que son combinaciones del estado presente con el
estado pasado pasan a un convertidor P/S donde obtengo una secuencia de ‘n’ bits
codificados convolucionalmente

Analizaremos el código convolucional de 1/2


Entran los bits b(t) y pasan por el primer registro de desplazamiento y luego por el
resto

Luego saco todas las salidas y las sumo, también saco la entrada con la salida de 2
periodos y lo sumo.

La forma para establecer las características de este código es usan usando tabla
de verdad, diagramas de estado o diagrama de Trellis o diagrama de árbol

SEMANA 14 10
Recordar que las salidas dependen de la entrada actual y las entradas pasadas

Para el primer estado de referencia se toma el grupo actual de bits b(t) y el anterior
b(t-T)

OJO que todo siempre va a inicializar en ‘0’ entonces tomo que mi estado inicial es
‘00’. Cuando ingresa una ‘0’, todas las salidas de los Flipflops son ‘0’ además la
salida cosificada C1 es ‘0’ al igual que la C2

Cuando la entrada es ‘1’, todos los bits ‘0’ se desplazan a la derecha y hacen
espacio a ese ‘1’, entonces tenemos que b(t) es ‘1’ y la salida anterior b(t-T) es ‘0’.
Luego, la salida cosificada C1 1+0+0= ‘1’ y para C2 1+0= ‘1’

Ahora, si mi estado inicial es ‘01’ y entra un ‘0’ entonces todos se desplazan y b(t)
es ‘0’, b(t-T) es ‘0’ y las salidas C1 ‘1’ y C2 ‘1’

Si viene el ‘1’, todo se desplaza y tengo b(t) ‘1’, b(t-T) ‘0’ y luego ‘1’. C1 será
1+0+1=’0’ y C2 1+1=’0’

SEMANA 14 11
Diagrama de estado
Se obtiene a partir de la tabla de verdad y es una forma más gráfica de ver las
transiciones entre los diferentes estados

Sirve mucho para determinar la cantidad de bits errados que puede corregir un
código convolucional. Dicha cantidad se calcula a partir de la distancia libre
(parecido a la distancia mínima) y la distancia libre se calcula a partir del diagrama
de estado o también se puede a partir del diagrama de Trellis, pero es algo más
difícil por eso de prefiere el de estados

1. Si el estado inicial es ‘00’ y viene un ‘0’, el siguiente es ‘00’ y la salida es ‘00’. Si


estamos en el ‘00’ y viene un ‘1’, el siguiente es ‘10’ y la salida es ‘11’

2. Si estoy en el ‘01’ y viene un ‘0’, el siguiente es ‘00’ y la salida es ‘11’. Si estoy igual
en ‘01’ y viene un ‘1’, el siguiente es ‘10’ y la salida es ‘00’

3. Así con cada estado

SEMANA 14 12
Diagrama de Trellis
También llamado diagrama de árbol, se puede construir teniendo el diagrama de
estados.

Tenemos que trazar una cantidad de líneas igual a la cantidad de estados que
tengo. Se hace una secuenciación de los distintos estados y salidas que se
producen en el codificador convolucional. Esto se puede construir a partir del
diagrama convolucional o a partir del diagrama de estado

1. Siempre partimos del estado inicializado en ‘00’. SI LA ENTRADA ES ‘0’ ES UNA


LÍNEA SOLIDA, SI ES ‘1’ LA LÍNEA ES PUNTEADA. OJO que la salida de cada
estado está escrita sobre la flecha solida o punteada

2. Para el estado inicial ‘00’, según sea a la entrada ‘0’ o ‘1’ el estado siguiente es ‘00’
o ‘10’ respectivamente. Ese será mi “PRIMER NIVEL”

SEMANA 14 13
3. En el segundo nivel tengo 2 estados iniciales nuevamente y como se repite el ‘00’,
sus estados siguientes también se repetirán, pero ahora también tengo un 2do estado
que es el ‘10’ y este a su vez tiene 2 estados siguiente. Con una entrada ‘0’ y ‘1’ ese
nuevo estado (‘10’) tiene estados siguientes de ‘01’ y ‘11’ respectivamente.

SEMANA 14 14
4. Ahora tengo que para el primer nivel tengo 1 estado, para el 2do tengo 2 estados,
para el 3ro tengo 4 estados. En este último nivel tengo 2 estados nuevos con respecto
al 2do nivel que son ‘01’ y ‘11’. Para cada estado, cuando tengo de entrada ‘0’ o ‘1’
tendré de estado siguiente ‘00’ ‘10’ y ‘01’ ‘11’ respectivamente.

5. Luego, como en este último nivel tengo ya los estados siguientes para cada uno de
mis estados posibles, solo copio y pego este último nivel para los niveles siguientes

SEMANA 14 15
Transmisión
Con este diagrama de Trellis se puede hacer la parte de detección de error en la
recepción usando el algoritmo de Viterbi

Para una serie de bits de entrada, el diagrama de Trellis es el más sencillo de


manejar porque solo sigo las líneas que corresponden al ‘1’ y al ‘0’. Por ejemplo,
para una entrada b(t) ‘1010111’ se obtienen salidas dependiendo de los caminos
que siga.

Una vez con los bits de salida, se procede a modular, transmitir, recibir, demodular
y obtener la secuencia original utilizando el algoritmo de Viterbi. Para la
decodificación se introducen 2 bits errados en el 4to grupo que en vez de ser ‘10’ le
ponemos ‘01’

Se tiene que calcular la distancia de Hamming entre todos los caminos posibles a
partir del diagrama de Trellis. Por ejemplo, en la entrada del primer bloque ‘11’,
para la salida ’00’ la distancia es 2 y para la salida ‘11’ la distancia es 0. OJO que
no estoy diciendo la distancia al estado siguiente sino a la salida.

Ahora en el 2do nivel tengo ‘10’ a la entrada y si me voy por la salida de ‘00’ tendría
que mi distancia es 1 pero con el 2 pasado la distancia total sería 3. Pero si se va al

SEMANA 14 16
estado de ‘10’ que tiene la salida ‘11’ entonces las distancia tb sería 1 que sumado
con el 2 anterior se hacen 3

Termino todas las distancias posibles para el 2do nivel y paso al 3ro y en adelante.
Según esas distancias de Hamming tengo que ver cuál ha sido la ruta más
probable y así poder detectar la secuencia original

OJO: Cada vez que paso al siguiente nivel solo me tengo que quedar con 4
combinaciones, por lo que elimino la restante más grande las 2 de cada nodo, en el
3er nivel elimino 4 combinaciones. Como me faltan dos combinaciones más en la
entrada tomo como si en la transmisión los últimos bits fuesen ‘0’ por lo que se
transmite y recibe ‘01’ y ‘11’ respectivamente.

En esas 2 ultimas recepciones se producen que, en un mismo nodo que tiene 2


salidas posibles, sus distancias de Hamming son iguales por lo que puedo eliminar
cualquiera, sin embargo, si elimino la de arriba, por ejemplo, los otros nodos que
tuvieran 2 distancias iguales (si los hubiera) también seguirán el mismo criterio de
eliminar la de arriba.

SEMANA 14 17
Ahora desde adelante hacia atrás elijo el camino con las distancias menores y obtengo
la secuencia original, aunque se haya introducido bits errados. Así funciona el algoritmo
de Viterbi, se analizan los caminos en el diagrama de Trellis y se eliminan los que
tengan mayor distancia acumulada, así, se corrigen los posibles bits errados

Observaciones:

SEMANA 14 18
Se recomienda utilizar la mayor cantidad de bits de entrada posibles para elegir el
camino con menor distancia de Hamming.

Se suele usar 5*K grupos de bits donde K sería el número de flipflops +1, por
ejemplo, en el ejercicio solo se usaron 2 Flipflops por lo tanto se tendría que
analizar 15 grupos de bits para asegurar que se elige el camino más corto

¿Cómo se puede saber la cantidad de bits errados que pueden


detectar?
Se trabaja parecido que, con los códigos de bloque, donde para saber la máxima
cantidad se tiene que determinar la distancia mínima. En este caso se tiene que
saber la distancia libre, esta distancia se puede hallar con el diagrama de Trellis o
de Estado, pero es más sencillo hacerlo a partir del diagrama de Estados.

La distancia libre es el peso de la secuencia que empieza en el estado ‘00’ como


estado inicial y termina en el mismo estado ’00’. Entonces lo primero que se tiene
que hacer es establecer todas las secuencias que empiezan en ‘00’ y terminan en
‘00’ y hallar el peso (weight). Luego, el que tenga el menor de estos pesos es que
tiene la distancia libre mínima y a partir de ello se calcula la capacidad máxima de
detección de bits errados

Entonces, en el diagrama de estado tomo los 2 caminos posibles donde se


empieza por ‘00’ y terminan en ‘00’. Luego escribo sus salidas según los caminos
que se haya tomado y escribo sus pesos. Como solo hay 2 caminos posibles, de
esos 2 el que tiene menor peso es W=5, por lo que defino que la capacidad
máxima de detección es mejor o igual a (W-1)/2.

Finalmente, si quiero que el código sea más robusto y tenga mayor capacidad de
detección, se tiene que aumentar la cantidad de salidas modificadas y registros de
desplazamiento (flipflops). El problema que añado más de esto último se hace el
código mucho más complejo y se aumenta el tiempo de desplazamiento y por lo
tanto también de retardo

SEMANA 14 19
Normalmente en las comunicaciones inalámbricas, como las de radio, se hacen
combinaciones, por ejemplo, se empieza por un codificador de bloque, luego un
convolucional, luego un Interleaving. A esta forma de detectar bits errados con
varios “bloques” se le conoce como Codificación Canal.
Ahora, con cada algoritmo adicional que se pone para disminuir el error,
intrínsecamente se aumenta también la velocidad. Por ejemplo, si se ingresa son ‘r’
bits de velocidad, cada algoritmito aumenta la velocidad por una relación propia y
ese aumento en la velocidad implica un aumento en el ancho de banda. Entonces
si en mi modulador tengo un límite de ancho de banda B, mi velocidad a la salida
será limitada hasta 2B (en el caso de QPSK), por lo tanto, para poder transmitir con
normalidad, la velocidad en mi entrada se verá limitada a 2B*(los factores de cada
algoritmo)

SEMANA 14 20

También podría gustarte