【发布时间】:2012-08-19 02:02:17
【问题描述】:
更新:
我根据这个问题找到了一个 Scipy 食谱!所以,有兴趣的可以直接去:Contents » Signal processing » Butterworth Bandpass
我很难实现最初看似简单的任务,即为一维 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”的推荐中呈现的表单。 cmets 中的问号表示我只是复制粘贴了一些示例而没有理解发生了什么。
我不是电气工程师或科学家,只是需要对 EMG 信号执行一些相当简单的带通滤波的医疗设备设计师。
【问题讨论】:
-
我在 dsp.stackexchange 上尝试过一些东西,但他们过于关注工程的概念问题(我无法处理),而不是使用 scipy 函数。
标签: python scipy signal-processing digital-filter