Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

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




Enviado por smangiaterra



Partes: 1, 2, 3, 4, 5

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

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

SCFSI [sb]

 

00

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

01

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

10

se transmite 1 SCF valido para las 3
partes

11

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

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

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

Grouping
[ch][sb]

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

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

Samplecode
[ch][sb][s]

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

Sample
[ch][sb][s]

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

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

Datos de Audio – Capa III
(Layer III)

Main_data_begin

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

Private_bits

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

SCFSI
[ch][scfsi_band]

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

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

SCFSI [scfsi_band]

 

0

los SCF son transmitidos para cada gránulo

1

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

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

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

SCFSI_Band

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

banda de SCFSI (scfsi_band)

Scalefactor band (ver tabla B8)

0

0,1,2,3,4,5

1

6,7,8,9,10

2

11..15

3

16..20

Part2_3_length[gr][ch]

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

Big_values[gr][ch]

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

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

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

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

Global_gain[gr][ch]

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

Scalefac_compres[gr][ch]

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

Block_type

Mixed_block_flag

Slen1 (long de los SCF
para las bandas:)

Slen2(long de los SCF
para las bandas:)

0,1 o 3

No importa

0-10

11-20

2

0

0-5

6-11

2

1

0-7 (SCF band de ventana larga)
3-5 (SCF band de ventana corta)

6-11

Si block_type es 0,1 o 3 entonces
:

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

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

Si block_type=2 y mixed_block_flag=0
entonces :

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

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

Si block_type=2 y mixed_block_flag=1
entonces :

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

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

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

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

Window_switching_flag[gr][ch]:

SCF_compress[gr]

Slen1

Slen2

0

0

0

1

0

1

2

0

2

3

0

3

4

3

0

5

1

1

6

1

2

7

1

3

8

2

1

9

2

2

10

2

3

11

3

1

12

3

2

13

3

3

14

4

2

15

4

3

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

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

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

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

Si window_switching_flag = 0 entonces el valor de
block_type=0

Block_type[gr][ch]:

Indica el tipo de ventana para el
gránulo.

Block_type [gr]

 

0

Reservado

1

Comienzo de bloque

2

3 ventanas cortas

3

Fin de bloque

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

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

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

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

Mixed_block_flag[gr][ch]:

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

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

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

Table_select[gr][ch][region]:

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

Subblock_gain[gr][ch][window]

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

Region0_count[gr][ch]

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

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

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

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

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

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

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

Region1_count[gr][ch]

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

Preflag[gr][ch]

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

Scalefac_scale[gr][ch]

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

Scale_fac[gr]

Scalefac_multiplier

0

0.5

1

1

Count1table_select[gr][ch]

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

Count1table_select[gr]

 

0

Tabla B.7 – A

1

Tabla B.7 – B

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

Los SCF son utilizados para "colorear" el
ruido de
cuantificación. Si el ruido de cuantificación se
colorea con la forma correcta, éste es enmascarado
completamente. A diferencia de Layer I y II, los SCF de Layer III
no se refieren al máximo local de la señal
cuantificada. En layer III, SCF son utilizados en el
decodificador para obtener los factores de división
(divisores) para grupos de valores (agrupados en SCF bands). En
caso de Layer III, estos grupos de valores (SCF bands) se
extienden sobre varias líneas espectrales. Estos grupos
denominados bandas de factores de escala (SCF bands) son
seleccionados de manera de asemejarse a las bandas
críticas del oído
humano lo más cercano posible.

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

Si intensity_stereo está habilitado
(mode_bit_extension) los SCF de la "zero_part", de la
diferencia (canal derecho), son utilizados como intensity_stereo
positions (is_pos). Is_pos[sfb] es la posición de
estéreo intenso para la SCF band sfb.

La subdivisión del espectro en SCF bands
permanece fija para cada longitud de bloque y frecuencia de
muestreo y
almacenados en tablas en el codificador y decodificador (Tabla
B8). Los SCF son cero (SCF=0) para líneas de frecuencia
por sobre la línea más alta de la tabla, lo que
significa que el factor de multiplicación es
1.

