Compresión de audio MPEG (página 3)

  •  

    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

    Capa II (Layer II)

    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.

    • El primer paso consiste en leer NBAL (2,3, o 4) (Number of Bits of ALlocation) para una subbanda desde el bitstream. El valor NBAL se da en la 2da columna de la tabla B2. Estos bits deberán ser interpretados como un número entero no signado.
    • El segundo paso utiliza este número y el número de la subbanda como índice para apuntar a un valor en la tabla. Este valor representa el número de niveles (nlevels) utilizados para cuantificar las muestras en la subbanda.
    • Como tercer paso:
    • el número de bits utilizados para codificar las muestras cuantificadas,
    • los coeficientes de recuantificación y
    • si los códigos que representan 3 muestras consecutivas se agrupen en un único código,

    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.

    • Si SCFSI[sb] = "00" entonces los 3 SCF son transmitidos para las partes 0, 1 y 2 respectivamente.
    • Si SCFSI[sb] = "01" 2 SCF son transmitidos el primero válido para las partes 0 y 1 y el segundo para la parte 2.
    • Si SCFSI[sb] = "10" 1 SCF es transmitido válido para las 3 partes.
    • Si SCFSI[sb] = "11" 2 SCF son transmitidos el primero válido para la parte 0 y el segundo válidos para las partes 1 y 2.

    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.

    Capa III (Layer III)

    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.

    Decodificación

    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.

    Side information

    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.

    Comienzo de Main_data

    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

    Consideraciones del buffer

    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

    • (64000/48000)*576=768 bits para una frecuencia de muestreo de 48 KHz. Esto significa que hay una desviación máxima (buffer de corto plazo) de
    • 7680 – 4* 768=4608 bits es permitida para 64 Kbits/seg.

    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:

    • 2^9*8 bit = 4096 bits (main_data_begin = 9 bits)

    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.

    Scalefactors (SCF)

    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:

    • Si el block_type == 0,1, o 3 tipo de block largo

    Part2_length= 11*slen1+10*slen2 ( 11= cant de bandas[0,10] ; 10 cant de bandas[11,20] )

    • Si el block_type == 2 (tipo de block corto) y mixed_block_flag == 0

    Part2_length= 18*slen1+18*slen2( 18= cant de bandas[0,5]*3 ; 18 cant de bandas[6,11]*3 )

    • Si el block_type == 2 (tipo de block corto) y mixed_block_flag == 1

    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).

    Codificación HUFFMAN

    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.

    Recuantificador

    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 :

    • Pretab[sfb] es el valor de pre-énfasis dado en la tabla B6.
    • La constante ‘210’ es necesaria para escalar la fórmula apropiadamente (Es una cte. del sistema).
    • Se asume que el banco de filtro de síntesis está implementado de acuerdo a las fórmulas que se detallan más arriba. El rango de la salida del decodificador son valores (muestras) PCM que varían entre –1 y 1.

    Observación: Gránulo en Layer III corresponde a 576 líneas de frecuencia que llevan su propia Side Info.

    Reordenamiento

    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).

    MS matrix

    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.

    Intensity Stereo Mode

    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:

    1. La posición de stereo intenso is_possb se lee desde el SCF del canal derecho.
    2. Si ( is_possb == 7 ) los pasos 3), 4) y 5) no se ejecutan:
    3. Is_ratio = tan( is_possb * p /12 )
    4. Li= Li * Is_ratio / (1 + Is_ratio) para todos los índices i dentro de la actual SCF band sb.
    5. Ri= Ri * 1 / (1 + Is_ratio) para todos los índices i dentro de la actual SCF band sb.

    (Para mayor información sobre los modos Intensity Stereo y MS_stereo ver capítulo 6.)

    Banco de filtros de síntesis

    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:

    • Cada 18 líneas conforman un bloque a procesar.
    • La primera mitad de los valores de salida son sumados a los valores solapados almacenados provenientes del último block. Estos valores constituyen los nuevos valores de salida y son la entrada para el banco de filtro de síntesis.
    • La segunda mitad de los valores de salida se almacenan para solaparse con los datos provenientes del próximo gránulo.
    • A partir de la segunda subbanda del banco de filtros polifásico cada segundo valor de entrada es multiplicado por -1 para corregir la inversión de frecuencia del banco de filtro polifásico.
    • Para gránulos de bloque largos (block_type # 2) la entrada al banco de filtros de síntesis es procesada para la reducción del aliasing antes de aplicársele la IMDCT. En la norma se especifica un pseudo código que realiza esta acción. (Ver figura 5.10).

    Figura 5.10

    Reducción de aliasing

    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)

    • i=8 no se considera porque existen 2 líneas (cada 18) que no tienen solapamiento.

    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:

    Enmarcado (Windowing)

    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.

    6 – Codificación

    Generalidades

    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.

    Filtro Pasa Alto de entrada

    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:

    • Ingreso de 32 muestras de audio
    • Construcción de un vector X de 512 elementos con las últimas 512 muestras de audio ingresadas. Las 32 muestras de audio ingresadas son desplazadas dentro del vector desde la posición 0 a 31, la más reciente en la posición 0, las últimas 32 se desplazan hacia fuera (se descartan).
    • Se enmarca el vector X con el vector C (cuyos coeficientes figuran en la tabla C1) generando el vector z (ver diagrama).
    • Se calculan los 64 valores Yi de acuerdo a la formula dada en el diagrama de flujo.
    • Se calculan las 32 muestras de cada subbanda Si a través de un matrizado. Los coeficientes para la matriz pueden ser calculados a través de la siguiente fórmula:

    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

    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)

    Asignación de Bits o Ruido

    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 de la 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.

    Capa I (Layer I)

    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.

    Asignación de bits.

    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:

    • Determinación de la mínima MNR para todas las subbandas. La precisión de la cuantificación de la subbanda con el mínimo MNR se incrementa con el uso del próximo número de bits más alto
    • La nueva MNR se calcula
    • Bspl (bits por muestra) se actualiza de acuerdo al número de bits adicionales requeridos. Si por primera vez se asigna un número de bits a la subbanda entonces Bscf (bits para SCF) debe incrementarse en 6 bits por lo que los bits disponibles ahora se calcularán:

    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:

    • Cálculo de AX+B
    • Tomar los N bits más significativos
    • Invertir el MSB

    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.

    Formateo de los datos.

    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

    Capa II (Layer II)

    Modelo Psicoacústico

    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".

    Codificación de los SCFSI:

    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.

    Asignación de bits

    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:

    • Determinación de la mínima MNR para todas las subbandas.
    • La precisión de la cuantificación de la subbanda con el mínimo MNR se incrementa con el uso del próximo número de bits más alto que se indica en la tabla B2.
    • La nueva MNR se calcula.
    • Bspl (bits por muestra) se actualiza de acuerdo al número de bits adicionales requeridos. Si un número de bits distinto de cero se asigna por primera vez a una subbanda, bsel debe ser actualizado y bscf es actualizado de acuerdo al número de SCF requeridos en la subbanda, por lo que los bits disponibles ahora se calcularán:

    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:

    • Cálculo de AX+B
    • Tomar los N bits más significativos
    • Invertir el MSB

    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)

    Asignación de bits.

    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)

    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 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).

    Formato

    Las diferencias con la capa I son:

    1. La longitud del slot es de 8 bits (1 byte)
    2. Un nuevo bloque (SCFSI) se introdujo en la trama
    3. La asignación de bits, SCF y muestras han sido sujetas a una codificación más eficiente.

    Capa III (Layer III)

    Generalidades

    La codificación de la capa III introduce muchas características nuevas con respecto a las dos anteriores. El resumen de éstas son:

    • Banco de filtros híbrido conmutable (entre dos resoluciones distintas de frecuencia/tiempo)
    • Control avanzado de pre-eco (actúa sobre la resolución del banco de filtro híbrido).
    • Cuantificación no uniforme.
    • Codificación Huffman de las muestras cuantificadas. (Codificación entrópica)
    • Una técnica de buffereado (denominada bit reservoir) que permite un mejor aprovechamiento del bit rate.
    • Unico de los 3 Layers que soporta codificación con tasa de bits (bit rate) variable.
    • Dentro del modo Joint Stereo soporta MS_stereo (Middle Side Stereo) a además de Intensity tereo, a diferencia de Layer I y II que solo soportan éste último.

    Esquema de funcionamiento

    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.

    Modelo Psicoacústico

    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.

    Conmutación de ventanas

    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

    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

    Introducción

    El módulo de procesamiento de la señal a codificar se divide en tres niveles (o lazos). Estos son:

    1. Lazo de programa de la trama
    2. Lazo de iteración externo
    3. Lazo de iteración interno

    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:

    • Vector con las magnitudes espectrales xr(0...575)
    • xmín(sb): La distorsión permitida para los SCF bands, donde: xmín=ratio(sb).en(sb)/bw(sb)
    • window_switching_flag, la que junto con window_mixed_flag y block_type determinan el número de SCF.
    • mean_bits (Cantidad de bits disponibles para los SCF bands y la codificación Huffman)
    • more_bits : número de bits que se requieren adicionalmente, demandados por el valor de la PE (psicoacustic entropy) para el gránulo.

    more_bits=3.1 * PE - mean_bits

    Datos de salida del módulo de procesamiento de la señal en Layer III:

    • Vector con las magnitudes cuantificadas ix(0...575)
    • scalefac_l[sb] o scalefac_s[sb] dependiendo del window_switching_flag mixed_block_flag y block_type.
    • global_gain (información del tamaño del paso de cuantificación).
      global_gain = qquant + systen_constant.
      System_constant incluye todas las operaciones de escala en el codificador y un offset para obtener la salida correcta con el proceso de decodificación (descripto en el capítulo anterior).
    • Número de bits no utilizados disponibles para su uso mas tarde.
    • Preflag (pre-énfasis ON/OFF)
    • Información lateral (side information) relacionada a la codificación Huffman:
    • big_values (número de pares de valores codificados por Huffman excluyendo count1).
    • count_1table_select (tabla de codificación Huffman para valores que no exceden 1 en valor absoluto en la parte superior del espectro).
    • Table_select[0..2] Tablas de Huffman para las regiones 0,1 y 2.
    • Region0_count, region1_count (utilizado para el cálculo de los límites de aplicación de las tablas)
    • part2_3_length

    Pasos preparatorios

    Reseteo de todas las variables de iteración.

    • Los SCF de las particiones del codificador (coder), Scalefac_l o Scalefac_s son reseteadas en 0 respectivamente.
    • El contador qquant, utilizado para el tamaño del paso de cuantificación se resetea a 0.
    • Preflag se resetea a 0 (cero).
    • Scalefac_scale = 0
    • El valor inicial de quantaf se seteará en: quantaf = system_constant* loge(sfm)

    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:

    • Si un número de bits disponibles en el lazo de iteración interno no es utilizado por los códigos Huffman u otros campos de main_data, este número se adiciona a la reserva de bit.
    • Si la reserva de bits contiene más de 0.8 veces el contenido máximo permitido de reserva, todos los bytes que excedan este número se disponen para main_data (en suma a mean_bits).
    • Si more_bits es mayor que 100 bits entonces el max( more_bits/8 , 0.6*main_data_end ) bytes se toman de la reserva de bits y se asignan a main_data (en suma a mean_bits).
    • Luego que los bucles computacionales reales se completan, el número de bytes que no son utilizados por main_data se agrega a la reserva de bits.
    • Si luego de este paso el número de bytes en la reserva excede el contenido máximo permitido, bits de relleno se escriben en el bitstream y el contenido de la reserva de bits por consiguiente se ajusta.
2 comentarios
  • Ramon Gonzalez Alvarez
    Ramon Gonzalez Alvarez ESTO YA ME LO SABIA TODO.PODIAIS PONERLO MAS DIFICIL
    6 de septiembre de 2011
  • Tozapping
    Tozapping Tenemos que subir 2 entradas más espero que te sean de utilidad Saludos Ramon
    7 de septiembre de 2011