脑电波数据处理中Butterworth(巴特沃斯)滤波器参数设置问题
脑电波数据Butterworth带通滤波实践
我正在处理脑电波数据,首次尝试使用Butterworth滤波器。Stack Exchange上有很多实用资源,参考相关教程我实现了如下代码:
from scipy.signal import butter, sosfilt, sosfreqz def butter_bandpass(lowcut, highcut, fs, order=5): nyq = 0.5 * fs low = lowcut / nyq high = highcut / nyq sos = butter(order, [low, high], analog=False, btype='band', output='sos') return sos def butter_bandpass_filter(data, lowcut, highcut, fs, order=5): sos = butter_bandpass(lowcut, highcut, fs, order=order) y = sosfilt(sos, data) return y
我使用的原始数据在左侧图中,右侧是我尝试滤波后的结果:
现有参数配置如下:
- Order(阶数):设为5,测试得到的频率响应符合预期
- Low-cut(低切频率):0.5
- High-cut(高切频率):60
- FS(采样率):每秒采集500个数据点,因此设为500
- N(采样点数):350,对应700ms时长、每2ms采样一次的采集规则
观察原始数据可知,700ms窗口内大概有2个低频正弦波分量,叠加了11个左右的高频分量,我是否可以将低切设为2、高切设为大于11的数值?目前我已经尝试了数十组参数都没有得到理想结果,卡壳两天了,恳请大家帮忙解答。
更新:感谢Bob和Tim的帮助!问题根源完全找对了——信号需要先做零中心化处理,是我疏忽了。更新后的滤波结果见下图:
虽然这些正弦曲线不算非常规整,但这是实测活数据,结果已经符合我的预期了。
内容的提问来源于stack exchange,提问作者da Bears
相关产品推荐
相关产品推荐

