Python-EEG工具库MNE中文教程(8)-参考电极简介
更多技术,第一时间送达
参考电极
安置在头皮上的电极为作用电极(active electrode)。放置在身体相对零电位点的电极即为参考电极(reference electrode),也称为参考电极或标准电极。
记录到的脑电信号即是作用电极与参考电极的差值(电位差)。
如果身体上有一个零电位点,那么将参考电极放置于这个点,头皮上其它部位与该点的电极之间的电位差就等于后者的电位变化的绝对值。但这种零电位点理论上指的是机体位于电解质液中时,距离机体无限远的点,而实际上我们能够利用到的点是距离脑尽可能远的身体上的某一个点。因此,如果选躯干或四肢,脑电中就会混进波幅比脑电大的多的心电,这也是脑电记录使用耳垂、鼻尖、锁骨或乳突部作为参考电极的原因。但鼻尖参考电极由于易出汗而产生基线不稳的伪迹,乳突部、下颌部等参考电极也可引起心电图、血管波动等伪迹,比如,耳垂电极可能很容易移动,信号与头部同侧的电极更相似。也可采用Cz附近的记录点作为参考电极,将M1和M2两个乳突位置也作为脑电记录点,这样有助于系统观察乳突部的脑电特征。
即使在没有专门指定电极为参考的情况下,EEG记录硬件仍将头皮电极之一作为参考,并且记录软件可能会或可能不会显示这样的参考电极(它可能显示为完全平坦的通道,否则软件可能会在显示之前减去所有信号的平均值,使其看起来好像没有参考)。
设置脑电图参考
本教程描述了如何在MNE-Python中设置或更改EEG参考。
set_eeg_reference(self,
ref_channels='average',
projection=False,
ch_type='auto',
verbose=None)
指定用于EEG信号的参考。
参数
ref_channels: list of str | str
用于构造参考的通道名称。如果要应用平均参考,就在此处指定"average"(默认情况就是使用average)。
如果指定了空列表,则表示您已假定该数据已经具有正确的引用,并且MNE将不会尝试对该数据进行任何重新参考。
默认为平均参考。
projection:bool
如果ref_channels ='average',则此参数指定是否应将平均参考计算为projection(True)或不作为projection(False;默认)。
如果projection = True,则将平均参考作为projection添加,并且不应用于数据(后面可以使用apply_proj方法应用)。
如果projection = False,则将平均参考直接应用于数据。
如果ref_channels不是'average',则projection必须设置为False。
默认情况为False.
ch_type:'auto' | 'eeg' | 'ecog' | 'seeg'
要应用参考的通道类型的名称。如果选择'auto',则会选择(按此顺序)找到的第一个eeg,egg或seeg的通道类型。
返回值
Raw对象实例 | Epochs对象实例| Evoked对象实例
注:
1.如果请求的参考不是平均参考,则此函数将移除任何预先存在的平均参考投影。
2.在源定位期间,EEG信号应具有平均参考值。
3.为了应用参考,必须预先加载数据。如果ref_channels ='average'且projection = True,则无需执行此操作。
4.对于一般参考,如果在info['bads']中设置了错误的EEG频道,则会自动排除这它们。
案例-参考电极
import os
import mne
import matplotlib.pyplot as plt
%matplotlib auto
"""
设置原始数据地址
"""
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample',
'sample_audvis_raw.fif')
"""
读取数据生成raw对象实例
"""
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False)
raw.crop(tmax=60).load_data()
raw.pick(['EEG 0{:02}'.format(n) for n in range(41, 60)])
设置或更改参考通道
如果想要重新计算数据(就是不使用原来已经记录或保存数据时使用的参考电极计算),则MNE-Python中为Raw对象提供了set_eeg_reference()方法以及mne.add_reference_channels()方法。
如果使用头皮电极作为参考,但未与原始数据一起保存(通常不使用参考通道),则您可能希望在重新参考之前将其重新添加到数据集中。
例如,如果您的EEG系统使用通道Fp1作为参考记录,但在数据文件中没有包含Fp1,则使用set_eeg_reference()进行设置。
例如,将Cz设置为新参考,然后将在Cz处的信号减去,而不恢复Fp1处的信号。在这种情况下,可以使用add_reference_channels()在重新引用之前将Fp1添加回平面通道。
(由于这里的示例数据没有使用10-20电极命名系统,因此以下示例将EEG 999添加为缺少的参考,然后将该参考设置为EEG 050)
这是数据在其原始状态下的显示方式:
raw.plot()
plt.show()
默认情况下,add_reference_channels()返回一个副本,因此稍后我们可以返回到原始对象。
如果想要更改现有的Raw对象,则可以指定copy = False。
# 添加一个新的参考通道(新添的参考通道中的所有值均为0)
raw_new_ref = mne.add_reference_channels(raw, ref_channels=['EEG 999'])
raw_new_ref.plot()
plt.show()
如上图,刚添加的EEG 999通道作为参考电极,是一个平坦的效果。
# 设置 `EEG 050` 作为参考电极
raw_new_ref.set_eeg_reference(ref_channels=['EEG 050'])
raw_new_ref.plot()
plt.show()
如上效果图,新的参考通道(EEG 050)现在是平坦的,而我们添加回数据中的原始参考通道(EEG 999)具有非零信号。
还要注意,EEG 053是一个坏的信号(在raw.info['bads']中标记为"bad")不受重新参考的影响。
设定平均参考
想要设置一个"虚拟参考",即所有通道平均值,可以使用set_eeg_reference()与ref_channels ='average'。
如上面所讲的,这不会影响任何标记为"bad"的频道,也不会在计算平均值时包含不良频道。
但是,它确实就地修改Raw对象,因此我们将首先创建一个副本,以便稍后仍可以返回未修改的Raw对象:
# 使用所有通道的平均值作为参考
raw_avg_ref = raw.copy().set_eeg_reference(ref_channels='average')
raw_avg_ref.plot()
plt.show()
创建平均参考作为projector(投影)具有以下优点:
在绘图时可以打开或关闭projector(投影),因此很容易可视化平均参考对数据的影响。
如果将附加通道标记为"bad",或者以后选择了通道的子集,则将重新计算projector(投影)以考虑这些变化(从而确保信号为零均值)。
如果还有其他未使用的projector(投影)影响EEG通道(例如用于消除心跳或眨眼伪像的SSP projector(投影)),则在应用或移除这些projector(投影)之前,无法执行EEG重新参考;将EEG参考添加为projector(投影)不受此限制。
for title, proj in zip(['Original', 'Average'], [False, True]):
fig = raw.plot(proj=proj, n_channels=len(raw))
# make room for title
fig.subplots_adjust(top=0.9)
fig.suptitle('{} reference'.format(title), size='xx-large', weight='bold')