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



我有一个时间序列(更具体地说是一个相关函数)。我想用高斯函数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 )

其中西格玛是高斯核的标准偏差。有关更多详细信息,请参阅Scipy文档。https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.gaussian_filter.html

最新更新