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.