La profundidad de bits es un tema tan ampliamente discutido en la ingeniería de sonido que probablemente cualquier que esté leyendo esto ya sabrá muchos de los detalles del mismo. Quizás detalles como el rango dinámico de un CD cerca de ~96dB, o la regla de 6dB por bit ya sean claras hasta cierto punto. Sin embargo, a menudo noto que en este tipo de temas siempre queda espacio para analizar con mayor detalle y llegar a entender mejor lo que la profundidad-de-bits/resolución/longitud-de-palabra es.
Estoy bastante seguro de que muchos de ustedes habrán visto gráficas como estas ejemplificando lo que el rango dinámico es y como podemos cuantificar esta propiedad para describir la calidad de las señales con las que trabajamos.
Sin embargo, muchas de estas son o bien confusas u oscurecen la realidad detrás de atrevidas abstracciones. Mientras esto es completamente valido para un entendimiento simple y rápido del concepto de la profundidad de bits en este articulo quisiera descubrir una perspectiva diferente acerca de como entender las señales digitales en este sentido.
Bit Depth 101
Para este momento deben saber que las señales digitales tienen un conjunto finito de posibles escalones para representar la amplitud de las señales, conocidos como escalones de cuantificación. Por esto, cuando digitalizamos una señal, encontramos discrepancias entre los verdaderos valores analógicos y sus contrapartes digitales. En cada muestra nuestro CAD (Convertidor de Análogo a Digital) determina que un valor analógico (1.0123) esta lo suficientemente cerca de un escalón de cuantificación (1.01) para ser representado por el mismo. Por lo tanto, estamos introduciendo un error (0.0023) en nuestra señal; una desviación de su valor real que representa una pérdida de información. Este error es conocido comúnmente como ruido de cuantificación, aunque yo prefiero el termino distorsión por cuantificación dado que, si bien tanto ruido como distorsión son aberraciones sobre nuestra señal, la distorsión se caracteriza por ser dependiente de la señal mientras que el ruido no.
Ésta es una distinción importante, pues implica que el error de cuantificación no tiene tiene un comportamiento constante sino uno dependiente de la señal como veremos más adelante.
Como es de esperar, este error de cuantificación esta directamente afectado por el numero de pasos en nuestro sistema y dado que el numero de pasos esta definido por la profundidad de bits también este último define las características del error de cuantificación. Probablemente hayan estudiado como esto ocurre analizando el numero de amplitudes posibles expresadas en diferente cantidad de bits. Con 1 bit tenemos dos opciones (1, 0), con 2 bits tenemos 4 (00, 01, 10, 11), etc… entonces concluimos que para n bits tenemos 2^n diferentes opciones. Por esto, para 16 bits tenemos 65 536, y para 24 bits tendremos 16 777 216 escalones de cuantificación. Sin embargo, es importante entender que hay muchas muchas maneras de construir esquemas de cuantificación y codificación (Es posible que muchos CADs tomen diferentes decisiones frente a detalles que miraremos más adelante). Sin importar nada más, necesitamos un numero finito de escalones de cuantificación para representar nuestra señal pero aún podemos tomar muchas decisiones acerca de cómo asignar estos escalones de cuantificación a diferentes amplitudes para lograr comportamientos específicos. La manera más común de lograr esto en audio es a través de un cuantificador uniforme de medio escalón. Sin embargo, otros existen como como los cuantificadores no uniformes de ley-A, logarítmicos, ley µ e incluso de coma flotante que utilizamos de manera regular.
En la cuantificación uniforme el número de escalones disponibles se distribuyen de manera uniforme en el rango de amplitudes a ser digitalizadas. Esto significa que para cada posible amplitud el error estará limitado por la mitad de un escalón de cuantificación, lo que es equivalente a decir que ninguna muestra estará más lejos de medio escalón de su valor real. Miremos este requisito para un cuantifiacdor de 2 bits.
Como se pude ver, no existe un escalón de cuantificación para la amplitud 0 lo que resulta inconveniente para las señales de audio ya que siempre tienen valores positivos y negativos que oscilan al rededor o están exactamente sobre el 0.
Cuantificadores de escalón medio y paso medio
Por esto tenemos otra distinción no tan común entre los cuantificadores de escalón medio y los de paso medio. En la práctica, los escalones de medio paso tienen que “descartar” un paso de cuantización para tener un número impar de pasos y así permitir que haya un escalón exactamente en 0., (En el “Libro Rojo” esto se logra permitiendo un paso de cuantificación adicional en el lado negativo [-32 768, 32 767].
Aunque es una distinción sutil con poco efecto sobre profundidades de bit más altas, considero que pone una premisa fascinante sobre la mesa. Dado que conocemos algunas de las generalidades de las señales que vamos a cuantificar, podemos tomar decisiones para optimizar los esquemas de cuantificación y así obtener un mejor comportamiento del error de cuantificación. Si bien nuestros sistemas son bastante generales (por ejemplo hay otros esquemas optimizados para codificar voz humana en particular), reconocemos que una amplitud de 0 es tan común que vale la pena asegurarnos de que exista un escalón de cuantificación en dicha amplitud (Ver codificación Huffman como un ejemplo en donde el sistema asigna códigos específicos a amplitudes más comunes para optimizar el almacenamiento de datos!)
Una perspectiva diferente.
Ahora que tenemos un preámbulo claro, esto es lo que realmente me gustaría presentar. A menudo estudiamos la profundidad de bits en relación con el rango dinámicos y la relación S/R (señal a ruido). Claramente estos conceptos están relacionados, pero por este camino es fácil caer en suposiciones equivocadas. Por ejemplo, cada una de las gráficas al principio de este documento presenta la señal y el ruido como elementos separados para evidenciar lo que la relación S/R es. En la primera gráfica, vemos cierta distancia entre la señal y el ruido aunque esto es bastante confuso porque la relación S/R es una razón no una distancia. Las gráfica 2 está en decibeles, por lo que dicha razón se transforma en una diferencia debido a propiedades logarítmicas, por lo que está un poco mejor. Por otro lado, la gráfica 3, aún cuando esta en decibeles, está en el dominio de la frecuencia por lo que nos da una idea errónea del nivel de ruido. En efecto, ninguna frecuencia está por encima de unos -60dB pero, la suma de todas ellas sí. ¡No obstante! Todas nos hacen creer que el ruido y la señal son elementos discernibles, aun cuando claramente el problema del ruido es que ¡es inseparable de la señal!. En cada momento, el ruido y la señal cabalgan sobre la forma de onda juntos y a cada instante de la onda (ambas digital y analógica) la misma tiene una y solamente una amplitud la cual es la combinación de señal y ruido. Es de hecho un elemento muy posterior, nuestro cerebro, quien discierne entre las partes de la señal que son ruido y las que no.
Si en algún momento estudiaron física de una manera relativamente formal, sabrán que la mayoría de las mediciones tienen una incertidumbre asociada. Tome una cinta métrica y midan algo. 30.4 cm. ¿Por qué? ¿Por qué no 30.4562342cm?. Resulta que la cita métrica tiene limitaciones sobre lo que puede medir. Tiene unos escalones de cuantificación de 1 mm de longitud, por lo que cada cosa que mide de hecho tiene un incertidumbre de +/- 0.5mm (si quien lo mide es capaz de redondear correctamente durante la medición). Esto es una consecuencia de que la cinta métrica es un sistema discreto PERO, también es una consecuencia de que la longitud de los objetos es una propiedad continua. Debido a esto, el error de cuantificación no es en realidad una propiedad de los sistemas discretos pero una consecuencia de la pérdida de precisión. Por el contrario, medir cuantas páginas tiene un libro no tiene una incertidumbre asociada siempre y cuando se cuente con la precisión suficiente para contarlas todas!
De nuevo esto es una distinción sutil pero importante. Cuando digitalizamos una señal analógica empezamos con un dominio continuo que se ve discretizado en escalones. La señal tenía una amplitud de 0.844543 pero decidimos representarla con 0.84 pues ese era el escalón de cuantificación que mejor representaba dicha amplitud. Debido a esto, lo que sabemos no es que su amplitud es 0.84 sino 0.84 +/- 0.005. Cada vez que reducimos la profundidad de bits incrementamos la distancia entre los escalones, y por lo tanto, incrementamos nuestra incertidumbre sobre nuestra medición y por tanto reduciendo la relación S/R. PERO! La relación S/R claramente es una función del nivel de la señal y la incertidumbre asociada con ese nivel. Debido a esto, cuando la señal adquiere un amplitud grande tendrá una relación S/R mucho más grande que si esta se encuentra cerca de la amplitud 0. Se dice frecuentemente que la profundidad de bits solo determina el “piso de ruido digital” de nuestro archivo pero esto lleva a la gente a pensar en el ruido como eso que esta “allá abajo” y a la señal como eso que está “acá arriba”. Sin embargo, si entendemos que la profundidad de bits determina la incertidumbre de nuestra señal nos damos cuenta de que nunca sabemos si la señal analógica tenía el valor expresado por el escalón de cuantificación digital, sólo podemos tener cierta confianza de que estaba en un espacio próximo a dicho escalón de cuantificación y es este espacio lo que incrementa con la reducción de bits. Es por eso que se llama resolución! Se refiere a nuestra confianza de poder resolver ese valor como una correcta representación del valor analógico.
Ahora que entendemos que el error de cuantificación es un producto de la perdida de precisión, podríamos incluso decir que ciertas señales digitales tiene una relación S/R infinita! Momento… Que?. Resulta que al entender la relación S/R en relación con la incertidumbre producida por la digitalización hemos encontrado un caso en donde no existe el ruido. Supongan una señal digital que recorre cada escalón de cuantificación en cada una de las muestras. En cada posición de la señal no existe incertidumbre alguna porque la señal se encuentra inequívocamente en la amplitud deseada. No existe ruido, porque existe una confianza absoluta de que la amplitud digital es exactamente la amplitud deseada. Por esto el nivel de ruido es -inf y la relación S/R es infinita. Por supuesto esta no es una situación práctica; primero porque al convertir la señal al mundo analógica se verá contaminada por el ruido del CDA (Convertidor de digital a análogo) y segundo porque la mayoría de la señales musicales no cumplirán con esta característica de tener cada una de sus muestras exactamente sobre amplitudes deseadas que concuerda con los escalones de cuantización disponibles. Sin embargo, esto muestra cuan diferentes pueden ser los sistemas discretos y continuos e invita a la pregunta: ¿podemos trasladar todos los conceptos del mundo analógico al digital de manera ciega sin ninguna consecuencia?
Un caso mucho más complicado:
Codificación en coma flotante
De nuevo parece un tema común pero rara vez explicado en detalle. La representación en coma flotante es un esquema de cuantificación y codificación en donde la distancia entre los escalones de cuantización es proporcional al tamaño de la señal por lo que produce una relación S/R relativamente constante (asegurense que al final de esto entiendan esta definición).
Esto se logra representando la amplitude en “notación científica en binario”. Tomemos una amplitud de una señal analógica y escribámosla en notación científica con una mantisa de 3 dígitos y un exponente de 1 dígito (aceptemos signos en ambos para hacerlo más facil): 0.823456 = 8.23 x 10^-1. Noten que el error es de 0.000456 y la incertidumbre es +/- 0.005. Qué pasaría si la señal tuviera una amplitud de 823 456 = 8.23 x 10^5, ahora ambos el error de 486 y la incertidumbre de +/- 500 son significativamente más grandes! Pero qué pasarías is la señal tuviera un valor de 0.000 082 345 6 = 8/23 x 10^-5? El error sería de 0.000 000 045 6 y la incertidumbre de +/- 0.000 000 05 que es significativamente más pequeña. Como puede verse, el comportamiento es completamente diferente al de un cuantificador uniforme con incertidumbre constente.
En la práctica, por lo que todo esto esta implementado en notación binaria, los únicos dígitos disponibles son el 1 y el 0 pero la esencia es la misma. En la IEEE 754 se especifica la estructura del formato de coma flotante de precision sencilla o float de 32 bits que especifica que la mantisa utiliza 23 bits, el signo 1 bit y los 8 bits restantes para el exponente. Por esto muchas personas dicen que 32 bits en coma flotante tiene la misma resolución que 24 bits en coma fija. Sin embargo, la notación en coma flotante de la IEEE tiene un pequeño truco que hace que en realidad se extienda esta precisión a 25 bits de relación S/R constante.
Los números no normalizados!
Recuerdan que en nuestra notación científica teníamos tres dígitos para la mantisa? (e.g. 8.23 x 10^5). Esto supuestamente nos daba una relación constante S/R ya que la incertidumbre era proporcional a la amplitud de la señal pero hay un caso en particular donde esto no ocurre: Números MUY pequeños. Consideremos el número 0.0000000000823456 = 8.23 x ^-11 pero dado que impusimos el requisito de que el exponente sólo podría tener un dígito tendremos que escribirlo como 0.08 x 10^-9. La consecuencia de esto es que perdimos dos ordenes de precision (incrementamos la incertidumbre) porque tuvimos que eliminar el usual .23 de los otros casos para acomodar el exponente con un sólo dígito. En este punto la relación S/R se vuelve variable y dependiente de la señal de la misma manera que en un cuantificador uniforme. Cuando esto pasa, cuando la mantisa tiene ceros a la izquierda porque el exponente no puede ser más negativo, aun cuando el número es representable se llama no normalizado o subnormal. Y aunque esto está bastante lejos del uso típico del audio (algo así como -758dB) algunos algoritmos en DSP (procesamiento digital de señales por sus siglas en inglés) se aproximan de manera asintótica a 0 (como reverberaciones y filtros IIR) y cuando llegan al rango subnormal la mayoría de los procesadores incurren en problemas de desempeño en donde cada operación puede tardar hasta 100 veces más de lo que tardaría en el rango normal. Por esto es muy importante que los desarrolladores de DSP se aseguren de que esto nunca pase aunque no siempre este es el caso.
Pero cual es el gran truco? Resulta que debido a que la notación en binario solo utiliza dos dígitos (el 1 y el 0), y debido a que la mayoría de los números son normales (aquellos que empiezan con un 1 antes de la “coma flotante”), el estándar establece que dicho 1 se codifica de manera implícita. Debido a esto es posible ahorrarse 1 bit permitiendo una resolución equivalente a 25 bits.
¿Por qué todo esto hace una diferencia?
Nótese que la aproximación común a la relación S/R y rango dinámico es comparar el valor más alto posible aceptado por el sistema contra el piso de ruido del sistema bien sea midiéndolo o entendiendo analíticamente el menor valor representable por el mismo. SIN EMBARGO, noten que cuando el rango dinámico y la relación S/R se entienden desde la perspectiva de la incertidumbre de la medición en cada instante, uno se da cuenta rápidamente que la incertidumbre es mayor cuando la señal es grande en coma flotante, que la relación señal a rudio es constante a través de los valores normalizados, que la incertidumbre puede ser inexistente si la señal nació en el mundo digital, que los conceptos del mundo analógico no se pueden transferir de manera tan precisa al mundo digital por lo que un entendimiento correcto de los sistemas digitales es esencial para evitar confusiones.
La gráfica que lo resume todo
La siguiente gráfica muestra la relación S/R d diferentes profundidades de bit en coma fija en cuantificadores de medio escalón, adicionalmente la relación S/R se muestra para el formato formato de coma flotante de precision sencilla IEEE754 (el cual de hecho es un cuantificador no uniforme de medio escalón). Con algo de suerte la gráfica tendrá algo de sentido para este punto. Las gráficas muestran la relación S/R para diferentes formatos. Los primeros 8, 16, 24 y 32 Bits son en coma fija y los siguientes son en coma flotante en donde el primer valor representa la cantidad de bits asignados al exponente y el segundo a la mantisa. Noten que el extremo izquierdo de los de coma flotante se vuelve pendiente al igual que los de coma fija! Me imagino que ya saben porqué pasa esto :)
Conclusiones
Quizás lo más difícil de interiorizar de todo esto es desprenderse de la idea de que los sistemas digitales tiene un piso de ruido con un comportamiento comparable al analógico. Como vimos, la error de cuantificación viene de la pérdida de precisión y no por la naturalidad discreta del sistema. Dicho error de cuantificación esta limitado por la separación entre los escalones de cuantificación pero esto sólo en la cuantificación uniforme. En coma flotante por el contrario el error de cuantificación es proporcional al tamaño de la señal por lo que, evidentemente, la relación S/R es constante (salvo en el rango subnormal!).
Espero todo esto les de una perspectiva diferente acerca del rango dinámico de los sistemas digitales y de cómo se comporta realmente el error de cuantificación. Quedan infinidad de cosas por conversar a propósito de este tema, implicaciones, consecuencias, detalles pequeños y no tan pequeños. ¿Cómo esta precision afecta el procesamiento? ¿Es mejor el procesamiento en coma fija o coma flotante? ¿Cómo pude escribir tanto acerca de esto sin siquiera empezar a hablar del dither? ¿El dither también debería aplicarse en coma flotante?
Infinidad de cosas que me gustaría discutir pero por ahora hasta acá llegará este articulo.
Como siempre, estoy abierto a cualquier duda o comentario :D
Hola: No consigo ver los widgets y lo que es peor, no sé a qué se debe. ¿Puedes darme una solución? Gracias.
Estoy impresionado con tus artículos. Manejas conocimientos que están muy por encima de mi entendimiento, pero me resultan de gran ayuda para ir aclarando conceptos sobre audio digital. Te estoy muy agradecido porque estos temas, con la profundidad que tú los tratas en español, son muy escasos y te animo a que sigas publicando más artículos, por ejemplo sobre el Dither como aquí anuncias y seguro nos sorprenderás con ideas que desconocemos. No me atrevo a preguntarte cosas que das por sentadas y que deben ser obvias, por lo que considero que debo investigar por mi cuenta antes de hacerte perder el tiempo. Pero si te ruego que aclares en el último gráfico, lo que significan los términos de coma flotante…