我很难实现最初看起来很简单的任务,即为一维 numpy 数组(时间序列)实现巴特沃斯带通滤波器。
我必须包括的参数是 sample_rate、截止频率 IN HERTZ 和可能的顺序(其他参数,如衰减、自然频率等对我来说更模糊,所以任何“默认”值都可以)。
我现在拥有的是这个,它似乎可以用作高通滤波器,但我不确定我是否做对了:
def butter_highpass(interval, sampling_rate, cutoff, order=5):
nyq = sampling_rate * 0.5
stopfreq = float(cutoff)
cornerfreq = 0.4 * stopfreq # (?)
ws = cornerfreq/nyq
wp = stopfreq/nyq
# for bandpass:
# wp = [0.2, 0.5], ws = [0.1, 0.6]
N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?)
# for hardcoded order:
# N = order
b, a = scipy.signal.butter(N, wn, btype='high') # should 'high' be here for bandpass?
sf = scipy.signal.lfilter(b, a, interval)
return sf
文档和示例令人困惑和晦涩,但我想实现标记为“用于带通”的推荐中提供的表格。评论中的问号显示我只是复制粘贴了一些示例而没有理解正在发生的事情。
我不是电气工程师或科学家,只是一名医疗设备设计师,需要对 EMG 信号执行一些相当简单的带通滤波。
原文由 heltonbiker 发布,翻译遵循 CC BY-SA 4.0 许可协议