Sobre Codificación Conjunta Fuente

Anuncio
UNIVERSIDAD CARLOS III DE MADRID
ESCUELA POLITECNICA SUPERIOR
MASTER EN MULTIMEDIA Y COMUNICACIONES
Sobre Codificación Conjunta Fuente-Canal
Luca Martino
FEBRERO DE 2008
FEBRERO DE 2008
1
Introducción: Teorı́a Básica
La codificación es, sin duda, una función esencial de cualquier sistema de comunicación. En general, lsa caracteristicas básica de una transmisión digital
tendrı́an que ser:
• eficiencia
• fiabilidad
• privacidad
Dejando de lado el problema de la privacidad, podemos notar como los dos
restante objetivos requieren enfoques exactamente opuestos. De hecho, la eficiencia, medida como la proporción entre la cantidad de información transmitida y la energı́a necesaria para transmitirla, exige quitar toda la redundancia
en los datos antes del envı́o. Esta operación se suele llamar Codificación
de fuente. Por otra parte, la fiabilidad requiere añadir redundancia para
asegurar una correcta interpretación de los datos transmitidos. De esto se
ocupa la Codificación de canal .
Los dos principales resultados de la Teoria de la Información, nos proporcionan una cota inferior para la compresión de datos sin perdidas (R > H)
y una cota superior para la velocidad de trasmisión de datos por un canal
(R < C). El primer resultado nos dice que la longitud media por simbolo
de una palabra código no puede ser menor de la Entropia de la fuente; por
otra parte, el teorema de codificación afirma que, en un canal discreto sin
memoria, la máxima tasa a la que se puede trasmitir sin error es el máximo
de la infomación mutua (Capacidad) entre entrada y salida del sistema de
comunicaciones.
Se puede demostrar, que el hecho de dividir la codificación en dos paso, de
fuente y de canal, no afecta del punto de vista de la trasmisión en un canal
ruidoso. Por estas razones, casi siempre el diseño de un sistema de comunicación ha sido la combinación de estas dos partes, analizadas separadamente.
Además se demuestra que optimizando los dos bloques de modo indepedientes se podrı́an alcanzar los resultados limites dados pro los teoremas de
Shannon. De todas formas, por razones practicas relacionadas con complejidad y retardo, se han propuestos esquemas de codificación conjunta de fuente
y canal. Además, desde el punto de vista teórica y no solo, surge automaticamente la pregunta si la condición H < C sea una condición necesaria y
1
suficiente para enviar información de una fuente por un canal.
Se ha demostrado que si H < C existe un método de codificación conjunta
fuente-canal con probabilidad de error tan baja como se quiera. Dicho de
otra forma:
Teorema: Sea H (bit/sı́mbolo) la entropia de la fuente y C (bit/segundo) la
capacidad de canal. Es posible codificar los sı́mbolos emitidos por la fuente,
C
C
− sı́mbolos por segundo, donde 0 < < H
. No
transmitiendo en media H
C
es posible transmitir a una velocidad superior a H .
2
Codificación conjunta: ¿por qué?
El Teorema de Separación de la Teorı́a de la Información afirma la posibilidad
de dividir en dos partes separadas la tareas de codificación; esta separeción
no es justificable desde el punto de vista practico, por las siguintes razones:
• longitud de bloques limitada por codificacı́on de fuente y canal puede
reslutar un problema.
• los bits a la salida del codificador de fuente suelen tener una redundancia residual, que en cierto modo, podrı́a ser aprovechada por el
codificador de canal.
• Se nececitan bloques de longitud infinita para lograr un ”perfecto”
código de canal.
• aún no se ha conseguido que la probabilidad de equivocarse en decodificación sea exactamente nula.
El objetivo es mejorar las prestaciones de los sistemas de comunicación, sin
explotar más los recursos disponible. Con este fı́n, se han estudiado algoritmos conjuntos de codificacı́on. La idea básica consiste en tratar de
aprovechar la redundancia residual de los bits para mejorar la ”calidad” de
la transmisión.
3
Códigos Huffman
Un código de Huffman es un código de longitud variable, en el que la longitud
de cada código depende de la frecuencia relativa de aparición de cada sı́mbolo:
2
cuanto más frecuente sea un sı́mbolo, su código asociado será más corto.
Además, un código Huffman es un código libre de prefijos: es decir, ningún
código forma la primera parte de otro código; esto permite que los mensajes
codificados sean no ambiguos.
El algoritmo consiste en la creación de un árbol binario que tiene cada uno
de los sı́mbolos por hoja, y construido de tal forma que siguiéndolo desde la
raı́z a cada una de sus hojas se obtiene el código Huffman asociado. Para
derivar el código Huffman se hacen las siguientes operaciones:
• Escoger los dos sı́mbolos ci , cj (que serán todo colocados en las hojas
N4 ,N5 ,N6 ,N7 ) con probabilidades más pequeñas pi y pj .
• Se sustituyen ci , cj con un nodo superior de probabilidad pi + pj .
• se considera el nuovo nodo como una nuova hoja, es decir, como otro
simbolo (no considerando los dos anteriores), y se repite desde el primer
punto.
• El código queda definido por el camino desde la raı́z N1 hasta cada
hoja.
Figure 1: Ejemplo Código Huffman.
Para poder utilizar el algoritmo de Huffman es necesario conocer de antemano
las frecuencias de aparición de cada sı́mbolo, y su eficiencia depende de lo
próximas a las frecuencias reales que sean las estimadas. La eficiencia de
3
la codificación de Huffman también depende del balance que exista entre
los hijos de cada nodo del árbol, siendo más eficiente conforme menor sea
la diferencia de frecuencias entre los dos hijos de cada nodo. Este es el
codificador estadı́stico más popular, y erróneamente se tiende a pensar que
su funcionamiento es óptimo. Este algoritmo es capaz de producir un código
óptimo en el sentido de Mı́nima Redundancia para el código de entrada.
Esta compresión sólo será óptima si las probabilidades de todos los sı́mbolos
de entrada son potencias enteras de 1/2. Y el peor de todos los casos se
presentará cuando alguno de los sı́mbolos posean una probabilidad cercana
a 1.
4
Código Convolucionales y Turbo
La codificación del canal añade redundancia a los datos generados por la codificación de la fuente, de forma que se detectan e incluso se corrigen algunos
errores introducidos por el canal. Los códigos de canal más comunes son los
códigos bloques: reciben este nombre en virtud que estan constituidos pos
bloques de longitud fija. Es decir, el codificador recibe k bits y entrega n
bits a la salida, existiendo una relación biunı́voca entre la secuencia de k de
mensaje y la secuencia final de n bits. Además, en el caso de los códigos
sistemáticos, también qeuda bien definida dentro del bloque, cúal es la parte
de mensaje y cúal es la parte redundante o de bits de paridad.
La caracteristicas distintivas de los código convolucionales es que no tienen
un formato de bloque y por lo tanto no tiene una longitud de bloque. La
caracteristica fundamental de los convolucionales es aprovechar la correlaciones entre los bits transmitidos, es decir, codificador introduce una cierta
memoria. Los n bits de salida de un convolucional no depiende solo de los k
bits en entrada, sino también de los K − 1 nits precedentes (la tasa de código
serı́a k/n ). El funcionamiento del convolucional está basado en K registros
de desplazamiento (”memoria” de capacidad un bit) y n sumas módulo dos.
La codificación de los bits se realiza a partir del valor del bit presente a la
entrada y los valores de los m bits anteriores que están guardados en los
registros.
La descripción de un código convolucional puede hacerse de varias maneras:
conexión de vectores o polinomios, diagrama de estado, diagrama de árbol y
diagrama trellis son los esquemas más utilizados. En figura (2) se muestra
el esquema en registros de despazamiento de un código convolucional, donde
4
por cada bit de información, mi , se trasmiten 2 bits, h1i y h2i . Los convolu-
Figure 2: Ejemplo secuencia para un convolucional.
cionales codifican la secuencia con una operación de convolución,porque son
códigos tempo invariantes en el tiempo, y por lo tanto se pueden representar
con una respuesta impulsiva (proporciona la salida cuando la secuencia de
entrada es una delta de kornecker). Para la fig.2 las respuestas impulsivas de
las dos salidas serı́an:
g 1 = (1101)
g 2 = (1111)
(1)
(2)
La respuesta impulsiva es un vector binario de longitud el numero de memorias más uno. Existe un 1, si hay conección con la salida. Otra forma interesante de ver los conlucionales es la representacı́on polinomica a través de la
Trasformada-D; esta transformada convierte nua secuencia en un polinomio
en D donde a cada potencia Dj esta asociado un retardo j. Por ultimo, hay
que decri que los convolucionales se podrian expresar a través de una matriz
generadora G con si fueran códigos bloque lineales de longitud variable.
Los Turbos Códigos se construyen concatenando 2 codificadores convolucionales a través de un barajador de bits. Si para los convolucionales la
decodificación se basa en el algoritmo de Viterbi, para los código Turbo se
utiliza una generalización llamada algoritmo BCJR.
5
Ejemplo JSCD
Vamos a estudiar un ejemplo de Joint Source Channel Decoder. Sea C =
{c1 , c2 , . . . , cC } el conjunto de las C palabras códigos de la fuente. Cada
5
simbolo cj ∈ C se puede escribir como:
cj = [cj (1), cj (2), . . . cj (i), . . .]
(3)
Donde claramente cj (i) es una variable binaria que puede asumir los valores 0
o 1, y en general las longitudes de las cj son distintas. En figura 3 muestramos
el ejemplo con codificación de Huffman; en este caso, C = 5 y c1 = [0, 0, 0],
c2 = [0, 0, 1], c3 = [0, 1], c4 = [1, 0], c5 = [1, 1]. Indicamos con Ikj el conjunto
Figure 3: Otro ejemplo de codificación Huffman.
de ı́ndices de todas las palabras códigos con los primeros k − 1 bits iguales a
los primeros k − 1 bits con la palabra código cj :
Ikj = {n ∈ N |∀i < k, cn (i) = cj (i)}
(4)
Por convención I1j = {1, 2, . . . , C} para cualquier j (recordemos que se refiere
a k − 1 bits, que en este caso serı́a 0). Si indicamos con P (cj ) la probabilidad
del sı́mbolo y con P (cj (i)) la probabilidad especifica del bit i-esimo, podemos
escribir la relación:
P
n
n∈Ikj |cn (k)=cj (k) P (c )
j
j
j
j
P
(5)
P (c (k)|c (1), c (2), . . . , c (k − 1)) =
n
n∈I j P (c )
k
Esto vale por como hemos asignado los bits en el árbol (según Huffman),
y por la definición de Ikj . Por k = 1 la expresión de la izquierda se reduce
6
a la probabilidad P (cj (1)). Para entender la (5) podemos notar como la
probabilidad de c1 se pueda escribir como:
P (c1 ) = P (c1 (1) = 0, c1 (2) = 0, c1 (3) = 0)
(6)
Pero también podemos expresarlo ası́:
P (c1 ) = P (c1 (1) = 0) · P (c1 (2) = 0|c1 (1) = 0) · P (c1 (3) = 0|c1 (2) = 0, c1 (1) = 0) (7)
Ahora, la probabilidad que le primer bit de la palabra código sea 0, es (por
1 ≤ j ≤ 5:
P (cj (1) = 0) = P (c1 ) + P (c2 ) + P (c3 )
(8)
Es decir, todas las palabras código de las ramas de izquierda tienen el primer
bit igual a 0. Mirando la fig.3 y razonando de la misma manera, se puede
entender que:
P (cj (2) = 0|cj (1) = 0) =
P (c1 ) + P (c2 )
P (c1 ) + P (c2 ) + P (c3 )
P (cj (3) = 0|cj (2) = 0, cj (1) = 0) =
P (c1 )
P (c1 ) + P (c2 ))
(9)
(10)
Claramente podemos repetir los calculos para cada bit del árbol. Esta
ecuación tiene valor para fuentes con independientes palabras códigos. Para
fuentes con memoria, como una relación de Markov entre las palabras códigos,
hay que tener en cuenta las palabras códogos precedentes:
P (cj (1) = 0|c2 ) = P (c1 |c2 ) + P (c2 |c2 ) + P (c3 |c2 )
(11)
Realmente la ecuación (5) es más general, en el sentido que es valida en
ambos casos (para fuentes con o sin memorias).
En decodificación se trata de aprovhechar la redundancia residual, que peude
ser medida de esta forma:
Rr = L̄ − H
(12)
Donde L̄ es la longitud media del código de Huffman y H la entropia de la
fuente. Si inidcamos con Y la secuencia recibida y con X la enviada, nos
gustarı́a encontrar el máximo de la probabilidad a posteriori (MAP):
P (X|Y ) =
P (Y |X) · P (X)
P (Y )
7
(13)
Donde se ha utilizado la regla de Bayes. Tomando el logaritmo el criterio de
maximización será:
maxX [log P (Y |X) + log P (X)]
(14)
Donde podemos observar dos partes: la primera log P (Y |X) se refiere al
canal, y la segunda log P (X) es al información a priori de la fuente. Considerando
Figure 4: Esquema general.
muestras independientes de ruido gaussiano, podemos escribir:
X
log P (Y |X) =
log p(yji |ci (j))
(15)
i,j
y para la información a priori de la fuente:
X
log P (X) =
log p(ci )
(16)
i
y utilizando las relaciones demostrada anteriormente:
X
log P (ci ) =
log p(ci (j)|ci (1), ci (2), . . . , ci (j − 1))
(17)
i
Para maximizar la 14 se puede utilizar un algorithmo de Viterbi, como en
la decodificación de los convolucionales, utilizando como metrica los dos terminos log p(yji |ci (j)) y log p(ci (j)|ci (1), ci (2), . . . , ci (j − 1)). Para utilizar este
segundo término, hay que conocer y memorizar en que nodo del árbol nos encontramos. Si consideramos dos posibles secuencias {1, 1, 1, 0} y {0, 0, 1, 1},
podemos ver que en la figura 5 como la probabilidad a priori por la primera
secuencia es de estar en nodo N2 y recibir un bit 0, mientras para segunda es
de estar en el nodo N0 y recibir un bit 1.
Claramente este metodo está etricamente relacionado a una decodificación
con convolucionales, pero es facil extender al caso de Turbo códigos.
8
Figure 5: Trellis.
6
Bibliografia
[1] ”Comunicaciones Digitales”. A. Artés, F. Pérez González, J. Cid, R.
López, C. Mosquera, F. Pérez Cruz.
[2] ”Elements of information Theory”. Second Edition. Thomas M. Cover,
Joy A. Thomas.
[3] ”Joint Source-Channel Soft Decoding of Variable-length Codes for Convolutional Codes with Turbo-Codes”. M. Jeanne, J.C. Carlach and P. Siohan.
[4] ”Joint Source-Channel Soft Decoding of Huffman Codes with TurboCodes”. L. Guivarch, J.C. Carlach and P. Siohan.
9
Descargar