【问题标题】:Low pass filter using FFT instead of convolution implementation使用 FFT 代替卷积实现的低通滤波器
【发布时间】:2011-03-06 07:50:42
【问题描述】:

实现低通 FIR 滤波器,什么时候应该使用 FFT 和 IFFT 而不是时域卷积?

目标是实现实时计算所需的最低 CPU 时间。据我所知,FFT 的复杂度约为 O(n log n),但时域中的卷积复杂度为 O(n²)。要在频域实现低通滤波器,应该使用 FFT,然后将每个值乘以滤波系数(转换为频域),然后进行 IFFT。

那么,问题是什么时候使用基于频率的 (FFT+IFFT) 滤波而不是使用基于直接卷积的 FIR 滤波器是合理的?比如说,如果一个有 32 个定点系数,是否应该使用 FFT+IFFT? 128个系数怎么样?等等……

试图优化现有的源代码(基于卷积的 FIR 滤波器),我完全糊涂了,要么我应该使用 FFT,要么只是优化它以使用 SSE。

【问题讨论】:

    标签: c math audio signal-processing fft


    【解决方案1】:

    卷积实际上是 O(m*n),其中 m 是有限脉冲响应的宽度,N 是样本窗口。

    因此,m 的临界点在改变为 FFT+IFFT 时是有用的,这与样本窗口的 log(N) 有关。

    在实时操作中,FFT 是面向批处理的这一事实可能比时钟周期的相对数量更重要,因为在过滤之前等待 1024 个采样点可能是不可接受的,例如,如果应用程序处于调节循环中。

    现在已经在这个领域进行了大量开发,并且有大量代码可用,因此尝试几种解决方案和基准测试是这里的关键。

    【讨论】:

      【解决方案2】:

      这取决于您使用的架构和各种其他因素,但一维 DSP 的一般“经验法则”是,如果滤波器尺寸很小,比如少于 100 个项,您可能会更好直接卷积,但对于较大的滤波器尺寸,可能值得在频域进行快速卷积。

      当然,您首先需要确定过滤是性能瓶颈,因为如果您的时域实现已经足够快,那么进行快速卷积的所有额外工作都没有意义。

      底线:从简单的直接卷积开始,然后如果您需要它,然后切换到快速卷积。 (您需要保留第一个实现来验证第二个实现,因此无论如何都不会浪费精力。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-09
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        相关资源
        最近更新 更多