Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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’
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)
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
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
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
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
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]
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
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
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.
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.
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
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)
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
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
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’
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
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
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.
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
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