专栏首页脑机接口Python-EEG工具库MNE中文教程(6)-读取.set文件和.locs文件

Python-EEG工具库MNE中文教程(6)-读取.set文件和.locs文件

欢迎关注我们,选择加"星标"或“置顶”

更多技术,第一时间送达

本案例主要介绍如何读取eeglab示例文件.set以及.locs文件。

.set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等。

.locs文件记录的是电极位置信息。

知识点:

mne中使用mne.io.read_raw_eeglab()读取.set文件;

利用mne.channels.read_custom_montage()读取.locs文件。

read_raw_eeglab()函数介绍:

mne.io.read_raw_eeglab(input_fname,
                       montage='deprecated',
                       eog=(), 
                       preload=False, 
                       uint16_codec=None,
                       verbose=None)    

参数解读:

input_fname:.set文件的存放路径;  
montage='deprecated':该参数已经舍弃了。在0.19版本中,它的功能可以通过set_montage方法来实现;  
eog:指定eog通道的通道名称或索引,如果设置为auto,则使用包含eog和eye的通道名称。默认情况为空元组;  
preload:类型 str或者bool 如果为True,则数据将预加载到内存中,以满足更快速的索引;  
uint16_codec:类型 str | None 允许指定读取字符数组时应用的编解码器(比如,"latin1"或者"utf-8")

案例

import mne
import matplotlib.pyplot as plt

1. 利用mne.io.read_raw_eeglab来读取.set文件

"""
通过mne.io.read_raw_eeglab来读取.set文件
得到原始数据对象
"""
raw = mne.io.read_raw_eeglab("Eeglab_data.set",preload=False)

2. 绘制从第5s开始,5s时间窗口长的原始数据

"""
绘制从第5s开始,5s时间窗口长的原始数据

start:指定开始绘制的时间
duration:要绘制的时间窗口

从该图中可以看出每个通道的数据波动情况
可以通过设置duration的大小来放大或缩小

这个有点类似于eeglab中,放大缩小功能。
这里相同大小的窗口显示更短时间的数据,相当于eeglab中的选中数据进行放大,
反之,即缩小。
"""
raw.plot(start=5, duration=5)
plt.show()
"""
设置duration=1,相当于放大
"""
raw.plot(start=5, duration=1)
plt.show()

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

data, times = raw[picks, time_slice]

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

time_slice:时间切片

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

data,times=raw[:]

data,times=raw[:,:]

"""
获取1-3秒内的EEG数据
获取前5条 时间从1秒开始到3秒为止的数据
raw[:5,int(sfreq*1):int(sfreq*3)]
"""

sfreq=raw.info['sfreq']
data,times=raw[:5,int(sfreq*1):int(sfreq*3)]
plt.plot(times,data.T)
plt.title("Sample channels")

4.读取.locs文件

首先查看原始数据中的通道名称:

"""
打印通道名
"""
print(raw.info['ch_names'])

['EEG 000', 'EEG 001', 'EEG 002', 'EEG 003', 'EEG 004', 'EEG 005', 'EEG 006', 'EEG 007', 'EEG 008', 'EEG 009', 'EEG 010', 'EEG 011', 'EEG 012', 'EEG 013', 'EEG 014', 'EEG 015', 'EEG 016', 'EEG 017', 'EEG 018', 'EEG 019', 'EEG 020', 'EEG 021', 'EEG 022', 'EEG 023', 'EEG 024', 'EEG 025', 'EEG 026', 'EEG 027', 'EEG 028', 'EEG 029', 'EEG 030', 'EEG 031']

从上述打印的结果可以看到,原始数据中通道名称并非电极位置的命名,因此需要将其映射成电极位置名称。

mapping = {
    'EEG 000': 'FPz', 'EEG 001': 'EOG1', 'EEG 002': 'F3', 'EEG 003': 'Fz',
    'EEG 004': 'F4', 'EEG 005': 'EOG2', 'EEG 006': 'FC5', 'EEG 007': 'FC1',
    'EEG 008': 'FC2', 'EEG 009': 'FC6', 'EEG 010': 'T7', 'EEG 011': 'C3',
    'EEG 012': 'C4', 'EEG 013': 'Cz', 'EEG 014': 'T8', 'EEG 015': 'CP5',
    'EEG 016': 'CP1', 'EEG 017': 'CP2', 'EEG 018': 'CP6', 'EEG 019': 'P7',
    'EEG 020': 'P3', 'EEG 021': 'Pz', 'EEG 022': 'P4', 'EEG 023': 'P8',
    'EEG 024': 'PO7', 'EEG 025': 'PO3', 'EEG 026': 'POz', 'EEG 027': 'PO4',
    'EEG 028': 'PO8', 'EEG 029': 'O1', 'EEG 030': 'Oz', 'EEG 031': 'O2'
}
# 根据映射名对原始数据中的通道名进行重命名
raw.rename_channels(mapping)
"""
读取.locs文件,.locs文件记录的是电极头皮位置
"""
montage=mne.channels.read_custom_montage("eeglab_chan32.locs")
"""
设置脑电图中传感器配置(电极位置配置)
"""
raw.set_montage(montage,raise_if_subset=False)
"""
打印设置电极位置后的通道名
"""
print(raw.info['ch_names'])

