# Ley A

La ley A (A-Law) es un sistema de cuantificación logarítmica de señales de audio, usado habitualmente para compresión en el campo de comunicaciones telefónicas. Este sistema de codificación es usado en Europa y en el resto del mundo, a diferencia de Estados Unidos, Canadá y Japón donde se utiliza un sistema similar llamado ley Mu. Forma parte de la Recomendación G.711 de la UIT-T.

## Tipos de algoritmos

Existen dos tipos de algoritmos de Ley-A: una versión analógica y otra digital cuantizada.

### Versión analógica

Para una entrada $x$ determinada, la ecuación para la codificación según la Ley A es:
    $F(x)=\operatorname {sgn}(x){\begin{cases}{\displaystyle {A|x| \over 1+\ln(A)}}&{\mbox{si}}\,\displaystyle |x|<{1 \over A}\\\displaystyle {\frac {1+\ln(A|x|)}{1+\ln(A)}}&{\mbox{si}}\,\displaystyle {1 \over A}\leq |x|\leq 1\end{cases}}$
en la cual:
$A=87.6$: Parámetro de compresión según la Recomendación G. 711, usado en los sistemas TDM/PCM bajo la Recomendación G. 732.
    $\operatorname {sgn}(x)$: es la función signo.
Si A = 1, la entrada es igual a la salida.
La función inversa es la siguiente:
    $F^{-1}(y)=\operatorname {sgn}(y){\begin{cases}\displaystyle {|y|(1+\ln(A)) \over A},&{\mbox{si}}\,\displaystyle |y|<{1 \over 1+\ln(A)}\\\displaystyle {\exp(|y|(1+\ln(A))-1) \over A}&{\mbox{si}}\,\displaystyle {1 \over 1+\ln(A)}\leq |y|<1\end{cases}}$
en la cual $\exp$ es la función exponencial.

### Versión digital

La Ley A, en su forma cuantificada digital está definida en la Recomendación G.711. El comportamiento de la cuantificación se aproxima al de la codificación analógica mediante 14 segmentos rectilíneos (7 para señales positivas y 7 para negativas), pero como los segmentos que pasan por el origen son colineales, éstos se consideran uno solo. Los segmentos se denominan ±0, ±1 hasta ±6. Digitalmente, es aplicada una cuantificación no uniforme (logarítmica) a la señal original, en la cual existen 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, en su versión 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 de Ley-A toma los 13 bits (o 16 bits convertidos a 13) de las muestras de las señales de audio y las comprime a un valor de 8 bits, así:
Codificación binaria de Ley A :
| Segmento | Código de entrada lineal de 13 bits | Código Comprimido de 8 bits |
| 0 | S0000000ABCDX | S000ABCD |
| 0 | S0000001ABCDX | S001ABCD |
| ±1 | S000001ABCDXX | S010ABCD |
| ±2 | S00001ABCDXXX | S011ABCD |
| ±3 | S0001ABCDXXXX | S100ABCD |
| ±4 | S001ABCDXXXXX | S101ABCD |
| ±5 | S01ABCDXXXXXX | S110ABCD |
| ±6 | S1ABCDXXXXXXX | S111ABCD |
donde S es el bit de signo (0=positivo y 1=negativo) el cual pasa directamente al código comprimido y "ABCD" corresponde a los bits de datos .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 segunda 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. Durante la compresión, como se observa en la tabla, se descartan los bits menos significativos de las señales grandes. La cantidad de estos bits representa cada uno de los segmentos en que se divide por tramos la curva $F(x)$. Cada segmento es representado por tres bits, los cuales pasan al código comprimido después del bit de signo "S".
Adicionalmente, la Recomendación G.711 especifica que los bits pares resultantes deben ser invertidos antes de enviar el octeto de bits, lo que sirve para aumentar la densidad de transiciones y facilitar el proceso de recuperación de la señal de reloj del sistema en el receptor PCM. La inversión del código comprimido se lleva a cabo sometiéndolo a la operación o exclusiva con el valor hexadecimal 0x55 (equivalente al valor binario 0b10101010). La decodificación del patrón comprimido consiste en invertir los pasos anteriormente descritos obteniéndose esta segunda tabla:
Decodificación binaria de Ley A :
| Código Comprimido de 8 bits | Código Lineal de salida |
| S000ABCD | S0000000ABCD1 |
| S001ABCD | S0000001ABCD1 |
| S010ABCD | S000001ABCD10 |
| S011ABCD | S00001ABCD100 |
| S100ABCD | S0001ABCD1000 |
| S101ABCD | S001ABCD10000 |
| S110ABCD | S01ABCD100000 |
| S111ABCD | S1ABCD1000000 |
El rango dinámico (RD) de la Ley A es la relación en decibelios de la mayor amplitud cuantificable y de la amplitud más pequeña que ocupa el primer segmento de la curva $F(x)$. Como la magnitud se expresa con un número de 12 bits y equivale al número 4096 ($2^{12}$) y el valor mínimo de cuantificación del primer segmento es de 15, entonces el rango dinámico (RD) se calcula así:
    ${\mbox{RD}}=20\log {{\Bigl{\frac {4096}{15}}{\Bigr )}}=48.7\,{\mbox{dB}}$
que es ligeramente mayor que el calculado para 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, el 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.
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.

## Implementación

Como en la Ley Mu, existen tres formas de implementar el algoritmo de la Ley A:
* Analógica: Usa un amplificador de ganancia no-lineal para lograr la compansión completamente en el dominio analógico. Esta forma ya no se emplea.
* Conversión de Analógico a Digital No lineal: En este caso, la amplificación es lineal y se usa un convertidor analógico-digital con niveles desiguales de cuantificación que se ajustan a la tabla descrita. Sin embargo, construir tal convertidor es difícil, por lo que esta opción no es viable.
* Digital: La señal de entrada es muestreada y cuantificada de modo lineal, y el código lineal es comprimido convirtiendo el código de 13 bits en 8 bits como se ha descrito.

## 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 compansor (compresor-expansor), 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.7,0.7], aproximadamente. 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.