Vous êtes sur la page 1sur 51

MATLAB y la teora de la

informacin
Toms Robles Ramn Alcarria
Valladares Garrido
Borja Bordel Diego Martn de
Snchez Andrs

MATLAB aplicado a la ingeniera telemtica


Departamento de Ingeniera de Sistemas Telemticos (UPM)
PROGRAMA

Introduccin
Clculo de entropa e informacin mutua en
MATLAB
Codificacin de fuente con MATLAB
Clculo de la capacidad de un canal con
MATLAB
Tcnicas FEC: codificacin de canal en MATLAB
INTRODUCCIN

La teora de la informacin, tambin conocida


como teora matemtica de la comunicacin es
una propuesta terica presentada por Claude E.
Shannon y Warren Weaver a finales de la
dcada de 1940.
Esta teora agrupa las leyes matemticas que
rigen la transmisin de la informacin
INTRODUCCIN

La teora de la informacin se ocupa de la


representacin de la misma, as como de la
capacidad de los sistemas de comunicacin
para transmitirla.
Dada una fuente, que genera una serie de
smbolos a una determinada tasa, el esquema
bsico de un sistema de comunicaciones en la
teora de la informacin es
INTRODUCCIN

Codificacin o
Codificacin de
Fuente comprensin de
canal
fuente

canal

Decodificacin de
Descompresin de
Receptor canal
fuente
(FEC o ARQ)
INTRODUCCIN

La codificacin de fuente trata de reducir el


tamao medio de los mensajes, expresando los
smbolos nativos de la fuente en funcin de un
segundo conjunto de smbolos
Normalmente, en funcin de grupos de bits
Se demuestra que existe un lmite inferior para
ese tamao, relacionado con la entropa de la
fuente generadora
INTRODUCCIN
La codificacin de canal trata de preparar los
mensajes para su transmisin por un canal
Se trata de incluir mecanismos que permitan
detectar y/o corregir los errores que pudieran
introducirse en el mensaje durante su
transmisin por el canal
Se habla de tcnicas FEC si se pretende corregir
errores en la decodificacin, y de ARQ si se
pretende detectar errores y pedir retransmisin
de los mensajes defectuosos
INTRODUCCIN
En la teora de la informacin, los canales se
modelan a travs del conjunto de smbolos de
entrada, el conjunto de salida y las funciones
de probabilidad que los relacionan
Existe un lmite a la cantidad de informacin
que puede transmitirse por un canal de forma
fiable
La capacidad de canal
Su clculo es el objetivo primordial en el
estudio de canales
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
En el mbito de la teora de la informacin la
entropa mide la incertidumbre de una fuente
de informacin
Si conocemos la probabilidad de ocurrencia de
todos los smbolos de la fuente, su entropa
puede obtenerse de forma terica
= [()]
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
La unidad en que se mide la entropa depende
de la base del logaritmo escogida
= 2 son BITS
= son NATS
etc.
El problema es que en casi ningn caso prctico
se conoce a priori la probabilidad de ocurrencia
de los smbolos de la fuente
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
En la prctica, debe obtenerse la entropa de
una fuente a partir de los mensajes generados
por sta
Interesan mensajes largos, donde aparezcan
todos los smbolos, de tal manera que la
probabilidad de ocurrencia en el mensaje
aproxime bien la probabilidad global para la
fuente
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
MATLAB no dispone de ninguna funcin que
calcule automticamente la entropa de la
fuente que gener un mensaje
El problema radica en identificar cuales son los
smbolos sobre los que se trabaja
Por ello, el clculo debe hacerse mediante la
suma de dos procesos
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Primero, con la funcin hist() calculamos la
probabilidad de cada smbolo
La forma de hacerlo es sencilla
distribucin = hist(mensaje, [simbolo1,,simbolon])/length(mensaje);

En todo momento, suponemos que mensaje ha


sido transformado en un array numrico
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Despus, con ayuda del Toolbox gratuito
Information Theory Toolbox podemos calcular
la entropa desde la distribucin obtenida
http://www.mathworks.com/matlabcentral/fileexc
hange/35625-information-theory-toolbox

entropia = entropy(distribucion);
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
En MATLAB, el Wavelet Toolbox incluye una
funcin para calcular la entropa de una matriz
o vector, segn varias definiciones
wentropy()
Aunque incluye una variante llamada
Shannon, en realidad hace referencia a la
llamada entropa de Shannon no-normalizada
que nosotros no consideramos
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Su uso, por si fuera de inters, es muy simple

entropia = wentropy(mensaje, shannon, 0);

mensaje puede ser cualquier matriz o vector


