使用 FFT 的卷积有多快

How Fast is Convolution Using FFT

我读到为了计算两个信号 x,y(例如 1D)的卷积,朴素方法采用 O(NM)

然而,FFT 用于计算 FFT^-1(FFT(x)FFT(y)),在 N>M.

的情况下需要 O(N log(N))

我想知道为什么这种复杂性被认为比前一种复杂性更好,因为 M 不一定大于 log(N)。此外,M 通常是滤波器的长度,它与要过滤的信号无关,实际上会为我们提供更类似于 O(N) 而不是 O(N^2) 的复杂度。

当滤波器的大小超过特定阈值时,频域中的快速卷积通常比直接卷积更有效。因此,对于相对较小的滤波器,直接卷积更有效,而对于较长的滤波器,基于 FFT 的卷积更有效。 "tipping point" 的实际 m 值取决于很多因素,但通常介于 10 和 100 之间。