Debe conocer los requisitos numéricos de su algoritmo y elegir la precisión en consecuencia.
Hagamos los cálculos aquí: un punto flotante de 32 bits tiene una mantisa de 24 bits y un exponente de 8 bits. Esto le proporciona una relación señal / ruido de aproximadamente 150 dB en un rango dinámico de aproximadamente 1540 dB. Eso es suficiente para la mayoría de las cosas de audio. La doble precisión te da aproximadamente el doble.
Cada algoritmo tiene ciertos requisitos para la precisión numérica. Si se diseñaron correctamente, todos los algoritmos de audio que conozco funcionan muy bien con coma flotante de 32 bits. "correctamente diseñado" es la palabra clave aquí. Por ejemplo, un paso de banda de sexto orden de 40-200 Hz muestreado a 44,1 kHz implementado como un filtro directo de II IIR bi-quad tendrá algunos problemas de ruido a 32 bits. Sin embargo, funciona perfectamente bien como forma transpuesta II o forma directa I filtro.
Si intenta una expansión de fracción parcial del mismo filtro de paso de banda utilizando, por ejemplo, la función residualz () de Matlab, obtendrá malos resultados incluso con doble precisión. Nuevamente, los requisitos numéricos del algoritmo para esos datos de entrada específicos exceden lo que la doble precisión tiene para ofrecer. La clave para solucionar esto no es aumentar la precisión a ciegas, sino utilizar un mejor algoritmo.
Finalmente, echemos un vistazo a lo que hace que la flotación (32 bits o 64 bits) sea vulnerable: tiene un rango dinámico enorme, es decir, puede reducir la señal en 200dB, amplificar en 500dB, reducir nuevamente en 300dB y termina exactamente donde comenzó casi sin pérdida de precisión en absoluto. Entonces eso no es todo. El punto flotante tiene problemas para agregar números que son muy diferentes en tamaño. Hay un punto en el que agregar un número pequeño simplemente no hace ninguna diferencia, es decir, obtienes 1 + dx = 1. Este número "dx" es aproximadamente 1.2e-7 para coma flotante de 32 bits y 2.2e-16 para 64 bits. Si su algoritmo incluye sumar o restar números que están tan separados en magnitud, puede tener problemas.
Un buen ejemplo de esto es el filtro Direct Form II mencionado anteriormente: El filtro directo From II (ver, por ejemplo, https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html ) básicamente calcula las variables de estado filtrando la entrada con la función de transferencia de solo polo primero y luego filtrando con los ceros para crear la salida. Ahora, si los polos están cerca del círculo unitario, la función de transferencia de solo polo se vuelve muy, muy grande. Por lo tanto, la variable de estado puede ser mucho más grande que la entrada (80db a 100dB más grande) y sumar variables de estado con la entrada crea mucho ruido.
La solución aquí es ir a un Formulario II transpuesto o un filtro de Formulario I directo. El análisis muestra que las variables de estado no pueden ser más grandes que la entrada / salida, entonces tal vez 12dB o más, por lo que el problema de magnitud no coincide en primer lugar.