2021-08-18

将博睿康采集的bdf脑电数据转化成能够进行mne操作的raw数据格式,并设置通道信息

首先读取30通道原始数据,并将其中21通道数据整理出来

import mne
raw = mne.io.read_raw_bdf(r"E:\*\*\ADHD\xxxx_data.bdf",preload=False)
#读取采集的bdf数据,30通道*612s
#实际只需要标准10-20电极的19个eeg通道+2耳朵参考
data,times = raw[0:21,:]
#提取前21个通道,这里需要根据自己的通道信息,我的刚好是前21个通道
ch_names = raw.info.ch_names
#提取21个通道的名称信息
sfreq = raw.info['sfreq']
#提取脑电信号的采样频率
info = mne.create_info(ch_names=ch_names[0:21],ch_types=['eeg']*21,sfreq =sfreq)
#将所需信息通过create_info函数打包成info
custom_raw = mne.io.RawArray(data,info)
#将数据和数据信息通过RawArray函数封装
print(custom_raw.info)#打印数据信息

第一次bug

第一次到这里就完成了,准备按照脑机接口社区提供的教程读取通道文件,绘制通道位置图。
But,没有提供通道文件,额。。。。,好吧,这可难不倒我,根据之前使用eeglab的经验,我可以修改已有的通道文件适配成我需要的。
mne提供读取*.locs文件,那好了,改吧。
However,eeglab里面的montage通道和我这里使用的设备的通道存在几个通道不一致,eeglab10-20标准电极是
63通道标准10-20电极
25和19通道标准10-20电极
但是所用脑电设备的脑电通道没有上图19通道的T7、T8、P7、P8多了T5,、T6、T3、T4通道。本来想直接替换一下的,因为他们间距是差不多的,可能只是换了名称代号。
后来又觉得不是很严谨,于是想到MNE工具箱中肯定也有通道位置文件,看看能不能从中找一下。找到mne的montage文件位置(我的在D:\python36\Lib\site-packages\mne\channels\data\montages)复制其中的standard_1020.elc文件编辑一个新的standard_1020_21.elc。第一次操作的时候错误的把图中选中三个通道给删除了,那么问题来了,这三个通道是三个定位通道,缺少之后不能准确绘制其他通道的位置。主要是程序运行提示
在这里插入图片描述

Fiducial point nasion not found, assuming identity unknown to head transformation  custom_raw.set_montage(montage)

而直接读取standard_1020.elc则不会出现这个问题,反复对比与它的区别,
<DigMontage | 0 extras (headshape), 0 HPIs, 3 fiducials, 79 channels>
<DigMontage | 0 extras (headshape), 0 HPIs, 0 fiducials, 21 channels>
发现缺少这三个通道。那么好了,添加上这三个通道就好了。

第二次bug

接下来就是给自己创建的Raw数据设置通道。
问题又来了,简直就是一路解决bug啊。

montage = mne.channels.read_custom_montage('D:\python36\Lib\site-packages\mne\channels\data\montages\standard_1020_21.elc')
print(montage)
custom_raw.set_montage(montage)

第三句执行出现错误:提示expected str, bytes or os.PathLike object, not NoneType
在这里插入图片描述

在鹤夫的帮助下,发现是数据的文件路径为空,当然了,我只是从另一一个数据中提取出新的数据并设置成RAWdata格式,并没有保存,所以就没有文件路径了。那么好了,将新的RAW保存成fif格式数据到指定文件夹。

再次读取该文件,执行

fname = r'E:\\*实习\\*项目\\ADHD\\*\\data2.fif'
custom_raw = mne.io.read_raw_fif(fname)
custom_raw.load_data()
montage = mne.channels.read_custom_montage('D:\python36\Lib\site-packages\mne\channels\data\montages\standard_1020_21.elc')
print(montage)
custom_raw.set_montage(montage)

没有问题,成功解决!

画个图试试---->

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

在这里插入图片描述
在这里插入图片描述
[1]: https://mp.weixin.qq.com/s/LXHP7dDOyhvCWi8vKWH5lw
[2]: https://mp.weixin.qq.com/s/f5PVJfAS_HRBoWaHNYPpgw

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值