Sei sulla pagina 1di 5

Capı́tulo 1

Compresión de datos

En la sociedad de la información en la que vivimos actualmente, en


cualquier actividad cientı́fico-técnica o profesional se plantea la necesidad
de transmitir o almacenar un gran número de datos, número que está cre-
ciendo de forma explosiva. Las técnicas de compresión de datos tratan de
reducir el número de bits necesarios para representar la información que, por
lo general, está en forma digital. Para una mejor comprensión de la magnitud
del problema, pueden servir los ejemplos siguientes. Para representar digital-
mente un segundo de video, sin compresión, se necesitan (en formato CCIR
601) más de 20 megabits. Para representar 2 minutos de un CD de música se
requieren más de 84 millones de bits. Es cierto que se han producido significa-
tivos avances tecnológicos que permiten transmitir o almacenar cantidades de
información cada vez más grandes. Sin embargo, parece que las necesidades
crecen con mayor rapidez que los avances tecnológicos en cuestión y, por ello,
las técnicas de compresión se hacen imprescindibles.
Uno de los primeros ejemplos de compresión de datos lo constituye el
código Morse, desarrollado por S. Morse a mediados del siglo XIX. Las letras
se codifican en el alfabeto binario {·, −}, atendiendo a las diferencias en las
frecuencias de las letras del alfabeto inglés: las letras con mayor frecuencia
de aparición se codifican con palabras-código de menor longitud. El código
Braille, que data aproximadamente de la misma época, emplea matrices de

1
2 CAPÍTULO 1. COMPRESIÓN DE DATOS

2 × 3 puntos, atendiendo a las frecuencias de las palabras. Esta idea es la


base de todos los métodos de compresión de datos en los que los sı́mbolos a
codificar aparecen con frecuencias diferentes. En los temas que siguen estudi-
aremos dos de los métodos más importantes de esta clase: la codificación de
Huffman y la aritmética. Pero existen otros tipos de estructura en los datos
que pueden ser usados para conseguir compresión. Ası́, por ejemplo, en una
señal de video hay una considerable cantidad de información que es irrele-
vante desde el punto de vista de su percepción por el ojo humano y que, por
tanto, podrı́a ser eliminada para conseguir compresión.
En este breve tema introductorio vamos a considerar sólo nociones y ter-
minologı́a básicas sobre compresión de datos.

1.1. Técnicas de compresión


Todo algoritmo de compresión consta, de hecho, de dos algoritmos: el
de compresión y el de representación. El primero, a partir de los datos de
entrada X, genera una representación Xc que necesita un menor número de
bits, mientras que el segundo genera la reconstrucción Y . Las técnicas de
compresión se suelen clasificar en dos grandes clases: técnicas de compresión
sin pérdida de información (lossless compression) y técnicas de compresión
con pérdida de información (lossy compression). En las primeras X es igual a
Y , por el contrario, en las segundas X es diferente de Y , pero esto se compensa
con el hecho de que por lo general proporcionan mayor compresión. El empleo
de unas u otras depende del problema concreto que estemos tratando. Por
ejemplo, si se trata de compresión de texto, deberemos usar técnicas del
primer tipo, pues una mı́nima diferencia puede dar lugar a un significado
completamente distinto, como muestra el ejemplo siguiente: ”estoy cansado”
y ”estoy casado”. En otras aplicaciones, la pérdida de parte de la información
contenida en los datos no es un problema. Este es el caso, por ejemplo, cuando
se trata de ver un video. Por lo general, no es importante que la reconstrucción
sea diferente del original, siempre que las diferencias no sobrepasen ciertos
1.2. MODELADO Y CODIFICACIÓN 3

