El algoritmo Huffman es el utilizado en la codificación y decodificación en MP3. Como no tengo idea todavía de como se genera no voy a hablar al respecto.
A continuación pongo los pasos del proceso de decodificación de los frames(traducción del documento que puse antes):
- Find and Read Header: La primer tarea del decodificador es localizar la palabra de sincronización que marca de un frame valido de audio MPEG.
La palabra de sincronización es parte del header que contiene información acerca del número de layer, la velocidad de muestreo y el canal de configuración. Esta configuración no puede ser cambiada durente la duración entera del bit stream.
El header también contiene información acerca del bit rate que le dice al decodificador que tan grande es el frame y cuando esperar la próxima palabra de configuración y el próximo header - Read side information: La información que es necesaria por el decodificador, aparte de los datos que serán transformado en valores de muestra, es llamada side information.
Hay un bloque side information por cada canal en cada granule (gránulo). Esta información contiene parametros de decodificación y decuantización (dequantization) - Read scale factors: El espectro de frecuencias es dividido en bandas de factores de escala. Estas bandas son determinadas por la velocidad de muestreo y corresponden aproximadamente a las bandas críticas del oido humano.
Por cada banda de factor de escala, hay un factor de escala que será usado luego para controlar la ganancia durante la decuantización de la muestra - Read samples: Los 576 valores de muestra codificados con Huffman en la codificación son ahoras leidos y decodificados usando las tablas de Huffman indicadas por side information. El codificador puede usar varias tablas de Huffman sobre diferentes regiones de la muestra. Las varias tablas Huffman tienen diferentes rangos de números y/o asignación de bit
- Dequantize samples: En este paso, las muestras provenientes del bitstream son decuantizadas (dequantized) y escaladas a sus valores apropiados usando los factores de escala y el valor de ganacia del gránulo. Los valores de muestra son elevados a la potencia de 4/3 durante el proceso de decuantificación
- Reorder samples: Las muestras de los bloques que tienen una configuración de ventana de tiempo corto (bloques cortos generados en la codificación) deben ser ahora reordenados para ser procesados en los siguientes pasos
- Alias cancellation: La decodificación aplica la canelación de alias a los bloques que usan la configuración de ventana de tiempo largo (para grandes bloques generados en la codificación) para compensar la superposición de frecuencias del banco de filtros de subbandas
- IMDCT: Cada subanda es ahora transformada nuevamente en el dominio del tiempo. Para grandes bloques un IMDCT de 36 puntos calcula las 36 muestras de salidas directamente. Para bloques cortos la salida de 3 IMDCT de 12 puntos son conbinadas dentro de 36 muestras de salida.
Las primeras 18 muestras de salida son sumadas con los valores superpuestos almacenados del gránulo previo. Estos valores son los nuevos valores de salida.
Los últimos 18 valores de salida son almacenados para superponerse con el próximo gránulo - Frequency inversion: Cada segunda muestra en cada segunda subbanda es multiplicada por -1 para corregir la inversión de frecuencia del banco de filtro de subbanda
- Subband synthesize: Finalmente las 32 subandas son combinadas en muestras en el dominio del tiempo que cubren todo el espectro de frecuencias. Una muestra es tomada de cada subbanda y trasnformada usando una transformada similar a DCT. El resultado es escrito en la parte inferior de un gran array después que se ha hecho lugar desplazando el contenido previo hacia índices más altos. Las muestras PCM son luego calculadas haciendo la media de una operación en una ventana del array
- Output PCM
Puff bueno este es el algoritmo en general de la decodificación de Mp3. Si les interesa la codificación pueden leer el documento que recomendé la última vez, esto es una parte de ese paper y está incompleto.
Quiero comentar también que todas las transformadas usan cosenos y el valor Pi. Hay que ver como se lleva todo esto de punto flotante a punto fijo, por suerte está este paper que habla de ello:
http://www.mp3-tech.org/programmer/docs/thesis_lai.pdfBueno voy a seguir de a poco con la investigación. Espero que les haya servido.
Saludos.
Martín