如何应用切比舍夫过滤器?

信息处理 过滤器 软件实现 带通
2022-01-02 02:09:33

我读了一篇关于脑机接口的论文。在本文中,作者报告了“每个信号都经过了 8 阶带通 Chebishev I 型滤波器的滤波,该滤波器的截止频率为 0.1 和 10 Hz,并已根据高截止频率进行抽取”。我试图用 scipy 设计这个过滤器:

import scipy.signal as signal
signal.cheby1(8,0.05,[0.1,10.0],btype='band',analog=0,output='ba')

结果是:

Warning: invalid value encountered in sqrt
(array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
    nan,  nan,  nan,  nan,  nan,  nan]), array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,
    nan,  nan,  nan,  nan,  nan,  nan]))

我没有信号处理方面的背景,所以我实际上不知道自己在做什么。我不知道他们是否使用了 IIR 或 FIR 滤波器,或者我是否必须缩放截止频率,或者我是否使用了错误的纹波。我希望你能帮助我。

2个回答

您给出的示例的主要问题是过滤器设计函数cheby1返回所有NaNs,这不是一个很好的过滤器。问题是您如何指定通带/阻带边缘频率。这个特定的函数旨在模拟 MATLAB 的cheby1函数;你给它的频率应该被归一化,这样一个值1对应于采样率的一半。

import scipy.signal as signal
fs = whatever_the_sample_rate_of_the_filter_input_is_going_to_be
signal.cheby1(8,0.05,[0.1/(fs/2),10.0/(fs/2)],btype='band',analog=0,output='ba')

我手边没有 SciPy,但这至少应该正确设计你想要的过滤器。

两个截止频率通常意味着它是一个带通滤波器,高通为 0.1Hz,低通为 10Hz。低通截止(这是两个频率中较高的一个)决定了您可以向下采样多少。如果您的低通滤波器无限陡峭,您可以使用 20 Hz 的新采样率(截止频率的两倍)。由于它的陡度有限,因此您需要在截止频率和新的奈奎斯特频率之间留出一个保护带。您需要多少取决于滤波器的阶数以及您可以容忍多少混叠噪声。

在这个具体的例子中,它们似乎已经下采样了 12 倍左右,这对我来说似乎过于激进,并且可能会导致大量混叠噪声。