2023/1/2 -1/3脑机接口学习内容一览:

这一篇博客主要是对自己这几个星期学习脑机接口基本操作情况的总结,对刚进入这个领域、感觉有些迷茫的同学来说可能会有一定的参考价值。

这项工作主要考验自己对脑电信号基本处理流程的熟悉程度,在写代码的同时也发现了自己较多的不足,有些bug也未能完美处理。但是相对于一个星期前一知半解的状态明显有着很大的进步。


典型的 M/EEG 工作流程

import mne
import matplotlib.pyplot as plt
import numpy as np"""
第一步:导入数据集,定位通道数据
通过mne.io.read_raw_eeglab来读取.set文件
得到原始数据对象
p.s.此数据集为eeglab的自带数据集
在此文件中已经包含各个脑电通道的位置,故在此不读入.locs文件
"""
raw = mne.io.read_raw_eeglab("secdata.set", preload=True, uint16_codec=None)
# 提取0~20s的数据
tmin, tmax = 0, 20
raw.crop(tmin, tmax).load_data()
print(raw.info)'''
第二步:删除无用通道的数据
在采集数据的过程中,有可能会记录一些后期并不需要用到的通道信息,这时候我们就可以将它们剔除掉,不必纳入后续的分析中。
比如双侧乳突点。又比如眼电通道的数据。
在使用eeglab来对数据进行预处理的时候,可以通过ICA的方式来去除眼电成分
而这种方式可以不需要眼电通道数据的参与就可以进行。
在此我们将不需要用到的通道列入bads中
这里将两个眼电信号通道加入bads
'''
raw.info['bads'].extend(['EOG1', 'EOG2'])"""
绘制从第5s开始,5s时间窗口长的原始数据start:指定开始绘制的时间
duration:要绘制的时间窗口从该图中可以看出每个通道的数据波动情况
可以通过设置duration的大小来放大或缩小这个有点类似于eeglab中,放大缩小功能。
这里相同大小的窗口显示更短时间的数据,相当于eeglab中的选中数据进行放大,
反之,即缩小。
"""
raw.plot(start=5, duration=5)
plt.show()"""
打印通道名
p.s.标记为bads后的通道仍可见,但在各种操作中bads通道不对整体产生影响
"""
print('all the channels are\n', raw.info['ch_names'])# 绘制电极位置
raw.plot_sensors("3d")
plt.show()"""
绘制通道位置图,并对应位置上显示通道名称
在此文件中已经包含各个脑电通道的位置,故在此不读入.locs文件
"""
layout_from_raw = mne.channels.make_eeg_layout(raw.info)
layout_from_raw.plot()
plt.show()'''
第三步:重参考
与中文教程不同。这里我们参照文档中事件相关电位的处理过程,先进行重参考
这里我们选择平均参考
'''
raw.set_eeg_reference('average', projection=True)'''
第四步:滤波
因为这个数据集似乎是记录观察者看到不同形状的图形的反应
为了去除电源线噪声,我们做一个凹陷滤波
我们暂且假设他的alpha波比较活跃,故做一个9-13hz的带通滤波
为了去除漂移现象,再做一个1hz的高通滤波
为了使操作更加直观,我们可以使用subplots函数将几张图对比来看
'''
fmin, fmax = 9, 13
fig, ax = plt.subplots(1, 4, figsize=(16, 4))
raw.compute_psd(method='welch', average=False).plot(axes=ax[0])
raw.notch_filter(60)
raw.compute_psd(method='welch', average=False).plot(axes=ax[1])
raw.filter(fmin, fmax)
raw.compute_psd(method='welch', average=False).plot(axes=ax[2])
raw.filter(1., None)
raw.compute_psd(method='welch', average=False).plot(axes=ax[3])for ax, title in zip(ax[:4], ['native', '60hz filter', '9hz-13hz pass', '1hz high pass']):ax.set_title(title)
plt.show()'''
第四步:根据事件分段,提取epochs
在这个set数据集中暂且只有annotation而没有events事件
故我们需要考虑将注释转化为我们需要的事件
即Consider using mne.events_from_annotations to convert these to events.
'''
# 打印注释信息,发现存在5个rt注释,8个square注释
print(raw.annotations)
# 将rt改名为事件1,square改名为事件2
dictionary = {'rt': 1, 'square': 2}
events, event_id = mne.events_from_annotations(raw, event_id=dictionary)
print(events, '\n', event_id)'''
创建epochs对象
这里我们用事件来创造epoch对象
取事件前0.2s至事件后1s创建,并且将事件前0.2秒至事件发生的0s作为基线校正
print可以看见epoch共包含5个rt事件,8个square事件
'''
epochs = mne.Epochs(raw, events, event_id, tmin=-0.2, tmax=1,baseline=(None, 0), preload=True)
print(epochs.info)'''
通过epochs平均叠加得到evoked对象,然后进行绘图
(不知道为什么线条那么乱,可能是前面的操作有问题?)
'''
see_rt = epochs['rt'].average()
see_square = epochs['square'].average()
f, axs = plt.subplots(1, 2, figsize=(10, 4))
_ = f.suptitle('rt & square events in eeg', fontsize=20)
_ = see_rt.plot(axes=axs[0], show=False, time_unit='s')
_ = see_square.plot(axes=axs[1], show=False, time_unit='s')
plt.show()'''
第五步:时频域分析
这里使用小波变换做时频域分析
'''
# 时频分析
freqs = np.logspace(*np.log10([9, 13]), num=10)
n_cycles = freqs/2.
power, itc = mne.time_frequency.tfr_morlet(epochs, freqs=freqs, n_cycles=n_cycles, use_fft=True)# 时频结果绘制
power.plot(picks=['O1'], baseline=(None, 0), mode='logratio', title='auto')  # 枕叶导联的power结果
power.plot_topo(baseline=(-0.5, 0), mode='logratio', title='Average power')  # 绘制power拓扑图

