Python读取.set文件和.locs文件

9a649f2a8125055f2fbc3f8a5ba391d6.gif

本案例主要介绍如何读取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()

6da7e1bd3181d5b7fcc1ac9252ae385e.png

"""
设置duration=1,相当于放大
"""
raw.plot(start=5, duration=1)
plt.show()

5cd31a380ed13e866be21c5a1054881f.png

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

b27558328f156be45c6cdc7f58d58335.png

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

7b078a393dd9874df2c25a922ffa1321.png

"""
绘制通道位置图,并对应位置上显示通道名称
"""
layout_from_raw = mne.channels.make_eeg_layout(raw.info)
layout_from_raw.plot()
plt.show()

afc9cfc651fafe393204c9c17bfd6477.png

"""
上述效果也可通过
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()

114a4bec534d1ea92868df2b76f3d988.png

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

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

af9a3e12ae7bf052405e02a4358713f2.png

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

e3a209672dac0e5bb6a9e168e12dcc55.png

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

3ccecb8da91c420550c4b3965f79e0ae.png

eb125b9474e5ac5f83ac6b893d1a7a97.png

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

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

更多阅读

WAIC探营|脑疾病的“希望之光”,中国脑机接口技术将有新突破

[MNE-Python-1]| MNE-Python详细安装与使用

[MNE-Python-2]| MNE中数据结构Raw及其用法简介

[MNE-Python-3]| MNE中数据结构Epoch及其创建方法

[MNE-Python-5]| Python机器学习算法随机森林判断睡眠类型

猴子意念打字,有可能敲出莎士比亚全集

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

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

投稿通道

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

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

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

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

稿件要求

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

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

投稿通道

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

2c6bb1e6d4a52ffa9afc41be92926b5d.png

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

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

QQ交流群:913607986

cdf452733e83607adcb2c5c4532243d2.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑机接口社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值