使用 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 之间。
我读到为了计算两个信号 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 之间。