python读取文件_Python读取.edf格式脑电数据文件

点击上面"脑机接口社区"关注我们

更多技术干货第一时间送达

5bf60e940376bf8eb2c412d580880e46.gif

MNE-python读取.edf文件

EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列。

该格式文件能够存储多通道的数据,允许每个信号拥有不同的采样频率。

在内部,它包括标题和一个或多个数据记录。标题包含一些一般信息(患者标识,开始时间......等等)以及每个信号的技术规格(校准,采样率,过滤,......等等),编码为 ASCII 字符。数据记录包含小端 16 位整数的样本。因此,EDF 也是多导睡眠图(PSG)录音的流行格式。

python读取edf文件,可以通过mne实现

方法原型:

方法原型:mne.io.read_raw_edf(input_fname,                    montage='deprecated',                     eog=None,                    misc=None,                    stim_channel='auto',                    exclude=(),                     preload=False,                     verbose=None)"""input_fname:edf文件存放地址montage='deprecated':已弃用eog:通道名称或应指定为EOG通道的索引列表。值应对应于文件中的电极。默认为无。misc:通道名称或应指定为MISC通道的索引列表。值应对应于文件中的电极。默认为无。stim_channel:默认为"auto",这意味着将名为“status”或“trigger”(不区分大小写)的通道设置为STIM。如果为str(或str列表),则所有与名称匹配的通道均设置为STIM;如果为int(或int列表),则将对应于索引的通道设置为STIM。exclude:要排除的频道名称。这在读取具有不同采样率的数据时会有所帮助,以避免不必要的重采样。preload:如果为True,则数据将被预加载到内存中(这样可以加快数据的索引);如果preload是字符串,则该字符串为数据存放在硬盘中的路径地址(速度较慢,需要较少的内存)。"""

读取edf文件:Affaf Ikram 20121020 1839.L1.edf

第一步:导入工具包

from mne.io import concatenate_raws, read_raw_edfimport matplotlib.pyplot as pltimport mne

第二步:加载本地edf文件

raw=read_raw_edf("Affaf Ikram 20121020 1839.L1.edf",preload=False)

第三步:获取原始数据中事件

查看原始edf文件中保存的event id以及events

events_from_annot, event_dict = mne.events_from_annotations(raw)print(event_dict)print(events_from_annot)

6b46e805002a86e7dcdb1e79228e9e55.png

如上图可以发现,事件ID有1,2,3,4,5,6

每个ID对应着注释:['TRSP', 'bgin', 'fix+', 'resp', 'stm+', 'stm-']

共有517个事件

第四步:根据事件ID获取对应事件

下面只选取事件ID为5和6的所对应的事件

custom_mapping = {'stm+':5, 'stm-': 6}(events_from_annot, event_dict) = mne.events_from_annotations(raw, event_id=custom_mapping)print(event_dict)print(events_from_annot)

6f4eb995a72612ac155b9dc145a0893a.png

第五步:绘制事件图

fig = mne.viz.plot_events(events_from_annot, sfreq=raw.info['sfreq'],                          first_samp=raw.first_samp, event_id=event_dict)fig.subplots_adjust(right=0.7)

c98f32f50aa52e0902aad9ceeea9eb35.png

epochs = mne.Epochs(raw, events=events_from_annot,                     event_id=event_dict)epochs.plot_image()

ea5c08526458cce18237f744f59b1b85.png

"""获取采样频率sfreq知识点:“采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个信号样本。”"""sfreq=raw.info['sfreq']"""获取索引为m到n的样本,每个样本从第k次到第h次.data,times=raw[m:n,k:h]其中data为索引为m到n的样本,每个样本从第k次到第h次.times是以第k次采样的时间作为开始时间,第h次采样时的时间为结束时间的时间数组。"""data,times=raw[:3,int(sfreq*1):int(sfreq*3)]plt.plot(times,data.T)plt.title("Sample channels")

2efb07880010612a197a8437a5518c0b.png

文章来源于网络,仅用于学术交流,不用于商业行为,若有侵权及疑问,请后台留言!

更多阅读

Python-Evoked地形图可视化

BrainNet:用于人与人之间直接协作的多人脑对脑接口

如何快速找到脑机接口社区的历史文章?

第2期 | 国内脑机接口领域专家教授汇总(修改)

收藏 | 脑电EEG基础与处理汇总

你知道"淘宝意念购"吗?阿里巴巴也入局脑机接口领域了...,

使用时空-频率模式分析从脑电数据的一些试验中提取N400成分

未来50年的神经科学会是什么样呢?

脑机接口BCI学习交流QQ群:515148456

微信群请扫码添加,Rose拉你进群

(请务必填写备注,eg. 姓名+单位+专业/领域/行业)

12d5cec6012a181c46d931790bcf3767.png

长按加群

e610ac2c4c27c54dfbc6b39864239815.png

欢迎点个在看鼓励一下

c7fabe67fd71f8115e2efef0f6aa8a67.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值