Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MNE中文教程(1)-MNE中数据结构Raw及其用法简介

MNE中文教程(1)-MNE中数据结构Raw及其用法简介

作者头像
脑机接口社区
发布于 2020-06-29 09:50:31
发布于 2020-06-29 09:50:31
2.5K00
代码可运行
举报
文章被收录于专栏:脑机接口脑机接口
运行总次数:0
代码可运行

Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象。

下面可以通过几个案例来说明Raw对象和相关用法。

Raw结构查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 引入python库
import mne
from mne.datasets import sample
import matplotlib.pyplot as plt

# sample的存放地址
data_path = sample.data_path()
# 该fif文件存放地址
fname = data_path + '/MEG/sample/sample_audvis_raw.fif'

"""
如果上述给定的地址中存在该文件,则直接加载本地文件,
如果不存在则在网上下载改数据
"""
raw = mne.io.read_raw_fif(fname)

通过打印raw:

print(raw)

<Raw | sample_audvis_raw.fif, n_channels x n_times : 376 x 166800 (277.7 sec), ~3.6 MB, data not loaded>

可以看出核心数据为n_channels和n_times

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
raw.info

<Info | 24 non-empty fields acq_pars : str | 13886 items bads : list | MEG 2443, EEG 053 ch_names : list | MEG 0113, MEG 0112, MEG 0111, MEG 0122, MEG 0123, ... chs : list | 376 items (GRAD: 204, MAG: 102, STIM: 9, EEG: 60, EOG: 1) comps : list | 0 items custom_ref_applied : bool | False description : str | 49 items dev_head_t : Transform | 3 items dig : Digitization | 146 items (3 Cardinal, 4 HPI, 61 EEG, 78 Extra) events : list | 1 items experimenter : str | 3 items file_id : dict | 4 items highpass : float | 0.10000000149011612 Hz hpi_meas : list | 1 items hpi_results : list | 1 items lowpass : float | 172.17630004882812 Hz meas_date : tuple | 2002-12-03 19:01:10 GMT meas_id : dict | 4 items nchan : int | 376 proc_history : list | 0 items proj_id : ndarray | 1 items proj_name : str | 4 items projs : list | PCA-v1: off, PCA-v2: off, PCA-v3: off sfreq : float | 600.614990234375 Hz acq_stim : NoneType ctf_head_t : NoneType dev_ctf_t : NoneType device_info : NoneType gantry_angle : NoneType helium_info : NoneType hpi_subsystem : NoneType kit_system_id : NoneType line_freq : NoneType subject_info : NoneType utc_offset : NoneType xplotter_layout : NoneType >

上面为row中info的信息,从中可以看出info记录了raw中有哪些是不良通道(bads),通道名称:ch_names,sfreq:采样频率等。

通常raw的数据访问方式如下:

data, times = raw[picks, time_slice]

picks:是根据条件挑选出来的索引;

time_slice:时间切片

想要获取raw中所有数据,以下两种方式均可:

data,times=raw[:]

data,times=raw[:,:]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
案例:
获取10-20秒内的良好的MEG数据

# 根据type来选择 那些良好的MEG信号(良好的MEG信号,通过设置exclude="bads") channel,
结果为 channels所对应的的索引
"""

picks = mne.pick_types(raw.info, meg=True, exclude='bads')
t_idx = raw.time_as_index([10., 20.])
data, times = raw[picks, t_idx[0]:t_idx[1]]
plt.plot(times,data.T)
plt.title("Sample channels")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
sfreq:采样频率

raw返回所选信道以及时间段内的数据和时间点,
分别赋值给data以及times(即raw对象返回的是两个array)
"""
sfreq=raw.info['sfreq']
data,times=raw[:5,int(sfreq*1):int(sfreq*3)]
plt.plot(times,data.T)
plt.title("Sample channels")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
绘制各通道的功率谱密度
"""
raw.plot_psd()
plt.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
绘制SSP矢量图
"""
raw.plot_projs_topomap()
plt.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
绘制通道频谱图作为topography
"""
raw.plot_psd_topo()
plt.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
绘制电极位置
"""
raw.plot_sensors()
plt.show()

MNE 从头创建Raw对象

在实际过程中,有时需要从头构建数据来创建Raw对象。 方式:通过mne.io.RawArray类来手动创建Raw

注:使用mne.io.RawArray创建Raw对象时,其构造函数只接受矩阵和info对象。

数据对应的单位: V: eeg, eog, seeg, emg, ecg, bio, ecog

T: mag

T/m: grad

M: hbo, hbr

Am: dipole

AU: misc

构建一个Raw对象时,需要准备两种数据,一种是data数据,一种是Info数据,

data数据是一个二维数据,形状为(n_channels,n_times)