['FPz', 'EOG1', 'F3', 'Fz', 'F4', 'EOG2', 'FC5', 'FC1', 'FC2', 'FC6', 'T7', 'C3', 'C4', 'Cz', 'T8', 'CP5', 'CP1', 'CP2', 'CP6', 'P7', 'P3', 'Pz', 'P4', 'P8', 'PO7', 'PO3', 'POz', 'PO4', 'PO8', 'O1', 'Oz', 'O2']

5.绘制电极位置

# 绘制电极位置
raw.plot_sensors()
plt.show()
"""
绘制通道位置图,并对应位置上显示通道名称
"""
layout_from_raw = mne.channels.make_eeg_layout(raw.info)
layout_from_raw.plot()
plt.show()
"""
上述效果也可通过
mne.channels.find_layout(raw.info, ch_type='eeg')
来读取
"""
layout_from_raw =mne.channels.find_layout(raw.info, ch_type='eeg')
layout_from_raw.plot()
plt.show()

6.绘制各通道的功率谱密度

"""
绘制各通道的功率谱密度
"""
raw.plot_psd()
plt.show()
"""
绘制采样频率在30Hz到70Hz之间,且只考虑40s到50s之间的所有通道的PSD
"""
raw.plot_psd(fmin=30, fmax=70, tmin=40,tmax=50.0,spatial_colors=True)
plt.show()
"""
绘制采样频率在30Hz到70Hz之间,且只考虑40s到50s之间的所有通道的平均PSD
"""
raw.plot_psd(fmin=30, fmax=70, tmin=40,tmax=50.0,average=True)
plt.show()

本文分享自微信公众号 - 脑机接口社区(Brain_Computer),作者:Rose

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 论文周报 | 第9期

    Real-time Neuroimaging and Cognitive Monitoring

    脑机接口社区
  • ICA独立成分分析去除EEG伪影

    关于脑电图EEG,Rose小哥分享过很多,可以查看《什么是EEG以及如何解释EEG?》《EEG数据、伪影的查看与清洗》等。今天分享的这篇利用独立成分分析ICA去...

    脑机接口社区
  • EEG-MI 基于EEG信号的运动想象分类实验

    “脑机接口”(Brain Cpmputer Interface, BCI)研究的核心是在大脑和外部设备之间建立直接的联通通路,因此脑机接口也被誉为“人工智能的顶...

    脑机接口社区
  • 经典综述|EEG源空间功能连接—致力于实现时-空间上高分辨率脑网络分析

    一、写在前面 这是2018年发布于信号处理领域权威顶级杂志《IEEE Signal Processing Magazine》上的一篇综述文章,该文章对于如何进行...

    悦影科技
  • EEG源连通性:旨在实现大脑网络在时间和空间上的高分辨率

    人脑是一个大规模的网络,其功能依赖于空间分布区域之间的动态相互作用。在快速发展的网络神经科学领域,有两个尚未解决但有望取得突破的挑战。首先,应该使用非侵入性和易...

    用户1279583
  • Where Does EEG Come From and What Does It Mean?

    脑电(EEG)在认知、脑功能和功能障碍等研究中发挥了重要作用。但是,脑电信号从何而来,它们有何意义?事实上我们对这个问题知之甚少。著名脑电领域学者Michael...

    用户1279583
  • 基于脑电图情感识别的新型深度学习模型

    机器学习的最新进展使检测和识别人类情感的技术得以发展。这些技术中的一些通过分析脑电图(EEG)信号而起作用,该信号实质上是从人的头皮收集的大脑电活动的记录。

    AiTechYun
  • BCI-EEG脑电数据处理

    EEG信号特征提取就是以脑电信号作为源信号,确定各种参数并以此为向量组成表征信号特征的特征向量。

    MiChong
  • 特征提取算法 | 共空间模式 Common Spatial Pattern(CSP)

    *凡来源非注明"原创"的所有作品,均为转载,其目的在于促进信息分享交流,不做商业用途。若有侵权,请及时通知后台,管理人员删侵。

    脑机接口社区
  • 【DB笔试面试525】在Oracle中,行链接和行迁移有什么区别?

    当一行的数据过长而不能存储在单个数据块中时,可能发生两种事情:行链接(Row Chaining)或行迁移(Row Migration)。

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券