我正在使用基于Radix-2 Cooley-Tukey FFT / FFT-inverse的卷积实现,我的输出是正确的,但在完成后会产生位移。
我的解决方案是将输入尺寸和内核尺寸都用最小可能的m填充到2 ^ m,使用FFT转换两个元素,然后按元素相乘并使用FFT-inverse将结果转换回来。
以下是一个关于结果问题的示例:
0 1 2 3 0 0 0 0
4 5 6 7 0 0 0 0
8 9 10 11 0 0 0 0
12 13 14 15 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
使用身份内核
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
变成
0 0 0 0 0 0 0 0
0 0 1 2 3 0 0 0
0 4 5 6 7 0 0 0
0 8 9 10 11 0 0 0
0 12 13 14 15 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
似乎对于任何尺寸的输入和卷积核,都会产生相同的位移(1行和1列),但我可能错了。我在这个链接上使用在线计算器进行了相同的计算,并得到了相同的结果,所以很可能是我缺少一些基础知识。我的可用文献没有帮助我解决问题。因此,我的问题是:为什么会发生这种情况?