参考文献:

脑电时频分析

用MNE包进行Python脑电数据处理

脑电数据处理分析教程汇总(eeglab, mne-python)

脑机接口信号基本操作回顾相关推荐

  1. 运动皮层的树突状钙信号驱动光学脑机接口

    Krishna V. Shenoy教授及其合作者今年6月份在<Nature Communications >发表的研究,剑指光学脑机接口! 研究者利用在恒河猴(Macaca mulatta ...

  2. 计算机科学与技术脑机接口,脑机接口的工作原理是什么?计算机信号是怎么给大脑发号指令的?...

    随着现代计算机功能的不断发展以及对人类大脑的了解,我们越来越接近将一些科幻小说的清洁变成现实.想象一下将信号直接传输到某人的大脑,使他们能够看到,听到或感觉到特定的感觉输入.这不是为了方便-对于重度残 ...

  3. 《自然》 脑机接口新突破 人脑信号转文本准确率达97%

    来源:网易智能 据国外媒体报道,一个由加州大学旧金山分校的研究团队打造的新型人工智能系统可根据人脑信号来生成文本,准确率最高可达97%. 亚马逊和谷歌等科技公司打造的虚拟助手相当先进,语音识别能力比起 ...

  4. 脑机接口新应用,利用深度学习对无声语音信号解码

    浙江大学.中国矿业大学和伦敦大学的研究人员研究了可用于识别神经肌肉信号的空间特征和解码器.具体来说,研究人员提出了利用迁移学习和深度学习的方法,将表面肌电信号数据转换为包含丰富的时频域信息的声谱图.对 ...

  5. 树莓派都能做脑机接口了?实时处理8个电极信号,人人用得起 | 开源

    行早 发自 凹非寺 量子位 报道 | 公众号 QbitAI 只需要一块树莓派的板子,就可以做一个脑机接口? 没有开玩笑,这位俄罗斯小哥Rakhmatulin还真做出来了,这接地气的设备只用一块树莓派板 ...

  6. 《脑机接口导论》学习笔记 3.记录大脑的信号和刺激大脑

    本章,我们将对大脑中神经元电信号的记录与对神经元进行刺激的技术手段进行了解,并分析各项技术的优劣性与适用性,从而探究这些技术用于BCI输入信号的获取以及通过此类技术使BCI达成交互的可行性. 目录 3 ...

  7. 最新综述 | 皮层内外无线神经信号记录系统为脑机接口技术注入全新血液

    编译作者:YiYi 植入式BCI相比非侵入式BCI能够在获得信号和控制信号方面都更精准,从而在感觉和运动功能恢复领域以及神经系统疾病的治疗方面有广泛的应用潜力.但目前大多数工作都集中在整个植入式系统的 ...

  8. 人工智能在生物信号领域的应用——脑机接口

    4月1日愚人节,雾帜智能发了一篇文章,内容是关于"雾帜智能成功完成基于脑机接口技术的梦境捕捉与还原技术的概念验证,并发布了一款新的人工智能产品:智能睡枕HoneyPillow‍.该产品将一举 ...

  9. 重磅!信号分析新方法fCWT处理速度提高100倍,可应用于脑机接口,Nature子刊

    新技术如何工作的示意图,将信号转换为更具信息性的表示."简而言之,我们将以不同的眼光看待信号!" 目前,信号的频谱分析要么主要考虑速度-精度的权衡,要么忽略信号的非平稳特性.本文介 ...

最新文章

  1. GitHub上大热的Deep Photo终于有TensorFlow版了!
  2. android 缓存文件目录在哪个文件夹里,Android 文件目录存储介绍 缓存目录 | 私有目录 | 系统根目录 | 用户可见目录...
  3. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据
  4. android编译会生成class吗,请教下Android N混合编译生成的base.art中的类在运行时最终添加到哪个classloader的问题...
  5. ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现
  6. Abp vNext 切换MySql数据库
  7. StreamWriter类的一般使用方法
  8. 互联网公司还要亏多久?
  9. 打开模式时防止BODY滚动
  10. JAVA实现简单的FTP服务器
  11. 数据安全的四个新挑战有哪些
  12. MATLAB车牌识别系统
  13. Linux文件系统和磁盘分区
  14. 京东云魏伟:做最懂视频的云
  15. python是低级语言吗_低级语言和高级语言的区别
  16. Learning ImageMagick 1: Lomo效果
  17. hr面试性格测试30题_HR性格测试题.doc
  18. 不仅会编程还要会英语(博主英语小笔记)1.1名词
  19. 关于电信重组(华为中兴观察员出品,必属精品)
  20. uni-app的基本使用

热门文章

  1. SpringCloud版本
  2. Spring Cloud版本介绍
  3. 网络安全入门篇:bwapp靶场通关(更新ing)
  4. 物流查询,怎么查快递单号看包裹走到哪里了
  5. 2020年数学建模美赛-B题问题分析
  6. 【表白程序】樱花雨3d相册代码
  7. Ubuntu虚拟机登录密码忘记,修改登录密码方法
  8. JAVA生成grib文件_wgrib读grib数据
  9. python---声压级计算
  10. python线程延时函数_详解Python 多线程 Timer定时器/延迟执行、Event事件