【发布时间】:2019-11-22 09:38:35
【问题描述】:
我是卷积的新手,因此想通过使用 FFT 将两个 1D 信号卷积在一起来向自己证明卷积定理。但是我的代码和np.convolve得到的结果不一致。
我使用了来自 solution 的幼稚实现:
import numpy as np
def Convolution(array,kernel):
return np.real(np.fft.ifft( np.fft.fft(array)*np.fft.fft(kernel) ))
a_flat = [ 1., 2., 3., 0., 0., 4., 5., 6., 0., 0. , 7., 8., 9.]
k_flat = [ 1,2 ,1 ,0,0 ,0 ,0,0 ,0 ,0,-1,-2,-1]
my_convolution = Convolution(a_flat, k_flat)
np_convolution = np.convolve(a_flat, k_flat)
print(my_convolution)
print("")
print(np_convolution)
输出如下:
[ 19. 10. 4. -5. -17. -13. 7. 13. -5. -26. -20. 9. 24.]
[ 1. 4. 8. 8. 3. 4. 13. 20. 17. 6. 6. 18. 24. 18. 6. -4. -13. -20. -17. -6. -7. -22. -32. -26. -9.]
我显然遗漏了一些东西。有人可以指出我的疏忽吗?
【问题讨论】:
-
您在自己的实现中进行循环卷积 - 您需要用零填充以获得正确的卷积。 (或者我弄错了,你实际上在这两种情况下都想要循环卷积?)
-
要详细说明 Paul 的答案,您可以在此处找到与您类似的问题/答案:mathworks.com/matlabcentral/answers/… 代码在 matlab 中,但推理是相同的 :)
标签: python numpy signal-processing fft convolution