Los SCF son cuantificados logaritmicamente. El
escalón de cuantificación se establece con
scalefac_scale.

Huffmancodebits()

Corresponde a los datos codificados según
Huffman.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Datos
Auxiliares

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

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

5 – Decodificación

Generalidades

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

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

Para la capa I la ecuación es:

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

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

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

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

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

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

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

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

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

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

1111 1111 1111 1111

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

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

Capa I (Layer
I)

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

Recuantificación
de las muestras de las subbandas

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

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

2nb-1

Donde :

S"’ es el número fraccional

S" es el valor recuantificado

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

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

S’ = factor * S"

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

Filtro de
Síntesis de Subbanda

Si no existen bits asignados a una subbanda las muestras
en esa subbanda toman el valor 0. Cada vez que las muestras de
las subbandas de todas las 32 subbandas de un canal se calcularon
se aplican al banco de filtros de síntesis y se calculan
las 32 muestras de audio (PCM). El diagrama de flujo de las
muestras se observa en la figura 5.3 donde se detalla la
operación de reconstrucción.

Los coeficientes Nik se obtienen
de:

Nik = cos[(16+i)(2k+1)p
/64]
donde 0 <= i <= 63 0 <= k <=31

Los coeficientes Di para la operación de
enventanado se pueden obtener de la tabla B3. Los
coeficientes se han calculado para la optimización
numérica. Una trama contiene 12*32=384 muestras de
subbanda, las que se transforman, después del filtrado en
384 muestras de audio.

Figura 5.3. Diagrama de bloques del banco
de filtro de síntesis

Capa II (Layer
II)

La Capa II es más eficiente pero también
más compleja que la capa I. El diagrama de flujo de la
figura 5.2 válido para la capa I lo es también para
la II.

Decodificación
de la Asignación de bits (Bit allocation
decoding)

Para diferentes combinaciones de tasa de bits y
frecuencias de muestreo existen diferentes tablas de
asignación.

Observación: las tasas de bits dadas en
las tablas de cabecera son por canal.

Si el modo no es canal único, la tasa de bits
debe ser dividida por 2 para obtener la tasa de bits por canal.
La decodificación de la asignación de bits (bit
allocation) se efectúa en tres pasos de
aproximación.

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

pueden ser determinados utilizando la tabla
B4.

Se puede observar en las tablas de asignación de
bit (B2)(bit allocation) que alguna de las subbandas
más altas nunca tendrán bits asignados.
SBLIMIT (SubBandLIMIT) representa la cantidad de subbandas
que tienen nbal#0 (ver tabla B2).

Decodificación
del SCFSI (SCale Factor Selection
Information)

Las 36 muestras de una subbanda dentro de una trama son
divididas en tres partes iguales de 12 muestras cada una. Cada
parte puede tener su propio SCF. El número de SCFs que
deben ser leídos del bitstream depende del contenido de
SCFSI[sb]. El SCFSI[sb] se lee del bitstream para las subbandas
que tienen una asignación de bit (bit allocation) distinta
de cero.

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

Decodificación
de los SCF (SCale Factors)

Para cada subbanda con una asignación de bits
(bit allocation) distinta de cero, son leídos desde el
bitstream. El número de SCF codificados y la parte de las
muestras de subbanda a las que se refieren, está definido
por SCFSI[sb]. Los 6 bits de los SCF codificados deben ser
interpretados como un entero no signado que sirve de entrada a la
Tabla B1 (Layer I y II Scalefactors). Esta tabla contiene
los SCFs por el cual las subbandas no nulas deberían ser
multiplicadas después de la
recuantificación.

Recuantificación
de las muestras de subbanda.

