首先,这不是重复的!我在这个网站上发现了类似的问题,但他们没有回答这个问题。
我尝试在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) 的正确示例
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 ]])