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

  •  Cálculo del SCFSI (Scale factor Selection Information)

    Los SCFSI contienen la información que indica cual SCF (agrupados en SCFSI_bands), del primer gránulo pueden ser utilizados para el segundo gránulo. Estos SCF, por lo tanto, no se transmiten por lo que la ganancia de bits puede ser utilizada para los códigos Huffman.

    Para determinar el uso de SCFSI, la siguiente información de cada gránulo debe ser almacenada:

    1. Tipo de bloque (corto o normal)

      n

      en_tot = int{ log2 [ å | xr(i) |2 ] }

      i=1

      donde n es el número total de valores espectrales.

    2. La energía total del gránulo:

      Lbl(sb)+bw(sb)-1

      en_(sb) = int{ log2 [ å | xr(i) |2 ] }

      i=lbl(sb)

      donde lbl(sb) es el número del primer coeficiente perteneciente a la banda de SCF sb y bw(sb) es el número de coeficientes dentro de la SCF bandsb.

    3. La energía total que abarca el SCF Band.
    4. La distorsión permitida en cada SCF Band.

    Xm(sb) = int{ log2 [ xmin(i) ] }

    donde xmin(i) es calculado por el modelo psicoacústico.

    Los SCF del primer gránulo siempre se transmiten. Cuando se codifica el segundo gránulo, la información de los 2 gránulos se comparan. Existen 4 criterios para determinar si SCFSI puede ser utilizado en general. Si uno de los criterios no se satisfacen, entonces se deshabilitan los SCFSI (esto quiere decir que se setean en 0 todos los SCFSI_Bands.)

    Estos criterios son: (índice 0 significa primer gránulo, índice 1:segundo)

    1. Los valores espectrales no son todos ceros.
    2. Ninguno de los gránulos contiene bloques cortos.

      | en_tot0 – en_tot1 | < en_totkrit

    3. La diferencia de energía entre los gránulos no debe superar en_totkrit (en_totkrit=10 valor sugerido).
    4. La suma de todas las diferencias de energía (en valor absoluto) entre los gránulos 0 y 1 no deben superar en_difkrit (en_difkrit=100)

    å | en(sb)0 - en(sb)1 | < en_difkrit

    all scalefactors bands

    Si los SCFSI no son deshabilitados por ninguno de los condicionamientos precedentes, existen dos criterios para cada SCFSI_band que deben cumplirse simultáneamente para habilitar los SCFSI (o sea para setear en "1" el SCFSI en esa SCFSI_band). Estas condiciones son:

    a- å | en(sb)0 - en(sb)1 | < en(scfsi_band)krit

    all cr.bands in scfsi_band

    b- å | xm(sb)0 - xm(sb)1 | < xm(scfsi_band)krit

    all cr.bands in scfsi_band

    donde : xm(sb) es la distorsión permitida de cada SCF band

    en(sb) es la energía de cada SCF band

    xm(sb)=int [log2 (xmin(i)] xmin(i) es calculado por modelo psicoacústico

    Las constantes (con el índice krit) debe ser elegido de manera tal que SCFSI solo se habilita de caso de similares energía/distorsión.

    donde los valores sugeridos son:

    en_totkrit = 10

    en_difkrit = 100

    en(scfsi_band)krit= 10

    xm(scfsi_band)krit= 10

    [B] Lazo de iteración externo (lazo de control de distorsión)

    Diagrama de bloques del Lazo de iteración externo en la codificación Layer III.

    El lazo de iteración externo controla el ruido de cuantificación que es producido por la cuantificación de las líneas de frecuencia en el lazo de iteración interno. El coloreado del ruido se hace multiplicando las líneas de frecuencia dentro de una SCF band con el SCF correspondiente a esa banda antes de hacer la cuantificación. Las siguientes líneas de pseudo código muestran una posible manera de hacer esa multiplicación:

    Donde scalefac puede ser tanto scalefac_s o scalefac_l según corresponda.

    En el sistema real la multiplicación se hace de manera incremental con el incremento de los scalefactors aplicado a cada lazo de control de distorsión.

    El lazo de control de distorsión siempre arranca con scalefac_scale=0. Si después de algunas iteraciones la máxima longitud de los scalefactors (SCF) se hubiese excedido (ver tabla de scalefac_compress en Capítulo 4 ) entonces scalefac_scale se incrementa en 1, de esta manera se incrementa el rango dinámico posible de los scalefactors. En esta situación los SCFs actuales y líneas de frecuencias deben ser corregidos concordantemente.

    Guardado de los SCF.

    Los SCF de todos los SCF bands (ya sean scalefac_l o scalefac_s según corresponda) y el tamaño del escalón de cuantificación (qquant) son guardados. Si la computación del lazo de iteración externa se cancela sin haberse alcanzado a un resultado apropiado, este valor, junto con el espectro cuantificado da una aproximación y puede ser transmitido.

    Invocación del Lazo de iteración Interno

    En cada bucle en el lazo de iteración externo (lazo de control de distorsión), se invoca al lazo de iteración interno (lazo de control de tasa).

    Los parámetros de entrada son:

    • los valores en el dominio de la frecuencia (salida del banco de filtro híbrido)
    • los SCF aplicados a los valores dentro de los SCF bands
    • el número de bits que están disponibles a lazo de control de tasa

    La salida es el número de bits actualmente utilizados por la cuantificación de las líneas de frecuencia.

    Cálculo de la distorsión en los SCF bands

    Para cada SCF Band la distorsión real se calcula de acuerdo a:

    i=lbl(sb)+bw(sb)-1

    xfsf(sb) = å [| xr(i) | – ix(i)4/3 * 4Ö 2qquant+quantaf ] 2

    Lbl(sb) bandwidth(sb)

    Donde :

    • Lsb(sb) es el número del coeficiente que representa la frecuencia más baja en la banda del SCF.
    • bw(sb) es el número de coeficientes dentro de esta banda.

    Pre-énfasis

    La opción de pre-énfasis (activada cuando en la bandera de pre-énfasis del header está seteada en 1) provee la posibilidad de amplificar la parte alta del espectro de acuerdo a como lo establece la tabla B6.

    If preflag=1

    ifqstep = 2[0.5*(1+scalefac_scale)]

    xmin(j) = xmin(j) * ifqstep[2*prefact(j)]

    for i=lower limit of scalefact band j mientras i<=upper limit of scalefactor band j; i++

    xr(i)=xr(i)*ifqstepprefact(j)

    end for

    end if

    La condición para activar pre-énfasis es de acuerdo a la implementación. Por ejemplo, ésta se podría activar si en los 4 SCF bands superiores la distorsión excede el umbral luego de la primer llamada del lazo de iteración interno.

    Si el segundo gránulo se está codificando y SCFSI está activo en al menos un SCFSI_band, entonces el pre-énfasis del segundo gránulo debe ser seteado como en el primer gránulo.

    Amplificación de los SCF bands en aquellas bandas que se viola el umbral de enmascaramiento.

    Todos los valores espectrales de los SCF bands que tienen una distorsión que excede la permitida son amplificados por un factor denominado ifqstep. El valor de ifqstep es transmitido en el campo scalefac_scale.

    If [(xmín < xfsf) o scalefactor band j < 0]

    xmin(j) = xmin(j) * ifqstep2

    ifq(j) = ifq(j) +1

    for i=lower limit of scalefact band mientras i<=upper limit of scalefactor band; i++

    xr(i) = xr(i) * ifqstep

    end for

    end if

    En caso que el segundo gránulo se esté codificando, los siguiente pasos debe ser tenidos en cuenta:

    1. Ifqstep debe ser igual al del gránulo 1.

      If scfsi de acuerdo al scalefact band j = 1

      ifq(j) = ifq(j)primer gránulo

      for i=lower limit of scalefact band mientras i<=upper limit of scalefactor band; i++

      xr(i) = xr(i) * ifqstep ^ scalefac(j)

      end for

      end if

      Donde Scalefac puede ser tanto scalefac_l() o scalefac_s() según corresponda

    2. En la primer iteración, los SCF de las SCF bands, en cuales SCFSI está activo deben ser adoptados (los SCF) del primer gránulo. Los valores espectrales correspondientes deben ser amplificados.
    3. Si no se trata de la primer iteración entonces la amplificación debe ser aplicada a los SCF bands en los cuales SCFSI está habilitado.

    Condiciones para la finalización de los lazos de procesamiento

    Normalmente los bucles de procesamiento finalizan si no hay más SCF bands con distorsión mayor que la permitida. No obstante, esta situación no es siempre posible. Existen otras situaciones que producen la finalización del lazo de iteración externo:

    1. Todos los SCF han sido amplificados.
    2. La amplificación de al menos una banda excede el límite superior, el cual es determinado por el formato de transmisión de los SCF.

    El límite superior es:

    15 para las bandas de SCF 0 a 10

    7 para las bandas de SCF 11 a 20

    En caso de block_type=2 y mixed_block_flag=0

    15 para las bandas de SCF 0 a 18

    En caso de block_type=2 y mixed_block_flag=1

    15 para las bandas de SCF 0 a 17

    El límite superior es 7 para los otros SCF

    Una vez que el lazo de procesamiento se detiene, y restaurando los valores guardados de scalefac_l(sb) o scalefac_s(sb) (según corresponda) se dispone de una salida útil. Para la implementación en tiempo real, debe existir una tercer condición y esta es que el lazo de iteración externa debe concluir también cuando la ranura de tiempo asignada finalice.

    [C] Lazo de iteración Interno (Lazo de control de tasa)

    Diagrama de bloques del lazo de iteración Interno en la codificación de Layer III

    El lazo de iteración interno realiza la cuantificación de las líneas del dominio de la frecuencia y prepara el formateo. La selección de tablas, subdivisión del rango de big_values en regiones y la selección del escalón de cuantificación se realizan en el lazo interno.

    Cuantificación

    La cuantificación del vector completo de valores espectrales se realiza de acuerdo a la siguiente fórmula:

    Prueba del máximo valor cuantificado.

    El máximo valor cuantificado permitido está limitado. Este límite se establece para restringir el tamaño de la tabla, si se utiliza búsqueda en tabla para recuantificar las líneas frecuenciales cuantificadas. Este límite está dado por los posibles valores del identificador de longitud "linbits" (LengthIdentifier Number of BITS), de valores señalados con un código ESC (ESC code). Por lo tanto, antes de realizar cualquier conteo de bits, el tamaño del escalón de cuantificación (qquant) es incrementado:

    qquant = qquant + 1

    Hasta que el máximo de los valores cuantificados esté dentro del rango de la tabla de codificación Huffman más grande.

    Cálculo de la cantidad de pares de valores = 0 en la parte superior de espectro (rzero)

    Rzero es el nombre que reciben la cantidad de pares de valores correspondientes a la parte superior del espectro cuyo valor es cero.

    Cálculo de la cantidad de cuartetos de valores = 1 en la parte superior de espectro (count1)

    Count1 es el nombre que reciben la cantidad de cuartetos de valores correspondientes a la parte superior del espectro cuyo valor absoluto sea menor o igual 1 [-1,0,1]. Dichos valores se encuentran a continuación (descendiendo en las líneas frecuenciales) de los valores etiquetados como rzero.

    Cálculo de los bits necesarios para cuantificar los valores <= 1 (v. absoluto).

    Una palabra de código Huffman se utiliza para codificar uno de los cuartetos count1. Existen dos diccionarios de codificación Huffman con correspondiente longitud de tablas de codificación (Tablas A y B de Huffman). El número de bits utilizados para codificar los count1 cuartetos está dado por:

    bitsum_count1 = min ( bitsum_table0, bitsum_table1)

    donde count1table_0 se utiliza para apuntar a la tabla A

    k=firstcount1+count1-1

    bitsum_table0 = å count1table_0 * [ ix(4k) + 2*ix(4k+1) + 4*ix(4k+2) + 8*ix(4k+3) ]

    k=firstcount1

    y donde count1table_1 se utiliza para apuntar a la tabla B:

    k=firstcount1+count1-1

    bitsum_table1 = å count1table_1 * [ ix(4k) + 2*ix(4k+1) + 4*ix(4k+2) + 8*ix(4k+3) ]

    k=firstcount1

    Tanto count1table_0 como count1table_1 deben incluir el número de bits necesarios para codificar los bits de signo.

    La información de cual tabla se utilizará en la decodificación está transmitida en el campo count1_table_select, el cual será "0" para la tabla A y "1" para la tabla B, respectivamente.

    Invocación a la subrutina 'SUBDIVIDE'

    El número de pares de valores cuantificados no tenidos en cuenta en count1 o rzero es denominado big_values (grandes valores). La función (o subrutina) Subdivide separa las bandas de SCF correspondientes a estos valores en tres grupos con las sig. características:

    • El último grupo, incompleto generalmente, se cuenta como uno completo.
    • El número de bandas de SCF en la primer y segunda región es contenido en (region0_count+1) y (region1_count+1) respectivamente.
    • El número de bandas de SCF en la tercer región puede calcularse usando big_values.
    • La estrategia para la partición en regiones es inherente a la implementación.

    Una estrategia sencilla por ejemplo, asignar 1/3 de las bandas de SCF a la primera y 1/4 a la última.

    En caso de división de bloques (block split), la subdivisión se realiza de manera análoga pero sólo en dos sub-regiones. region1_count se setea a un valor por defecto en este caso. Este valor es 8 en caso de split_point=0 y 9 en caso de split_point=1. Ambos valores apuntan a la misma frecuencia absoluta.

    Cálculo del libro de codificación para cada subregión

    Existen 32 tablas de codificación Huffman diferentes para la codificación de los pares de valores cuantificados. Estas difieren entre sí en el máximo valor que puede ser codificado y en las estadísticas de la señal para las cuales están optimizadas. Solamente valores < 16 están en la tabla. Para valores >= 16 se proveen 2 tablas donde el valor más grande 15 se representa con un carácter ESC. En este caso el carácter 15 se codifica en una palabra adicional usando código PCM linear con una longitud de palabra denominada linbits.

    Una manera sencilla de escoger la tabla a utilizar es usar el máximo de los valores cuantificados en una subregión. Las tablas que tienen la misma longitud se encuentran optimizadas para distintas estadísticas de las señales, por lo que una ganancia de codificación adicional se puede obtener probando con todas estas tablas.

    Conteo de los bits necesarios para codificar los valores en las subregiones

    donde : np(j): número de pares en una sub-región

    fe(j): número del primer valor cuantificado en una sub-región

    bitz: tabla con longitud de codificación de Huffman (Huffman code length)

    s(...):Función escalón: x>=0 entonces s(x)=1

    x<0 entonces s(x)=0

    Obs: las tablas de codificación de Huffman deben incluir el número de bits necesarios para codificar los bits de signo.

    Datos Auxiliares

    El standard ISO/IEC 11172 de audio provee la inclusión en la trama para su transmisión de datos auxiliares de longitud variable. Estos datos reducen el número de bits disponibles para el audio, lo que puede generar una degradación de la calidad de audio.

    Adicionalmente, la existencia de una secuencia de 12 "1"s (1111 1111 1111 1111) en los datos auxiliares puede producir una alteración en la sincronización. Esto se ve especialmente agravado cuando se utiliza formato libre.

    Formateo del Bitstream.

    Los códigos Huffman están en secuencia desde las bajas a las altas frecuencias. En los lazos de iteración se calculan las siguientes variables y son utilizadas en la codificación Huffman:

    Is(i), i =0...575 Valores cuantificados en el dominio de la frecuencia

    table_select[región]Tabla de codificación Huffman para las regiones 0,1 y 2

    region_adress1 Define el borde entre las regiones 0 y 1

    region_adress2 Define el borde entre las regiones 1 y 2

    max_value[región] Máximo valor cuantificado en las regiones 0,1 y 2

    Los datos son escritos en el bitstream de acuerdo a la sintaxis de codificación Huffman detallada en el capítulo 4.

    Posible pseudo código para la asignación de códigos Huffman en la parte de Big_values

    Codificación Joint Stereo.

    Existen métodos adicionales de codificación que permiten una ganancia adicional de bits, y que redundan en una mayor cantidad de bits disponibles al momento de la asignación de bits a las muestras (Layer I o II ), o una menor, por lo tanto mejor, inyección de ruido. (Layer III).

    Estos métodos se conocen bajo el nombre genérico de Joint_stero, dónde:

    Joint stereo = Intensity Stereo para Layer I y II

    Joint stereo = Intensity Stereo y/o MS_stereo para Layer III.

    Ambos métodos explotan las redundancias de las señales estereofónicas.

    La determinación si se aplica o no el modo joint stereo se establece en campo mode (modo) [2 bits] del header de la trama pudiendo tomar éste los siguientes valores:

     

    modo

    modo especificado

    00

    estéreo

    01

    joint_st(intensity_ st and/or ms_stereo

    10

    canal dual

    11

    canal simple

     

    Para:

    Layer I: todos los modos excepto joint_stereo el valor de limite(bound) es 32

    Layer II: todos los modos excepto joint_stereo el valor de límite es sblimit.

    Codificación en estéreo intenso (intensity stereo) (Layer I y II)

    Un método de codificación adicional a joint stereo que se utiliza en Layer I y II es intensity stereo. Intensity stereo puede ser utilizado para incrementar la calidad de audio y/o reducir el bitrate de señales estereofónicas. La ganancia en la tasa de bits es de aproximadamente de 10 a 30 Kbps. Su implementación requiere de una complejidad adicional en el decodificador y el incremento en la complejidad de codificador es pequeño. Las demoras en el decodificador y decodificador no se ven afectadas.

    Resultados psicoacústicos revelan que en altas frecuencias (por encima de los 2 KHz) la ubicación de la imagen estereofónica dentro de una bandacrítica está determinada por el contorno temporal y no por la estructura "fina" de la señal.

    La idea básica para la codificación en estéreo intenso es que para algunas subbandas, en lugar de transmitir en forma separada las muestras del canal derecho e izquierdo, solamente se transmite la suma, pero sí los SCF de ambos canales, lo que preserva la imagen estereofónica.

    Primero, se hace una estimación de la tasa de bits requerida para ambos canales (derecho e izquierdo). Si la tasa requerida excede la disponible, entonces la tasa de bits puede ser reducida por medio de setear un número de subbandas en modo estéreo intenso. Dependiendo de la tasa necesaria las subbandas:

    16 a 31

    12 a 31

    8 a 31 ó

    4 a 31

    pueden setearse en modo estéreo intenso. Para la cuantificación de dichas subbandas combinadas, la mayor cantidad de bits posibles para la asignación se usan para los canales derecho e izquierdo.

    Las señales de subbandas en joint_stereo de los canales derecho e izquierdo se suman. Estas nuevas señales de subbandas se escalan de manera normal, pero los SCF originalmente determinados para los canales derecho e izquierdo son transmitidos de acuerdo a la sintaxis del bitstream. La cuantificación de muestras de subbandas comunes, la codificación de muestras comunes y la codificación de bits de asignación (bit allocation) comunes se realizan de la misma manera que cuando se codifican en forma independiente.

    Codificación en MS_Stereo y estéreo intenso en Layer III

    En Layer III se puede usar la combinación del modo ms_stereo (sum/difference) y el modo intensity stereo.

    • MS_stereo switching.

    El modo MS_stereo se activa si la siguiente condición en el modo joint stereo se cumple:

    511 511

    å [rli2 - rri2] < 0.8 * å [rli2 + rri2]

    i=0 i=0

    Los valores de rli y rri corresponden a las energías de las líneas espectrales de las FFT de los canales izquierdos y derecho calculadas con el modelo psicoacústico.

    • Procesamiento MS_Stereo

    En el modo MS_stereo los valores normalizados de los canales medio/lateral (middle/side) son transmitidos en vez de los valores Ri/Li de los canales derecho/izquierdo, donde:

    Mi = Ri + Li Si = Ri - Li

    Ö 2 Ö 2

    Limitación del ancho de banda del canal Si:

    • Todos los valores por encima del SCF band más alto se establecen en 0.

    Dispersión (Sparsing) del canal Si.

    • En cada SCF band sb todos los pares de valores pequeños (Si,Si+1) se establecen en 0.

    If (Si2 + Si+12) < ssb * (Li2 + Li+12 + Ri2 + Ri+12)

    Si = 0

    Si+1 = 0

    End if

    Los siguientes coeficientes de umbral del canal diferencia se aplican a las SCF bands para tipos de bloques # 2 (bloques largos: transformada MDCT larga):

    • Procesamiento de estéreo intenso.

    Cálculo de la posición de estéreo intenso (intensity stereo position = is_possb)

    Para cada SCF band sb codificado en estéreo intenso se ejecutan los siguientes pasos:

    • Is_possb = NINT[12/p * arctan( L_Energysb / R_Energysb )1/2]
    • Li = Li + Ri para todos los índices i dentro de la SCF band actual.
    • Ri = 0 para todos los índices i dentro de la SCF band actual.
    • La posición de estéreo intenso (is_possb) se transmite en vez de los SCF del canal derecho (siempre 3 bits, posición estéreo: de 0 a 6; 7=posición estéreo ilegal).

    Donde L_Energysb / R_Energysb denota las energías de las señales de los canales izquierdo/derecho dentro de la SCF band actual y Li/Ri son los valores transformados.

    Los SCF bands del canal derecho(diferencia) conteniendo sólo ceros después de la codificación, los cuales no corresponden a la parte codificada en intensity stereo, deberían ser transmitida con un SCF=7 para prevenir su decodificación en estéreo intenso.

    7 - Modelos Psicoacústicos de la ISO/IEC 11172

    Modelo Psicoacústico I

    El cálculo del modelo psicoacústicos tiene que ser adaptado a la capa correspondiente. Este ejemplo es válido para capas 1 y 2. El modelo también puede ser adoptado para la capa III.

    No hay una diferencia principal en aplicación del modelo psicoacústico 1 a la capa 1 y 2.

    Capa 1: se calcula una nueva asignación de bits para cada bloque de 12 muestras por subbanda o 384 muestras PCM.

    Capa 2: se calcula una nueva asignación de bits para los tres bloques totalizando 36 muestras por subbandas correspondiente al 3 * 384 (1152)muestras PCM.

    Se calcula la asignación de bits de las 32 subbandas en base de la relación señal máscara de todas las subbandas. Por lo tanto, es necesario determinar para cada subbanda, el máximo nivel de señal y el mínimo umbral de enmascaramiento.

    El mínimo de umbral de enmascaramiento se deriva de una transformada rápida de Fourier aplicada a una entrada PCM, seguida por el cálculo del modelo psicoacústico.

    La transformada rápida de Fourier en paralelo con el filtro subbanda compensa la pérdida de selectividad espectral obtenida en bajas frecuencias por el banco de filtros de subbanda. Esta técnica provee tanto una suficiente resolución en el tiempo para la codificación de la señal de audio (filtro polifásico con una ventana optimizada para mínimos pre-ecos) y una suficiente resolución espectral para el cálculo de sus umbrales enmascaramiento. Las frecuencias y niveles de distorsión por aliasing pueden ser calculados. Esto es necesario para el cálculo de la tasa mínima en esas subbandas que necesitan algunos bits para cancelar las componentes de aliasing en el decodificador. La complejidad adicional para calcular la mejor resolución en frecuencia es necesaria solamente en el codificador, y no introduce en un retardo adicional o complejidad en el decodificador.

    El cálculo de la relación señal máscara está basado en los siguientes pasos:

    1.  
    2. Cálculo de la transformada rápida de Fourier para la conversión del dominio tiempo al dominio frecuencia.
    3. Determinación del nivel de presión sonora para cada subbanda.
    4. Determinación del umbral de silencio (umbral absoluto).
    5. Encontrar las componentes del tipo tonal y no tonal de la señal de audio.
    6. Diezmado de los enmascaradores, para obtener solamente aquellos relevantes.
    7. Cálculo de los umbrales de enmascaramiento individuales.
    8. Determinación del umbral de enmascaramiento global.
    9. Determinación del umbral de enmascaramiento mínimo para cada subbanda.
    10. Cálculo de la relación señal máscara para cada subbanda.

    1. Transformada rápida de Fourier.

    El umbral de enmascaramiento se obtiene estimando la densidad espectral de potencia que se calcula a través de la transformada rápida de Fourier de orden 512 para la capa I y de orden 1024 para la capa II. La transformada rápida de Fourier se calcula directamente desde la entrada PCM enmarcada con una ventana del tipo Hann.

    Para que haya coincidencia en el tiempo entre la asignación de bits y las muestras de subbanda correspondientes, la señal PCM entrante que ingresa a la transformada rápida de Fourier, ésta debe retardarse.

    • El retardo del filtro subbanda es de 256 muestras, lo que corresponde 5,3 milisegundos de audio a 48 KHz. de tasa de muestreo. Se requiere un desplazamiento de ventana de 256 muestras para compensar la demora en el banco de filtro de análisis de subbanda.
    • La ventana Hann debe coincidir con las muestras por subbanda de la trama. Para la capa 1 esto se adiciona a un desplazamiento de ventana de 64 muestras. Para Layer II se requiere un desplazamiento de ventana de – 64 muestras.

    Datos técnicos de la Transformada Rápida de Fourier (FFT):

     

     

    Layer I

    Layer II

    Longitud de la transformada

    512 muestras

    1024 muestras

    Tamaño de la ventana (fs=48KHz)

    10,67 mseg

    21,3 mseg

    Tamaño de la ventana (fs=44.1Khz)

    11,6 mseg

    23,2 mseg

    Tamaño de la ventana (fs=32kHz)

    16 mseg

    32 mseg

    Resolución de frecuencia

    Frec_muestreo/512

    Frec_muestreo/1024

    Ventana Hann:

    h(i)= (8/3)1/2 * 0.5 * [ 1 – cos(2p i /N) ] i = 0 ... N-1

    Densidad espectral de potencia:

    Donde s(l) es la señal de entrada.

    Se ha hecho una normalización al nivel de referencia de 96 dB SPL (Sound Pressure Level), de forma tal que el máximo valor posible corresponda a 96 dB.

    2. Determinación del Nivel de Presión Sonora (Sound Pressure Level) (volumen)

    El nivel de presión sonora (SPL) Lsb en la subbanda n se calcula como:

    Lsb(n) = MAX [ X(k) , 20*log(scfmáx(n)* 32768) – 10 ] dB X(k) en la subbanda n

    Donde :

    • X(k) es el SPL de la línea espectral con un índice k de la FFT con el máximo de amplitud en el rango de frecuencia correspondiente a la subbanda n.
    • Scf(máx) es en Layer I el SCF y en Layer II el máximo de los 3 SCF de la subbanda n de la trama.
    • El término -10 dB corrige la diferencia entre nivel de pico y RMS. (Vp/Ö 2=Vrms 20.log2(1/Ö 2) = -10dB)
    • Lsb se calcula para cada subbanda n.

    3. Consideración del Umbral en silencio

    El umbral en silencio LTq(k), también denominado umbral absoluto (UA) se detalla en las tablas D1 a,b,c para layer I y D1 d,e,f para layer II. Estas tablas dependen de la frecuencia de muestreo de la señal PCM de entrada. Los valores están disponibles para cada muestra en el dominio de la frecuencia donde se calcula el umbral de enmascaramiento.

    Un offset dependiente de la tasa total de bits se utiliza para el umbral absoluto. Este offset es de –12 dB para tasa de bits >= 96 Kbps y 0 dB para tasas de bits < 96 Kbps por canal.

    4. Localización de las componentes tonales y NO tonales

    La tonalidad de una componente de enmascaramiento tiene influencia en el Umbral de Enmascaramiento (UE). Por este motivo, resulta importante discriminar entre las componentes del tipo Tonal y NO Tonal. Para el cálculo del umbral de enmascaramiento global es necesario discriminar ambas componentes del espectro de la FFT.

    La operación comienza con la determinación del máximo local, luego se extrae la componente tonal (tipo sinusoide) y se calcula la intensidad de las componentes no tonales dentro de un ancho de banda comprendido en una banda crítica. Los límites de las bandas críticas se dan en las tablas D2 a,b y c para layer I y D2 d,e y f para layer II)

    El ancho de banda de las bandas críticas varía con la frecuencia, con un ancho de banda de solamente 0.1 KHz para bajas frecuencias hasta un ancho de banda de aproximadamente 4 KHz en altas frecuencias. Estos límites se determinaron en experimentos psicoacústicos donde se comprobó que el oídohumano tiene mejor resolución en bajas frecuencias que en la región de frecuencias altas.

    Para determinar si el máximo local puede ser una componente del tipo tonal se examina un rango de frecuencia (df) alrededor del máximo. Este rango de frecuencia esta dado por:

    Para listar las líneas espectrales X(k) que son componentes tonales y NO tonales se deben realizar las siguientes 3 operaciones:

    1. La línea espectral X(K) se etiqueta como un máximo local si:

      X(K) > X(K-1) y X(K) >= X(K+1)

    2. Etiquetado del máximo local.
    3. Listado de los componentes tonales y cálculo de SPL

    Un máximo local se coloca en la lista de componentes tonales si:

    X(K) - X(K + j) >= 7dB

    Donde j es elegido de acuerdo a:

    Layer I:

    J= -2,+2 para 2<k<63

    J= -3,-2,+2,+3 para 63<=k<127

    J= -6,...,-2,+2,...,+6 para 127<=k<=250

    Layer II

    J= -2,+2 para 2<k<63

    J= -3,-2,+2,+3 para 63<=k<127

    J= -6,...,-2,+2,...,+6 para 127<=k<255

    J= -12,...,-2,+2,...,+12 para 255<=k<500

    Si resulta que X(K) es un componente tonal, entonces se listan los siguientes parámetros:

    • El índice k de la línea espectral
    • SPL Xtm(K) = 10* log10[ 10X(k-1)/10 + 10X(k)/10 + 10X(k+1)/10 ], en dB
    • La bandera tonal (tonal flag)

    Luego, todas las líneas espectrales dentro de las frecuencias analizadas se setean a -µ

    3. Listado de las componentes no tonales y cálculo de la energía

    Las componentes no tonales (asimilables a ruido) se calculan a partir de las líneas espectrales remanentes. Para calcular las componentes no tonales a partir de estas líneas espectrales X(K), se determinan las bandas críticas z(k) usando las tablas D2 a,b y c para Layer I y D2 d,e y f para Layer II.

    En Layer I:

    • 23 bandas críticas son usadas para las tasas de muestreo de 32 KHz
    • 24 bandas críticas son usadas para las tasas de muestreo de 44.1 KHz
    • 25 bandas críticas son usadas para las tasas de muestreo de 48 KHz

    En Layer II:

    • 24 bandas críticas son usadas para las tasas de muestreo de 32 KHz
    • 26 bandas críticas son usadas para las tasas de muestreo de 44.1 KHz y 48 KHz

    Dentro de cada banda crítica, la energía de las líneas espectrales remanentes luego que las componentes tonales se establecieran en cero, son sumadas para formar el SPL de la nueva componente NO tonal Xnm(k) correspondiente a esa banda crítica.

    Los siguientes parámetros son listados:

    • El índice K de la línea espectral más cerca de la media geométrica de la banda crítica
    • SPL Xnm(k) en dB
    • La bandera No tonal (NON Tonal Flag)

    5. Diezmado de las componentes tonales y no tonales.

    El diezmado es un procedimiento que se utiliza para reducir el número de enmascaradores (maskers) que son utilizados para el cálculo del umbral de enmascaramiento global.

    a.- Los componentes tonales Xtm(k) o NO tonales Xnm(k) son considerados para el cálculo del umbral de enmascaramiento solamente si:

    Xtm(k) >= LTq(k)Xnm(k) >= LTq(k)

    En la expresión, LTq(k) es el umbral absoluto (o umbral en silencio) a la frecuencia del índice k. Estos valores se dan en la tabla D1 a,b, y c para Layer I y D1 d,e, y f para layer II.

    b.- El diezmado de dos o más componentes tonales dentro de una distancia de 0.5 bark: dejar la componente con la energía más alta y remover las componentes menores de la lista de componentes tonales. Para esta operación, una ventana que se desplaza en la banda crítica se utiliza con ancho de 0.5 bark.

    En adelante, el índice j se utilizará para indicar las componentes tonales y NO tonales relevantes de la lista combinada diezmada.

    6. Cálculo de los umbrales de enmascaramiento individuales.

    De las N/2 muestras originales en el dominio de la frecuencia, indexadas en k, solamente un subconjunto de muestras, indexadas en i son consideradas para el cálculo del umbral de enmascaramiento global. Las muestras están en las tablas D1 a,b y c para layer I y D1 d,e y f para layer II.

    Layer I:

    • Para las líneas de frecuencia correspondientes a la región de frecuencia cubierta por las primeras 6 subbandas, no se utiliza submuestreo.
    • Para las líneas de frecuencia correspondientes a la región de frecuencia cubierta por las siguientes 3 subbandas se considera cada segunda línea espectral.
    • Finalmente, en el caso de 44.1 KHz y 48 KHz de tasa de muestreo, en la región de frecuencias correspondientes a las subbandas remanentes, son consideradas cada 4 líneas espectrales, hasta 20 KHz.
    • En el caso de 32 KHz de frecuencia de muestreo, en la región de frecuencias correspondientes a las subbandas restantes se consideran cada 4 líneas espectrales, hasta 15 KHz.

    Layer II:

    • Para las líneas de frecuencia correspondientes a la región de frecuencia la cual es cubierta por las primeras 3 subbandas, no se utiliza submuestreo.
    • Para las líneas de frecuencia correspondientes a la región de frecuencia la cual es cubierta por las siguientes 3 subbandas se considera cada segunda línea espectral.
    • Para las líneas de frecuencia correspondientes a la región de frecuencia la cual es cubierta por las siguientes 6 subbandas se considera cada 4 líneas espectrales.
    • Finalmente, en el caso de 44.1 KHz y 48 KHz de tasa de muestreo, en la región de frecuencias correspondientes a las subbandas remanentes, cada 8 líneas espectrales son consideradas hasta 20 KHz.
    • En el caso de 32 KHz de frecuencia de muestreo, en la región de frecuencias correspondientes a las subbandas restantes cada 8 líneas espectrales se consideran hasta 15 KHz.

    El número de muestras, n, en el dominio de las frecuencias submuestreadas es diferente dependiendo de las tasas de muestreo y de las capas.

     

    Tasa de muestreo (KHz)

    Layer I (n=)

    Layer II (n=)

    32

    108

    132

    44.1

    106

    130

    48

    102

    126

    Cada componente tonal y NO tonal se le asigna el valor del índice i que más cerca se corresponda a la frecuencia de la línea espectral original X(k). Este índice i se da en las tablas D1 a,b y c para layer I y D1 d,e y f para Layer II.

    Los umbrales de enmascaramiento individuales para tanto las componentes tonales y NO tonales se dan en la siguiente expresión:

    LTtm[z(j),z(i)] = Xtm[z(j)] + avtm[z(j)] + vf [z(j),z(i)] dB

    LTnm[z(j),z(i)] = Xnm[z(j)] + avnm[z(j)] + vf [z(j),z(i)] dB

    En las fórmulas, LTtm y LTnm son los umbrales de enmascaramiento individuales en las bandas críticas (z) (en Bark) de las componentes de enmascaramiento, en la banda crítica del enmascarador (masker),zm (en Bark). Los valores en dB pueden ser tanto positivos como negativos.

    El término Xtm[z(j)] es el SPL de la componente de enmascaramiento con el número índice j en la banda crítica correspondiente z(j).

    El término av se denomina el índice de enmascaramiento y vf es la función de enmascaramiento de la componente de enmascaramiento Xtm[z(j)]. El índice de enmascaramiento av es diferente para los enmascaradores (maskers) tonales y NO tonales (avtm y avnm)

    Para los maskers tonales está dado por:

    avtm = -1,525 – 0,275 * z(j) – 4,5 dB

    Para los maskers NO tonales está dado por:

    avnm = -1,525 – 0,175 * z(j) – 0,5 dB

    La función de enmascaramiento vf de un enmascarador (masker) se caracteriza por diferentes pendientes inferiores y superiores, las cuales dependen de la distancia (en Bark) dz = z(i)-z(j) al masker. En la expresión, i es el índice de la línea espectral a la cual se calcula la función de enmascarado. (y jes la del enmascarador [masker])

    Las bandas críticas z(j) y z(i) se encuentran en las tablas D1 a,b y c para Layer I y D1 d,e y f para Layer II. La función de enmascarado, que es la misma para los maskers tonales y NO tonales está dada por:

    vf = 17* (dz+1) – ( 0,4 * X[z(j)] + 6 ) dB para -3 <=dz<-1 Bark

    vf = ( 0,4 * X[z(j)] + 6 ) * dz dB para -1 <=dz< 0 Bark

    vf = - 17 * dz dB para 0 <=dz< 1 Bark

    vf = -(dz-1) * ( 17 - 0,15 * X[z(j)] ) - 17 dB para 1 <=dz< 8 Bark

    En estas expresiones X[z(j)] es el SPL de la j-ésima componente de enmascarado (en dB). Por razones de complejidad de implementación, el enmascaramiento no se considera más allá, si dz < -3 bark o dz >= 8 bark (LTtm y LTnm se setean en -µ dB)

    7. Cálculos del Umbral de enmascaramiento global (LTg)

    El umbral de enmascaramiento global LTg (i) en la i-ésima muestra de frecuencia se deriva a partir de las pendientes superiores e inferiores de los umbrales de enmascaramiento individuales de cada uno de los enmascaradores tonales y no tonales "j" y a partir del umbral en silencio LTq(i). Este umbral se da en las tablas D1.a, D1.b, D1.c para el Layer I y de las tablas D1.d, D1.e y D1.f para Layer II. El umbral de enmascaramiento global se obtiene sumando las potencias correspondientes la los umbrales de enmascaramiento individuales más el umbral de enmascaramiento en silencio.

    El número total de enmascaradores tonales está dado por m y el número total de enmascaradores no tonales por n. Par una dada i, el rango de j puede ser reducido para abarcar esas componentes de enmascaramiento que se hallan entre –8 y +3 Bark desde i. Fuera de este rango, LTtm y LTnm se consideran -µ dB.

    8. Determinación del umbral de enmascaramiento mínimo.

    El mínimo nivel de enmascaramiento LTmín(n) en la subbanda n se determina a partir de la siguiente expresión:

    LTmín(n) = MIN { LTg(i) } [dB]

    f(i) en la subbanda n

    Donde f(i) es la frecuencia de la i-ésima muestra frecuencial. Las f(i) están tabuladas en las tablas D1.a, D1.b, D1.c para el Layer I y de las tablas D1.d,D1.e y D1.f para Layer II.

    Un nivel mínimo de enmascaramiento ( LTmín(n) ) se computa para cada subbanda.

    9. Cálculo de la relación Señal-Máscara (SMR)

    La relación señal máscara se computa para cada subbanda (n) de la siguiente manera:

    SMRsb(n) = Lsb(n) – LTmín(n) en dB.

    Modelo Psicoacústico II

    General

    Este modelo es un modelo independiente y puede ser ajustado a cualquiera de las capas de la Norma ISO/IEC 11172. La descripción provee la suficiente información para su utilización en las capas I y II y para su uso en la capa III, las adaptaciones necesarias son descriptas al final del presente capítulo.

    El proceso de cálculo de la generación del umbral tiene 3 entradas. Estas son:

    • La longitud de desplazamiento (iblen) para el proceso de cálculo del umbral (donde 384<iblen<640). Este iblen debe mantenerse constante sobre cualquier aplicación del proceso de cálculo del umbral. Si, como sucede en layer III, resulta necesario calcular los umbrales para 2 longitudes de desplazamiento (iblen) diferentes, entonces dos procesos serán necesarios, cada uno corriendo con una longitud de desplazamiento fija. En el caso donde iblen esté fuera del rango (de 384 a 640) entonces será necesario calcular los umbrales psicoacústicos con una longitud de ventana diferente tanto como su iblen. Hay dos formas de hacer esto:
    • Usar una longitud de transformada diferente y recalcular los coeficientes de inicio para el modelo o,
    • Usar la misma longitud de transformadas pero una ventana tipo Hann más corta, para adaptar los datos al problema en cuestión.

    La elección de uno u otro método depende de la implementación.

    • Las muestras iblen más nuevas de la señal, con las muestras retrasadas (tanto en el banco de filtro o en el cálculo psicoacústico) de forma tal que la ventana del cálculo psicoacústico esté centrada en la ventana temporal de la aplicación.
    • La frecuencia de muestreo. Existe un conjunto de tablas provistas para las frecuencias de muestreo estándares. La frecuencia de muestreo, a igual que el iblen, deben necesariamente permanecer constantes a lo largo de un proceso de cálculo de umbral.

    La salida para el modelo psicoacústico 2 es un conjunto de Relaciones Señal Máscara (SMRn), las que se adaptan a las capas como se describe abajo.

    Antes de correr el modelo, inicialmente, la matriz utilizada para contener los datos de ventana de la FFT precedente y las matrices que contienen r (módulo) y f (fase) deben resetearse para proveer un punto de inicio conocido.

    En layer II, las relaciones de enmascarado psicoacústico deben calcularse 2 veces para cada trama en el codificador. La relación más estricta de cada par de relaciones es utilizada para la asignación de bits a las muestras (bit allocation). (recordar que en layer II se puede transmitir la asignación [allocation] para un conjunto de 12 o 36 muestras de acuerdo, justamente, a lo arriba expuesto)

    Comentarios sobre notaciones

    w indica que el cálculo se indexa por frecuencia en la línea espectral de la FFT. (Un índice de w=1 indica DC (direct current) y un índice de w=513 se refiere a la línea espectral de la frecuencia de Nyquist.

    b indica que el cálculo esta ordenado (indexado) en el dominio de la partición de cálculo del umbral. En los casos donde el cálculo incluye una convolución o suma en el dominio de la partición de cálculo del umbral, entonces se utiliza bb como variable de suma. La numeración de la partición comienza en 1.

    n indica que el cálculo está ordenado (indexado) en el dominio de asignación (allocation) del coder bit (o codebook). Un índice de 1 corresponde a la banda más baja el banco de filtros de subbanda.

1 comentario