python中是否有任何准备好的函数可以将滤波器(例如巴特沃斯滤波器)应用于给定信号?我在 'scipy.signal' 中寻找这样的功能,但我没有找到比过滤器设计更有用的功能。实际上我希望这个函数将滤波器与信号进行卷积。
问问题
42933 次
1 回答
43
是的!那里有两个:
scipy.signal.filtfilt
scipy.signal.lfilter
还有卷积 (convolve
和fftconvolve
) 的方法,但这些方法可能不适合您的应用程序,因为它涉及 IIR 滤波器。
完整代码示例:
b, a = scipy.signal.butter(N, Wn, 'low')
output_signal = scipy.signal.filtfilt(b, a, input_signal)
您可以在文档中阅读有关参数和用法的更多信息。一个问题是这Wn
是奈奎斯特频率的一小部分(采样频率的一半)。因此,如果采样率为 1000Hz 并且您想要 250Hz 的截止频率,您应该使用Wn=0.5
.
顺便说一句,我强烈建议对大多数应用程序使用filtfilt
over lfilter
(仅filter
在 Matlab 中调用)。正如文档所述:
此函数两次应用线性滤波器,一次向前,一次向后。组合滤波器具有线性相位。
这意味着输出的每个值都是输入中“过去”和“未来”点的函数。因此它不会滞后输入。
相反,lfilter
仅使用输入的“过去”值。这不可避免地会引入时间滞后,这将取决于频率。当然,有一些应用程序需要这样做(尤其是实时过滤),但大多数用户使用filtfilt
.
于 2012-12-06T09:27:54.427 回答