问题描述
我正在研究python的EEG信号分析问题。我需要删除使用MNE加载的edf格式的信号在第1分钟以下和第6分钟以上的记录,并将其通过带通滤波器。我对MNE不熟悉,因此在将其转换为原始NumPy数组格式后使用了scipy进行修整和过滤。代码如下。由于采样率为100 Hz,我假设第一分钟将包含6000个样本,接下来的五分钟将包含30000个以上的样本,这就是为什么我只使用raw_data [i] [6000:36000]。
filtered_data[i] = butter_bandpass_filter(raw_data[i][6000:36000],lowcut,highcut,fs,order=5)
butter_bandpass_filter的定义如下
def butter_bandpass(lowcut,order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b,a = butter(order,[low,high],btype='band',analog=True)
return b,a
def butter_bandpass_filter(data,order=5):
b,a = butter_bandpass(lowcut,order=order)
y = lfilter(b,a,data)
return y
但是我不觉得这是正确的方法。有没有办法使用MNE-Python来完成上述任务,而不是将其转换为ndarray或使用scipy?
解决方法
要仅选择信号的一部分,您可以在 mne-python 中执行以下操作:
raw.crop(tmin=60,tmax=360)
(tmin
和 tmax
参数以秒为单位)
请记住,过滤会导致边缘伪影,因此最好先裁剪您的数据,以便留下您感兴趣的更宽的信号段,因此在过滤后您可以再次裁剪,删除边缘文物。 在 mne-python 中过滤也很简单:
raw.filter(1,None)
这将执行 1 Hz 高通 FIR 滤波。要了解有关 mne-python 中过滤的更多信息,请查看 this tutorial 和 this detailed detailed tutorial/discussion: