因此,我知道FFT卷积比实空间卷积具有更低的计算复杂度。但是FFT卷积的缺点是什么呢?
内核大小是否总是必须与映像大小相匹配,或者是否有函数来处理这个问题,例如,在pythons和scipy包中?那么抗混叠效果呢?
发布于 2013-08-22 15:56:10
卷积定理卷积基于f和g两种函数,如果Fd()和Fi()表示正、逆傅里叶变换,以及*和.卷积和乘法,则:
f*g = Fi(Fd(d).Fd(g))要将其应用于信号f和内核g,需要处理一些事情:
f和g必须具有相同的大小,因此您需要对内核进行零填充(或者输入,如果内核比内核长)。如果您的信号和内核大小为f_l和g_l,则在时域中进行简单的卷积需要g_l * (f_l - g_l + 1)乘法和(g_l - 1) * (f_l - g_l + 1)加法。
对于快速傅立叶变换方法,你必须至少做3个大小为f_l + g_l的FFT,以及f_l + g_l乘法。
对于大尺寸的f和g,其n*log(n)复杂度明显优于前者。对于小内核来说,直接的方法可能更快。
scipy.signal有convolve和fftconvolve方法供您使用。fftconvolve为您透明地处理上面描述的所有填充。
发布于 2013-08-23 15:44:31
而快速卷积比直接形式卷积具有更好的“大O”复杂度,但也有一些缺点或注意事项。我为文章做了一些思考,我写了一段时间前的文章。
https://stackoverflow.com/questions/18384054
复制相似问题