Os métodos de filtragem baseados em FFT adicionam latência intrínseca a um algoritmo em tempo real?

7

Em um aplicativo de processamento de áudio atual, estou trabalhando inteiramente no domínio do tempo usando filtros IIR. É assim que posso usar um buffer de áudio de apenas 3 ou 4 amostras e garantir que haverá alguma forma de saída de áudio dentro desse quadro.

Se eu alternasse para filtros baseados em FIR (para reduzir o tempo de toque do filtro, conforme descrito nesta pergunta ), provavelmente precisaria usar uma técnica de sobreposição-adição baseada em FFT para manter a eficiência do processamento. A meu ver, eu teria que preencher um buffer de quadro FFT com amostras antes de poder fazer as transformações. Isso adicionaria uma latência intrínseca ao algoritmo proporcional ao número de amostras usadas para calcular a FFT. Estou perdendo um truque?

learnvst
fonte

Respostas:

10

Você está certo. O processamento baseado em FFT adiciona latência inerente ao seu sistema. No entanto, existem maneiras de ajustar isso.

Vamos supor que você tenha um filtro FIR de comprimento "N". Isso pode ser implementado com base na FFT usando o método de adição ou sobreposição padrão de sobreposição padrão, onde o comprimento da FFT seria 2 * N. A latência geral do sistema também será aproximadamente 2 * N: você precisa acumular um quadro de N amostras e, enquanto acumula o próximo quadro de entrada, faça as contas no quadro atual. Quando o segundo quadro for acumulado (deslocamento de tempo 2 * N), o primeiro quadro estará pronto para sair. Se você tem uma CPU rápida, pode acelerar isso um pouco, usando alinhamento diferente para os quadros de entrada e saída, mas isso normalmente é mais incômodo do que vale a pena.

Você também pode dividir o filtro em K blocos menores de comprimento M, ou seja, N = K * M. A FFT precisa ser feita apenas em amostras de entrada M e o atraso e a acumulação nas várias seções do filtro são feitos no domínio da frequência. Bill Gardner descreveu alguns sabores disso aqui: http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/Ga95.PDF É frequentemente chamado de "Convólvulo de Bloco".

Isso permite basicamente compensar a latência contra a eficiência e fornece um continuum entre o FIR direto e o método de adição de sobreposição de tamanho normal. Um bom efeito colateral do Block Convolver é que o comprimento total do filtro não precisa ser uma potência de 2. Por exemplo, você pode implementar um filtro de 768 guias como 6 blocos de 128 sem perda significativa de eficiência.

Hilmar
fonte
Dica agradável sobre o convólvulo do bloco! Obrigado
learnvst