Filtro de Síntesis
de Subbanda
Si no existen bits asignados a una subbanda las muestras
en esa subbanda toman el valor 0. Cada
vez que las muestras de las subbandas de todas las 32 subbandas
de un canal se calcularon se aplican al banco de filtros
de síntesis y se calculan las 32 muestras de audio (PCM).
El diagrama de
flujo de las muestras se observa en la figura 5.3 donde se
detalla la operación de reconstrucción.
Los coeficientes Nik se obtienen
de:
Nik =
cos[(16+i)(2k+1)p /64] donde 0
<= i <= 63 0 <= k <=31
Los coeficientes Di para la operación de
enventanado se pueden obtener de la tabla B3. Los
coeficientes se han calculado para la optimización
numérica. Una trama contiene 12*32=384 muestras de
subbanda, las que se transforman, después del filtrado en
384 muestras de audio.
Figura 5.3. Diagrama de bloques del banco
de filtro de síntesis
La Capa II es más eficiente pero también
más compleja que la capa I. El diagrama de flujo
de la figura 5.2 válido para la capa I lo es
también para la II.
Decodificación
de la Asignación de bits (Bit allocation
decoding)
Para diferentes combinaciones de tasa de bits y
frecuencias de muestreo existen
diferentes tablas de asignación.
Observación: las tasas de bits dadas en
las tablas de cabecera son por canal.
Si el modo no es canal único, la tasa de bits
debe ser dividida por 2 para obtener la tasa de bits por canal.
La decodificación de la asignación de bits (bit
allocation) se efectúa en tres pasos de
aproximación.
- 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.
Se obtiene una resolución superior en frecuencia
a través del uso de un banco de filtros híbrido.
Cada banda se separa en 18 líneas de frecuencia con la
aplicación de una MDCT. La longitud de la MDCT es de 36.
Se utiliza la conmutación de una ventana adaptativa para
el control de
Pre-ecos. (Descripto en el capítulo 6). La frecuencia a
partir de la cual bloques más cortos (mejor
resolución temporal) son usados, puede ser
seleccionadas.
Partes de la señal, por debajo de una determinada
frecuencia dependiendo de la bandera "mixed_block_flag", es
codificada con una mejor solución frecuencia y parte de la
señal por encima de esta frecuencia es codificada con una
mejor resolución temporal.
Los componentes de frecuencia son cuantificados usando
un cuantificador no uniforme y codificados usando un codificador
Huffman. El codificador Huffman usa una de las 18 diferentes
tablas. Un buffer es usado para mejorar la eficiencia de
codificación del codificador Huffman y para
ayudar en el caso de condiciones de Pre-eco (ver
características del buffer en Cap. 6. El tamaño del
buffer de entrada es el tamaño de una trama a la tasa de
160 Kbits/s por canal para Layer III. La técnica de buffer
de corto plazo usada es denominada Bit Reservoir porque
éste usa un bitrate variable a corto plazo con un
desplazamiento máximo integral a partir de la tasa de bits
media.
Cada trama contiene los datos de 2
gránulos. Los datos de audio en una trama están
ubicados de la siguiente manera:
El main_data_begin_pointer especifica un offset negativo
desde la posición del primer byte de la
cabecera.
Figura 5.4. Diagrama de bloques del
decodificador Layer III.
La primera acción
es de sincronización en el decodificador con el bitstream
entrante. Esto se realiza como las otras capas. La información acerca de la frecuencia de
muestreo es usada para seleccionar la tabla
SCALEFACTOR_BAND.
La información lateral (side information) debe
ser extraída del bitstream y almacenada para su uso
durante la decodificación de la trama asociada. La
información de selección
de tabla es usada para elegir un decodificador Huffman y el
número de linbits de acuerdo a la tabla
B7.
Los datos principales (main_data) (factores de
escala,
códigos Huffman y datos auxiliares) no son
necesariamente ubicados en forma adyacente a la
información lateral. El comienzo de la parte principal de
datos es direccionado usando la información contenida en
el puntero main_data_begin de la trama actual. La
asignación de los datos principales (main data) es hecha
de manera que todos los datos principales estén residentes
en el buffer de entrada cuando la cabecera de la próxima
trama está llegando al buffer de entrada. El decodificador
tiene que saltar la cabecera y la información lateral
cuando está decodificando los datos principales. Este
conoce sus posiciones desde el bitrate_index y el padding
bit.
La longitud de la cabecera es siempre de 4 bytes, la
longitud de la información lateral es de 17 bytes en el
modo de canal simple y de 32 bytes en los otros modos. Los datos
principales pueden extenderse a más de un bloque de
cabecera e información lateral.
En la figura 5.5 se observan dos trozos de bitstream del
Layer III. En el superior las características de demanda son
normales. En el inferior se observa un pico de demanda en Main
info 3 y una pequeña demanda en Main Info
2.
Figura 5.5
La siguiente regla puede ser usada para calcular el
máximo número de bits usado por un
gránulo:
La longitud del buffer en de 7680 bits. Este valor es
usado como el máximo buffer para cada tasa. A la tasa
más alta en Layer III (320 Kbits/s en señal
estéreo) y una frecuencia de muestreo de 48 KHz. La
longitud media de la trama es:
(320.000/48.000)*1152=7680 bits
Por lo tanto las tramas deben tener una longitud
constante a esta tasa y frecuencia de muestreo.
A 64 Kbits/s (128 Kbits/s en estéreo) la longitud
media del gránulo es
- (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.
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 | Slen2(long de los SCF |
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) | 6-11 |
Las fórmulas son válidas si gr. == 0 o si
gr. == 1 y scfsi[ch][scfsi_band] == 0 (por ejemplo SCFSI no se
usa).
Toda la información necesaria, incluyendo la
tabla que realiza el árbol de codificación HUFFMAN
puede generarse desde las tablas B7.
Dato en la trama
Scalefac_compres[gr.] | Slen1 | Slen2 |
0 | 0 | 0 |
1 | 0 | 1 |
2 | 0 | 2 |
3 | 0 | 3 |
4 | 3 | 0 |
5 | 1 | 1 |
6 | 1 | 2 |
7 | 1 | 3 |
8 | 2 | 1 |
9 | 2 | 2 |
10 | 2 | 3 |
11 | 3 | 1 |
12 | 3 | 2 |
13 | 3 | 3 |
14 | 4 | 2 |
15 | 4 | 3 |
Los datos que corresponden a big_values se decodifica,
utilizando las tablas con el número contenido en
Table_select[gr.][ch][region]. Las líneas espectrales en
la región 0, región 1 y región 2 son
decodificadas de a pares hasta completar el número de
pares de líneas espectrales contenido en
big_values.
Los restantes bits de código HUFFMAN son
decodificados utilizando la tabla de acuerdo a
count1table_select[gr.][ch]. La decodificación se realiza
hasta que todos los códigos HUFFMAN han sido decodificados
o hasta que los valores cuantificados que representan 576
líneas han sido decodificados, lo que llegue primero. Si
existen más bits de códigos HUFFMAN que los
necesarios para decodificar 576 líneas espectrales estos
son descartados. La variable count1 se deriva
implícitamente cómo el número de valores
(cuartetos) decodificados utilizando
count1table_select.
El cuantificador no uniforme utiliza una ley exponencial.
Para cada valor, "is", a la salida del decodificador Huffman se
calcula el valor |is|4/3. Esto puede ser hecho a
través del calculo explícito o bien puede estar
tabulado en una tabla.
Formula para la
recuantificación y escalado
completo.
Una fórmula describe el proceso
completo desde la salida del decodificador Huffman hasta la
entrada de las muestras al banco de filtros polifásicos.
Todos los factores de escala necesarios están incluidos en
esta fórmula. Los datos de salida son reconstruidos desde
las muestras recuantificadas.
Los valores de la ganancia global y de sub-bloque
afectan a todos los valores dentro de una ventana de tiempo (en el
caso de que block_type == 2).
Los factores de escala (SCF) y preflag ajustan antes la
ganancia dentro de cada banda de factor de escala (scale factor
band).
La siguiente es la fórmula de
recuantificación para ventanas cortas
(block_type=2). El valor decodificado (de la salida del
decodificador Huffman) para la línea i se llama
isi y la entrada al banco de filtros de
síntesis para la línea i se denomina
xri:
KS = 21/4 * (global_gain[gr] – 210 – 8
* subblock_gain[window][gr.] )
xri = sign(isi) * | isi
| (4/3 * KS) * 2- ( Scalefac_multiplier *
Scalefac_s[gr.][sfb][window] )
para bloques largos la fórmula
es:
KL = 21/4 * (global_gain[gr.] – 210
)
xri = sign(isi) * | isi
| (4/3 * KL) * 2- ( Scalefac_multiplier *
Scalefac_l[gr.][sfb][ch] + pretab[sfb])
donde :
- 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.
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 |
Habilitado | Habilitado | El límite superior de los SCF bands |
En modo MS estéreo, los valores normalizados de
los canales middle/side (M/S) son transmitidos en vez de los
canales izquierdo/derecho. Así Li
/Ri son reconstruidas usando:
Li=Mi + Si Ri = Mi – Si
2 2
Los valores de Mi son transmitidos por el
canal izquierdo y los Si por el derecho.
Si ocurre una conmutación de ventana, entonces
los canales M y S deben conmutar sincronizadamente.
Este modo, encontrado en la cabecera (header) en el
campo mode_extension permite conmutar desde ‘stereo
normal’ a ‘intensity stereo’. En Layer III ,
intensity stereo no se efectúa usando un par de SCF como
en Layer I y II, sino a través de especificar la magnitud
( a través de los SCF del canal izquierdo como en
MS_stereo [normal]) y la posición stereo
is_possb[sfb]. Is_possb[sfb] se transmite
en vez de los SCF del canal derecho. La posición stereo se
utiliza para discriminar el canal derecho del izquierdo de
acuerdo a las fórmulas abajo detalladas. El límite
inferior de los SCF bands decodificados en stereo intenso se
obtienen desde la ‘zero_part’ del canal derecho. Por
sobre este límite la decodificación de stereo
intenso es aplicando usando los SCF del canal derecho como
posiciones de stereo intenso. Una posición de stereo
intenso de 7 en un SCF band indica que este SCF band no esta
decodificado como stereo intenso.
Para cada SCF band [sb] codificada en stereo intenso los
siguientes pasos se efectúan:
- La posición de stereo intenso
is_possb se lee desde el SCF del canal
derecho. - Si ( is_possb == 7 ) los pasos 3), 4) y 5)
no se ejecutan: - Is_ratio = tan( is_possb * p /12 )
- Li= Li * Is_ratio / (1 +
Is_ratio) para todos los índices i dentro de la
actual SCF band sb. - 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.)
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
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:
Dependiendo del tipo de block, son utilizados diferentes
tipos de enmarcado (enventanados):
Block_type = 0 (enmarcado normal)
zi = xi sen [p /36 * (i + 1/2)] para i = 0 a 35
Block_type = 1 (start block)
xi sen [p /36 * (i
+ 1/2)] para i = 0 a 17
xi para i = 18 a 23
zi = xi sen [p /12 * (i – 18 +1/2)] para i = 24 a
29
0 para i = 30 a 35
Block_type = 3 (stop block)
0 para i = 0 a 5
xi sen [p /12 * (i
– 6 +1/2)] para i = 6 a 11
zi = xi para i = 12 a
17
xi sen [p /36 * (i
+1/2)] para i = 18 a 35
Block_type = 2 (short block)
Cada uno de los 3 bloques cortos es enmarcado
separadamente.
yi(j) = xi(j) sen [p /12 * (i +1/2)] para i = 0 a 11 j = 0 a
2
Los bloques cortos enmarcados deben ser solapados y
concatenados.
Solapamiento y agregado
con el bloque previo.
La primera mitad de los 36 valores esta solapada con la
segunda mitad del bloque previo. La segunda mitad del bloque
actual se almacena para ser utilizada en el próximo
bloque:
resulti = zi + si para
i = 0 a 17
si = zi + 18 para i = 0 a
17
Compensación por
la inversión de frecuencia del banco de filtros
polifásicos
La salida de la suma solapada consiste 18 muestras para
cada de las 32 subbandas. Si las muestras temporales son
etiquetadas de 0 a 17, siendo 0 la primera de las muestras, y las
subbandas se etiquetan 0 a 31, con 0 la subbanda mas baja,
entonces toda muestra temporal impar de toda subbanda impar es
multiplicada por -1 antes de ser procesada por el banco de
filtros de síntesis polifásico.
El banco de filtro realiza un mapeo de tiempo a
frecuencia. En la Norma ISO 11172 se
utilizan 2 tipos de bancos de
filtros:
Un banco del tipo polifásico para las capas I y
II y un banco del tipo híbrido-polifásico (con
MDCT) para la capa III.
Ambos proveen un mapeo específico del dominio tiempo a
frecuencia. Los bancos hacen un muestreo crítico (hay
tantas muestras en el dominio frecuencia como en el dominio
tiempo) y proveen la primera separación de frecuencia en
el codificador y los filtros de reconstrucción en
decodificador. Las muestras de salida de los bancos de filtros
son cuantificadas.
En las capas I y II, un banco de filtros con 32
subbandas es utilizado. En cada subbanda, 12 o 36 muestras son
agrupadas para el procesamiento. En la capa III, el banco de
filtros tiene una resolución dependiente de la
señal donde puede haber 6×32 muestras frecuenciales
(bloque corto) o 18×32 muestras frecuenciales (bloque largo). En
el caso de 6×32 muestras frecuenciales, 3 sets de cada frecuencia
son cuantificados separadamente.
El algoritmo de
codificación provee una respuesta en frecuencia que
arranca desde DC. De cualquier modo, en aplicaciones donde
éste no es un requerimiento se recomienda la
utilización de un filtro pasa alto que debe incluirse en
la entrada del codificador. La frecuencia de corte del filtro
debe estar entre 2 y 10 Hz. La utilización de dicho filtro
evita un innecesario requerimiento de tasa de bits alta para la
subbanda más baja e incrementa la calidad de audio
total.
Filtro de Análisis de subbanda
El filtro de análisis de subbanda se utiliza para
partir el ancho de banda de la señal con frecuencia de
muestreo Fs en 32 equiespaciadas subbandas con una frecuencia de
muestreo de FS/32. En este proceso se realizan las siguientes
operaciones:
- 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)
Al asignador ingresan tanto las muestras provenientes
del banco de filtros y la SMR proveniente del modelo
Psicoacústico, y ajusta la asignación de bits
(Capas I y II) o la asignación de Ruido (Capa III) de
manera de cumplir simultáneamente tanto con el
requerimiento de la tasa de bits como también con el
requerimiento de enmascaramiento. A bajas tasas estos métodos
tratan de dedicar bits de manera que resulte
psicoacústicamente tolerable cuando no se puede satisfacer
la demanda psicoacústica a la tasa de bits
requerida.
Método de asignación de bits o ruido:
Existen dos métodos de control de la tasa de bits. En las
capas I y II este método es
un proceso de asignación de bits (una determinada cantidad
de bits se asigna a cada muestra o grupos de
muestras) en cada subbanda.
El método para la capa III es un bucle de
asignación de ruido, donde los cuantificadores son
variados de un modo organizado, y la variable a controlar es el
ruido inyectado. En cada caso el resultado es un conjunto de
parámetros de cuantificación y las muestras de
salida cuantificadas que ingresan al formateador de
trama.
El formateador del bitstream varía de capa en
capa. En las capas I y II se utilizan código PCM fijo para
cada muestra de subbanda, con la excepción que en Layer II
las muestras cuantificadas pueden ser agrupadas. En Layer III se
utilizan códigos Huffman para representar las muestras de
frecuencia cuantificadas. Los códigos Huffman son palabras
de longitud variable que permiten una más eficiente
representación de las muestras cuantificadas en el
bitstream, a costo de una
mayor complejidad.
El formateador del bitstream toma las salidas del banco
de filtros cuantificadas junto con la asignación de bits
(Capas I y II) o la asignación de ruido (capa III) y otra
información adyacente (side info) requerida, y codifica y
formatea esa información de una manera eficiente. En el
caso de la Capa III, la codificación Huffman se inserta
también en este punto.
El cálculo de
los parámetros del modelo psicoacústico puede
obtenerse utilizando cualquiera de los modelos detallados (a modo
de ejemplo) en la norma ISO 11172. La extensión (shift
length) de la FFT es de 384 muestras. Cada modelo provee la SMR
para cada subbanda
El banco de filtro de subbandas es como el detallado
anteriormente.
El cálculo de los factores de escala
(Scalefactors: SCF) se efectúa cada 12 muestras de cada
subbanda. El máximo valor absoluto de estas 12 muestras se
determina. Por tratarse de muestras normalizadas estas
varían entre –1 y 1. El mínimo valor de la
tabla B1 (de la norma) que resulta mayor que este
máximo es usado como SCF.
El índice de la tabla B1 está
representado por 6 bits, el MSB primero. El SCF se transmite
sólo si el número de bits asignado a la subbanda es
distinto de cero.
Antes de ajustar a una tasa de bits fija, el
número de bits disponibles para codificar las muestras y
los SCF deben ser determinados. Este número se determina
de la siguiente expresión:
Adb = cb – (bhdr + bcrc + bbal +
banc) donde
donde:
Adb: bits disponibles para la codificación
de las muestras
Cb : número total de bits
disponibles
Bhdr: cantidad de bits del Header (cabecera) (32
bits)
Bcrc : palabra de control CRC (código de
redundancia cíclica) (16 bits)
Bbal : bits utilizados para la
asignación
Banc : bits utilizados para el envío de
datos auxiliares (no forman parte del audio) en la
trama.
El número de bits resultantes es usado para la
codificación de las muestras de la subbandas y los SCF. El
principio utilizado en el procedimiento de
asignación es la minimización de la NMR
(Relación Ruido Mascara) en la trama con la
restricción que el número de bits utilizado no
exceda el disponible para la trama. La cantidad de bits posibles
para asignar a una muestra puede encontrarse en la tabla de
Asignación de bits para Layer I (Capítulo 4),
siendo el rango de 0 a 15 bits (excluyendo la asignación
de 1 bit).
El procedimiento de asignación es iterativo,
donde en cada paso de iteración se incrementa el
número de niveles de las muestras de la subbanda que mayor
beneficio produzca (de acuerdo al modelo
psicoacústico).
Primero se calcula MNR (relación
Máscara-Ruido) para cada subbanda restando a SNR la
SMR
NMR=SNR – SMR donde la SNR puede hallarse en la
tabla C2 y SMR es la salida del modelo
psicoacústico.
En principio, ningún bit se asigna para las
muestras y SCFs. El número de bits por muestras (Bspl) y
el número de bits por SCF (Bscf) es seteados en cero. El
procedimiento iterativo comienza y cada bucle de iteración
contiene los siguientes pasos:
- 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.
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 |
48 | 8 |
44.1 | 8,7074 |
32 | 12 |
Una trama puede contener información de uno o dos
canales. La longitud de un slot en la Capa I es de 32 bits (4
bytes). El número de slots en una trama puede obtenerse de
la siguiente manera:
Número de slots/trama = (bitrate/Fs)*
12
Si el resultado no es un número entero
éste se trunca y se requiere de "padding" (rellenado).
Esto significa que el número de slots puede variar entre N
y N+1.
Formato de la Trama en Layer
I
Diagrama de bloques del codificador
MPEG-1
válido para las capas I y II
El modelo psicoacústico puede calcularse con
cualquiera de los dos modelos descriptos en la norma. Si el
modelo 1 se utiliza para calcular los parámetros
psicoacústicos, la longitud de ventana de la FFT es de
1152 muestras. Si se utiliza el modelo 2, el cálculo se
realiza dos veces con una longitud de ventana (shift length) de
576 muestras y el mayor de cada par de SMR se utiliza. Ambos
modelos proveen la SMR para cada subbanda.
El banco de filtro de subbanda corresponde al descripto
anteriormente.
El cálculo de los SCF para cada subbanda se
realiza cada 12 muestras. Se determina el máximo valor
absoluto de estas 12 muestras y el mínimo valor de la
tabla B1 que sea mayor que este máximo se usa como
factor de escala.
Codificación de
los Factores de escala (SCF).
Una trama corresponde a 36 muestras por subbandas y por
lo tanto contiene tres SCF por subbanda.
Se calculan las diferencias entre los SCF de cada grupo
de 12 muestras:
Dscf1 = scf1 –
scf2
Dscf2 = scf2 –
scf3
La clase de cada
diferencia se determina como sigue:
clase | Dscf |
1 | Dscf<=-3 |
2 | -3<dscf<0 |
3 | Dscf=0 |
4 | 0<dscf<3 |
5 | Dscf>=3 |
El par de clases de diferencias indican el punto de
entrada a la tabla C4 (Layer II Scalefactors Transmission
Patterns). La columna con nombre "Scalefactor used in the
encoder" da los tres SCF que son actualmente usados. "1" , "2" y
3 significa que el primero, segundo y tercero dentro de una
trama, respectivamente. "4" significa el máximo de los
tres SCF. Si después de este ajuste de SCF dos o tres son
iguales indica que no todos los SCF necesitan ser transmitidos
para cierta subbanda dentro de la trama. Solamente los SCF
indicados en la columna de "Transmission Patterns" serán
transmitidos. La información que detalla el número
y la posición de los SCF en cada subbanda se denomina "SCF
Selection Information".
Se codifican utilizando con una palabra de 2 bits que
también se encuentra en la tabla C4. Solamente los
SCFSI para las subbandas que tienen una asignación de bits
distinta de 0 se transmiten.
Antes de ajustarse a una tasa fija de bits, el
número de bits disponible (adb) que están
disponible para la codificación de las muestras y de los
SCF debe ser determinado. Este número puede obtenerse de
la sig. manera:
Adb=cb- (bhdr + bcrc + bbal +
banc)
Donde :
Adb: bits disponibles para la codificación
de las muestras
Cb : número total de bits
disponibles
Bhdr: cantidad de bits del Header(cabecera) (32
bits)
Bcrc : palabra de control CRC (código de
redundancia cíclica) (16 bits)
Bbal : bits utilizados para la
asignación
Banc : bits utilizados para el envío de
datos auxiliares (no forman parte del audio) en la
trama.
El número resultante puede ser utilizado para
codificar las muestras de las subbandas y los SCF. El principio
usado en el procedimiento de asignación es la
minimización de la relación ruido a máscara
(NMR) total sobre la trama con las restricciones que el
número de bits utilizados no exceda el número de
bits disponible para la esa trama. La tabla B2 de la norma
indica para cada subbanda el número de posibles escalones
que se pueden utilizar para cuantificar las muestras. El
número de bits requeridos para representar esas muestras
cuantificadas se detalla en la tabla B4
La asignación es un procedimiento iterativo
donde, en cada paso de iteración el número de
niveles de la subbanda que produzca el mayor beneficio
psicoacústico se incrementa.
Primero se calcula la relación NMR para cada
subbanda haciendo:
NMR = SNR – SMR (en dB)
SNR puede encontrarse en la tabla C5, mientras
que SMR es la salida del modelo psicoacústico.
Al inicio de la iteración, no se asignan bits
para las muestras y SCF. El número de bits por muestras
(Bspl) y el número de bits por SCF (Bscf) es seteados en
cero. El procedimiento iterativo comienza y cada bucle de
iteración contiene los siguientes pasos:
- 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)
A los efectos de una codificación más
eficiente, solamente se permiten un número limitado de
cuantificaciones las cuales pueden ser diferentes para cada
subbanda. Solamente el índice con la longitud de palabra
‘nbal’ en la tabla B2 se transmite, MSB
primero (Most Significant Bit)
Pueden transmitirse dentro de la trama y su longitud no
está acotada, pero éstos reducen la cantidad de
bits disponibles para audio, lo que puede resultar en una
degradación de la calidad de audio. La presencia de una
secuencia de bits en los datos auxiliares, igual a la palabra de
sincronismo, puede dificultar la sincronización, pero este
problema puede ser más frecuente cuando se utiliza el
formato libre (Free Format).
Las diferencias con la capa I son:
- La longitud del slot es de 8 bits (1
byte) - Un nuevo bloque (SCFSI) se introdujo en la
trama - La asignación de bits, SCF y muestras han
sido sujetas a una codificación más
eficiente.
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.
Las muestras de audio de la entrada se convierten en
muestras de subbanda a través del banco de filtros
híbrido que realiza el mapeo de tiempo a frecuencia. La
salida de este banco de filtro se aplica a la entrada de MDCT
donde a la salida se obtiene una resolución más
fina en frecuencia.
De acuerdo a las características
psicoacústicas de la señal (la existencia de
pre-ecos, o no) se obtendrá a la salida del (MDCT
Transformada discreta del coseno modificada) una mejor
resolución frecuencial (pero pobre resolución
temporal) o sea bloques largos (normal); o una mejor
resolución temporal pero más pobre
resolución frecuencial (bloques cortos) que permiten
enmascarar eficientemente la existencia de pre-ecos.
Una situación de pre-eco se da cuando a un
período de poca variación de la señal (baja
requerimiento de bits para codificar) le sigue una
variación abrupta de la misma (un mayor demanda
instantánea de bits).
Esto puede ser observado en el siguiente
gráfico:
El ancho de banda de audio se divide en 21 bandas para
los bloques largos o en 12 bandas si se utilizan bloques
cortos.
A diferencia de Layer I o II los Scalefactors afectan a
un conjunto de líneas espectrales y son gobernados por el
modelo psicoacústico (se ajustan más precisamente a
las bandas críticas) y existen SCF para bloques cortos y
largos.
Los SCF son utilizados para "colorear" el ruido
de cuantificación. Si el ruido de cuantificación se
colorea con la forma correcta, éste es enmascarado
completamente. A diferencia de Layer I y II, los SCF de Layer III
no se refieren al máximo local de la señal
cuantificada. En Layer III, SCF son utilizados en el
decodificador para obtener los factores de división
(divisores) para grupos de valores (agrupados en SCF bands). En
caso de Layer III, estos grupos de valores (SCF bands) se
extienden sobre varias líneas espectrales. Estos grupos
denominados bandas de factores de escala (SCF bands) son
seleccionados de manera de asemejarse a las bandas
críticas del oído
humano en la forma más cercana posible.
Si intensity_stereo está habilitado
(mode_bit_extension) los SCF de la "zero_part", de la
diferencia (canal derecho), son utilizados como intensity_stereo
positions (is_pos). Is_pos[sfb] es la posición de
estéreo intenso para la SCF band sfb.
La subdivisión del espectro en SCF bands
permanece fija para cada longitud de bloque y frecuencia de
muestreo y almacenados en tablas en el codificador y
decodificador (Tabla B8). Los SCF son cero (SCF=0) para
líneas de frecuencia por sobre la línea más
alta de la tabla, lo que significa que el factor de
multiplicación es 1.
Los SCF son cuantificados logaritmicamente. El
escalón de cuantificación se establece con
scalefac_scale.
Para el proceso de codificación en Layer III se
puede utilizar cualquiera de los modelos psicoacústicos
detallados en al norma, aunque en esta se adopta el modelo 2 para
modificarlo de acuerdo a los requerimientos de
codificación.
De ahora en adelante siempre se hará referencia
al Modelo Psicoacústico 2 dentro del proceso de
codificación del Layer III. Las características
principales son:
Este modelo se corre 2 veces por bloque utilizando una
longitud de desplazamiento (shift length) de 576
muestras.
Se calcula la relación Señal
Máscara (SMR) para cada SCF Band.
Una parte crucial en la codificación en el
dominio de la frecuencia de las señales
de audio es la aparición de pre-ecos. Considérese
un caso dónde a un período de silencio le sigue un
sonido de tipo
percusivo, (tales como las castañuelas o platillos) dentro
del mismo bloque de codificación. Dicho "ataque"
producirá errores de cuantificación
comparativamente grandes. Al producirse la decodificación
de dicho bloque el filtro pasabanda (en el decodificador)
esparcirá dicho error de cuantificación sobre todo
el bloque, por lo que se volverá audible la
distorsión, especialmente a bajos bitrate
(MPEG-2).
Los pre-ecos pueden ser enmascarados utilizando el
efecto temporal de pre-masking, si la ventana de tiempo es de
corta longitud (del orden de unos pocos milisegundos). No
obstante, un mayor porcentaje del bitrate total se requiere
típicamente para la transmisión de la
información lateral (Side info) si los bloques son
más cortos. La solución pasa entonces por la
conmutación de bloques de diferentes longitudes cuando las
características de la señal los establezcan (un
bloque largo de 576 muestras por canal con mejor
resolución frecuencial y más pobre
resolución temporal, o 3 bloques de 192 muestras por canal
donde la resolución frecuencial es menor pero la temporal
es mejor).
En la fig. se observa la señal original de audio
(a) y como el efecto del pre-eco es claramente visible cuando la
longitud del bloque es 576 (b) , mientras que en (c) solo afecta
parte del segundo sub-bloque y no al primero por ser el subloque
de longitud 192.
Decisión de
conmutación de ventana:
La decisión si el banco de filtros debiese ser
conmutado a ventanas cortas se deriva del cálculo del
umbral de enmascaramiento por medio de calcular la
estimación de la entropía psicoacústica (PE) y
conmutando cuando PE excede el valor 1800. Si se alcanza esta
condición se inicia la secuencia:
Start (block_type = 1)
Short (block_type = 2)
Stop (block_type = 3)
En el siguiente diagrama se muestra los posibles estados
y cambios para la lógica
de conmutación de ventanas.
Dos ventanas de MDCT especiales (start window y stop
window) se necesitan en caso de transiciones entre bloques largos
y cortos y viceversa para mantener la cancelación del
aliasing que provee la MDCT en el dominio tiempo. Esto se Observa
en la siguiente figura:
Análisis del
Banco de filtro Híbrido:
El análisis de subbanda del banco de filtros
polifásico se ha descripto anteriormente. La salida del
banco de filtros polifásico es la entrada a la
subdivisión en líneas espectrales usando la MDCT.
De acuerdo a la salida del modelo psicoacústico (las
variables block_split_flag y block_type las ventanas y
transformadas "normal", "start", "short", y "stop" son
usadas).
18 valores de salida consecutivos de un gránulo y
18 valores consecutivos del gránulo anterior son
ensamblados en un bloque de 36 muestras.
Block_type = 0 (enmarcado normal)
zi = xi’ sen [p /36 * (i +
1/2)] para i = 0 a 35
Block_type = 1 (start block)
xi’ sen [p /36 * (i + 1/2)] para i = 0
a 17
zi xi para i = 18 a 23
xi sen [p /12 * (i – 18 +1/2)] para i = 24 a
29
0 para i = 30 a 35
Block_type = 3 (stop block)
0 para i = 0 a 5
zi xi sen [p /12 * (i – 6 +1/2)]
para i = 6 a 11
xi para i = 12 a 17
xi sen [p /36 * (i +1/2)] para i = 18 a
35
Block_type = 2 (short block)
El bloque de 36 muestras se divide en 3 bloques
solapados:
Yi(0) =
x’i+6 para i = 0 a 11
Yi(1) =
x’i+12 para i = 0 a 11
Yi(2) =
x’i+18 para i = 0 a 11
Cada uno de los 3 bloques cortos es enventanado
separadamente.
zi(k)
= yi(k) sen [p /12 * (i +1/2)] para i = 0
a 11 k = 0 a 2
Transformada discreta
del coseno modificada. MDCT
En la sig. fórmula: ´N' es el número
de muestras enmarcadas (para bloques cortos n=12 y para bloques
largos n=36). En el caso de un bloque tipo 'corto' cada uno de
los 3 bloques cortos es transformado separadamente.
Aliasing-Butterfly ,
Codificador
El cálculo de la reducción de aliasing en
el codificador se realiza de manera similar al decodificador. La
definición de la mariposa (butterfly) a ser usada se
observa en la siguiente figura. Los coeficientes cai y
csi se encuentran en la tabla B9.
Cálculo del
promedio de bits disponibles:
El número de bits disponibles por gránulo
es calculado desde el tamaño de la trama. Por ejemplo,
para un bitrate de 64 Kbps y 48000 muestras por seg.
será:
64000 [bits/seg.] * ( 1152
[muestras/trama] / 48000 [muestras/seg.] ) / 2
[gránulo / trama] = 768
bits/gránulo
Como la cabecera toma 32 bits (4 bytes) y la
información lateral (side information) 17 bytes (136 bits)
en modo de "canal único", la cantidad promedio de bits
para main_data para el gránulo será:
768 – (32+136 [bis/trama]) / (
2 [gránulo/trama] ) = 648
bits/gránulo
Reservación de bits:
La reserva de bits provee bits adicionales que pueden
ser usados para el gránulo. El número de bits
disponible en la reserva se establece en los lazos de
iteración del codificador.
Cuantificación y
codificación de las muestras
frecuenciales
Las muestras a la salida del banco de filtros
híbrido (Banco de filtro de análisis y MDCT) se
cuantifican no uniformemente, de esta manera se provee tanto
errores (cuadráticos) medios menores
y enmascaramiento, dado que errores mayores pueden se tolerados
si las muestras a cuantificar son de valores grandes. La
codificación Huffman, basada en 32 tablas de código
y codificación run lenght adicional, se utilizan
para una eficiente representación de los valores
cuantizados.
La muestras frecuenciales son cuantificadas y
codificadas dentro de 2 lazos de iteración que tienen
lugar en el codificador.
Lazos de Iteración de
la codificación en Layer III
El módulo de procesamiento de la señal a
codificar se divide en tres niveles (o lazos). Estos
son:
- Lazo de programa de la
trama - Lazo de iteración externo
- 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.
Página anterior | Volver al principio del trabajo | Página siguiente |