Práctica # 4 Codificación de Fuente
Práctica # 4 Codificación de Fuente
Práctica # 4 Codificación de Fuente
PRÁCTICA # 4
CODIFICACIÓN DE FUENTE
OBJETIVOS:
MARCO TEÓRICO:
LabVIEW presenta un bloque personalizado que lee un archivo de audio sin procesar (.wav)
y salidas con la forma de onda de audio de modo que emite una matriz de formas de onda
(en el caso de una señal estéreo, obtiene 2 formas de onda: una para los altavoces izquierdo
y derecho). Para efectos del caso, en el archivo .wav se tiene solo 1 canal, en donde lo
extraemos directamente. Tome en cuenta que, a diferencia de Matlab, la numeración de
los elementos en una matriz comienza desde 0 en LabVIEW. Cada forma de onda tiene una
matriz de muestras de tiempo (denotada como "Y") y el tiempo de muestreo (denotado por
"dt") las cuales se desea transmitir de manera eficiente.
Los coeficientes restantes del procedimiento previo son números reales. La comunicación
digital usa codificación binaria, por lo que no se puede transmitir los números reales con la
mayor precisión posible. Hay una compensación entre la cantidad de datos que se necesita
transmitir versus la precisión que se requiere o también conocida como Resolución. Se
entiende entonces como resolución a la cantidad de bits que se emplea para expresar cada
muestra de codificación de fuente o (Transformada de Coseno Discreta). Por lo tanto, si se
trabaja con una resolución de 4 bits /muestra, entonces se necesita transmitir solo 4 bits de
datos por muestra de codificación de fuente o (Transformada de Coseno Discreta). Sin
embargo, no se sería capaz de representar la relación 24 = 16 , es decir 16 valores
diferentes de códigos de fuente o (Transformada de Coseno Discreta) y todos los demás
valores, tendrían que redondearse a uno de estos 16. Este proceso realiza el requerimiento
de cuantificación según la "Resolución" que elija.
4. Codificación de Huffman.
5. Decodificación de Huffman.
En esta etapa, se decodifica el código de Huffman en el lado del receptor (note que el
receptor también necesita conocer los parámetros del código Huffman en orden para
decodificarlo).
6. Des cuantificación
Los datos reales obtenidos en la etapa anterior son las estimaciones de los coeficientes del
receptor en la codificación de fuente. Sin embargo, se debe tomar en cuenta que algunos
de los coeficientes DCT se descartaron antes de la cuantificación. En esta etapa, se
reemplaza todos los coeficientes rechazados por 0 y se realiza una codificación de fuente
inversa en las estimaciones recibidas.
Finalmente, formamos una forma de onda con las muestras de tiempo obtenidas de la DCT
inversa y reproducirlo. Para este proceso, Ud. Debe implementar las partes del codificador
Huffman. Los bloques del decodificador le serán provistos.
Escriba la lógica para construir el árbol completo a partir de esta versión inicializada en
form_tree.vi.
Para ayudarlo a visualizar los formatos de datos exactos y el proceso de creación de árboles,
analice el siguiente ejemplo.
Tenga en cuenta que el árbol inicializado solo representa los 4 nodos hoja. El árbol final
(salida de form_tree.vi) debería verse como se muestra en 5.
Ahora tenemos el árbol Huffman listo, pero necesitamos generar el libro de códigos. El 'libro
de códigos' es un mapeo de los números binarios (de resolución 'L') a las secuencias
Huffman. Es como un diccionario donde se puede buscar cualquier binario de L bits y
encuentra que es la secuencia correspondiente de Huffman. Para crear este diccionario,
necesitamos encontrar las codificaciones Huffman de todos los binarios de L bits.
Es la representación de los números que tienen una frecuencia distinta de cero. Recuerde
que para obtener la codificación Huffman, se necesita atravesar el árbol hacia arriba (desde
un nodo hoja a la cúspide) y obtener la secuencia de bits de código Huffman apropiada de
esta ruta. Por ej. consulte las figuras 4 y 6, el valor decimal '12' es un 0 hijo de la raíz nodo
y, por lo tanto, la representación Huffman de '12' (es decir, "1100") es "0". Del mismo modo,
el valor decimal '1' (es decir, "0001") es el hijo 0 del nodo 4, que es el hijo 0 del nodo 5, que
a su vez es el 1-hijo del nodo raíz y, por lo tanto, la representación huffman de '1' (es decir,
"0001") es "100". Asegúrese de entender bien este algoritmo.
Eventualmente, se desea generar 2 matrices, una matriz de valores decimales (de los nodos
hoja) y otra serie de cadenas (los códigos Huffman correspondientes de los nodos hoja).
Una vez que se forma el libro de códigos, la codificación de un flujo de bits entrante es solo
una búsqueda del 'diccionario' y este proceso ha sido ejecutado por Ud. Si los dos bloques
descritos anteriormente (form_tree y form_codebook) funcionan correctamente, entonces
esto debería funcionar también. Sin embargo, se puede realizar una comprobación final
ingresando las entradas como se muestra:
Pruebe con lab1.vi después de resolver todos los ejercicios anteriores. Ingrese el nombre
del archivo de audio en el control de "ruta" e ingrese los bits de resolución. Puede ajustar
los dos cursores amarillos en el gráfico de forma de onda DCT para elegir qué coeficientes
DCT me gustaría preservar. Abra el archivo audio.wav presente en su carpeta. Siéntase en
la libertad de probar cualquier archivo .wav que encuentre e informe observaciones que le
parezcan relevantes.
ACTIVIDADES A DESARROLLAR:
PRUEBAS A REALIZAR:
1. Captura de señal de entrada y salida de audio para los siguientes valores de ruido No= -
20dB, -10dB, -5dB.
Nivel de cuantificación: 5, 10 y 20