lı́mites.
Una forma de evaluar una técnica concreta de compresión consiste en
calcular la razón entre el número de bits necesarios antes de la compresión
y el número necesario de bits después de la compresión. Llamaremos a este
número razón de compresión.
Cuando la compresión supone pérdida de información, la diferencia entre
el original y la reconstrucción se denomina distorsión y existen diversas for-
mas de medirla. También se usan otros términos como fidelidad y calidad.
Entonces cuando la diferencia entre el original y la reconstrucción es muy
pequeña diremos que la fidelidad o calidad de la reconstrucción es alta.
No existe una medida de la calidad de la señal que sale del decodificador
aceptada universalmente. Una que se usa a menudo es la llamada medida
SNR (signal to noise ratio) que se define como
ESC
SNR = 10 log10 ,
ESR
donde ESC denota la energı́a de la señal que entra en el codificador y ESR que
es la energı́a de una hipotética señal que es la diferencia entre la señal anterior
y la que sale del decodificador. La unidad es el decibelio (dB). Ocurre, sin
embargo, que no siempre un valor alto de SNR se corresponde con una alta
calidad de la señal reconstruida.

1.2. Modelado y codificación


En el desarrollo de un método de compresión, por lo general, se pueden
distinguir dos fases. La primera se llama modelado y en ella se trata de
descubrir toda la redundancia existente en los datos y de su descripción con
un modelo apropiado. La segunda fase se llama codificación. En ella tratamos
de codificar, con un alfabeto binario, el modelo y las diferencias con los datos.

Ejemplos 1.2.1. a) Consideremos la sucesión de números

6, 7, 7, 7, 8, 9, 10, 11, 13.


4 CAPÍTULO 1. COMPRESIÓN DE DATOS

Supongamos que se desea transmitir o almacenar estos números. Al ser en


total 9, si los codificamos con cadenas binarias de igual longitud se precisan
cadenas de 4 bits por número. Entonces la sucesión completa precisarı́a de
4 × 9 = 36 bits. Pero, en lugar de esto, vamos a explotar la estructura de los
datos para conseguir compresión. Nótese que el modelo

xn = n + 5 n = 1, 2, 3, ...

puede servir para nuestro objetivo. Las diferencias entre el modelo y los datos
es
dn = xn − xn : 0, 0, −1, −2, −2, −2, −2, −2, −1.

La sucesión residual sólo contiene 3 números diferentes {−2, −1, 0}, que
pueden ser codificados con cadenas binarias de longitud 2. Por tanto, con
18 bits podemos codificar la sucesión de diferencias, a lo que hay que añadir
los bits necesarios para el modelo.
b) Consideremos ahora la sucesión

10, 11, 12, 9, 8, 9, 12, 13, 12.

En este caso se observa que cada término de la sucesión es cercano al ante-


rior. Entonces un modelo apropiado para representar la sucesión consiste en
reflejar el primero seguido de las diferencias de cada uno al anterior

10, 1, 1, −3, −1, 1, 3, 1, −1.

Vemos que hay sólo 4 diferencias distintas, por lo que nuevamente éstas
pueden ser codificadas con cadenas binarias de longitud 2.
c) Un tipo diferente de redundancia es la de carácter estadı́atico. A
menudo, especialmente cuando tratamos de comprimir textos, la fuente gen-
era los sı́mbolos con diferente frecuencia y, como ya hemos dicho, este hecho
puede ser explotado asignando palabras-código de menor longitud a los sı́m-
bolos con mayor frecuencia. En el caso de textos existe, además, otra forma
de redundancia: hay grupos de letras que se repiten con gran frecuencia.
1.2. MODELADO Y CODIFICACIÓN 5

Una forma de aprovechar esta circunstancia consiste en la elaboración de


una lista o diccionario con las combinaciones más frecuentes de letras del
alfabeto fuente y las palabras-código correspondientes.
El diccionario puede ser estático o dinámico. Cuando se tiene un buen
conocimiento a priori de la fuente en cuestión, se utiliza un diccionario es-
tático. Por ejemplo, si se desea comprimir los datos de los estudiantes de una
universidad, hay palabras como estudiante, nombre, créditos, etc que serán
muy frecuentes. Por el contrario, si no se dispone de ese conocimiento pre-
vio de la fuente, tendremos que adquirirlo de algún modo en el momento de
la codificación. Esta es la idea clave para la elaboración de un diccionario
dinámico.

Potrebbero piacerti anche