【声明:本blog为原创,转载请先联系~】

之前主要一直在使用matlab做一些预处理,主要基于eeglab,不过最近由于结果呈现的需要,发现py的mne库功能更强大丰富,开源性也更好,所以这里以mnelab(基于mne库做的GUI界面)入手,记录一下其强大而简单的功能。

mnelab/mne包链接指向库(膜拜大佬):

https://github.com/mne-tools/mne-python

https://github.com/cbrnr/mnelab

1.关于安装:

(1)安装需依赖的库及版本环境:

MNELAB requires Python >= 3.6. In addition, the following Python packages are required:

如果需要其他的计算/导出/导入格式,还需要安装以下的库

Optional dependencies provide additional features if installed:

mne做不了以下事情:

MNELAB comes with the following features that are not (yet) available in MNE:

  • Export to EDF/BDF (requires pyEDFlib)
  • Export to EEGLAB SET
  • Export to BrainVision VHDR/VMRK/EEG (requires pybv)
  • Import XDF files (requires pyxdf)

(2)安装指令:

A.pip下安装

  1. Install either PyQt5 (python3 -m pip install PyQt5) or PySide2 (python3 -m pip install PySide2).
  2. Install MNELAB (python3 -m pip install mnelab).

You can start MNELAB in a terminal with mnelab(windows系统指令) or python3 -m mnelab(linux系统指令).

B.anaconda下安装

An (unofficial, but regularly updated) conda package can be installed from conda-forge. We strongly suggest to install MNELAB into its own dedicated environment to ensure smooth installation and operation:

conda create -y -n mnelab -c conda-forge mnelab

2.关于使用教程(这里以mnelab的可视化进行代码讲解,更易入门)

(1)数据预处理

EEG数据一般在后续操作前需要对其进行数据的简单预处理,以我个人经验,将其分为大致以下几个步骤:

这里以实际实验数据(.vhdr/vmark/eeg)数据格式为例,open读取后的文件内容 

code:

data = read_raw("C:/Users/Administrator/Desktop/实验数据/2020.1.5下午before/03.vhdr", preload=True)

<1>脑区电极的定位,即确定channel locations。

mnelab:edit——》set montage   

我们这里使用的是标准10-20格式

code:

data.set_montage('standard_1020', raise_if_subset=False)

<2>选择/删除电极。这里主要结合自己的研究内容,我主要研究EEG信号,因此在我们的研究中需要删除ECG、EMG、EOG等不需要的通道

mnelab:edit——》pick channels

我们主要研究EEG信号,所以这里将ECG通道删除

code:

raw.drop({'ECG'})

<3>在分段前进行滤波,防止后滤波而导致的锯齿化数据(顺序:先滤波——》再降采样、分段等),常用一般滤波[0.5,30]hz(后续可根据具体需求进一步进行sub-band多子带滤波)

mnelab:tools——》filter data


code:

data.filter(0.5, 30.0)

<4>重置参考电极,这里常以TP9 TP10双耳平均电极作为参考(与研究目的也有关,这里讲p300的参考电极)

公式:所有电极数据 —(TP9+TP10)/2

mnelab:edit——》set reference

code:

data.set_eeg_reference(['TP9', 'TP10'])

结果:左图为重置参考前,右图为重置参考后(可以明显看到TP9 TP10处数据变缓和,因为以其叠加平均后作为参考)

补充:其他的参考方式:

一些常见的参考方案以及ref_channels参数的相应值如下:

(1)无需重新引用(No re-referencing):  

如果EEG数据已经在使用正确的参考信号,则设置ref_channels = []。这将阻止MNE-Python自动添加平均参考投影。

(2)平均参考(Average reference):  

通过设置ref_channels ='average'来对当前EEG信号进行平均,创建一个新的虚拟参考电极。   

如果在info['bads']中设置了错误的EEG通道,则会自动排除它们。

raw.set_eeg_reference('average', projection=True)
evoked_car = mne.Epochs(raw, **epochs_params).average()

evoked_car.plot(axes=ax2, 
                titles=dict(eeg='Average reference'), 
                show=False,
                time_unit='s')

"""
使用所有通道的平均值作为参考
"""
raw_avg_ref = raw.copy().set_eeg_reference(ref_channels='average')

(3)单电极(A single electrode):  

将ref_channels设置为包含将用作新参考的通道名称的列表,例如ref_channels = ['Cz']。

多个电极的平均值(The mean of multiple electrodes:):  

通过计算从两个或多个选定通道记录的当前EEG信号的平均值,可以创建一个新的虚拟参考电极(自动计算所选取通道的平均值) 

将ref_channels设置为通道名称列表,指定要使用的通道。   

例如,要使用平均乳突参考,在使用10-20命名方案时,请设置ref_channels = ['M1','M2']。

<5>对数据根据mark进行分段,同时去除基线(extract epochs),去基线常以“0时刻”(选定的事件)开始前一段时间作为基线

 mnelab:tools——》create events from annotations(因为我们数据格式为vhdr,自带vmark信息)

这时可以看到,events这里读取了三种mark信息,1(非靶刺激),2(靶刺激)和99999(刺激开始点)

code:

events, _ = mne.events_from_annotations(data)

<6>分段extract epochs,去基线(一般以0目标前几百ms作为去基线标准baseline)

mnelab:tools——》extract epochs

这里选择“2”(靶刺激作为分段),总时长-0.2s-1s,去基线以-0.2s-0s为baseline

code:

data = mne.Epochs(data, events, event_id=[2], tmin=-0.2, tmax=1.0, baseline=(-0.2, 0.0), preload=True)

【未完待续】

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