Ley A
La ley A (A-Law) es un sistema de cuantificación logarítmica de señales de audio, usado habitualmente con fines de compresión en aplicaciones de voz humana. Está estandarizada por la ITU-T en G.711 y es similar a la ley Mu.
Características básicas de la Ley A
- Es un algoritmo estandarizado, definido en el estándar ITU-T G.711
- Tiene una complejidad muy baja
- Utilizado en aplicaciones de voz humana
- No introduce prácticamente retardo algorítmico (dada su baja complejidad)
- Es adecuado para sistemas de transmisión TDM
- No es adecuado para la transmisión por paquetes
- Digitalmente, factor de compresión aproximadamente de 2:1
Planteamiento del algoritmo
Este algoritmo se utiliza principalmente para la codificación de voz humana, ya que su funcionamiento explota las características de ésta. Las señales de voz están formadas en gran parte por amplitudes pequeñas, ya que son las más importantes para la percepción del habla, por lo tanto éstas son muy probables. En cambio, las amplitudes grandes no aparecen tanto, por lo tanto tiene una probabilidad de aparición muy baja.
En el caso de que una señal de audio tuviera una probabilidad de aparición de todos los niveles de amplitud por igual, la cuantificación ideal sería la uniforme, pero en el caso de la voz humana esto no ocurre, estadísticamente aparecen con mucha más frecuencia niveles bajos de amplitud. El algoritmo Ley A explota el factor de que los altos niveles de amplitud no necesitan tanta resolución como los bajos. Por lo tanto, si damos más niveles de cuantificación a las bajas amplitudes y menos a las altas conseguiremos más resolución, un error de cuantificación inferior y por lo tanto una relación SNR superior que si efectuáramos directamente una cuantificación uniforme para todos los niveles de la señal.
Esto provoca que si para un determinado SNR fijado necesitamos por ejemplo 16 bits usando una cuantificación uniforme, para el mismo SNR usando la codificación Ley A necesitemos 8 bits, dado que el error de cuantificación es menor y podemos permitirnos usar menos bits para obtener el mismo SNR.
Funcionamiento
El algoritmo Ley A basa su funcionamiento en un proceso de compresión y expansión llamado companding. Se aplica una compresión/expansión de las amplitudes y posteriormente una cuantificación uniforme. Las amplitudes de la señal de audio pequeñas son expandidas y las amplitudes más elevadas son comprimidas.
Esto se puede entender de la siguiente forma; cuando una señal pasa a través de un compander, el intervalo de las amplitudes pequeñas de entrada es representado en un intervalo más largo en la salida, y el intervalo de las amplitudes más elevadas pasa a ser representado en un intervalo más pequeño en la salida. En la siguiente figura podemos verlo con claridad:
Ésta figura muestra que el rango de los valores de entrada (línea horizontal) contenidos en el intervalo [-0.2,0.2] (amplitudes pequeñas) están representados en la salida (línea vertical) en el intervalo [-0.6,0.6]. Podemos comprobar que hay una expansión.
Por otra parte vemos que los valores de entrada contenidos en el intervalo [-1,-0,6] y [0.6,1] son representados en la salida en los intervalos [-1, -0.9,] y [0.9,1]. Podemos comprobar que se produce una compresión.
Digitalmente, todo este esquema es equivalente a aplicar una cuantificación no uniforme (logarítmica) a la señal original, donde tendremos pequeños pasos de cuantificación para los valores pequeños de amplitud y pasos de cuantificación grandes para los valores grandes de amplitud. Para recuperar la señal en el destino tendremos que aplicar la función inversa.
Por lo tanto, la implementación del sistema consiste en aplicar a la señal de entrada una función logarítmica y una vez procesada realizar una cuantificación uniforme. Es lo mismo que decir que el paso de cuantificación sigue una función del tipo logarítmico.
Para una entrada x dada, la ecuación Ley A de salida es:
- ,
donde A es el parámetro de compresión. En Europa . También se usa el valor 87.6.
La función inversa es la siguiente:
Codificación digital
Digitalmente se aplica una cuantificación no uniforme (logarítmica) a la señal original, donde tendremos pequeños pasos de cuantificación para los valores pequeños de amplitud y pasos de cuantificación grandes para los valores grandes de amplitud.
El algoritmo A-law digital es un sistema de compresión con pérdidas en comparación con la codificación lineal normal. Esto significa que al recuperar la señal, ésta no será exactamente igual a la original.
La codificación A-law toma una muestra de audio de 13 bits (ó 16 bits convertida a 13) como entrada y la comprime a un valor de 8 bits, así:
Código de entrada lineal | Código comprimido |
s0000000wxyza... | s000wxyz |
s0000001wxyza... | s001wxyz |
s000001wxyzab... | s010wxyz |
s00001wxyzabc... | s011wxyz |
s0001wxyzabcd... | s100wxyz |
s001wxyzabcde... | s101wxyz |
s01wxyzabcdef... | s110wxyz |
s1wxyzabcdefg... | s111wxyz |
donde s es el bit de signo. Por ejemplo, 1000000010101111 es convertido en 10001010 (de acuerdo a la primera fila de la tabla), y 0000000110101111 es convertido en 00011010 (de acuerdo a la seguna fila).
Esto puede ser visto como un número en notación de punto flotante con 4 bits de mantisa y 3 bits de exponente.
Adicionalmente, el estándar G.711 especifica que los bits pares resultantes son invertidos antes de enviar el octeto de bits. Esto es para aumentar la cantidad de bits en 1 para facilitar el proceso de recuperación de la señal de reloj del sistema en el receptor PCM.