脑机接口基础学习07----读取.set文件和.locs文件

这一篇文章主要介绍如何读取eeglab示例文件.set以及.locs文件
(1).set文件记录的是采集的信息,主要内容包括通道数,事件数,开始时间与结束时间等
(2).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
'''
通过mne.io.read_raw_eeglab来读取.set文件
得到原始数据对象

'''

raw=mne.io.read_raw_eeglab('Eeglab_data.set',preload=False)

2.绘制从第5s开始,5s时间窗口长的原始数据
start:指定开始绘制的时间
duration:要绘制的时间窗口

raw.plot(start=5,duration=5)
plt.show()

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

这个有点类似于eeglab中,放大缩小功能,这里相同大小的窗口显示更短时间的数据,相当于eeglab的选中数据进行放大,反之,即缩小

'''
设置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'])

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

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'])

在这里插入图片描述
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()

在这里插入图片描述

因为我没有下载EEGLAB,所以也没有示例数据,只是敲了一遍代码,文中的图均来自于脑机接口公众号

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值