Filtro de Síntesis de Subbanda
Si no existen bits asignados a una subbanda las muestras en esa subbanda toman el valor 0. Cada vez que las muestras de las subbandas de todas las 32 subbandas de un canal se calcularon se aplican al banco de filtros de síntesis y se calculan las 32 muestras de audio (PCM). El diagrama de flujo de las muestras se observa en la figura 5.3 donde se detalla la operación de reconstrucción.
Los coeficientes Nik se obtienen de:
Nik = cos[(16+i)(2k+1)p /64] donde 0 <= i <= 63 0 <= k <=31
Los coeficientes Di para la operación de enventanado se pueden obtener de la tabla B3. Los coeficientes se han calculado para la optimización numérica. Una trama contiene 12*32=384 muestras de subbanda, las que se transforman, después del filtrado en 384 muestras de audio.
Figura 5.3. Diagrama de bloques del banco de filtro de síntesis
La Capa II es más eficiente pero también más compleja que la capa I. El diagrama de flujo de la figura 5.2 válido para la capa I lo es también para la II.
Decodificación de la Asignación de bits (Bit allocation decoding)
Para diferentes combinaciones de tasa de bits y frecuencias de muestreo existen diferentes tablas de asignación.
Observación: las tasas de bits dadas en las tablas de cabecera son por canal.
Si el modo no es canal único, la tasa de bits debe ser dividida por 2 para obtener la tasa de bits por canal. La decodificación de la asignación de bits (bit allocation) se efectúa en tres pasos de aproximación.
pueden ser determinados utilizando la tabla B4.
Se puede observar en las tablas de asignación de bit (B2)(bit allocation) que alguna de las subbandas más altas nunca tendrán bits asignados. SBLIMIT (SubBandLIMIT) representa la cantidad de subbandas que tienen nbal#0 (ver tabla B2).
Decodificación del SCFSI (SCale Factor Selection Information)
Las 36 muestras de una subbanda dentro de una trama son divididas en tres partes iguales de 12 muestras cada una. Cada parte puede tener su propio SCF. El número de SCFs que deben ser leídos del bitstream depende del contenido de SCFSI[sb]. El SCFSI[sb] se lee del bitstream para las subbandas que tienen una asignación de bit (bit allocation) distinta de cero.
Decodificación de los SCF (SCale Factors)
Para cada subbanda con una asignación de bits (bit allocation) distinta de cero, son leídos desde el bitstream. El número de SCF codificados y la parte de las muestras de subbanda a las que se refieren, está definido por SCFSI[sb]. Los 6 bits de los SCF codificados deben ser interpretados como un entero no signado que sirve de entrada a la Tabla B1 (Layer I y II Scalefactors). Esta tabla contiene los SCFs por el cual las subbandas no nulas deberían ser multiplicadas después de la recuantificación.
Recuantificación de las muestras de subbanda.
Seguidamente, se leen las muestras codificadas. Como se observa en el capítulo 4 (descripción de la trama- Layer II) las muestras codificadas aparecen como triplets, el código contiene tres muestras consecutivas simultáneamente. La cantidad de bits a ser leídos para un triplet en el bitstream, para cada subbanda, se obtiene de la Tabla B4 (Layer II Clases de cuantificación).
De la misma tabla se establece si el código corresponde a tres muestras consecutivas separadas o es uno combinado para las tres muestras (agrupado). En este último caso es necesario desagrupar. El código combinado debe ser considerado como un entero no signado denominado "c". El siguiente pseudo-código provee los 3 códigos separados.
For i=0, mientras i<3, incremento=1
S[i] = módulo de [c / nlevels ]
c = c DIV nlevels
End for
Donde nlevels es el número de pasos como se muestran en la tabla B2 (Layer II Bit allocation Table). [nlevels puede tomar los valores 0, 3, 5, 7, 9, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767 o 65535]
El primer bit de cada uno de los 3 códigos tiene que ser invertido, y los números resultantes deben ser considerados como números fraccionales en complemento a dos, donde el MSB representa el valor –1. Los valores recuantificados pueden obtenerse con la aplicación de la siguiente fórmula:
S" = C * (S"’ + D)
Donde S"’ es el número fraccional
S" es el valor recuantificado
Los valores de las constantes C y D se dan en la tabla B4. Los valores recuantificados debe ser re-escalados. Los factores de multiplicación se encuentran en la Tabla B1 (Layer I, II Scalefactors). El valor re-escalado S’ se calcula como:
S’ = factor * S"
Síntesis del Filtro de Subbanda
Si no existen bits asignados a una subbanda las muestras en esa subbanda toman el valor 0. Cada vez que las muestras de las subbandas de todas las 32 subbandas de un canal se calcularon se aplican al banco de filtros de síntesis y se calculan las 32 muestras de audio (PCM). El diagrama de flujo de las muestras se observa en el diagrama de flujo del decodificador visto para Layer I donde se detalla la operación de reconstrucción (figura 5.3).
Los coeficientes Nik se obtienen de:
Nik = cos[(16+i)(2k+1)p /64] donde 0 <= i <= 63 0 <= k <=31
Los coeficientes Di para la operación de enventanado se pueden obtener de la tabla B3. Los coeficientes Se han calculado para la optimización numérica. Una trama contiene 36*32=1152 muestras de subbanda, las que se transforman, después del filtrado en 1152 muestras de audio.
Se obtiene una resolución superior en frecuencia a través del uso de un banco de filtros híbrido. Cada banda se separa en 18 líneas de frecuencia con la aplicación de una MDCT. La longitud de la MDCT es de 36. Se utiliza la conmutación de una ventana adaptativa para el control de Pre-ecos. (Descripto en el capítulo 6). La frecuencia a partir de la cual bloques más cortos (mejor resolución temporal) son usados, puede ser seleccionadas.
Partes de la señal, por debajo de una determinada frecuencia dependiendo de la bandera "mixed_block_flag", es codificada con una mejor solución frecuencia y parte de la señal por encima de esta frecuencia es codificada con una mejor resolución temporal.
Los componentes de frecuencia son cuantificados usando un cuantificador no uniforme y codificados usando un codificador Huffman. El codificador Huffman usa una de las 18 diferentes tablas. Un buffer es usado para mejorar la eficiencia de codificación del codificador Huffman y para ayudar en el caso de condiciones de Pre-eco (ver características del buffer en Cap. 6. El tamaño del buffer de entrada es el tamaño de una trama a la tasa de 160 Kbits/s por canal para Layer III. La técnica de buffer de corto plazo usada es denominada Bit Reservoir porque éste usa un bitrate variable a corto plazo con un desplazamiento máximo integral a partir de la tasa de bits media.
Cada trama contiene los datos de 2 gránulos. Los datos de audio en una trama están ubicados de la siguiente manera:
El main_data_begin_pointer especifica un offset negativo desde la posición del primer byte de la cabecera.
Figura 5.4. Diagrama de bloques del decodificador Layer III.
La primera acción es de sincronización en el decodificador con el bitstream entrante. Esto se realiza como las otras capas. La información acerca de la frecuencia de muestreo es usada para seleccionar la tabla SCALEFACTOR_BAND.
La información lateral (side information) debe ser extraída del bitstream y almacenada para su uso durante la decodificación de la trama asociada. La información de selección de tabla es usada para elegir un decodificador Huffman y el número de linbits de acuerdo a la tabla B7.
Los datos principales (main_data) (factores de escala, códigos Huffman y datos auxiliares) no son necesariamente ubicados en forma adyacente a la información lateral. El comienzo de la parte principal de datos es direccionado usando la información contenida en el puntero main_data_begin de la trama actual. La asignación de los datos principales (main data) es hecha de manera que todos los datos principales estén residentes en el buffer de entrada cuando la cabecera de la próxima trama está llegando al buffer de entrada. El decodificador tiene que saltar la cabecera y la información lateral cuando está decodificando los datos principales. Este conoce sus posiciones desde el bitrate_index y el padding bit.
La longitud de la cabecera es siempre de 4 bytes, la longitud de la información lateral es de 17 bytes en el modo de canal simple y de 32 bytes en los otros modos. Los datos principales pueden extenderse a más de un bloque de cabecera e información lateral.
En la figura 5.5 se observan dos trozos de bitstream del Layer III. En el superior las características de demanda son normales. En el inferior se observa un pico de demanda en Main info 3 y una pequeña demanda en Main Info 2.
Figura 5.5
La siguiente regla puede ser usada para calcular el máximo número de bits usado por un gránulo:
La longitud del buffer en de 7680 bits. Este valor es usado como el máximo buffer para cada tasa. A la tasa más alta en Layer III (320 Kbits/s en señal estéreo) y una frecuencia de muestreo de 48 KHz. La longitud media de la trama es:
(320.000/48.000)*1152=7680 bits
Por lo tanto las tramas deben tener una longitud constante a esta tasa y frecuencia de muestreo.
A 64 Kbits/s (128 Kbits/s en estéreo) la longitud media del gránulo es
La desviación actual es igual al número de bytes especificados en el puntero (de offset) main_data_begin. La desviación máxima real es:
Por consiguiente, se puede calcular el retardo y la longitud del buffer para tasas de bits intermedias. Se permite el intercambio del buffer entre el canal izquierdo y derecho en un bitstream estéreo sin restricciones. Debido a la limitación en el tamaño del buffer, main_data_begin se setea siempre en 0 en el caso que el Bit_rate_index == 14. Por ejemplo, en una tasa de 320 Kbits/seg. estéreo. En este caso todos los datos se ubican entre palabras de cabecera adyacentes.
Para frecuencias de muestreos menores de 48 KHz el buffer debería limitarse de manera tal que el mismo tamaño de buffer físico sea suficiente como para uno calculado a 48 KHz.
Los SCF son codificados de acuerdo a las variables slen1 y slen2 las cuales se determinan desde los valores de Scalefac_compres. Los valores decodificados pueden ser utilizados como entrada a una tabla utilizada para calcular los factores para cada SCF_band directamente. Cuando se está decodificando el segundo gránulo, debe ser considerada la SCFSI. Para las bandas en las cuales el correspondiente SCFSI está seteado en 1, los SCF del primer gránulo son también utilizados para el segundo gránulo, por lo tanto éstos (los SCF) no se transmiten para el segundo gránulo.
El número de bits utilizados para codificar los SCF se denomina part2_lengh y se calcula de la sig. manera:
Part2_length= 11*slen1+10*slen2 ( 11= cant de bandas[0,10] ; 10 cant de bandas[11,20] )
Part2_length= 18*slen1+18*slen2( 18= cant de bandas[0,5]*3 ; 18 cant de bandas[6,11]*3 )
Part2_length= 17*slen1+18*slen2( 17= cant de bandas[0,7]+cant de bandas[3,5]*3 ; 18 cant de bandas[6,11]*3 )
Del Cap. 4: Scalefac_compress se tenía:
Block_type
Mixed_block_flag
Slen1 (long de los SCF para las bandas:)
Slen2(long de los SCF para las bandas:)
0,1 o 3
No importa
0-10
11-20
2
0
0-5
6-11
2
1
0-7 (SCF band de ventana larga)
3-5 (SCF band de ventana corta)
6-11
Las fórmulas son válidas si gr. == 0 o si gr. == 1 y scfsi[ch][scfsi_band] == 0 (por ejemplo SCFSI no se usa).
Toda la información necesaria, incluyendo la tabla que realiza el árbol de codificación HUFFMAN puede generarse desde las tablas B7.
Dato en la trama
Scalefac_compres[gr.]
Slen1
Slen2
0
0
0
1
0
1
2
0
2
3
0
3
4
3
0
5
1
1
6
1
2
7
1
3
8
2
1
9
2
2
10
2
3
11
3
1
12
3
2
13
3
3
14
4
2
15
4
3
Los datos que corresponden a big_values se decodifica, utilizando las tablas con el número contenido en Table_select[gr.][ch][region]. Las líneas espectrales en la región 0, región 1 y región 2 son decodificadas de a pares hasta completar el número de pares de líneas espectrales contenido en big_values.
Los restantes bits de código HUFFMAN son decodificados utilizando la tabla de acuerdo a count1table_select[gr.][ch]. La decodificación se realiza hasta que todos los códigos HUFFMAN han sido decodificados o hasta que los valores cuantificados que representan 576 líneas han sido decodificados, lo que llegue primero. Si existen más bits de códigos HUFFMAN que los necesarios para decodificar 576 líneas espectrales estos son descartados. La variable count1 se deriva implícitamente cómo el número de valores (cuartetos) decodificados utilizando count1table_select.
El cuantificador no uniforme utiliza una ley exponencial. Para cada valor, "is", a la salida del decodificador Huffman se calcula el valor |is|4/3. Esto puede ser hecho a través del calculo explícito o bien puede estar tabulado en una tabla.
Formula para la recuantificación y escalado completo.
Una fórmula describe el proceso completo desde la salida del decodificador Huffman hasta la entrada de las muestras al banco de filtros polifásicos. Todos los factores de escala necesarios están incluidos en esta fórmula. Los datos de salida son reconstruidos desde las muestras recuantificadas.
Los valores de la ganancia global y de sub-bloque afectan a todos los valores dentro de una ventana de tiempo (en el caso de que block_type == 2).
Los factores de escala (SCF) y preflag ajustan antes la ganancia dentro de cada banda de factor de escala (scale factor band).
La siguiente es la fórmula de recuantificación para ventanas cortas (block_type=2). El valor decodificado (de la salida del decodificador Huffman) para la línea i se llama isi y la entrada al banco de filtros de síntesis para la línea i se denomina xri:
KS = 21/4 * (global_gain[gr] – 210 – 8 * subblock_gain[window][gr.] )
xri = sign(isi) * | isi | (4/3 * KS) * 2- ( Scalefac_multiplier * Scalefac_s[gr.][sfb][window] )
para bloques largos la fórmula es:
KL = 21/4 * (global_gain[gr.] – 210 )
xri = sign(isi) * | isi | (4/3 * KL) * 2- ( Scalefac_multiplier * Scalefac_l[gr.][sfb][ch] + pretab[sfb])
donde :
Observación: Gránulo en Layer III corresponde a 576 líneas de frecuencia que llevan su propia Side Info.
Si se utilizan bloques cortos (block_type == 2), los datos reescalados xr[scf_band][window][freq_line] deberán ser reordenados por orden de subbanda antes de ingresar al bloque de IMCT ( xr[subband][window][freq_line] ).
Ejemplo de los gránulos para una trama con block_type=0 (bloque normal) en el 1er gránulo y block_type=2 (bloque corto) en el 2do gránulo.
Figura 5.6.
Modo Ms_stereo
Este modo (que se encuentra en establecido en la cabecera en el campo Mode_extension) permite conmutar entre estéreo independiente a MS_stereo. Si:
MS_stereo
Intensity Stereo
Entonces:
Habilitado
NO Habilitado
El espectro completo se decodifica en MS_stereo
Habilitado
Habilitado
El límite superior de los SCF bands codificados en MS_stereo se obtienen a partir de "zero_part" de la diferencia (canal derecho). En este caso el SCF band en la cual la última línea de frecuencia, con valor #0, representa a la última SCF band a la cual se le aplica Intensity Stereo. Por encima de éste límite Intensity Stereo puede ser aplicado si se encuentra habilitado en el Header. La "zero_part" del canal diferencia es la parte del espectro que va desde Bigvalues*2+count1*4 hasta la Tasa de Nyquist (ver cap. 6 Codificación en Joint Stereo).
En modo MS estéreo, los valores normalizados de los canales middle/side (M/S) son transmitidos en vez de los canales izquierdo/derecho. Así Li /Ri son reconstruidas usando:
Li=Mi + Si Ri = Mi - Si
2 2
Los valores de Mi son transmitidos por el canal izquierdo y los Si por el derecho.
Si ocurre una conmutación de ventana, entonces los canales M y S deben conmutar sincronizadamente.
Este modo, encontrado en la cabecera (header) en el campo mode_extension permite conmutar desde ‘stereo normal’ a ‘intensity stereo’. En Layer III , intensity stereo no se efectúa usando un par de SCF como en Layer I y II, sino a través de especificar la magnitud ( a través de los SCF del canal izquierdo como en MS_stereo [normal]) y la posición stereo is_possb[sfb]. Is_possb[sfb] se transmite en vez de los SCF del canal derecho. La posición stereo se utiliza para discriminar el canal derecho del izquierdo de acuerdo a las fórmulas abajo detalladas. El límite inferior de los SCF bands decodificados en stereo intenso se obtienen desde la ‘zero_part’ del canal derecho. Por sobre este límite la decodificación de stereo intenso es aplicando usando los SCF del canal derecho como posiciones de stereo intenso. Una posición de stereo intenso de 7 en un SCF band indica que este SCF band no esta decodificado como stereo intenso.
Para cada SCF band [sb] codificada en stereo intenso los siguientes pasos se efectúan:
(Para mayor información sobre los modos Intensity Stereo y MS_stereo ver capítulo 6.)
La figura 5.8 se muestra el diagrama incluyendo el banco de filtros de síntesis. Las líneas de frecuencia son pre-procesadas con el esquema de reducción de aliasing (ver figura 5.9) y los coeficientes que se utilizan están en la Tabla B9, los cuales alimentan proceso de la transformada Inversa del coseno modificada (IMDCT).
Figura 5.8
Figura 5.9. Reducción de aliasing.
Entonces:
Figura 5.10
Para gránulos con tipos de bloque largos (long block_type), en el ingreso al banco de filtros de síntesis se procesa la reducción de aliasing antes del ingreso a la IMDCT. El siguiente pseudo-código describe computación de la reducción del aliasing:
For sb=1 hasta sb<32, incrementar de a 1
For i=0 hasta i<8, incrementar de a 1
xar[18*sb-1-i] = xr[18*sb-1-i]Cs[i] – xr[18*sb+i]Ca[i]
xar[18*sb +i] = xr[18*sb +i]Cs[i] – xr[18*sb-1-i]Ca[i]
end for (i)
end for (sb)
Los índices de las matrices xar[] y xr[] representan las líneas de frecuencias en el gránulo, ordenadas desde las bajas frecuencias hacia las altas, representando el cero la línea de frecuencia más baja y la 575 la más alta. Los coeficientes Cs(i) y Ca(i) están en la tabla B9 y las figuras 5.10 y 5.11 representan esquemáticamente el proceso.
La reducción de aliasing no se aplica para gránulos con block_type == 2 (bloques cortos)
Figura 5.11
Transformada discreta inversa del coseno modificada. IMDCT
En la siguiente fórmula: ‘n’ es el número de muestras enmarcadas (para bloques cortos n=12 y para bloques largos n=36). En el caso de un bloque tipo 'corto' cada uno de los 3 bloques cortos es transformado separadamente. Los n/2 valores Xk son transformados en n valores Xi. La expresión analítica de la IMDCT es:
Dependiendo del tipo de block, son utilizados diferentes tipos de enmarcado (enventanados):
Block_type = 0 (enmarcado normal)
zi = xi sen [p /36 * (i + 1/2)] para i = 0 a 35
Block_type = 1 (start block)
xi sen [p /36 * (i + 1/2)] para i = 0 a 17
xi para i = 18 a 23
zi = xi sen [p /12 * (i - 18 +1/2)] para i = 24 a 29
0 para i = 30 a 35
Block_type = 3 (stop block)
0 para i = 0 a 5
xi sen [p /12 * (i - 6 +1/2)] para i = 6 a 11
zi = xi para i = 12 a 17
xi sen [p /36 * (i +1/2)] para i = 18 a 35
Block_type = 2 (short block)
Cada uno de los 3 bloques cortos es enmarcado separadamente.
yi(j) = xi(j) sen [p /12 * (i +1/2)] para i = 0 a 11 j = 0 a 2
Los bloques cortos enmarcados deben ser solapados y concatenados.
Solapamiento y agregado con el bloque previo.
La primera mitad de los 36 valores esta solapada con la segunda mitad del bloque previo. La segunda mitad del bloque actual se almacena para ser utilizada en el próximo bloque:
resulti = zi + si para i = 0 a 17
si = zi + 18 para i = 0 a 17
Compensación por la inversión de frecuencia del banco de filtros polifásicos
La salida de la suma solapada consiste 18 muestras para cada de las 32 subbandas. Si las muestras temporales son etiquetadas de 0 a 17, siendo 0 la primera de las muestras, y las subbandas se etiquetan 0 a 31, con 0 la subbanda mas baja, entonces toda muestra temporal impar de toda subbanda impar es multiplicada por -1 antes de ser procesada por el banco de filtros de síntesis polifásico.
El banco de filtro realiza un mapeo de tiempo a frecuencia. En la Norma ISO 11172 se utilizan 2 tipos de bancos de filtros:
Un banco del tipo polifásico para las capas I y II y un banco del tipo híbrido-polifásico (con MDCT) para la capa III.
Ambos proveen un mapeo específico del dominio tiempo a frecuencia. Los bancos hacen un muestreo crítico (hay tantas muestras en el dominio frecuencia como en el dominio tiempo) y proveen la primera separación de frecuencia en el codificador y los filtros de reconstrucción en decodificador. Las muestras de salida de los bancos de filtros son cuantificadas.
En las capas I y II, un banco de filtros con 32 subbandas es utilizado. En cada subbanda, 12 o 36 muestras son agrupadas para el procesamiento. En la capa III, el banco de filtros tiene una resolución dependiente de la señal donde puede haber 6x32 muestras frecuenciales (bloque corto) o 18x32 muestras frecuenciales (bloque largo). En el caso de 6x32 muestras frecuenciales, 3 sets de cada frecuencia son cuantificados separadamente.
El algoritmo de codificación provee una respuesta en frecuencia que arranca desde DC. De cualquier modo, en aplicaciones donde éste no es un requerimiento se recomienda la utilización de un filtro pasa alto que debe incluirse en la entrada del codificador. La frecuencia de corte del filtro debe estar entre 2 y 10 Hz. La utilización de dicho filtro evita un innecesario requerimiento de tasa de bits alta para la subbanda más baja e incrementa la calidad de audio total.
Filtro de Análisis de subbanda
El filtro de análisis de subbanda se utiliza para partir el ancho de banda de la señal con frecuencia de muestreo Fs en 32 equiespaciadas subbandas con una frecuencia de muestreo de FS/32. En este proceso se realizan las siguientes operaciones:
Mik = cos[(2i+1)(k-16)p /64] i desde 0 a 31 y k desde 0 a 63
En el siguiente diagrama se detallan los pasos donde se transforman las muestras desde el dominio tiempo a las 32 subbandas (en el dominio frecuencia) [Banco de Filtros Polifásicos].
Diagrama de bloques del Filtro de Análisis de Subbanda
El modelo psicoacústico calcula el nivel de ruido perceptible para cada subbanda. Este nivel es utilizado en la asignación de bits o ruido para determinar los cuantificadores actuales y niveles de cuantificación. Los modelos psicoacústicos descriptos en la norma son dos y, si bien ambos pueden usarse para cualquiera de las capas, el primer modelo se adapta mejor a las capas I y II mientras que el modelo II lo hace mejor para la capa III (con una leve modificación) (ver modelo psicoacústico II capítulo 7).
En ambos modelos la salida es la Relación Señal Máscara (SMR) para cada banda (en las capas I y II) o grupo de bandas (capa III)
Al asignador ingresan tanto las muestras provenientes del banco de filtros y la SMR proveniente del modelo Psicoacústico, y ajusta la asignación de bits (Capas I y II) o la asignación de Ruido (Capa III) de manera de cumplir simultáneamente tanto con el requerimiento de la tasa de bits como también con el requerimiento de enmascaramiento. A bajas tasas estos métodos tratan de dedicar bits de manera que resulte psicoacústicamente tolerable cuando no se puede satisfacer la demanda psicoacústica a la tasa de bits requerida.
Método de asignación de bits o ruido: Existen dos métodos de control de la tasa de bits. En las capas I y II este método es un proceso de asignación de bits (una determinada cantidad de bits se asigna a cada muestra o grupos de muestras) en cada subbanda.
El método para la capa III es un bucle de asignación de ruido, donde los cuantificadores son variados de un modo organizado, y la variable a controlar es el ruido inyectado. En cada caso el resultado es un conjunto de parámetros de cuantificación y las muestras de salida cuantificadas que ingresan al formateador de trama.
El formateador del bitstream varía de capa en capa. En las capas I y II se utilizan código PCM fijo para cada muestra de subbanda, con la excepción que en Layer II las muestras cuantificadas pueden ser agrupadas. En Layer III se utilizan códigos Huffman para representar las muestras de frecuencia cuantificadas. Los códigos Huffman son palabras de longitud variable que permiten una más eficiente representación de las muestras cuantificadas en el bitstream, a costo de una mayor complejidad.
El formateador del bitstream toma las salidas del banco de filtros cuantificadas junto con la asignación de bits (Capas I y II) o la asignación de ruido (capa III) y otra información adyacente (side info) requerida, y codifica y formatea esa información de una manera eficiente. En el caso de la Capa III, la codificación Huffman se inserta también en este punto.
El cálculo de los parámetros del modelo psicoacústico puede obtenerse utilizando cualquiera de los modelos detallados (a modo de ejemplo) en la norma ISO 11172. La extensión (shift length) de la FFT es de 384 muestras. Cada modelo provee la SMR para cada subbanda
El banco de filtro de subbandas es como el detallado anteriormente.
El cálculo de los factores de escala (Scalefactors: SCF) se efectúa cada 12 muestras de cada subbanda. El máximo valor absoluto de estas 12 muestras se determina. Por tratarse de muestras normalizadas estas varían entre –1 y 1. El mínimo valor de la tabla B1 (de la norma) que resulta mayor que este máximo es usado como SCF.
El índice de la tabla B1 está representado por 6 bits, el MSB primero. El SCF se transmite sólo si el número de bits asignado a la subbanda es distinto de cero.
Antes de ajustar a una tasa de bits fija, el número de bits disponibles para codificar las muestras y los SCF deben ser determinados. Este número se determina de la siguiente expresión:
Adb = cb – (bhdr + bcrc + bbal + banc) donde
donde:
Adb: bits disponibles para la codificación de las muestras
Cb : número total de bits disponibles
Bhdr: cantidad de bits del Header (cabecera) (32 bits)
Bcrc : palabra de control CRC (código de redundancia cíclica) (16 bits)
Bbal : bits utilizados para la asignación
Banc : bits utilizados para el envío de datos auxiliares (no forman parte del audio) en la trama.
El número de bits resultantes es usado para la codificación de las muestras de la subbandas y los SCF. El principio utilizado en el procedimiento de asignación es la minimización de la NMR (Relación Ruido Mascara) en la trama con la restricción que el número de bits utilizado no exceda el disponible para la trama. La cantidad de bits posibles para asignar a una muestra puede encontrarse en la tabla de Asignación de bits para Layer I (Capítulo 4), siendo el rango de 0 a 15 bits (excluyendo la asignación de 1 bit).
El procedimiento de asignación es iterativo, donde en cada paso de iteración se incrementa el número de niveles de las muestras de la subbanda que mayor beneficio produzca (de acuerdo al modelo psicoacústico).
Primero se calcula MNR (relación Máscara-Ruido) para cada subbanda restando a SNR la SMR
NMR=SNR - SMR donde la SNR puede hallarse en la tabla C2 y SMR es la salida del modelo psicoacústico.
En principio, ningún bit se asigna para las muestras y SCFs. El número de bits por muestras (Bspl) y el número de bits por SCF (Bscf) es seteados en cero. El procedimiento iterativo comienza y cada bucle de iteración contiene los siguientes pasos:
Adb = cb – (bhdr + bcrc + bbal + bscf + bspl + banc)
El proceso iterativo se repite tantas veces hasta que Adb no pueda incrementarse con un nuevo paso de iteración (por el incremento de Bspl y Bscf).
Cuantificación y codificación de las muestras de la subbandas.
Un cuantificador lineal con una representación de cero simétrico se utiliza para cuantificar las muestras de las subbandas. Esta representación evita que pequeños cambios de valor alrededor del cero cuantificando a diferentes niveles. Cada una de las muestras de las subbandas es normalizada dividiendo su valor por el SCF para obtener X y cuantificada de acuerdo a la sig. Fórmula:
A y B son constantes que se encuentran en la tabla C3. N representa el número de bits necesarios para codificar el número de pasos (escalones). La inversión del bit más significante se hace a los efectos de evitar todos ‘1’ en la representación del código, dado que el código con todos ‘1’ se utiliza para la palabra de sincronización.
La Codificación de la asignación de bits.
Se realiza de acuerdo a la tabla de Asignación de bits para Layer I (capítulo 4).
Datos Auxiliares
Pueden transmitirse dentro de la trama y su longitud no está acotada, pero éstos reducen la cantidad de bits disponibles para audio, lo que puede resultar en una degradación de la calidad de audio.
La presencia de un patrón de bits dentro de los datos auxiliares que coincida con la palabra de sincronismo puede dañar la sincronización. Esto puede ser más frecuente cuando se utiliza formato libre.
La información codificada de las subbandas se transfiere en tramas. El número de slots en una trama varía con la frecuencia de muestreo y la tasa de bits. Cada trama contiene información de 384 muestras de la señal de audio original por lo que la tasa de la trama es de Fs/384.
Fs (KHz)
Tamaño de la Trama (ms)
48
8
44.1
8,7074
32
12
Una trama puede contener información de uno o dos canales. La longitud de un slot en la Capa I es de 32 bits (4 bytes). El número de slots en una trama puede obtenerse de la siguiente manera:
Número de slots/trama = (bitrate/Fs)* 12
Si el resultado no es un número entero éste se trunca y se requiere de "padding" (rellenado). Esto significa que el número de slots puede variar entre N y N+1.
Formato de la Trama en Layer I
Diagrama de bloques del codificador MPEG-1 válido para las capas I y II
El modelo psicoacústico puede calcularse con cualquiera de los dos modelos descriptos en la norma. Si el modelo 1 se utiliza para calcular los parámetros psicoacústicos, la longitud de ventana de la FFT es de 1152 muestras. Si se utiliza el modelo 2, el cálculo se realiza dos veces con una longitud de ventana (shift length) de 576 muestras y el mayor de cada par de SMR se utiliza. Ambos modelos proveen la SMR para cada subbanda.
El banco de filtro de subbanda corresponde al descripto anteriormente.
El cálculo de los SCF para cada subbanda se realiza cada 12 muestras. Se determina el máximo valor absoluto de estas 12 muestras y el mínimo valor de la tabla B1 que sea mayor que este máximo se usa como factor de escala.
Codificación de los Factores de escala (SCF).
Una trama corresponde a 36 muestras por subbandas y por lo tanto contiene tres SCF por subbanda.
Se calculan las diferencias entre los SCF de cada grupo de 12 muestras:
Dscf1 = scf1 – scf2
Dscf2 = scf2 – scf3
La clase de cada diferencia se determina como sigue:
clase
Dscf
1
Dscf<=-3
2
-3<dscf<0
3
Dscf=0
4
0<dscf<3
5
Dscf>=3
El par de clases de diferencias indican el punto de entrada a la tabla C4 (Layer II Scalefactors Transmission Patterns). La columna con nombre "Scalefactor used in the encoder" da los tres SCF que son actualmente usados. "1" , "2" y 3 significa que el primero, segundo y tercero dentro de una trama, respectivamente. "4" significa el máximo de los tres SCF. Si después de este ajuste de SCF dos o tres son iguales indica que no todos los SCF necesitan ser transmitidos para cierta subbanda dentro de la trama. Solamente los SCF indicados en la columna de "Transmission Patterns" serán transmitidos. La información que detalla el número y la posición de los SCF en cada subbanda se denomina "SCF Selection Information".
Se codifican utilizando con una palabra de 2 bits que también se encuentra en la tabla C4. Solamente los SCFSI para las subbandas que tienen una asignación de bits distinta de 0 se transmiten.
Antes de ajustarse a una tasa fija de bits, el número de bits disponible (adb) que están disponible para la codificación de las muestras y de los SCF debe ser determinado. Este número puede obtenerse de la sig. manera:
Adb=cb- (bhdr + bcrc + bbal + banc)
Donde :
Adb: bits disponibles para la codificación de las muestras
Cb : número total de bits disponibles
Bhdr: cantidad de bits del Header(cabecera) (32 bits)
Bcrc : palabra de control CRC (código de redundancia cíclica) (16 bits)
Bbal : bits utilizados para la asignación
Banc : bits utilizados para el envío de datos auxiliares (no forman parte del audio) en la trama.
El número resultante puede ser utilizado para codificar las muestras de las subbandas y los SCF. El principio usado en el procedimiento de asignación es la minimización de la relación ruido a máscara (NMR) total sobre la trama con las restricciones que el número de bits utilizados no exceda el número de bits disponible para la esa trama. La tabla B2 de la norma indica para cada subbanda el número de posibles escalones que se pueden utilizar para cuantificar las muestras. El número de bits requeridos para representar esas muestras cuantificadas se detalla en la tabla B4
La asignación es un procedimiento iterativo donde, en cada paso de iteración el número de niveles de la subbanda que produzca el mayor beneficio psicoacústico se incrementa.
Primero se calcula la relación NMR para cada subbanda haciendo:
NMR = SNR – SMR (en dB)
SNR puede encontrarse en la tabla C5, mientras que SMR es la salida del modelo psicoacústico.
Al inicio de la iteración, no se asignan bits para las muestras y SCF. El número de bits por muestras (Bspl) y el número de bits por SCF (Bscf) es seteados en cero. El procedimiento iterativo comienza y cada bucle de iteración contiene los siguientes pasos:
Adb = cb – (bhdr + bcrc + bbal + bsel + bscf + bspl + banc)
El proceso iterativo se repite tantas veces hasta que Adb no pueda incrementarse con un nuevo paso de iteración (por el incremento de Bsel, Bspl y Bscf).
Cuantificación y codificación de las muestras de la subbandas.
Cada una de las 12 muestras por subbandas están normalizadas dividiendo su valor por el SCF para obtener X y cuantificarlo usando la siguiente fórmula:
A y B son constantes que se encuentran en la tabla C6. N representa el número de bits necesarios para codificar el número de pasos (escalones). La inversión del bit más significante se hace a los efectos de evitar todos ‘1’ en la representación del código, dado que el código con todos ‘1’ se utiliza para la palabra de sincronización.
Dado el número de escalones en que las muestras serán cuantificadas, la tabla B4 indica si el agrupamiento de muestras tendrá lugar. Si este no será usado, las tres muestras se codifican con palabras de código individuales.
Si, en cambio, de determina que existirá agrupamiento las tres muestras se codifican en una única palabra de código. Solamente un valor, Vm (m=3,5,9), se transmite. La relación entre este valor (Vm) y las tres muestras consecutivas (x,y,z) que son reemplazadas son:
V3 = 9z + 3y + x (v3 en 0....26)
V5 = 25z + 5y + x (v5 en 0..124)
V9 = 81z + 9y + x (v9 en 0..728)
A los efectos de una codificación más eficiente, solamente se permiten un número limitado de cuantificaciones las cuales pueden ser diferentes para cada subbanda. Solamente el índice con la longitud de palabra ‘nbal’ en la tabla B2 se transmite, MSB primero (Most Significant Bit)
Pueden transmitirse dentro de la trama y su longitud no está acotada, pero éstos reducen la cantidad de bits disponibles para audio, lo que puede resultar en una degradación de la calidad de audio. La presencia de una secuencia de bits en los datos auxiliares, igual a la palabra de sincronismo, puede dificultar la sincronización, pero este problema puede ser más frecuente cuando se utiliza el formato libre (Free Format).
Las diferencias con la capa I son:
La codificación de la capa III introduce muchas características nuevas con respecto a las dos anteriores. El resumen de éstas son:
Las muestras de audio de la entrada se convierten en muestras de subbanda a través del banco de filtros híbrido que realiza el mapeo de tiempo a frecuencia. La salida de este banco de filtro se aplica a la entrada de MDCT donde a la salida se obtiene una resolución más fina en frecuencia.
De acuerdo a las características psicoacústicas de la señal (la existencia de pre-ecos, o no) se obtendrá a la salida del (MDCT Transformada discreta del coseno modificada) una mejor resolución frecuencial (pero pobre resolución temporal) o sea bloques largos (normal); o una mejor resolución temporal pero más pobre resolución frecuencial (bloques cortos) que permiten enmascarar eficientemente la existencia de pre-ecos.
Una situación de pre-eco se da cuando a un período de poca variación de la señal (baja requerimiento de bits para codificar) le sigue una variación abrupta de la misma (un mayor demanda instantánea de bits).
Esto puede ser observado en el siguiente gráfico:
El ancho de banda de audio se divide en 21 bandas para los bloques largos o en 12 bandas si se utilizan bloques cortos.
A diferencia de Layer I o II los Scalefactors afectan a un conjunto de líneas espectrales y son gobernados por el modelo psicoacústico (se ajustan más precisamente a las bandas críticas) y existen SCF para bloques cortos y largos.
Los SCF son utilizados para "colorear" el ruido de cuantificación. Si el ruido de cuantificación se colorea con la forma correcta, éste es enmascarado completamente. A diferencia de Layer I y II, los SCF de Layer III no se refieren al máximo local de la señal cuantificada. En Layer III, SCF son utilizados en el decodificador para obtener los factores de división (divisores) para grupos de valores (agrupados en SCF bands). En caso de Layer III, estos grupos de valores (SCF bands) se extienden sobre varias líneas espectrales. Estos grupos denominados bandas de factores de escala (SCF bands) son seleccionados de manera de asemejarse a las bandas críticas del oído humano en la forma más cercana posible.
Si intensity_stereo está habilitado (mode_bit_extension) los SCF de la "zero_part", de la diferencia (canal derecho), son utilizados como intensity_stereo positions (is_pos). Is_pos[sfb] es la posición de estéreo intenso para la SCF band sfb.
La subdivisión del espectro en SCF bands permanece fija para cada longitud de bloque y frecuencia de muestreo y almacenados en tablas en el codificador y decodificador (Tabla B8). Los SCF son cero (SCF=0) para líneas de frecuencia por sobre la línea más alta de la tabla, lo que significa que el factor de multiplicación es 1.
Los SCF son cuantificados logaritmicamente. El escalón de cuantificación se establece con scalefac_scale.
Para el proceso de codificación en Layer III se puede utilizar cualquiera de los modelos psicoacústicos detallados en al norma, aunque en esta se adopta el modelo 2 para modificarlo de acuerdo a los requerimientos de codificación.
De ahora en adelante siempre se hará referencia al Modelo Psicoacústico 2 dentro del proceso de codificación del Layer III. Las características principales son:
Este modelo se corre 2 veces por bloque utilizando una longitud de desplazamiento (shift length) de 576 muestras.
Se calcula la relación Señal Máscara (SMR) para cada SCF Band.
Una parte crucial en la codificación en el dominio de la frecuencia de las señales de audio es la aparición de pre-ecos. Considérese un caso dónde a un período de silencio le sigue un sonido de tipo percusivo, (tales como las castañuelas o platillos) dentro del mismo bloque de codificación. Dicho "ataque" producirá errores de cuantificación comparativamente grandes. Al producirse la decodificación de dicho bloque el filtro pasabanda (en el decodificador) esparcirá dicho error de cuantificación sobre todo el bloque, por lo que se volverá audible la distorsión, especialmente a bajos bitrate (MPEG-2).
Los pre-ecos pueden ser enmascarados utilizando el efecto temporal de pre-masking, si la ventana de tiempo es de corta longitud (del orden de unos pocos milisegundos). No obstante, un mayor porcentaje del bitrate total se requiere típicamente para la transmisión de la información lateral (Side info) si los bloques son más cortos. La solución pasa entonces por la conmutación de bloques de diferentes longitudes cuando las características de la señal los establezcan (un bloque largo de 576 muestras por canal con mejor resolución frecuencial y más pobre resolución temporal, o 3 bloques de 192 muestras por canal donde la resolución frecuencial es menor pero la temporal es mejor).
En la fig. se observa la señal original de audio (a) y como el efecto del pre-eco es claramente visible cuando la longitud del bloque es 576 (b) , mientras que en (c) solo afecta parte del segundo sub-bloque y no al primero por ser el subloque de longitud 192.
Decisión de conmutación de ventana:
La decisión si el banco de filtros debiese ser conmutado a ventanas cortas se deriva del cálculo del umbral de enmascaramiento por medio de calcular la estimación de la entropía psicoacústica (PE) y conmutando cuando PE excede el valor 1800. Si se alcanza esta condición se inicia la secuencia:
Start (block_type = 1)
Short (block_type = 2)
Stop (block_type = 3)
En el siguiente diagrama se muestra los posibles estados y cambios para la lógica de conmutación de ventanas.
Dos ventanas de MDCT especiales (start window y stop window) se necesitan en caso de transiciones entre bloques largos y cortos y viceversa para mantener la cancelación del aliasing que provee la MDCT en el dominio tiempo. Esto se Observa en la siguiente figura:
Análisis del Banco de filtro Híbrido:
El análisis de subbanda del banco de filtros polifásico se ha descripto anteriormente. La salida del banco de filtros polifásico es la entrada a la subdivisión en líneas espectrales usando la MDCT. De acuerdo a la salida del modelo psicoacústico (las variables block_split_flag y block_type las ventanas y transformadas "normal", "start", "short", y "stop" son usadas).
18 valores de salida consecutivos de un gránulo y 18 valores consecutivos del gránulo anterior son ensamblados en un bloque de 36 muestras.
Block_type = 0 (enmarcado normal)
zi = xi’ sen [p /36 * (i + 1/2)] para i = 0 a 35
Block_type = 1 (start block)
xi’ sen [p /36 * (i + 1/2)] para i = 0 a 17
zi xi para i = 18 a 23
xi sen [p /12 * (i - 18 +1/2)] para i = 24 a 29
0 para i = 30 a 35
Block_type = 3 (stop block)
0 para i = 0 a 5
zi xi sen [p /12 * (i - 6 +1/2)] para i = 6 a 11
xi para i = 12 a 17
xi sen [p /36 * (i +1/2)] para i = 18 a 35
Block_type = 2 (short block)
El bloque de 36 muestras se divide en 3 bloques solapados:
Yi(0) = x’i+6 para i = 0 a 11
Yi(1) = x’i+12 para i = 0 a 11
Yi(2) = x’i+18 para i = 0 a 11
Cada uno de los 3 bloques cortos es enventanado separadamente.
zi(k) = yi(k) sen [p /12 * (i +1/2)] para i = 0 a 11 k = 0 a 2
Transformada discreta del coseno modificada. MDCT
En la sig. fórmula: ´N' es el número de muestras enmarcadas (para bloques cortos n=12 y para bloques largos n=36). En el caso de un bloque tipo 'corto' cada uno de los 3 bloques cortos es transformado separadamente.
Aliasing-Butterfly , Codificador
El cálculo de la reducción de aliasing en el codificador se realiza de manera similar al decodificador. La definición de la mariposa (butterfly) a ser usada se observa en la siguiente figura. Los coeficientes cai y csi se encuentran en la tabla B9.
Cálculo del promedio de bits disponibles:
El número de bits disponibles por gránulo es calculado desde el tamaño de la trama. Por ejemplo, para un bitrate de 64 Kbps y 48000 muestras por seg. será:
64000 [bits/seg.] * ( 1152 [muestras/trama] / 48000 [muestras/seg.] ) / 2 [gránulo / trama] = 768 bits/gránulo
Como la cabecera toma 32 bits (4 bytes) y la información lateral (side information) 17 bytes (136 bits) en modo de "canal único", la cantidad promedio de bits para main_data para el gránulo será:
768 – (32+136 [bis/trama]) / ( 2 [gránulo/trama] ) = 648 bits/gránulo
Reservación de bits:
La reserva de bits provee bits adicionales que pueden ser usados para el gránulo. El número de bits disponible en la reserva se establece en los lazos de iteración del codificador.
Cuantificación y codificación de las muestras frecuenciales
Las muestras a la salida del banco de filtros híbrido (Banco de filtro de análisis y MDCT) se cuantifican no uniformemente, de esta manera se provee tanto errores (cuadráticos) medios menores y enmascaramiento, dado que errores mayores pueden se tolerados si las muestras a cuantificar son de valores grandes. La codificación Huffman, basada en 32 tablas de código y codificación run lenght adicional, se utilizan para una eficiente representación de los valores cuantizados.
La muestras frecuenciales son cuantificadas y codificadas dentro de 2 lazos de iteración que tienen lugar en el codificador.
Lazos de Iteración de la codificación en Layer III
El módulo de procesamiento de la señal a codificar se divide en tres niveles (o lazos). Estos son:
Los lazos de iteración cuantifican un vector de entrada en un proceso iterativo de acuerdo a varias demandas.
El lazo interno cuantifica el vector de entrada e incrementa el tamaño del paso del cuantificador hasta que el vector de salida puede ser codificado con el número de bits disponible.
Después de un proceso completo en el lazo interno, el lazo externo chequea la distorsión de cada SCF band y, si la máxima distorsión permisible se excede, amplifica los la SCF band e invoca nuevamente al lazo interno.
Datos de entrada al módulo de procesamiento de la señal en Layer III:
more_bits=3.1 * PE - mean_bits
Datos de salida del módulo de procesamiento de la señal en Layer III:
Pasos preparatorios
Reseteo de todas las variables de iteración.
Donde sfm es Spectral Flatness Measure y quantaf depende de la implementación computacional del codificador.
El valor de sfm viene dado por:
El valor de system_constant es elegido de forma tal, que para todas las señales el primer bucle de iteración del lazo de iteración interno salga con la suma de bits más alta que aquella deseada. De tal forma se asegura que en la primer llamada del lazo de iteración interno se utilicen tantos bits como sean posibles. A los efectos de ahorrar tiempo de computación es deseable que se minimicen el número de iteraciones y esto se consigue adaptando el valor de quantaf al bitrate y estadísticas de la señal.
Control de la reservación de Bits
Se guardan bits en la reserva (reservoir) cuando se usan para la codificación del gránulo menos bits que los necesarios. Si se ahorran bits para una trama, el valor de main_data_end por consiguiente se incrementa.
El número de bits que se hacen disponibles para main_data (denominados max_bits) se calcula del umbral real estimado, (PE) (la Psicoacustic Entropy como cálculo del modelo psicoacústico), el número de bits promedio, (mean_bits) y el contenido real de la reserva de bits. El número de bytes en la reserva está dado por main_data_end.
Las reglas para el control de la reserva de bits son las siguientes: