0

我正在使用 python 解决脑电信号分析问题。我需要删除使用 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, highcut, fs, 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, lowcut, highcut, fs, order=5):
   b, a = butter_bandpass(lowcut, highcut, fs, order=order)
   y = lfilter(b, a, data)
   return y

但我不觉得这是正确的方法。有没有办法使用 MNE-Python 而不是将其转换为 ndarray 或使用 scipy 来完成上述任务?

4

1 回答 1

1

要仅选择信号的一部分,您可以在 mne-python 中执行以下操作:

raw.crop(tmin=60, tmax=360)

tmintmax参数以秒为单位)

请记住,过滤会导致边缘伪影,因此最好先裁剪数据,以便留下您感兴趣的更宽的信号段,因此在过滤后您可以再次裁剪,删除边缘伪影。在 mne-python 中过滤也很简单:

raw.filter(1, None)

这将执行 1 Hz 高通 FIR 滤波。要了解有关在 mne-python 中进行过滤的更多信息,请查看本教程本详细的详细教程/讨论

于 2021-01-21T16:53:48.807 回答