非官方中文翻译 本页译自 MNE-Python 官方文档: 查看英文原文 ↗。 文档版权归 MNE Developers 所有(BSD-3-Clause)。

从 MEG 设备导入数据#

本节介绍如何读取各 MEG 厂商的数据。

MEGIN/Elekta Neuromag VectorView 与 TRIUX(.fif)#

Neuromag 原始 FIF 文件可使用 mne.io.read_raw_fif() 加载。

如果数据是在开启 MaxShield 的情况下采集的,且未经过 MaxFilter 处理,则可能需要在加载时使用 mne.io.read_raw_fif(..., allow_maxshield=True)。

FIL OPM(.bin)#

UCL 的 FIL 所使用的 OPM 系统采集的 MEG 数据可通过 mne.io.read_raw_fil() 读取。相关的 OPM 处理方法参见 光泵磁力仪(OPM)MEG 数据预处理。

Artemis123(.bin)#

Artemis123 系统的 MEG 数据可通过 mne.io.read_raw_artemis123() 读取。

4-D Neuroimaging / BTI 数据(目录)#

MNE-Python 提供 mne.io.read_raw_bti() 以读取并转换 4D / BTI 数据。该读取函数默认会将原始通道名称(通常由字母 A 与通道编号组成)替换为 Neuromag 风格的名称。导入数据时,以下输入文件是必需的:

  • 包含所记录 MEG 时间序列的数据文件(通常为 c,rfDC)。

  • 包含数字化仪数据的 hs_file 文件。

  • 包含采集信息与元数据的配置(config)文件。

默认情况下,mne.io.read_raw_bti() 假定这三个文件位于同一文件夹中。

注意

读取参考通道或补偿通道时,当前不会处理补偿权重。因此,mne.io.Raw 对象及相应的 fif 文件不包含有关补偿通道以及用于实现软件梯度补偿的权重的信息。如果保存在 Magnes 系统中的数据已经过补偿,则前向计算中会出现小误差,其显著性目前尚未经过仔细评估。

CTF 数据(目录)#

mne.io.read_raw_ctf() 函数可用于读取 CTF 数据。

CTF Polhemus 数据#

mne.channels.read_dig_polhemus_isotrak() 函数可用于读取 Polhemus 数据。

应用软件梯度补偿#

由于 CTF 系统采用的软件梯度补偿是一种可逆操作,因此可以根据需要在数据文件中更改 CTF 数据的补偿状态。本节介绍补偿流程的技术细节以及 mne.io.Raw.apply_gradient_compensation() 的说明。

mne.io.read_raw_ctf() 返回的 raw 实例包含多个补偿矩阵,用于借助参考通道数据抑制外部干扰。参考传感器比头盔传感器离大脑更远,因此主要测量外部干扰,而非源自大脑的磁场。最常使用的是对应“三阶梯度补偿”(Third-order gradient compensation)方案的补偿矩阵。

假设数据包含 \(n_1\) 个 MEG 传感器通道、\(n_2\) 个参考传感器通道和 \(n_3\) 个其他通道。所有通道的数据可拼接为单个向量:

\[x = [x_1^T x_2^T x_3^T]^T\ ,\]

其中 \(x_1\)、\(x_2\) 和 \(x_3\) 分别是对应 MEG 传感器通道、参考传感器通道和其他通道的数据向量。补偿前后的数据(此处分别记为 \(x_{(0)}\) 和 \(x_{(k)}\))满足:

\[x_{(k)} = M_{(k)} x_{(0)}\ ,\]

其中复合补偿矩阵为:

\[\begin{split}M_{(k)} = \begin{bmatrix} I_{n_1} & C_{(k)} & 0 \\ 0 & I_{n_2} & 0 \\ 0 & 0 & I_{n_3} \end{bmatrix}\ .\end{split}\]

上式中,\(C_{(k)}\) 是对应补偿“等级” \(k\) 的 \(n_1\) × \(n_2\) 补偿数据矩阵。容易看出:

\[\begin{split}M_{(k)}^{-1} = \begin{bmatrix} I_{n_1} & -C_{(k)} & 0 \\ 0 & I_{n_2} & 0 \\ 0 & 0 & I_{n_3} \end{bmatrix}\ .\end{split}\]

要从补偿等级 \(k\) 转换为 \(p\),只需将一个补偿矩阵的逆乘以另一个补偿矩阵,并将乘积应用于数据:

\[x_{(k)} = M_{(k)} M_{(p)}^{-1} x_{(p)}\ .\]

该操作由 mne.io.Raw.apply_gradient_compensation() 执行。

Ricoh/KIT MEG 系统数据(.con/.sqd)#

MNE-Python 包含 mne.io.read_raw_kit() 和 mne.read_epochs_kit(),用于读取并转换 Ricoh/KIT MEG 数据。

导入连续数据时,仅需输入 .sqd 或 .con 文件。对于分段(epochs)数据,需要一个 Nx3 矩阵,其第三列包含事件编号/对应的触发值。

