使用np.fft时卷积定理的离散形式是什么?

问题描述 投票:0回答:1

首先,这不是重复的!我在这个网站上发现了类似的问题,但他们没有回答这个问题。

我尝试在Python中使用卷积定理。我有两个 N*N 数组,我可以在其中更改 N 的值。

例如,

import numpy as np
import scipy.signal as sp
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.fft.fft2(a*b)
signal.convolve2d(np.fft.fft2(a), np.fft.fft2(b), mode='same', boundary='wrap') / 9

/9 的出现是因为 Numpy

fft
使用向后归一化,我需要在这里除以元素的数量。不过,上述两人并不认同。我不知道我哪里错了。

我需要注意,当 N = 2 时,即当数组的大小为 2x2 时,上面的代码会以某种方式工作。

我想知道我哪里出错了,以及 FT(f .* g) = FT(f) * FT(g) 的正确示例

python python-3.x fft convolution
1个回答
0
投票

FFT( 卷积(a,b)) = FFT(a) * FFT(b)

np.fft.fft2(a)*np.fft.fft2(b)
array([[2025.   +0.j        ,   13.5 -23.3826859j ,   13.5 +23.3826859j ],
       [ 121.5-210.44417312j,    0.   +0.j        ,    0.   +0.j        ],
       [ 121.5+210.44417312j,    0.   +0.j        ,    0.   +0.j        ]])
np.fft.fft2(sp.convolve2d(a,b, mode='same', boundary='wrap') )

array([[2025.   +0.j        ,   13.5 +23.3826859j ,   13.5 -23.3826859j ],
       [ 121.5+210.44417312j,    0.   +0.j        ,    0.   +0.j        ],
       [ 121.5-210.44417312j,    0.   +0.j        ,    0.   +0.j        ]])
© www.soinside.com 2019 - 2024. All rights reserved.