如何在Python(Numpy/Scipy)中使用高斯函数对信号进行带通滤波
我有一个时间序列(更具体地说是一个相关函数)。我想用高斯函数H对这个信号进行带通滤波:如何在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(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
装置。