更新:
我发现了基于此问题的Scipy食谱!因此,对于感兴趣的任何人,请直接转到:目录»信号处理»Butterworth Bandpass
我很难实现最初看起来像是为一维numpy数组(时间序列)实现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
这些文档和示例令人困惑且晦涩难懂,但我想实现表述为“带通”的推荐形式。注释中的问号显示了我只是复制粘贴了一些示例而不了解所发生的情况。
我既不是电气工程也不是科学家,只是医疗设备设计人员需要对EMG信号执行一些相当简单的带通滤波。