Você precisa conhecer os requisitos numéricos do seu algoritmo e escolher a precisão de acordo.
Então, vamos fazer as contas aqui: um ponto flutuante de 32 bits tem uma mantissa de 24 bits e um expoente de 8 bits. Isso fornece uma relação sinal / ruído de cerca de 150 dB em uma faixa dinâmica de cerca de 1540 dB. Isso é suficiente para a maioria das coisas em áudio. A precisão dupla oferece aproximadamente o dobro.
Cada algoritmo possui certos requisitos para precisão numérica. Se projetado adequadamente, todos os algoritmos de áudio que eu conheço fazem muito bem com o ponto flutuante de 32 bits. "projetado corretamente" é a palavra-chave aqui. Por exemplo, uma passagem de banda de 6ª ordem de 40-200 Hz amostrada em 44,1kHz implementada como filtro direto do II IIR bi-quad terá de fato alguns problemas de ruído em 32 bits. No entanto, funciona perfeitamente bem como forma transposta II ou forma direta I filtrada.
Se você tentar uma expansão de fração parcial do mesmo filtro de passagem de banda usando, por exemplo, a função residuez () do Matlab, obterá resultados ruins, mesmo com precisão dupla. Novamente, os requisitos numéricos do algoritmo para esses dados de entrada específicos excedem o que a precisão dupla tem a oferecer. A chave para corrigir isso não é aumentar cegamente a precisão, mas usar um algoritmo melhor.
Finalmente, vamos dar uma olhada no que torna a flutuação (32 bits ou 64 bits) vulnerável: você tem uma enorme faixa dinâmica, ou seja, você pode reduzir o sinal em 200dB, amplificar em 500dB, reduzir novamente em 300dB e terminar exatamente onde começou com quase nenhuma perda de precisão. Então não é isso. O ponto flutuante tem problemas para adicionar números de tamanho muito diferente. Há um ponto em que adicionar um número pequeno simplesmente não faz diferença, ou seja, você recebe 1 + dx = 1. Esse número "dx" é de cerca de 1,2e-7 para ponto flutuante de 32 bits e 2,2e-16 para 64 bits. Se o seu algoritmo incluir adicionar ou subtrair números tão distantes em magnitude, você poderá encontrar problemas.
Um bom exemplo disso é o filtro Direct Form II mencionado anteriormente: O filtro direto From II (consulte, por exemplo, https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html ) basicamente calcula as variáveis de estado filtrando a entrada com a função de transferência somente de polo primeiro e depois filtrando com os zeros para criar a saída. Agora, se os polos estiverem próximos do círculo unitário, a função de transferência somente de polos fica muito, muito grande. Portanto, a variável de estado pode ser muito maior que a entrada (80db a 100dB maior) e a soma de variáveis de estado com a entrada cria muito ruído.
A solução aqui é ir para um filtro de Formulário II transposto ou Formulário I direto. A análise mostra que as variáveis de estado não podem ser maiores que a entrada / saída, talvez 12dB ou aproximadamente, portanto a incompatibilidade de magnitude do problema não ocorre em primeiro lugar.