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

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

Raw结构查看:

# 引入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

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[:,:]

"""
案例:
获取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")

"""
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")

"""
绘制各通道的功率谱密度
"""
raw.plot_psd()
plt.show()

"""
绘制SSP矢量图
"""
raw.plot_projs_topomap()
plt.show()

"""
绘制通道频谱图作为topography
"""
raw.plot_psd_topo()
plt.show()

"""
绘制电极位置
"""
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

import mne
import numpy as np
import matplotlib.pyplot as plt
"""
生成一个大小为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

"""
对图形进行缩放对于实际的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

import numpy as np
import neoimport mne
import matplotlib.pyplot as plt

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

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

# 创建任意数据
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对象

"""
创建info对象
"""
info = mne.create_info(ch_names=ch_names,sfreq=sfreq, ch_types=ch_types)

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

"""
利用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()

Rose

不用于商业行为,转载请联系后台

若有侵权,请后台留言,管理员即时删侵!

更多阅读

清华大学医学院张明君团队招聘脑机接口与微纳医学交叉领域博士后

脑电分析系列[MNE-Python-1]| MNE-Python详细安装与使用(更新)

Nature子刊:利用闭环脑机接口缓解疼痛感

利用脑机接口从鸟的脑电波中重现鸟唱歌声

投稿通道

如何让你的工作让更多人知晓和受益?

脑机接口社区就是这样一个连接学界、

企业界和爱好者的平台渠道。

社区鼓励高校实验室、企业或个人在我们平台上分享优质内容。

稿件要求

稿件系个人原创作品,若已在其他平台发表,请明确标注。

稿件一经录取,便提供稿费!

投稿通道

微信扫码,备注:投稿+姓名+单位

微信交流群,请扫码上方微信

(备注:姓名+单位+专业/领域行业)

QQ交流群:913607986

你的每一次在看,我都很在意!

脑电分析系列[MNE-Python-2]| MNE中数据结构Raw及其用法简介(更新)相关推荐

  1. MNE-Python专辑 (2) MNE中数据结构Raw及其用法简介(更新)

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象. 下面可以通过几个案例 ...

  2. 脑电分析系列[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型

    案例介绍 本案例通过对多导睡眠图(Polysomnography,PSG)数据进行睡眠阶段的分类来判断睡眠类型. 训练:对Alice的睡眠数据进行训练: 测试:利用训练结果对Bob的睡眠数据进行测试, ...

  3. 脑电分析系列[MNE-Python-6]| Python读取.set文件和.locs文件

    本案例主要介绍如何读取eeglab示例文件.set以及.locs文件. .set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等. .locs文件记录的是电极位置信息. 知识点 ...

  4. 脑电分析系列[MNE-Python-21]| Python协方差矩阵处理脑电数据

    今天主要介绍一下MNE中如何用协方差矩阵来处理脑电数据的. MNE中的许多方法,包括源估计和一些分类算法,都需要根据记录进行协方差估计. 在本教程中,我们将介绍传感器协方差计算的基础知识,并构建一个噪 ...

  5. Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介

    目录 Raw数据结构 MNE 从头创建Raw对象 案例1 案例2 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 Raw数据结构 Raw对象主要用来存储连续型数 ...

  6. 脑电分析系列 | MNE-Python汇总

    1 脑电分析系列MNE-Python教程 [MNE-1]| MNE-Python详细安装与使用(更新) [MNE-2]| MNE中数据结构Raw及其用法简介(更新) [MNE-3]| MNE中数据结构 ...

  7. 脑电分析系列[MNE-Python-2]| MNE中数据结构Epoch及其创建方法

    Epoch概念简介 相信很多人第一次接触epoch时,都会有疑惑,这个词在EEG中到底指的是什么. 下面将详细说明一下. 从连续的脑电图信号中提取一些特定时间窗口的信号,这些时间窗口可以称作为epoc ...

  8. 脑电分析系列[MNE-Python-4]| MNE中数据结构Evoked及其对象创建

    Evoked结构 Evoked potential(EP)诱发电位或诱发反应是指在出现诸如闪光或纯音之类的刺激后,从人类或其他动物的神经系统,特别是大脑的特定部分记录的特定模式的电位.不同形式和类型的 ...

  9. 脑电分析系列[MNE-Python-11]| 信号空间投影SSP 应用

    信号空间投影(SSP) 在前面一篇分享(脑电分析系列[MNE-Python-10]| 信号空间投影SSP数学原理)中提到,投影矩阵将根据您试图投射出的噪声种类而变化.信号空间投影(SSP)是一种通过比 ...

最新文章

  1. 网络营销——网络营销专员浅析网站快照更新要点
  2. CSS Image Rollovers翻转效果Image Sprites图片精灵
  3. 测试人员容易遗漏一些隐藏的缺陷
  4. VSFTPD Centos 7.6 _配置篇
  5. python解压到指定文件夹_在Python中压缩和解压文件
  6. 题库明细 使用C#开发数据库应用系统
  7. why2cs学习之路
  8. 导入php插件_微信公众号吸粉的方法(将网站100%的流量导入到公众号中)
  9. MySQL优化三之MySQL配置
  10. 7.13 Python循环语句(2)、number、字符串
  11. C语言小案例_OA大典案例摘录【第1378篇】联想兄弟激光机卡纸 卡定影 有折叠 卡到出纸口不出来 合集...
  12. 系统管理指南:基本管理 第11 章• x86: 基于GRUB 的引导(任务)
  13. 常见的一些反爬虫策略(上篇)-Java网络爬虫系统性学习与实战系列(9)
  14. 【笔记】FFC 20624 Winter 09的mil与mm显示转换
  15. mc全国计算机一级考试,全国计算机等级考试一级模拟试题04
  16. Git——详解操作码云
  17. SysML 第一讲:SysML简介
  18. 一维亥姆霍兹线圈设计磁场250Gs
  19. wargame v2.1 Web Wrtteup By Assassin
  20. GPS信号接收机的频偏和相位锁定matlab仿真

热门文章

  1. 解释Python的‘__enter __‘和‘__exit__‘
  2. 如何并行运行多个npm脚本?
  3. 使用curl从HTTP POST仅获取响应标头
  4. 如何删除输入文本元素上的边框突出显示
  5. 了解Java中的检查与未检查异常
  6. 什么时候应该在内部联接上使用交叉应用?
  7. IT兄弟连 JavaWeb教程 监听器3
  8. Tornado做鉴权服务性能实践
  9. 自用Java爬虫工具JAVA-CURL已开源
  10. Jedis连接redis