Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两个fft函数的卷积_Python_Numpy_Fft - Fatal编程技术网

Python 两个fft函数的卷积

Python 两个fft函数的卷积,python,numpy,fft,Python,Numpy,Fft,卷积定理F(x.y)=F(x)*F(y) 然而,在python上实现它之后 x = np.array([0,0,0,0,1, 2, 3, 4, 0 ,0,0,0]) y = np.array([0,0,0,0,-3, 5, -4, 0, 0, 0,0,0]) xy = x*y inverse_fft_xy = np.fft.ifft(np.convolve(np.fft.fft(x),np.fft.fft(y))) 将屈服 xy array([ 0, 0, 0, 0, -3

卷积定理F(x.y)=F(x)*F(y)

然而,在python上实现它之后

x = np.array([0,0,0,0,1, 2, 3, 4, 0 ,0,0,0])
y = np.array([0,0,0,0,-3, 5, -4, 0, 0, 0,0,0])

xy = x*y
inverse_fft_xy = np.fft.ifft(np.convolve(np.fft.fft(x),np.fft.fft(y)))
将屈服

xy

array([  0,   0,   0,   0,  -3,  10, -12,   0,   0,   0,   0,   0])

inverse_fft_xy

array([  0.00000000e+00,  -8.70383905e-01,   1.65925305e-02,
    -8.90888514e-01,   7.07822398e-02,  -8.80447879e-01,
     1.19687210e-01,   3.09247006e+00,  -9.54481834e+00,
    -5.81203213e+00,   2.15726342e+01,  -1.47366137e+01,
    -1.03012447e+01,   2.76823117e+00,  -1.42560168e+00,
     4.98000293e-01,  -1.18537317e+00,   2.02675981e-01,
    -9.98770784e-01,   7.43392335e-02,  -9.11516399e-01,
     1.67799168e-02,  -8.74501632e-01])
matlab也是如此


我知道应该填充零以避免线性卷积。同样,定理F(x*y)=F(x)。F(y)的另一种方法也可以实现。我只是想知道为什么不能这样做。

时域乘法实际上是频域中的循环卷积,如下所示:

为了计算循环卷积,可以使用以下方法实现:

Xf = np.fft.fft(x)
Yf = np.fft.fft(y)
N = Xf.size    # or Yf.size since they must have the same size
conv = np.convolve(Xf, np.concatenate((Yf,Yf)))
conv = conv[N:2*N]
inverse_fft_xy = np.fft.ifft(conv) / N
以致

x = np.array([1, 2, 3, 4])
y = np.array([-3, 5, -4, 0])
(没有比使两个数组具有相同大小所需的更多的零填充)将产生预期的:

xy

array([  -3,  10, -12,   0  ])

inverse_fft_xy

array([ -3.+0.j, 10.+0.j, -12.+0.j, 0.+0.j])

它应该是F{x,y}