Seguidamente, se leen las muestras codificadas. Como se
observa en el capítulo 4 (descripción de la trama-
Layer II) las muestras codificadas aparecen como triplets, el
código contiene tres muestras consecutivas
simultáneamente. La cantidad de bits a ser leídos
para un triplet en el bitstream, para cada subbanda, se obtiene
de la Tabla B4 (Layer II Clases de
cuantificación).

De la misma tabla se establece si el código
corresponde a tres muestras consecutivas separadas o es uno
combinado para las tres muestras (agrupado). En este
último caso es necesario desagrupar. El código
combinado debe ser considerado como un entero no signado
denominado "c". El siguiente pseudo-código
provee los 3 códigos separados.

For i=0, mientras i<3,
incremento=1

S[i] = módulo de [c / nlevels
]

c = c DIV nlevels

End for

Donde nlevels es el número de pasos
como se muestran en la tabla B2 (Layer II Bit allocation
Table). [nlevels puede tomar los valores 0, 3, 5, 7, 9, 15, 31,
63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767 o
65535]

El primer bit de cada uno de los 3 códigos
tiene que ser invertido, y los números resultantes deben
ser considerados como números fraccionales en complemento
a dos, donde el MSB representa el valor –1. Los valores
recuantificados pueden obtenerse con la aplicación de la
siguiente fórmula:

S" = C * (S"’ + D)

Donde S"’ es el número
fraccional

S" es el valor recuantificado

Los valores de las constantes C y D se dan en la
tabla B4. Los valores recuantificados debe ser
re-escalados. Los factores de multiplicación se encuentran
en la Tabla B1 (Layer I, II Scalefactors). El valor re-escalado
S’ se calcula como:

S’ = factor * S"

Síntesis del
Filtro de Subbanda

Si no existen bits asignados a una subbanda las
muestras en esa subbanda toman el valor 0. Cada vez que las
muestras de las subbandas de todas las 32 subbandas de un canal
se calcularon se aplican al banco de filtros de síntesis y
se calculan las 32 muestras de audio (PCM). El diagrama de flujo
de las muestras se observa en el diagrama de flujo del
decodificador visto para Layer I donde se detalla la
operación de reconstrucción (figura
5.3).

Los coeficientes Nik se obtienen
de:

Nik = cos[(16+i)(2k+1)p /64] donde
0 <= i <= 63 0 <= k <=31

Los coeficientes Di para la operación de
enventanado se pueden obtener de la tabla B3. Los
coeficientes Se han calculado para la optimización
numérica. Una trama contiene 36*32=1152 muestras de
subbanda, las que se transforman, después del filtrado en
1152 muestras de audio.

Capa III (Layer
III)

Se obtiene una resolución superior en
frecuencia a través del uso de un banco de filtros
híbrido. Cada banda se separa en 18 líneas de
frecuencia con la aplicación de una MDCT. La longitud de
la MDCT es de 36. Se utiliza la conmutación de una ventana
adaptativa para el control de
Pre-ecos. (Descripto en el capítulo 6). La frecuencia a
partir de la cual bloques más cortos (mejor
resolución temporal) son usados, puede ser
seleccionadas.

Partes de la señal, por debajo de una
determinada frecuencia dependiendo de la bandera
"mixed_block_flag", es codificada con una mejor solución
frecuencia y parte de la señal por encima de esta
frecuencia es codificada con una mejor resolución
temporal.

