更新:
我发现了一个基于这个问题的 Scipy 食谱! 所以,对任何感兴趣的人,直接去: 内容“信号处理”巴特沃斯带通
我很难完成最初看起来很简单的任务,那就是实现一维数字数组(时间序列)的 Butterworth 带通滤波器。
我必须包含的参数是 sample _ rate、 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
文档和示例令人困惑且晦涩难懂,但我想实现标记为“ for bandpass”的推荐中提供的表单。注释中的问号表示我只是复制粘贴了一些示例,而没有理解正在发生什么。
我不是电气工程师或科学家,只是一个医疗设备设计师需要执行一些相当简单的带通滤波肌电信号。