以下输入文件是可选的:

  • KIT 标记文件(mrk 文件)或包含 HPI 线圈在 MEG 设备坐标系中位置的类数组对象。这些数据与 elp 文件一起用于建立头部坐标系与设备坐标系之间的坐标变换。

  • Polhemus 点文件(elp 文件)或包含基准点和头位置指示(HPI)线圈位置的类数组对象。这些数据通常以 Polhemus 头部坐标系给出。

  • Polhemus 头形数据文件(hsp 文件)或包含头部表面附加点位置的类数组对象。这些点必须使用与 elp 文件相同的坐标系。

现代 Ricoh 系统可能会将这些信息编码在文件本身中,此时 mrk、elp 和 hsp 均可为 None,数据将从文件本身读取。

注意

输出的 fif 文件将采用 Neuromag 头部坐标系约定,参见 MEG/EEG and MRI coordinate systems。其中包含 Polhemus 头部坐标与 Neuromag 头部坐标之间的坐标变换。

默认情况下,KIT-157 系统假定前 157 个通道为 MEG 通道,接下来的 3 个通道为参考补偿通道,从第 160 个通道起指定为其他输入通道(MISC 001、MISC 002 等)。默认情况下,KIT-208 系统假定前 208 个通道为 MEG 通道,接下来的 16 个通道为参考补偿通道,从第 224 个通道起指定为其他输入通道(MISC 001、MISC 002 等)。

此外,可通过指定以下参数,从可用的模拟触发通道数据合成数字触发通道(STI 014):

  • 触发通道列表(stim)或默认触发设置,顺序为“<”|“>”:将 KIT 触发通道转换为 Neuromag 风格 stim 通道时的通道-数值对应关系。默认假定前八个其他通道为触发通道。对于“<”,最大值分配给第一个通道(小端;默认)。对于“>”,最大值分配给最后一个通道(大端)。也可指定为触发通道索引列表。

  • 触发通道斜率(slope):“+”|“-”:合成 Neuromag 风格 stim 通道时如何解释 KIT 触发通道上的数值。使用“+”时,正斜率(低到高)被解释为事件;使用“-”时,负斜率(高到低)被解释为事件。

  • 刺激阈值(stimthresh):浮点数。将 KIT 触发通道中的电压变化视为触发事件的阈值水平。

在第 \(k\) 个采样点合成的触发通道数据值为:

\[s(k) = \sum_{p = 1}^n {t_p(k) 2^{p - 1}}\ ,\]

其中 \(t_p(k)\) 是对输入通道数据 d_p(k) 进行阈值处理后的结果:

\[\begin{split}t_p(k) = \Bigg\{ \begin{array}{l} 0 \text{ if } d_p(k) \leq t\\ 1 \text{ if } d_p(k) > t \end{array}\ .\end{split}\]

阈值 \(t\) 可通过 stimthresh 参数调整。

FieldTrip MEG/EEG 数据(.mat)#

MNE-Python 包含 mne.io.read_raw_fieldtrip()、mne.read_epochs_fieldtrip() 和 mne.read_evoked_fieldtrip(),用于读取来自 FieldTrip 的数据。

数据直接从 .mat 文件导入。

info 参数可显式设置为 None。导入函数仍可工作,但是:

  1. 所有通道位置都将位于头部坐标系中。

  2. 无法保证通道方向的准确性。

  3. 所有通道类型都将设为通用类型。

对于不需要这些信息的情形,这大概没问题;但如果你打算进行缺失通道插值、源分析或查看平面梯度计的 RMS 配对等操作,很可能会遇到问题。

强烈建议同时提供 info 参数。可先使用相应的 MNE-Python 函数加载原始 raw 数据文件,以提取 info 字典:

original_data = mne.io.read_raw_fiff('original_data.fif', preload=False)
original_info = original_data.info
data_from_ft = mne.read_evoked_fieldtrip('evoked_data.mat', original_info)

导入的数据通道数可能少于原始数据。仅从 info 字典中提取当前存在通道的信息。

自 0.17 版起,已在多种系统上测试了 FieldTrip 数据导入,结果如下:

系统 读取原始数据 读取分段数据 读取诱发数据

BTI

可用 未测试 未测试

CNT

数据以微伏导入,其他方面正常。 数据以微伏导入,其他方面正常。 数据以微伏导入,其他方面正常。

CTF

可用 可用 可用

EGI

基本可用。数据以微伏导入,FieldTrip 不会应用校准。 基本可用。数据以微伏导入,FieldTrip 不会应用校准。 基本可用。数据以微伏导入,FieldTrip 不会应用校准。

KIT

不可用。MNE-Python 与 FieldTrip 中的通道名称不同。 不可用。MNE-Python 与 FieldTrip 中的通道名称不同。 不可用。MNE-Python 与 FieldTrip 中的通道名称不同。

Neuromag

可用 可用 可用

eximia

可用 未测试 未测试

从任意数据(内存中)创建 MNE 数据结构#

通过将 mne.io.RawArray、mne.EpochsArray 或 mne.EvokedArray 与 mne.create_info() 结合使用,可从内存构造任意 raw 数据(例如模拟或手动读入的数据)。

此功能在 从零创建 MNE-Python 数据结构 中进行了演示。结合使用 NEO 等第三方库与这些函数,可以轻松将大量电生理文件格式加载到 MNE 中。

图库由 Sphinx-Gallery 生成