You are on page 1of 10

Escuela Politécnica Nacional

Facultad De Ingeniería Eléctrica Y Electrónica


TCI
Proyecto 1

Nombre: Luis Félix, Danilo Calvachi


Fecha: 15 de junio de 2018

 Objetivos:
o Aplicar los fundamentos teóricos aprendidos en la materia de TCI para elaborar
software que permita realizar codificaciones de archivos de texto y multimedia.
o Entender como funcionan los algoritmos de las técnicas de compresión de
información en un computador.

 Ejercicios

Parte 1: Teoría de Información

1. Escriba un programa en el lenguaje de programación de su elección (C, C++,


C#, Java), que permita calcular la entropía de un archivo de texto y un archivo
de audio.

 Lenguaje de Programacion: MATLab.


 Para Archivo de Texto:
o Resumen: El programa realizado permite calcular la entropía de un archivo de
texto para esto se carga el archivo de texto en Matlab y se obtiene su contenido,
a este contenido se lo almacena en un array y se lo concatena para poder
observar cuantas veces se repite cada carácter, se considera caracteres ASCII.
Después de haber obtenido cuantas veces se repite cada carácter se procede a
calcular la probabilidad de cada símbolo y finalmente se obtiene la entropía de
a fuente total aplicando la formula planteada en clases.
o Archivo de entrada: “test.txt”

Ilustración 1.- Contenido de archivo test.txt

o Resultados: Al compilar el código se lee el archivo test.txt almacenado en el


mismo sitio de trabajo donde esta guardado el archivo.

Ilustración 2.- cadena de texto a encontrar entropía


Después se encuentra las coincidencias de cada carácter, su respectiva
probabilidad y su cantidad de información.

Ilustración 3.- cantidad de repeticiones de cada carácter

Finalmente se encuentra la entropia y la cantidad de caracteres contados; para


la entropia se realiza la operación matemática no se utiliza funciones de maltab

Ilustración 4.- Resultado final

 Para Archivo de Audio


o Resumen: El programa realizado permite calcular la entropía de un archivo de
audio para esto se carga el archivo de audio en Matlab y se obtiene varias
muestras de frecuencias, a estas muestras se las almacena en una matriz y se la
convierte en un vector para poder observar cuantas veces se repite cada
frecuencia. Después de haber obtenido cuantas veces se repite cada frecuencia
se procede a calcular la probabilidad de cada símbolo y finalmente se obtiene la
entropía de a fuente total aplicando la formula planteada en clases.
o Archivo: “4.wav”.
o Resultados: Para esta parte del ejercicio se tomo como muestra un archivo de
audio de 1 seg ya que ese archivo es suficiente para tomar varias muestras de
las frecuencias del archivo, para este archivo de audio son 5438 muestras que
oscilan entre 1 y -1.
Ilustración 5.- Fragmento de la matriz obtenida del archivo de audio

Después se lo concatena en un vector y se procede a analizar cuantas veces se


repite cada frecuencia para esto se aproximo los valores a 4 decimales para
poder trabajar con mayor facilidad al momento de comprar valores. Por motivos
de falta de un buen procesador no se muestran en pantalla cuantas veces se
repite cada valor, pero se lo almacena en matrices para ser trabajadas.

Ilustración 6.- fragmento de matriz que muestra la probabilidad de cada símbolo y su cantidad de información

Finamente se calcula la entropía final de toda la fuente

Ilustración 7.- Entropía de la fuente

Parte 2: Compresión Huffman


1. Desarrollar un programa que permita la codificación y decodificación
Huffman de una imagen.

 Lenguaje de Programación: MATLab.


 Resume: este programa permite realizar la codificación y decodificación
Huffman de una imagen en escala de grises, luego se obtiene una matriz
con los valores de los pixeles y se procede a obtener la probabilidad de
ocurrencia de cada símbolo
 Imagen: “1.jpg”

Ilustración 8.- Imagen "1.jpg"

 Resultado: : Primero se lee la imagen y se la transforma a escala de


grises. Se hace esta transformación para poder tener valores de pixeles
entre 0 y 255, esto se debe a que el procesador de la PC no es uy potente
para manejar en tiempos cortos valores más grandes de pixel.

Ilustración 9.- imagen a escala de grises

Ilustración 10.- Matriz de pixeles de la imagen

Luego se procede a obtener el árbol huffman para cada símbolo de la


matriz
Ilustración 11.- Arbol huffman para cada símbolo

Se procede a comparar el tamaño del archivo original con el tamaño del


archivo comprimido

Ilustración 12.- Comparación del tamaño de la imagen codificada y decodificada

2. Desarrollar un programa que calcule la diferencia entre pixeles adyacentes.


Mostrar la imagen diferencial, codificarla usando el algoritmo de Huffman y
calcular la relación de compresión
 Lenguaje de Programación: MATLab.
 Resumen: Este programa calcula los pixeles adyacentes de una imagen
convertida a escala de grises, luego obtiene una matriz con los valeres
de los pixeles y calcula cuantas veces se repite cada pixel y su
probabilidad, después ordena el vector de mayor a menor probabilidad,
obtiene el diccionario para la codificación y finalmente codifica la matriz
de la imagen.
 Imagen: “1.jpg”

Ilustración 13.- Imagen "1.jpg"

 Resultados: Primero se lee la imagen y se la transforma a escala de


grises. Se hace esta transformación para poder tener valores de pixeles
entre 0 y 255, esto se debe a que el procesador de la PC no es uy potente
para manejar en tiempos cortos valores más grandes de pixel.

Ilustración 14.- imagen a escala de grises

Ilustración 105.- Fregamiento de matriz de imagen

Luego se realiza la diferencia de pixeles de la imagen hay que considerar


que no existen valores negativos de pixel por lo que la diferencia
negativa será aproximada a cero

Ilustración 116.- imagen diferencial


Ilustración 127.- Fregamiento de matriz de imagen diferencial

Después se convierte la matriz en un vector y se encuentra cuantas


veces se repite cada pixel, se calcula cuál es su probabilidad

Ilustración 138.- Fragmento de repetición de cada pixel

Luego se ordena las probabilidades con sus símbolos y su número de


repeticiones en una matriz de forma descendente, esto se lo hace para
poder encontrar el diccionario de huffman.

Ilustración 149.- Fragmento de matriz de probabilidades ordenada

Siguiente se encuentra el diccionario o árbol de huffman y se da código


a cada pixel considerando que el pixel con más frecuencia tendrá un
código menor
Ilustración 20.- Fragmento de diccionario de huffman

También se encuentra la ratio de compresión o relación de compresión


esto se hace comparando las longitudes de las variables iniciales con las
longitudes de las variables comprimidas, se obtiene que si hay una
buena compresión ya que se trabaja con valores diferenciales.

Ilustración 215.- radio de compresión

Finalmente se codifica la secuencia de la imagen diferencial comprando


con el diccionario obtenido anteriormente, a continuación se muestra
la codificación de los primeros 7 pixeles de la imagen diferencial

Ilustración 22.- Codificación de los 7 primeros pixeles

Ilustración 23.- 7 primeros pixeles de la imagen

3. Para una fuente binaria con probabilidades p(A) = 0.9 y p(B) = 0.1, obtener el
código Huffman extendido, desde m = 1 hasta m = 9. Graficar la longitud
promedio vs m. Comentar los resultados.
 Lenguaje de Programación: MATLab.
 Resumen: este programa permite realizar la codificación huffman
extendida de dos símbolos, despliega la matriz inicial para cada
extensión (en este caso se realizó hasta la novena extensión), la longitud
promedio del código y las probabilidades de los nuevos símbolos
considerando cuantas veces se repiten.
Ilustración 24.- Combinación de los símbolos para la novena extensión

Ilustración 25.- Número de veces que aparece el símbolo y su respectiva probabilidad

Ilustración 26.- longitud promedio vs m

En la ilustración 26 se puede observar que cuando se aumenta el número de extensiones la


longitud promedio total va disminuyendo, esto es debido a que solo se trabaja con dos símbolos
por lo que la probabilidad de aparición del símbolo en el nuevo símbolo del código huffman
extendido será muy alta.

 Conclusiones y recomendaciones:
o Es muy importante tratar de usar funciones ya hechas en Matlab para simplificar
algunos procesos ya que esto nos ayuda a procesar más rápido la información.
o Es muy importante la transmisión de datos codificados ya que esto permite
ahorrar mucho espacio ya que se puede suprimir algunas cadenas para acortar
los mensajes sin que esto signifique perder la información.
o La codificación huffman permite tener códigos que tenga una decodificación
única por lo cual nos garantiza que no existirá ambigüedad en la decodificación
o Las extensiones de los códigos huffman permiten tener un mejor código en el
cual la longitud promedio permita acercarse a la entropía pero este proceso
puede ser muy largo debido al número de combinaciones de los símbolos en
cada extensión

You might also like