¿Los métodos de filtrado basados ​​en FFT agregan latencia intrínseca a un algoritmo en tiempo real?

7

En una aplicación de procesamiento de audio actual, estoy trabajando completamente en el dominio del tiempo usando filtros IIR. Esto es para que pueda usar un búfer de audio de solo 3 o 4 muestras y puedo garantizar que habrá alguna forma de salida de audio dentro de ese marco.

Si tuviera que cambiar a filtros basados ​​en FIR (para reducir el tiempo de timbre del filtro como se describe en esta pregunta ), probablemente necesitaría usar una técnica de adición de solapamiento basada en FFT para mantener la eficiencia del procesamiento. Tal como lo veo, tendría que llenar un búfer de trama FFT con muestras antes de poder hacer las transformaciones. Esto agregaría una latencia intrínseca al algoritmo proporcional al número de muestras utilizadas para calcular la FFT. ¿Me estoy perdiendo un truco?

aprender
fuente

Respuestas:

10

Estás en lo correcto. El procesamiento basado en FFT agrega latencia inherente a su sistema. Sin embargo, hay formas de modificar esto.

Supongamos que tiene un filtro FIR de longitud "N". Esto se puede implementar basado en FFT utilizando el método de adición o guardado de superposición estándar, donde la longitud de FFT sería 2 * N. La latencia general del sistema también será aproximadamente 2 * N: necesita acumular un marco de N muestras y luego, mientras acumula el siguiente marco de entrada, haga los cálculos en el marco actual. Para cuando se haya acumulado el segundo cuadro (compensación de tiempo 2 * N), el primer cuadro está listo para salir. Si tiene una CPU rápida, puede acelerar esto un poco usando una alineación diferente para los marcos de entrada y salida, pero eso suele ser más molesto de lo que vale.

También puede dividir el filtro en K bloques más pequeños de longitud M, es decir, N = K * M. La FFT solo debe realizarse sobre M muestras de entrada y el retraso y la acumulación sobre las múltiples secciones de filtro se realiza en el dominio de frecuencia. Bill Gardner describió algunos de los sabores de eso aquí: http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/Ga95.PDF A menudo se lo conoce como "Block Convolver".

Esto permite, básicamente, compensar la latencia con la eficiencia y proporciona un continuo entre el FIR directo y el método de adición de superposición de tamaño completo. Un buen efecto secundario del Block Convolver es que la longitud total del filtro no tiene que ser una potencia de 2. Por ejemplo, puede implementar un filtro de 768 pestañas como 6 bloques de 128 sin ninguna pérdida significativa de eficiencia.

Hilmar
fuente
Buen consejo sobre el bloque de convolver! Gracias
learnvst