El ltimo argumento puede tomar cualquier
valor, ya que no afecta al resultado
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Sustituyendo el parmetro shannon por otro
(por ejemplo log energy) puede obtenerse la
entropa segn se ha definido en otros campos
Puede ser til en procesado de imgenes como
etapa previa a realizar alguna transformada
El resultado slo puede obtenerse en NANTS
Puede transformarse a bits haciendo uso de los
cambios de base en logaritmos
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
En teora de la informacin, la informacin
mutua de dos fuentes mide la reduccin de la
incertidumbre (entropa) en una de ellas al
conocer el smbolo que se ha generado en la
otra
De nuevo, si conocemos la probabilidad de
ocurrencia de todos los smbolos de ambas
fuentes puede obtenerse de forma terica
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
(, )
; = (, )
() ()

Por ahora MathWorks no ha incluido de forma


nativa ninguna funcin para calcular la
informacin mutua a partir de los mensajes
generados por las fuentes
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
La comunidad de usuarios ha propuestos
muchas soluciones. Algunas muy extendidas
como
http://www.mathworks.com/matlabcentral/fileexc
hange/13289-fast-mutual-information-of-two-
images-or-signals
Sin embargo, la forma ms elegante de
realizar el clculo es mediante el uso del
Information Theory Toolbox
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Una vez obtenidas las distribuciones de
probabilidad de cada fuente con la funcin
hist(), basta hacer

Imutua = mutualInformation(distribucion1, distribucion2);

Existe otro procedimiento que, dependiendo


del caso, puede ser ms preciso
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Sabemos que
; = + (, )

Con lo que el problema reside ahora en calcular


la entropa conjunta (, )
Para ello calcularemos el histograma conjunto
de los mensajes de ambas fuentes
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
La forma es sencilla
distribucionConjunta = accumarray([mensaje1 mensaje2], 1)/length (mensaje1);

Es preciso que ambos mensajes tengan la


misma dimensin para que este proceso puede
ejecutarse
CLCULO DE ENTROPA E
INFORMACIN MUTUA EN MATLAB
Despus, con ayuda del Toolbox gratuito
Information Theory Toolbox podemos calcular
la entropa conjunta desde la distribucin
obtenida

entropiaConjunta = jointEntropy(distribucion);
CODIFICACIN DE FUENTE CON
MATLAB
En codificacin de fuente trataremos de
transformar el conjunto de smbolos con los
que se representa un mensaje, para acortar su
tamao
Se puede demostrar que, en media y para una
fuente dada, no se pueden emplear menos BITS
para codificar un smbolo que los dados por la
entropa de la fuente
CODIFICACIN DE FUENTE CON
MATLAB
Si nuestro cdigo emplea, en media, tantos
BITS como indica la entropa diremos que es un
cdigo ptimo
Es el ms corto posible
En caso contrario hablaremos de cdigos sub-
ptimos
Son ms o memos largos, pero mayores que uno
ptimo
CODIFICACIN DE FUENTE CON
MATLAB
Existen dos cdigos de fuente destacados
Shannon-Elias-Fano, cdigo subptimo
Huffman, cdigo ptimo
Desde su origen, MATLAB ha soportado
codificacin de Huffman
Los codificadores de Shannon-Elias-Fano,
aunque antiguos, pertenecen a librearas
externas gratuitas
CODIFICACIN DE FUENTE CON
MATLAB
Para todos los casos, un paso previo muy
importante es conocer la probabilidad de
ocurrencia de los smbolos de la fuente
Ser preciso, por tanto, emplear la funcin
hist() para poder calcular las distribuciones tal y
como vimos anteriormente
CODIFICACIN DE FUENTE CON
MATLAB
La codificacin de Shannon-Elias-Fano no viene
soportada directamente en MATLAB
Puede emplearse mediante funciones
distribuidas por la comunidad de usuarios
como
http://www.mathworks.com/matlabcentral/fileexc
hange/41727-shannon-fano-encoder
CODIFICACIN DE FUENTE CON
MATLAB
El uso de la funcin es relativamente sencillo

[diccionario, logitudCodigo] = sfencoderkasan(distribucion);

La funcin recibe una distribucin de


probabilidad, y devuelve un diccionario, de tal
forma que el smbolo en la primera posicin
sustituye a aquel cuya probabilidad ocupaba la
primera posicin en la distribucin
CODIFICACIN DE FUENTE CON
MATLAB

Por su parte, la codificacin de Huffman est


ampliamente soportada y documentada en
MATLAB
En este caso, no slo podremos obtener un
diccionario, sino tambin codificar mensajes
empleando el diccionario calculado
CODIFICACIN DE FUENTE CON
MATLAB
Para realizar codificacin Huffman lo primero es
obtener un diccionario
[diccionario, logitudCodigo] = huffmandict (simbolos, distribucion);

En este caso, adems de la distribucin, la


funcin precisa del listado de smbolos
generados por la fuente
CODIFICACIN DE FUENTE CON
MATLAB
El orden de listado de los smbolos debe
coincidir con el de la distribucin
Una vez obtenido el diccionario se puede
codificar cualquier mensaje como

