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

  •  

    SCFSI [ch][sb] (Scale Factor Selection Information). (2 bits)

    Estos bits dan la información sobre el número de SCFs transferidos por la subbanda sb en el canal ch y para que partes de la señal en la trama son válidas. La trama se divide en tres partes iguales de 12 muestras por subbanda c/u.

    SCFSI [sb]

     

    00

    se transmiten los 3 SCF, para las partes 0,1,2

    01

    se transmiten 2 SCF, el 1ro para las partes 0y1 el 2do para la parte 2

    10

    se transmite 1 SCF valido para las 3 partes

    11

    se transmiten 2 SCF, el 1ro para la parte 0 el 2do para las partes 1y2

    Scalefactor [ch][sb][p] (6 bits)

    Indica el factor por el cual deben ser multiplicadas las muestras del canal ch y la subbanda sb de la parte p de la trama (p=0,1,2). Los 6 bits constituyen un número entero no signado que sirve de entrada a la tabla B1 (Layer I, II Scalefactors)

    Grouping [ch][sb]

    Es una función que no se transmite en la trama (sino que se evalúa en el decodificador) y determina si 3 muestras consecutivas (un triplet) de la actual subbanda sb en el canal ch en el gránulo gr son codificadas y transmitidas con una única palabra código y no usando 3 palabras códigos diferentes. Grouping() devolverá verdadero (.t.) en la tabla de asignación de bits actualmente en uso (ver tabla B2) si el valor hallado debajo de la subbanda sb (fila) y la asignación[sb] (columna) es 3,5, o 9. De otro modo devolverá falso y por lo tanto las muestras se codificarán en forma separada. Para las subbandas en intensity_stereo el valor devuelto por grouping() es válido para ambos canales.

    Observación: Gránulo en Layer II está constituido por un set de 3 muestras consecutivas de una subbanda, de las 32 subbandas en que se divide el espectro antes de la cuantificación. Corresponden a 96 muestras PCM.

    Samplecode [ch][sb][s]

    Representación codificada de 3 muestras consecutivas en el gránulo gr de la subbanda sb y el canal ch. Para las subbandas en intensity_stereo la representación codificada es válida para ambos canales.

    Sample [ch][sb][s]

    Es la representación codificada de la sth muestra del canal ch y la subbanda sb. Las subbandas en modo intensity_stereo la representación de una muestra es válida para ambos canales.

    Sintaxis genérica de los datos de audio para Layer II

    Datos de Audio - Capa III (Layer III)

    Main_data_begin

    El valor de main_data_begin es utilizado para determinar la ubicación del primer bit de los datos principales (main data) de una trama. El valor de main_data_begin especifica la ubicación como un offset negativo en bytes desde el primer byte de la palabra de sincronismo de audio (sync word). El número de bytes que pertenece a la cabecera e información lateral (side info: ver diagrama de la trama Layer III en hoja anterior) no se tienen en cuenta. Por ejemplo, si main_data_begin == 0 entonces los datos principales comienzan después de la información lateral.

    Private_bits

    Bits para uso privado. Estos bits no serán usados en el futuro por ISO/IEC. El número de private_bits depende del número de canales. El número de bits asignados a private_bits está determinado para igualar el número total de bits utilizado en la información lateral (side information).

    SCFSI [ch][scfsi_band]

    En layer III, la SCF Selection Information trabaja de manera similar que en Layer II. La principal diferencia es el uso de scfsi_band para aplicar scfsi a grupos de SCF en cambio de a SCF únicos. La aplicación de los SCF a gránulos está controlado por scfsi.

    Observación: Gránulo en Layer III representa a 576 líneas de frecuencia que llevan su propia información lateral.

    SCFSI [scfsi_band]

     

    0

    los SCF son transmitidos para cada gránulo

    1

    los SCF transmitidos para el gránulo 0 son válidos para el gránulo 1

    Si se utilizan bloques cortos, por ej.: block_type == 2 para uno de los gránulos, entonces scfsi es siempre cero para esta trama.

    Se transmiten cuatro SCFSI ( uno para cada SCFSI band) como puede observarse en la sintaxis de datos de audio de la hoja anterior.

    SCFSI_Band

    Controla el uso del SCFSI para grupos de SCF (scfsi_bands). (No es un campo que se transmite en la trama). El valor sirve de entrada a la tabla B8.

    banda de SCFSI (scfsi_band)

    Scalefactor band (ver tabla B8)

    0

    0,1,2,3,4,5

    1

    6,7,8,9,10

    2

    11..15

    3

    16..20

    Part2_3_length[gr][ch]

    Este valor contiene el número de main_data bits utilizados para SCF y códigos de datos Huffman. Dado que la longitud de la información lateral (side information) es siempre la misma, este valor puede ser usado para calcular el comienzo de la información principal (SCF y códigos de datos Huffman) (main data information) para el próximo gránulo o la posición de información auxiliar (si se utiliza). Cabe notar que en caso de un canal sólo, la longitud de la información lateral (side information) es de 17 bytes y para 2 canales es de 32 bytes.

    Big_values[gr][ch]

    Los valores espectrales de cada gránulo son codificados con diferentes tablas de codificación Huffman. El rango completo de frecuencias, desde cero a la de Nyquist, se divide en muchas regiones, las cuales son codificadas utilizando diferentes tablas. La división se hace de acuerdo a la cantidad máxima de valores cuantificados. Esto se hace asumiendo que los valores correspondientes a las altas frecuencias tienen menores amplitudes o ni siquiera necesitan ser codificados.

    Comenzando desde las altas frecuencias, se cuentan los pares de valores cuya cuantificación es cero. Este número se lo denomina rzero.

    Luego se cuentan la cantidad de cuartetos de valores cuyo valor absoluto no supera la unidad (o sea sólo incluye al –1,0 y 1). Este número de denomina count1.

    De nuevo se cuentan los pares de valores restantes (cuyo valor absoluto supera la unidad). A este número se lo denomina big_values (valores grandes). El máximo valor absoluto en este rango está restringido a 8191. En la sig. figura se muestra la partición que se realiza:

    Global_gain[gr][ch]

    La información lateral referente al paso del cuantificador se transmite en una variable denominada global_gain. Esta es cuantificada logaritmicamente. En el capítulo referente al proceso de decodificación se da la fórmula donde se utiliza la variable global_gain.

    Scalefac_compres[gr][ch]

    Selecciona el número de bits usado para la transmisión de los SCF de acuerdo a la sig. tabla:

    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

    Si block_type es 0,1 o 3 entonces :

    Slen1 es la longitud de los SCF para las bandas de SCF 0 a 10

    Slen2 es la longitud de los SCF para las bandas de SCF 11 a 20

    Si block_type=2 y mixed_block_flag=0 entonces :

    Slen1 es la longitud de los SCF para las bandas de SCF 0 a 5

    Slen2 es la longitud de los SCF para las bandas de SCF 6 a 11

    Si block_type=2 y mixed_block_flag=1 entonces :

    Slen1 es la longitud de los SCF para las SCF bands de 0 a 7 (SCF band para ventanas largas) y 3 a 5 (SCF band para ventanas cortas).

    Nota: SCF bands 0 a 7 se leen de la tabla "Long window SCF band" y los SCF bands 3 a 11 desde la tabla "Short window SCF band"

    Esta combinación de particiones es contigua y abarcan el espectro completo de frecuencias.

    Slen2 es la longitud de los SCF para las bandas de SCF 6 a 11

    Window_switching_flag[gr][ch]:

    SCF_compress[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

    Indica que el bloque usa una ventana distinta de la normal (type 0 window). Si window_switching_flag = 1 otras variables se setean automáticamente:

    Region0_count = 7 (si block_type=1 o block_type=3 o [block_type=2 y mixed_block_flag])

    Region0_count = 8 (si block_type=2 y no mixed_block_flag)

    Region1_count = 36 (todos los valores remanentes en la región de big_values son contenidos en la región 1)

    Si window_switching_flag = 0 entonces el valor de block_type=0

    Block_type[gr][ch]:

    Indica el tipo de ventana para el gránulo.

    Block_type [gr]

     

    0

    Reservado

    1

    Comienzo de bloque

    2

    3 ventanas cortas

    3

    Fin de bloque

    Block_type y mixed_block_flag dan la información acerca del ensamble de valores en un bloque y sobre la longitud y cantidad de las transformadas.

    Si window_switching_flag = 1 entonces mixed_block_flag indica si las subbandas de bajas frecuencias en el banco de filtro polifásico se codifican usando ventana de tipo normal.

    En caso de bloques largos (block_type #2 o en las subbandas bajas de block_type 2 si mixed_block_flag=1) la IMDCT genera 36 valores de salida cada 18 muestras de entrada. Esta salida se enmarca (dependiendo del block_type) y la primera mitad se solapa con la segunda mitad del bloque anterior. El vector resultante es la entrada a la parte de síntesis del banco de filtro polifásico para una subbanda.

    En caso de bloques cortos (en las subbandas superiores de un bloque tipo 2 (si mixed_block_flag=1) o en todas las subbandas de un bloque tipo 2 (si mixed_block_flag=0)), se computan 3 transformadas produciendo 12 muestras de salida cada una. Los 3 vectores se enmarcan y se solapan. Concatenando 6 ceros en ambos extremos del vector resultante da un vector de longitud 36, el que es procesado como si fuese una transformada larga.

    Mixed_block_flag[gr][ch]:

    Indica que las frecuencias más bajas son procesadas con un tipo de ventana que es diferente que aquella utilizada para altas frecuencias.

    Si Mixed_block_flag = 0 entonces todos los bloques son procesados como se indica en block_type[gr][ch].

    Si Mixed_block_flag = 1 entonces las líneas de frecuencia correspondiente a las 2 subbandas más bajas del banco de filtros polifásicos (18x2=36 líneas) son procesadas con ventanas normales, mientras que las 30 subbandas restantes son procesadas de acuerdo a como lo indique block_type[gr][ch].

    Table_select[gr][ch][region]:

    Se utilizan diferentes tablas de codificación Huffman dependiendo del máximo valor cuantificado y de las estadísticas locales de la señal. Existen un total de 32 tablas diferentes posibles (tabla B7)

    Subblock_gain[gr][ch][window]

    Indica un offset de ganancia (cuantificación: factor 4). Se utiliza solamente en bloques del tipo 2 (ventanas cortas). El valor del sub-block debe ser dividido por: 4(subblock_gain[window]) en el decodificador (ver fórmula para la recuantización y escalado Cap. 5).

    Region0_count[gr][ch]

    Una nueva partición del espectro se utiliza para mejorar la performance del codificador Huffman. Es una subdivisión de la región la cual es descripta por big_values. El propósito de esta subdivisión es conseguir una mejor robustez ante errores y una codificación más eficiente. Se utilizan 3 regiones estas son:

    • Región 0
    • Región 1
    • Región 2

    Cada región se codifica utilizando una tabla de codificación de Huffman dependiendo del máximo valor cuantificado y de estadísticas locales.

    Region0_count y region1_count se utilizan para indicar los límites de las 3 regiones. Los límites de las regiones están alineados con la partición del espectro en scale factors bands (bandas de SCF).

    El campo region0_count contiene uno menos que el número de bandas de SCF en la región 0. En caso de bloques cortos cada SCF band se cuenta 3 veces, una por cada ventana, por lo que si el valor de la región0_count=8 indica que la región 1 comienza en la SCF band número 3.

    Si block_type=2 y mixed_block_flag=0 entonces el número total de SCF bands para el gránulo en este caso es 12*3 = 36. Si block_type=2 y mixed_block_type=1 la cantidad de SCF bands es 8 + 9 * 3 = 35.

    Si block_type # 2 la cantidad de SCF bands es 21.

    Region1_count[gr][ch]

    Su valor representa uno menos que el número de SCF bands en la región 1. Si block_type=2 los SCF que representan diferentes slots de tiempo son contados separadamente.

    Preflag[gr][ch]

    Este es un atajo para obtener una amplificación adicional en altas frecuencias de los valores cuantificados. Si preflag se setea, entonces los valores de la tabla B6 son agregados a los SCF. Esto es equivalente a la multiplicación de los SCF recuantificados con los valores de la tabla. Si block_type=2 (bloques cortos) preflag no se aplica.

    Scalefac_scale[gr][ch]

    Los SCF son cuantificados logaritmicamente con un tamaño de escalón de 2 o Ö 2 dependiendo del valor de scalefac_scale. En la sig. tabla se da el factor de escala utilizado en la fórmula de recuantificación para cada tamaño de escalón.

    Scale_fac[gr]

    Scalefac_multiplier

    0

    0.5

    1

    1

    Count1table_select[gr][ch]

    Esta bandera selecciona uno de las 2 posibles tablas de codificación Huffman para la región de cuartetos que contienen valores que no exceden a |1|

    Count1table_select[gr]

     

    0

    Tabla B.7 – A

    1

    Tabla B.7 – B

    Scalefac_l[gr][ch][sfb], Scalefac_s[gr][ch][sfb][window], is_pos[sfb]:

    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 lo más cercano posible.

    La tabla de Scalefac_compres muestra que los SCF 0 ...10 tienen un rango de 0 a 15 (máx. long.=4 bits) y los SCF 11....21 tienen un rango de 0 a 7 (máx long.=3bits).

    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.

    Huffmancodebits()

    Corresponde a los datos codificados según Huffman.

    La sintaxis para la codificación de los datos según Huffman muestra como los valores cuantificados son codificados. Dentro de la partición de big_values, pares de valores cuantificados con un valor absoluto menor de 15 son codificados directamente usando código Huffman. Los códigos son seleccionados directamente desde tablas numeradas de 0 a 31 (tablas B7). Siempre se codifica un par de valores (x,y). Si la magnitud cuantificada que se codifica es mayor o igual a 15, entonces los valores son codificados con un campo de separación siguiendo al código Huffman. Si uno o ambos de los valores de un par no es cero, uno o dos bits de signos deben ser agregados a la palabra de código.

    Las tablas de Huffman para la partición de big_values se componen de tres parámetros:

    hcod[|x|][|y|] es la entrada a la tabla de codificación para los valores x e y.

    hlen[|x|][|y|] es la entrada a la tabla de longitud para los valores x e y.

    linbits es la longitud de linbitsx o linbitsy cuando estos son codificados.

    La sintaxis para los Huffmancodebits contiene los siguientes campos y parámetros:

    • signv es el signo de v (0 si es positivo, 1 si es negativo)
    • signw es el signo de w (0 si es positivo, 1 si es negativo)
    • signx es el signo de x (0 si es positivo, 1 si es negativo)
    • signy es el signo de y (0 si es positivo, 1 si es negativo)
    • linbitsx es usado para codificar el valor de x si la magnitud de x es mayor o igual a 15.Este campo se codifica solamente si |x| en hcod es igual a 15. Si linbits es 0, por lo que no se codifican bits cuando |x| = 15, entonces el valor de linbits se define como 0.
    • linbitsy igual que linbitsx pero para el valor y.
    • is[l]Es el valor cuantificado para la línea de frecuencia l.

    Los campos linbitsx y linbitsy son solamente usados si un valor es mayor o igual a 15 necesitan ser codificado estos campos son interpretados como enteros no signados y agregados a 15 para obtener el valor codificado. Los campos linbitsx y linbitsy no son usados nunca si la tabla seleccionada es una con valor máximo codificado menor que 15. Observar que el valor 15 puede aún ser codificado con una tabla Huffman para la cual linbits es cero. En este caso los campos linbitsx o linbitsy no son codificados, dado que linbits es cero.

    Dentro de la partición count1, los cuartetos de valores con valor absoluto menor o igual a 1 se codifican(valores –1,0 y 1). Nuevamente las magnitudes de los valores son codificadas usando Huffman desde las tablas A o B en la tabla B7. Nuevamente para cada valor diferente de cero, se le agrega un bit de signo después del símbolo Huffman.

    Las tablas de Huffman para la partición count1 se componen de los siguientes parámetros:

    hcod[|v|][|w|][|x|][|y|] es la entrada a la tabla de codificación para los valores v,w,x,y

    hlen[|v|][|w|][|x|][|y|] es la entrada a la tabla de longitud para los valores v,w,x,y

    La tabla B de códigos Huffman no es realmente una tabla de 4 dimensiones dado que está construida con un código trivial: 0 se codifica con un 1 y el 1 se codifica con 0.

    Los valores cuantificados por encima de la partición count1 son todos ceros, por lo tanto no son codificados.

    Por claridad, el parámetro count1 se usa en la norma para indicar el número de códigos Huffman en la región count1. De cualquier modo, a diferencia de la partición de bigvalues el número de valores de la partición count1 no está explícitamente codificado por un campo en la sintaxis. El final de la partición count1 se conoce solamente cuando todos los bits del gránulo (especificado por part2_3_length), se han agotado, y el valor de count1 se conoce implícitamente después de decodificar la región count1.

    El orden de los datos de Huffman depende del tipo de bloque del gránulo. Los datos codificados de Huffman están dados para sucesivas SCF bands, comenzando por la SCF band 0. Dentro de cada SCF band, los datos de ordenan en sucesivas ventanas temporales, comenzando por la ventana 0 y finalizando en la ventana 2. Dentro de cada ventana, los valores cuantificados son entonces ubicados ordenados de menor a mayor frecuencia.

    Datos Auxiliares

    El número de bits auxiliares (no_of_ancillary_bits) es igual al número de bits de la trama de audio menos el número de bits usados por el header (cabecera), error check y datos de audio.

    • En layer I y II el no_of_ancillary_bits corresponde a la distancia entre el fin de los datos de audio y el comienzo de la próxima cabecera.
    • En Layer III el no_of_ancillary_bits corresponde a la distancia entre el fin de Huffman_code_bits y la ubicación en el bitstream donde apunta main_data_begin de la próxima trama.

    5 - Decodificación

    Generalidades

    La primera acción es la sincronización del decodificador con el bitstream entrante. Apenas después de comenzar, esto puede hacerse buscando la palabra de sincronismo (12 bits = ‘1111 1111 1111’) de la trama. En algunas aplicaciones el ID y el bit de protección son conocidos en el decodificador por lo que los primeros 16 bits de la trama pueden utilizarse para la sincronización, permitiendo una sincronización más segura.

    La posición de 2 palabras de sincronismo consecutivas puede calcularse con la información de los 7 bits siguientes al de protección: el bitstream se divide en slots. La distancia entre el comienzo de 2 palabras de sincronismo consecutivas es igual a N o N+1 slots. El valor de N depende de la capa (Layer).

    Para la capa I la ecuación es:

    N = 12 * (tasa de bits) / (frecuencia de muestreo) (1 slot = 4 bytes)

    Para la capa II y III la ecuación resulta:

    N = 144 * (tasa de bits) / (frecuencia de muestreo) (1 slot = 1 byte)

    Si el cálculo no da un número entero el resultado es truncado y se realiza el padding (rellenado). En este caso el número de slots en una trama variará entre N y N+1. Entonces, si el bit de relleno se setea en 1, la trama tiene relleno; si está en 0 el número de slots será un entero exacto (N). El conocimiento de la posición de 2 palabras de sincronismo consecutivas facilita enormemente la sincronización.

    Si la Tasa de bits (bitrate_index) es igual a ‘0000’ entonces no se especifica la tasa exacta. N puede determinarse como la distancia entre 2 palabras de sincronismo consecutivas y la evaluación del ‘bit de relleno’.

    Los bits de modo del bitstream se leerán y si su valor es ‘01’, también debe leerse los bits de extensión de modo (mode_extension). Estos últimos establecen el ‘límite’ como se muestra en la descripción del campo mode_extension (Cap. 4) en que las subbandas son codificadas en modo joint_stereo.

    Si el bit de protección en la cabecera está en ‘0’, indica que una palabra de chequeo de CRC se insertó en la trama a continuación de la cabecera (header). El método de detección de error usa una palabra de 16 bits cuyo generador polinomial responde a:

    G(x) = X16 + X15 + X2 + 1

    Los bits incluidos en la palabra de chequeo (CRC) se dan en la tabla B5.

    El método se describe en la figura 5.1. El estado inicial del registro es de:

    1111 1111 1111 1111

    Entonces todos los bits incluidos en el CRC se introducen en el circuito de la figura. A medida que ingresan los bits, el contenido del registro se va desplazando. Luego de la última operación de desplazamiento las salidas B15 ...B0 constituyen el CRC que será comparado con el generado en el decodificador. Si las palabras de CRC no son idénticas (la transmitida y la generada) indica que se produjo un error en la transmisión del ‘campo protegido’ de la trama.

    A los efectos de evitar distorsiones audibles, se utilizan técnicas de ocultación como puede ser silenciar esa trama o solicitar su retransmisión.

    Capa I (Layer I)

    Después de la parte de la decodificación que es común a todas las capas, la asignación de bits (bit allocation) tiene que ser leída para todas las subbandas y los SCF en aquellas subbandas que tienen una asignación de bits (bit allocation) distinta de cero. El diagrama de bloques del decodificador se da en al fig. 5.2.

    Recuantificación de las muestras de las subbandas

    En la asignación de bits (bit allocation) se conoce el número de bits nb que debe ser leído para las muestras en cada subbanda. El orden en que se asignan las muestras se detalla en el diagrama de distribución de los datos de audio (Cap. 4) para cada modo. Después que los bits de una muestra fueron extraídos del bitstream, el primer bit debe ser invertido. El número resultante puede ser considerado como un número fraccional con complemento a 2 dónde el MSB representa el valor –1. El valor recuantificado puede ser obtenido aplicando la siguiente fórmula:

    S" = 2 nb * (S"’+ 2-nb+1)

    2nb-1

    Donde :

    S"’ es el número fraccional

    S" es el valor recuantificado

    nb es el número de bits asignado a las muestras en la subbanda

    Las muestras en la subbanda que está en modo estéreo intenso (intensity_stereo) deben ser copiadas a ambos canales. El valor recuantificado debe ser re-escalado. El factor de multiplicación puede encontrarse en la tabla B1 (norma)

    S’ = factor * S"

    Figura 5.2. Diagrama de flujo del decodificador Mpeg-1 para Capas I y II

    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.