如何在Python(Numpy/Scipy)中使用高斯函数对信号进行带通滤波

如何在Python(Numpy/Scipy)中使用高斯函数对信号进行带通滤波,numpy,filter,scipy,gaussian,Numpy,Filter,Scipy,Gaussian,我有一个时间序列(更具体地说是一个相关函数)。我想用高斯函数H对这个信号进行带通滤波: H(w) = e^(-alpha((w-wn)/wn)^2), 其中wn是带通滤波器的中心频率,alpha是我知道的某个常量。 我将(逆)FFT应用于我的H函数: H = np.e ** (-alfa * ((w - wn) / wn) ** 2) H = np.fft.ifft(H) HH = np.asarray([i1 for i1 in itertools.chain(H[len(H)/2:len(

我有一个时间序列(更具体地说是一个相关函数)。我想用高斯函数H对这个信号进行带通滤波:

H(w) = e^(-alpha((w-wn)/wn)^2),
其中wn是带通滤波器的中心频率,alpha是我知道的某个常量。 我将(逆)FFT应用于我的H函数:

H = np.e ** (-alfa * ((w - wn) / wn) ** 2)
H = np.fft.ifft(H)
HH = np.asarray([i1 for i1 in itertools.chain(H[len(H)/2:len(H)], H[0:len(H)/2])])
然后我要做的是使用fftconvolve:

filtered = fftconvolve(data, HH.real, mode='same'),
但我看到的“滤波信号”似乎是以2倍wn为中心的滤波频率


正确的做法是什么?我的过滤器的长度是否受时间序列长度的限制?

也许您正在寻找的是Scipy的高斯过滤器

from scipy.ndimage import gaussian_filter

output = gaussian_filter(input, sigma )

其中sigma是高斯核的标准偏差。有关更多详细信息,请参阅Scipy文档

只是一些评论:
ifft
是傅里叶逆变换,不确定这是否重要。另外,使用
H=np.exp(…)
代替
np.e**(…)
。最后,使用
HH=np.fft.fftshift(H)
代替
itertools
装置。