【问题标题】:Why is my convolution result shifted when using FFT为什么我的卷积结果在使用 FFT 时会发生偏移
【发布时间】:2015-04-20 11:40:51
【问题描述】:

我正在使用 Radix-2 Cooley-Tukey FFT/FFT-inverse 实现卷积,我的输出是正确的,但在完成时发生了偏移。

我的解决方案是将输入大小和内核大小都归零为 2^m 以获得最小的 m,使用 FFT 转换输入和内核,然后将两个元素相乘并使用 FFT 逆将结果转换回来。

作为结果问题的示例:

 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 列),但我可能是错的。我使用this link 的在线计算器执行了相同的计算!并得到相同的结果,所以可能是我缺少一些基础知识。我现有的文献没有帮助。所以我的问题是,为什么会发生这种情况?

【问题讨论】:

  • 您的身份内核应该是 4x4 大小,对吧?将 1 放在索引 [2,2] 中(从零开始),我认为您会得到更好的结果。
  • 是的,内核是 4x4,我相应地编辑了帖子。我不确定您所说的从零开始是什么意思,但是将 1 放在 [2,2] 会进一步改变它。将 1 放在 [0,0] 会产生正确的结果,但我不明白为什么。是不是因为我需要对内核进行循环移位,所以中心(这里是 1)位于 [0,0] 位置?
  • 对不起,如果我不清楚。 FFT 内核中左上角元素的索引应为 -n/2,其中 n 是行数和列数。因此,对于 4x4 内核,(0,0) 位置位于第三行第三列。
  • 感谢您的回复。但是,仍然不清楚我应该如何索引它,更不用说解释为什么会发生这种情况(理论上)。使用大小为 5x5 的内核零填充到 8x8 会产生相同的结果(仅移动 1 行和 1 列)。你说左上角应该是-n/2。所以你说的是,在执行 FFT 时应该在左上角,在那之前是 -n/2。嗯。 -n/2 怎么不是负索引?是移位量吗?以及如何确定内核锚点/中心?哦,天哪,我不明白...对不起...

标签: signal-processing fft shift convolution


【解决方案1】:

所以我最终找到了答案为什么会发生这种情况。答案是通过卷积的定义和在那里发生的索引给出的。所以根据定义,sk 的卷积由

给出
(s*k)(x) = sum(s(k)k(x-k),k=-inf,inf)

这个公式“知道”内核的中心,因此我们进行了抽象。将 c 定义为卷积的中心。当x-k = c在总和中时,s(k)就是s(x-c)。因此,包含有趣乘积 s(x-c)k(c) 的总和在索引 x 处结束。换句话说,向右移动 c

【讨论】:

    【解决方案2】:

    FFT 快速卷积进行循环卷积。如果您将零填充以使数据和内核都以 (0,0) 为中心在相同大小的 NxN 数组中循环居中,则结果也将保持居中。否则会添加任何偏移量。

    【讨论】:

    • 这是否意味着内核 [ [0,0,0], [0,0,0], [0,c,0]],其中 'c' 是内核中心,将准确地向下移动 2 行和 1 列吗?这对我来说有点道理。既然你说以(0,0)为中心,我得到的印象是“相对于内核中心”,这将允许负指数。对吗?
    • “相对于内核中心”是的。带有“左上角”部分的环绕负索引。
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2019-12-01
    • 2021-11-19
    • 2013-08-25
    • 1970-01-01
    • 2012-12-10
    • 2020-02-04
    • 2022-09-29
    相关资源
    最近更新 更多