Los componentes de frecuencia son cuantificados
usando un cuantificador no uniforme y codificados usando un
codificador Huffman. El codificador Huffman usa una de las 18
diferentes tablas. Un buffer es usado para mejorar la eficiencia de
codificación del codificador Huffman y para ayudar en el
caso de condiciones de Pre-eco (ver características del
buffer en Cap. 6. El tamaño del buffer de entrada es el
tamaño de una trama a la tasa de 160 Kbits/s por canal
para Layer III. La técnica de buffer de corto plazo usada
es denominada Bit Reservoir porque éste usa un bitrate
variable a corto plazo con un desplazamiento máximo
integral a partir de la tasa de bits media.

Cada trama contiene los datos de 2 gránulos.
Los datos de audio en una trama están ubicados de la
siguiente manera:

El main_data_begin_pointer especifica un offset
negativo desde la posición del primer byte de la
cabecera.

Decodificación

Figura 5.4. Diagrama de bloques del
decodificador Layer III.

La primera acción es de sincronización
en el decodificador con el bitstream entrante. Esto se realiza
como las otras capas. La información acerca de la
frecuencia de muestreo es usada para seleccionar la tabla
SCALEFACTOR_BAND.

Side
information

La información lateral (side information) debe
ser extraída del bitstream y almacenada para su uso
durante la decodificación de la trama asociada. La
información de selección
de tabla es usada para elegir un decodificador Huffman y el
número de linbits de acuerdo a la tabla
B7.

Comienzo de
Main_data

Los datos principales (main_data) (factores de
escala, códigos Huffman y datos auxiliares) no son
necesariamente ubicados en forma adyacente a la
información lateral. El comienzo de la parte principal de
datos es direccionado usando la información contenida en
el puntero main_data_begin de la trama actual. La
asignación de los datos principales (main data) es hecha
de manera que todos los datos principales estén residentes
en el buffer de entrada cuando la cabecera de la próxima
trama está llegando al buffer de entrada. El decodificador
tiene que saltar la cabecera y la información lateral
cuando está decodificando los datos principales. Este
conoce sus posiciones desde el bitrate_index y el padding
bit.

La longitud de la cabecera es siempre de 4 bytes, la
longitud de la información lateral es de 17 bytes en el
modo de canal simple y de 32 bytes en los otros modos. Los datos
principales pueden extenderse a más de un bloque de
cabecera e información lateral.

En la figura 5.5 se observan dos trozos de bitstream
del Layer III. En el superior las características de
demanda son
normales. En el inferior se observa un pico de demanda en Main
info 3
y una pequeña demanda en Main Info
2.

Figura 5.5

Consideraciones del
buffer

La siguiente regla puede ser usada para calcular el
máximo número de bits usado por un
gránulo:

La longitud del buffer en de 7680 bits. Este valor es
usado como el máximo buffer para cada tasa. A la tasa
más alta en Layer III (320 Kbits/s en señal
estéreo) y una frecuencia de muestreo de 48 KHz. La
longitud media de la trama es:

(320.000/48.000)*1152=7680 bits

Por lo tanto las tramas deben tener una longitud
constante a esta tasa y frecuencia de muestreo.

A 64 Kbits/s (128 Kbits/s en estéreo) la
longitud media del gránulo es

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

La desviación actual es igual al número
de bytes especificados en el puntero (de offset) main_data_begin.
La desviación máxima real es:

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

Por consiguiente, se puede calcular el retardo y la
longitud del buffer para tasas de bits intermedias. Se permite el
intercambio del buffer entre el canal izquierdo y derecho en un
bitstream estéreo sin restricciones. Debido a la
limitación en el tamaño del buffer, main_data_begin
se setea siempre en 0 en el caso que el Bit_rate_index == 14. Por
ejemplo, en una tasa de 320 Kbits/seg. estéreo. En este
caso todos los datos se ubican entre palabras de cabecera
adyacentes.

Para frecuencias de muestreos menores de 48 KHz el
buffer debería limitarse de manera tal que el mismo
tamaño de buffer físico sea suficiente como para
uno calculado a 48 KHz.

Scalefactors
(SCF)

Los SCF son codificados de acuerdo a las variables
slen1 y slen2 las cuales se determinan desde los valores de
Scalefac_compres. Los valores decodificados pueden ser utilizados
como entrada a una tabla utilizada para calcular los factores
para cada SCF_band directamente. Cuando se está
decodificando el segundo gránulo, debe ser considerada la
SCFSI. Para las bandas en las cuales el correspondiente SCFSI
está seteado en 1, los SCF del primer gránulo son
también utilizados para el segundo gránulo, por lo
tanto éstos (los SCF) no se transmiten para el segundo
gránulo.

El número de bits utilizados para codificar
los SCF se denomina part2_lengh y se calcula de la
sig. manera:

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

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

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

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

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

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

Del Cap. 4: Scalefac_compress se
tenía:

Block_type

Mixed_block_flag

Slen1 (long de los SCF
para las bandas:)

Slen2(long de los SCF
para las bandas:)

0,1 o 3

No importa

0-10

11-20

2

0

0-5

6-11

2

1

0-7 (SCF band de ventana larga)
3-5 (SCF band de ventana corta)

6-11

Las fórmulas son válidas si gr. == 0 o
si gr. == 1 y scfsi[ch][scfsi_band] == 0 (por ejemplo SCFSI no se
usa).

Codificación
HUFFMAN

Toda la información necesaria, incluyendo la
tabla que realiza el árbol de codificación HUFFMAN
puede generarse desde las tablas B7.

Dato en la trama

Scalefac_compres[gr.]

Slen1

Slen2

0

0

0

1

0

1

2

0

2

3

0

3

4

3

0

5

1

1

6

1

2

7

1

3

8

2

1

9

2

2

10

2

3

11

3

1

12

3

2

13

3

3

14

4

2

15

4

3

Los datos que corresponden a big_values se
decodifica, utilizando las tablas con el número contenido
en Table_select[gr.][ch][region]. Las líneas espectrales
en la región 0, región 1 y región 2 son
decodificadas de a pares hasta completar el número de
pares de líneas espectrales contenido en
big_values.

Los restantes bits de código HUFFMAN son
decodificados utilizando la tabla de acuerdo a
count1table_select[gr.][ch]. La decodificación se realiza
hasta que todos los códigos HUFFMAN han sido decodificados
o hasta que los valores cuantificados que representan 576
líneas han sido decodificados, lo que llegue primero. Si
existen más bits de códigos HUFFMAN que los
necesarios para decodificar 576 líneas espectrales estos
son descartados. La variable count1 se deriva
implícitamente cómo el número de valores
(cuartetos) decodificados utilizando
count1table_select.

Recuantificador

El cuantificador no uniforme utiliza una ley exponencial.
Para cada valor, "is", a la salida del decodificador Huffman se
calcula el valor |is|4/3. Esto puede ser hecho a
través del calculo explícito o bien puede estar
tabulado en una tabla.

Formula para la
recuantificación y escalado
completo.

Una fórmula describe el proceso completo desde
la salida del decodificador Huffman hasta la entrada de las
muestras al banco de filtros polifásicos. Todos los
factores de escala necesarios están incluidos en esta
fórmula. Los datos de salida son reconstruidos desde las
muestras recuantificadas.

Los valores de la ganancia global y de sub-bloque
afectan a todos los valores dentro de una ventana de tiempo (en
el caso de que block_type == 2).

Los factores de escala (SCF) y preflag ajustan antes
la ganancia dentro de cada banda de factor de escala (scale
factor band).

La siguiente es la fórmula de
recuantificación para ventanas cortas
(block_type=2). El valor decodificado (de la salida del
decodificador Huffman) para la línea i se llama
isi y la entrada al banco de filtros de
síntesis para la línea i se denomina
xri:

KS = 21/4 * (global_gain[gr] – 210 –
8 * subblock_gain[window][gr.] )

xri = sign(isi) * |
isi | (4/3 * KS) * 2- (
Scalefac_multiplier * Scalefac_s[gr.][sfb][window]
)

para bloques largos la fórmula
es:

KL = 21/4 * (global_gain[gr.] – 210
)

xri = sign(isi) * |
isi | (4/3 * KL) * 2- (
Scalefac_multiplier * Scalefac_l[gr.][sfb][ch] +
pretab[sfb])

donde :

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

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

Partes: 1, 2, 3, 4, 5
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter