因此,根据我的理解,可以通过离散傅立叶变换执行卷积。从我阅读的过程来看,简单地涉及多个内核和输入的DFT。但是,我无法理解如何实现光谱的实际乘法,因为两个不同大小的阵列的DFT会有所不同。
所以在psuedocode中假设我有一个长度为1024的数组arr
和长度为8的内核kern
。
要获得arr
和kern
的卷积,我执行:
IDFT(DFT(arr)*DFT(kern))
但是DFT(arr)
是一个长度为1024的数组,而DFT(kern)
是一个长度为8的数组。那么它们是如何相乘的呢?
答案 0 :(得分:3)
要使用DFT进行卷积,DFT的大小必须至少与卷积结果一样大 - 内核大小加上输入大小。您将它们都填充到此大小,然后对DFT和IDFT使用相同的大小。
请注意,如果您的内核比您的输入小得多,那么根本不会有效。在这种(通常的)情况下,您可以使用overlap-add或overlap-save方法将输入划分为与内核大小相同的块。
例如,请参阅:https://www.youtube.com/watch?v=FPzZj30hPY4
对于非常小的内核,这仍然效率不高。如果你的内核真的只有8个样本,那么你就不应该为这些东西烦恼。简单的实现会更快。