我有一個關於python的fftconvolve
的問題。在我目前的研究中,我被要求計算兩個函數之間的一些卷積。爲此,我使用傅立葉變換(我使用numpy.fft
並對其進行歸一化)進行計算。問題是,如果我想用fftconvolve
包進行比較,它不能給出正確的結果。這裏是我的代碼:scipy.signal.fftconvolve沒有給出所需的結果
#!/usr/bin/python
import numpy as np
from scipy.signal import fftconvolve , convolve
def FFT(array , sign):
if sign==1:
return np.fft.fftshift(np.fft.fft(np.fft.fftshift(array))) * dw/(2.0 * np.pi)
elif sign==-1:
return np.fft.fftshift(np.fft.ifft(np.fft.fftshift(array))) * dt * len(array)
def convolve_arrays(array1,array2,sign):
sign = int(sign)
temp1 = FFT(array1 , sign,)
temp2 = FFT(array2 , sign,)
temp3 = np.multiply(temp1 , temp2)
return FFT(temp3 , -1 * sign)/(2. * np.pi)
""" EXAMPLE """
dt = .1
N = 2**17
t_max = N * dt/2
time = dt * np.arange(-N/2 , N/2 , 1)
dw = 2. * np.pi/(N * dt)
w_max = N * dw/2.
w = dw * np.arange(-N/2 , N/2 , 1)
eta_fourier = 1e-10
Gamma = 1.
epsilon = .5
omega = .5
G = zeros(N , complex)
G[:] = 1./(w[:] - epsilon + 1j * eta_fourier)
D = zeros(N , complex)
D[:] = 1./(w[:] - omega + 1j * eta_fourier) - 1./(w[:] + omega + 1j * eta_fourier)
H = convolve_arrays(D , G , 1)
J = fftconvolve(D , G , mode = 'same') * np.pi/(2. * N)
如果您繪製的H
,J
你會看到在w
軸的轉變,也實/虛部,我不得不成倍爲了得到某種方式的J
的結果關閉(但仍然沒有)到正確的結果。
有什麼建議嗎?
謝謝!
請轉到['scipy.fftconvolve'](https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L153)並觀察算法沒有你奇怪的變化或縮放你想用FFT功能實現什麼? –