Vous devez connaître les exigences numériques de votre algorithme et choisir la précision en conséquence.
Faisons donc le calcul ici: un point flottant de 32 bits a une mantisse de 24 bits et un exposant de 8 bits. Cela vous donne un rapport signal / bruit d'environ 150 dB sur une plage dynamique d'environ 1540 dB. C'est beaucoup pour la plupart des choses audio. La double précision vous en donne environ deux fois plus.
Chaque algorithme a certaines exigences de précision numérique. S'ils sont correctement conçus, tous les algorithmes audio que je connais font très bien avec la virgule flottante 32 bits. "correctement conçu" est le mot clé ici. Par exemple, une bande passante de 6e ordre de 40-200 Hz échantillonnée à 44,1 kHz implémentée en tant que filtre bi-quadruple direct II IIR aura en effet des problèmes de bruit à 32 bits. Cependant, il fonctionne parfaitement bien comme filtre transposé de forme II ou direct de forme I.
Si vous tentez une expansion de fraction partielle du même filtre passe-bande en utilisant par exemple la fonction residuez () de Matlab, vous obtiendrez de mauvais résultats même avec une double précision. Encore une fois, les exigences numériques de l'algorithme pour ces données d'entrée spécifiques dépassent ce que la double précision a à offrir. La clé pour résoudre ce problème n'est pas d'augmenter aveuglément la précision, mais d'utiliser un meilleur algorithme à la place.
Enfin, examinons ce qui rend le flottant (32 bits ou 64 bits) vulnérable: vous avez une plage dynamique énorme, c'est-à-dire que vous pouvez réduire le signal de 200 dB, amplifier de 500 dB, réduire à nouveau de 300 dB et vous vous retrouvez exactement là où vous avez commencé avec presque aucune perte de précision que ce soit. Ce n'est donc pas ça. La virgule flottante a du mal à ajouter des nombres de tailles très différentes. Il y a un point où l'ajout d'un petit nombre ne fait aucune différence, c'est-à-dire que vous obtenez 1 + dx = 1. Ce nombre "dx" est d'environ 1,2e-7 pour la virgule flottante 32 bits et 2,2e-16 pour 64 bits. Si votre algorithme inclut l'ajout ou la soustraction de nombres d'une amplitude aussi éloignée, vous risquez de rencontrer des problèmes.
Un bon exemple est le filtre Direct Form II mentionné précédemment: le filtre direct From II (voir par exemple https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html ) calcule essentiellement les variables d'état en filtrant l'entrée avec la fonction de transfert de pôle uniquement, puis le filtrage avec les zéros pour créer la sortie. Maintenant, si les pôles sont proches du cercle unitaire, la fonction de transfert de pôle uniquement devient très, très grande. Ainsi, la variable d'état peut être beaucoup plus grande que l'entrée (80 dB à 100 dB plus grande) et la somme des variables d'état avec l'entrée crée beaucoup de bruit.
La solution ici est de passer à un filtre transposé de forme II ou direct de forme I. L'analyse montre que les variables d'état ne peuvent pas être plus grandes que l'entrée / sortie, alors peut-être 12 dB ou environ, de sorte que l'inadéquation de l'amplitude du problème ne se produit pas en premier lieu.