案例1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import mne
import numpy as np
import matplotlib.pyplot as plt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
生成一个大小为5x1000的二维随机数据
其中5代表5个通道,1000代表times
"""
data = np.random.randn(5, 1000)

"""
创建info结构,
内容包括:通道名称和通道类型
设置采样频率为:sfreq=100
"""
info = mne.create_info(
    ch_names=['MEG1', 'MEG2', 'EEG1', 'EEG2', 'EOG'],
    ch_types=['grad', 'grad', 'eeg', 'eeg', 'eog'],
    sfreq=100
)
"""
利用mne.io.RawArray类创建Raw对象
"""
custom_raw = mne.io.RawArray(data, info)
print(custom_raw)

从上面打印的信息可以看出 raw对象中n_channels=5, n_times=1000

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
对图形进行缩放

对于实际的EEG / MEG数据,应使用不同的比例因子。
对通道eeg、grad,eog的数据进行2倍缩小
"""
scalings = {'eeg': 2, 'grad': 2,'eog':2}
custom_raw.plot(n_channels=5, 
                scalings=scalings,
                title='Data from arrays',
         show=True, block=True)

plt.show()

案例2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import neo

import mne
import matplotlib.pyplot as plt

构建正余弦数据模拟mag,grad信号

其中采样频率为1000Hz,时间为0到10s.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建任意数据
sfreq = 1000  # 采样频率
times = np.arange(0, 10, 0.001)  # Use 10000 samples (10s)

sin = np.sin(times * 10)  # 乘以 10 缩短周期
cos = np.cos(times * 10)
sinX2 = sin * 2
cosX2 = cos * 2

# 数组大小为 4 X 10000.
data = np.array([sin, cos, sinX2, cosX2])

# 定义 channel types and names.
ch_types = ['mag', 'mag', 'grad', 'grad']
ch_names = ['sin', 'cos', 'sinX2', 'cosX2']

创建info对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
创建info对象
"""
info = mne.create_info(ch_names=ch_names,
                       sfreq=sfreq, 
                       ch_types=ch_types)

利用mne.io.RawArray创建raw对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
利用mne.io.RawArray创建raw对象
"""
raw = mne.io.RawArray(data, info)

"""
对图形进行缩放

对于实际的EEG / MEG数据,应使用不同的比例因子。

对通道mag的数据进行2倍缩小,对grad的数据进行1.7倍缩小
"""
scalings = {'mag': 2, 'grad':1.7}

raw.plot(n_channels=4, scalings=scalings, title='Data from arrays',
         show=True, block=True)

