更新:
我在stackoverflow上找到了一篇基于此问题的Scipy食谱!所以,对于任何有兴趣的人,请直接访问:目录 » 信号处理 » 巴特沃斯带通滤波器
我现在正在尝试实现一个针对1-D numpy数组(时间序列)的巴特沃斯带通滤波器,但很难达到最初看起来很简单的任务。
我需要包含的参数是采样率、截止频率(以赫兹为单位)和可能的阶数(其他参数,如衰减、固有频率等,对我来说更加模糊,因此任何“默认”值都可以)。
我现在拥有的是这个,它似乎作为高通滤波器有效,但我不确定是否正确:
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”的评论中呈现的表单。注释中的问号表示我只是复制粘贴了一些例子,而并不理解正在发生的事情。
我不是电气工程师或科学家,只是一个需要对EMG信号执行一些相当简单的带通滤波的医疗设备设计者。