mensajeCodificado = huffmanenco (mensaje, diccionario);

Tambin puede luego descodificarse


mensaje = huffmandeco (mensajeCodificado, diccionario);
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB
La capacidad de un canal indica la mayor
cantidad de informacin que puede
transmitirse de forma fiable por cada smbolo
de canal
Fiable implica con probabilidad de error tan
pequea como se quiera
En general esta medida viene dada en
bits/smbolo
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB

Matemticamente
= max (; )
()

Es decir, se trata de localizar la fuente para la


que la informacin mutua entre los mensajes a
la entrada y a la salida del canal es mxima
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB

Si en el caso de la entropa y la informacin


mutua la definicin matemtica era
directamente aplicable, en este caso es
impracticable salvo en casos sencillos
Canal sin ruido
Canal binario simtrico
Etc.
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB

Para el resto de casos, es preciso aplicar un


algoritmo numrico que aproxime la definicin
Para el caso de la capacidad de canal el ms
comn es el algoritmo de BlahutArimoto
Se trata de un algoritmo iterativo, que pretende
solucionar un problema de optimizacin, por lo
que hay ocasiones en la que no alcanza la
convergencia
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB
Una vez ms este algoritmo no est soportado
de forma nativa en MATLAB
El Information Theory Toolbox tampoco incluye
esta funcionalidad
Es preciso instalar una nueva librera externa
Una de las ms sencillas de usar se encuentra
distribuida como cdigo libre
https://gist.github.com/Piyush3dB/01df75af98894
14de1b6
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB
Basta invocar la funcin como
capacidad = BlahutArimoto(matrizTransmision);

matrizTransmision se construye de tal manera


que la posicin (i,j) indica la probabilidad de
que a la salida del canal aparezca el smbolo
j-simo cuando a la entrada se sita el i-simo
CLCULO DE LA CAPACIDAD DE UN
CANAL CON MATLAB
La matriz de transmisin puede deducirse de
forma experimental
Puede construirse un algoritmo MATLAB que
construya la matriz a partir de los mensaje de
entrada y salida del canal
Codificar dicha rutina es un problema
algortmico que tiene mltiples soluciones
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB
Las tcnicas FEC, o de correccin de errores
hacia adelante, son un tipo de mecanismos de
correccin de errores que permite su
correccin en el receptor sin retransmisin de
la informacin original
La posibilidad de corregir errores se consigue
aadiendo al mensaje original unos bits de
redundancia
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

Se llaman cdigos de canal a los esquemas que


permiten calcular los bits de redundancia para
un mensaje dado, y detectar y/o corregir los
errores en el receptor si los hubiera
En concreto, aqu nos centraremos en los
cdigos de bloque
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB
Los cdigos de bloque transforman un mensaje
binario de N bits en otro de K bits con K > N.
El nmero de bits de redundancia ser, por
tanto, M=K-N
En este curso hablaremos de cdigos lineales
Y especialmente de los cdigos cclicos
(subconjunto de los lineales)
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB
De forma genrica, se puede aplicar
codificacin de canal a un mensaje con la
funcin
codificado = encode(mensaje, n, k, tipo/formato, generador);

tipo puede tomar tres valores: linear, cyclic y


hamming en funcin del cdigo que queramos
aplicar
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

formato puede tomar dos valores: binary y


decimal en funcin de si queremos aplicar el
cdigo a BITS o a nmeros enteros
generador es el elemento generador del cdigo
Una matriz en el caso lineal, polinomio para los
cclicos, etc.
n y k son los tamaos del mensaje antes y
despus de la codificacin respectivamente
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB
La decodificacin puede hacerse de igual
manera
mensaje = decode(mensaje, n, k, tipo/formato, generador);

Los parmetros son idnticos a los empleados


para el caso del codificador
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

Para el caso de los cdigos cclicos y tipo


hamming, los elementos generadores pueden
obtenerse con las funciones
generadorCiclico = cyclpoly(n, k);

generadorHamming = gfprimdf(n-k);
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

Un caso particular de gran inters por su uso


extensivo en la actualidad son los cdigos Reed
Solomon.
Se trata de un subconjunto de cdigos cclicos,
actualmente empleado, por ejemplo, en el
estndar DVB
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB
Se puede codificar un mensaje con un cdigo
Reed Solomon haciendo
codificado = rsenc(mensaje,n,k);

Si se desea explicitar un polinomio generador


concreto tambin puede aplicarse
codificado = rsenc(memsaje,n,k, generador);
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

Existe, tambin, una funcin para calcular


polinomios generadores de cdigos Reed
Solomon

generadorReed = rsgenpoly(n,k);
TCNICAS FEC: CODIFICACIN DE
CANAL EN MATLAB

La decodificacin se realiza de la misma forma

mensaje = rsdec (codificado,n,k);

mensaje = rsdec (codificado,n,k, generador);

Vous aimerez peut-être aussi