"""
可以采用自动缩放比例

只要设置scalings='auto'即可
"""
scalings = 'auto'
raw.plot(n_channels=4, scalings=scalings,
         title='Auto-scaled Data from arrays',
         show=True, block=True)
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑机接口社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介
本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195
脑机接口社区
2019/11/18
2.1K0
Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介
Python-EEG工具库MNE中文教程(4)-MNE中数据结构Evoked及其对象创建
本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195
脑机接口社区
2019/11/18
8880
Python-EEG工具库MNE中文教程(4)-MNE中数据结构Evoked及其对象创建
Python-EEG工具库MNE中文教程(2)-MNE中数据结构Epoch及其创建方法
本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195
脑机接口社区
2019/11/18
1.4K0
Python-EEG工具库MNE中文教程(2)-MNE中数据结构Epoch及其创建方法
Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
本教程为脑机学习者Rose发表于公众号:脑机接口社区(微信号:Brain_Computer),QQ交流群:903290195
脑机接口社区
2019/11/18
1.9K0
Python-EEG工具库MNE中文教程(3)-MNE中数据结构Epoch及其用法简介
BCI--Python-EEG工具库MNE
Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象。
MiChong
2020/09/24
1.6K0
BCI--Python-EEG工具库MNE
MNE中文教程(16)-脑电数据的Epoching处理
从连续的脑电图信号中提取一些特定时间窗口的信号,这些时间窗口可以称作为epochs。由于EEG是连续收集的,要分析脑电事件相关的电位时,需要将信号"切分"成时间片段,这些时间片段被锁定到某个事件(例如刺激)中的时间片段。 比如在EEGLAB分析中,EEGLAB将连续数据视为由一个较长的时期(long epoch)组成,而将数据切分后,它由多个较小的时期(small epoch)组成。
脑机接口社区
2020/06/30
3.1K0
脑电分析系列[MNE-Python-2]| MNE中数据结构Epoch及其创建方法
相信很多人第一次接触epoch时,都会有疑惑,这个词在EEG中到底指的是什么。 下面将详细说明一下。
脑机接口社区
2022/08/17
6150
脑电分析系列[MNE-Python-2]| MNE中数据结构Epoch及其创建方法
Python脑电数据的Epoching处理
从上图上可以看到在整个记录中有几个振幅不同的脉冲。这些脉冲对应于在采集过程中呈现给受试者的不同刺激。
脑机接口社区
2021/01/12
8250
Python脑电数据的Epoching处理
Python-EEG工具库MNE中文教程(8)-参考电极简介
安置在头皮上的电极为作用电极(active electrode)。放置在身体相对零电位点的电极即为参考电极(reference electrode),也称为参考电极或标准电极。
脑机接口社区
2020/06/29
1.5K0
Python-EEG工具库MNE中文教程(13)-"bad"通道介绍
有时个别通道出现故障,提供的数据中噪声过高而无法使用。 通过使用MNE-Python,可以很容易地跟踪分析流中的这些通道,而无需实际删除这些通道中的数据。 它具体实现是通过跟踪列表中的坏通道索引并在执行分析或绘图任务时查看该列表。坏通道列表存储在Info对象的'bads'字段中,该字段附加到Raw、Epochs和诱发对象。
脑机接口社区
2020/06/30
8770
Python-EEG工具库MNE-Python详细安装与使用
1.安装Python(推荐安装Anaconda)[这里是windows系统下的安装]
脑机接口社区
2020/06/30
1.6K0
Python-EEG工具库MNE中文教程(5)-机器学习算法随机森林判断睡眠类型
本案例通过对多导睡眠图(Polysomnography,PSG)数据进行睡眠阶段的分类来判断睡眠类型。
脑机接口社区
2019/11/25
1.7K0
脑电分析系列[MNE-Python-20]| 脑电图处理和事件相关电位(ERP)
有后台留言问,代码是在哪里运行的。这里说明一下,案例介绍的代码均在jupyter notebook中运行的,当然这些代码也可以在PyCharm等IDE中运行(不过可能存在在不同环境下代码需要稍微改动的情况。)
脑机接口社区
2022/08/17
9710
脑电分析系列[MNE-Python-20]| 脑电图处理和事件相关电位(ERP)
Python-EEG工具库MNE中文教程(9)-参考电极应用
默认情况下,MNE-Python将自动重新参考EEG信号,以使用平均参考(请参见下文)。 这个函数可以显示指定所需的EEG参考。这可以是现有电极或新的虚拟通道。 此函数将根据所需参考重新参考数据,并防止MNE-Python自动添加平均参考投影。
脑机接口社区
2020/06/30
9970
Python-EEG工具库MNE中文教程(15)-Epochs数据可视化
这里介绍的所有函数基本上都是高级matplotlib函数,所有方法均返回matplotlib图形实例的句柄。
脑机接口社区
2020/06/30
2K0
Python-使用多种滤波器对脑电数据去除伪影
一些由电源线造成的伪影具有某些特定范围的频率(比如,由电网产生的电力线噪声,主要由50Hz(或60Hz取决于实验的地理位置)的尖峰组成)。因此可以通过滤波来固定。
脑机接口社区
2020/06/30
1.9K0
Python-EEG工具库MNE中文教程(6)-读取.set文件和.locs文件
.set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等。
脑机接口社区
2020/06/29
2.4K0
Python-EEG工具库MNE中文教程(7)-读取.edf文件
EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列。
脑机接口社区
2020/06/30
2.6K0
脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据
在本教程中,我们将介绍传感器协方差计算的基础知识,并构建一个噪声协方差矩阵,该矩阵可用于计算最小范数逆解.
脑机接口社区
2022/08/17
8740
脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据
脑电分析系列[MNE-Python-11]| 信号空间投影SSP 应用
在前面一篇分享(脑电分析系列[MNE-Python-10]| 信号空间投影SSP数学原理)中提到,投影矩阵将根据您试图投射出的噪声种类而变化。信号空间投影(SSP)是一种通过比较有无感兴趣信号的测量值来估算投影矩阵应该是什么的方法。例如,您可以进行其他“空房间”测量,以记录没有对象存在时传感器上的活动。通过查看空房间测量中各MEG传感器的活动空间模式,可以创建一个或多个N维向量,以给出传感器空间中环境噪声的“方向”(类似于上面示例中“触发器的影响”的向量)。SSP通常也用于消除心跳和眼睛运动伪影,在用于消除心跳和眼睛运动伪影的案例中,就不是通过空房间录制,而是通过检测伪影,提取伪影周围的时间段(epochs)并求平均值来估计噪声的方向。有关示例,请参见使用SSP修复工件。
脑机接口社区
2022/08/17
9440
脑电分析系列[MNE-Python-11]| 信号空间投影SSP 应用
推荐阅读
相关推荐
Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验