基于 FFT 的过滤方法是否会为实时算法增加固有延迟?

信息处理 fft 无限脉冲响应 有限脉冲响应
2022-01-18 19:48:43

在当前的音频处理应用程序中,我使用 IIR 滤波器完全在时域中工作。这样我就可以使用只有 3 或 4 个样本的音频缓冲区,并且可以保证在该帧内会有某种形式的音频输出。

如果我要切换到基于 FIR 的滤波器(以减少此问题中概述的滤波器振铃时间),我可能需要使用基于 FFT 的重叠相加技术来保持处理效率。如我所见,我必须先用样本填充 FFT 帧缓冲区,然后才能进行转换。这将给算法增加一个与用于计算 FFT 的样本数量成比例的固有延迟。我错过了一个技巧吗?

1个回答

你是对的。基于 FFT 的处理为您的系统增加了固有的延迟。但是,有一些方法可以对此进行调整。

假设您有一个长度为“N”的 FIR 滤波器。这可以使用标准重叠添加或重叠保存方法实现基于 FFT,其中 FFT 长度为 2*N。总体系统延迟也将大约为 2*N:您需要累积 N 个样本的帧,然后在累积下一个输入帧时,对当前帧进行数学运算。当第二帧已经累积(时间偏移 2*N)时,第一帧已经准备好出去了。如果你有一个快速的 CPU,你可以通过对输入和输出帧使用不同的对齐方式来加快速度,但这通常比它的价值更麻烦。

您还可以将过滤器分解为 K 个长度为 M 的较小块,即 N = K*M。FFT 只需要在 M 个输入样本上完成,多个滤波器部分的延迟和累积在频域中完成。Bill Gardner 在这里描述了一些风格:http ://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/Ga95.PDF 它通常被称为“块卷积器”。

这允许基本上权衡延迟与效率,并提供直接 FIR 和全尺寸重叠添加方法之间的连续统一体。块卷积器的一个很好的副作用是总过滤器长度不必是 2 的幂。例如,您可以将 768 个选项卡的过滤器实现为 128 个块的 6 个块,而不会显着降低效率。