脑机接口基础学习08----读取.edf文件

EDF,全称是Eurpean 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是字符串,则该字符串为数据存放在硬盘中的路径地址(速度较慢,需要较少的内存)

来看一个实例

###1.导入工具包
from mne.io import concatenate_raws,read_raw_edf
import matplotlib.pyplot as plt
import mne
###2.加载本地edf文件
raw=read_raw_edf("Affaf Ikram 20121020 1839.L1.edf",preload=False)
###3.获取原始数据中事件
#查看原始edf文件中保存的event id以及events

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

在这里插入图片描述
由上图可以发现,事件ID有1,2,3,4,5,6
每个ID对应着注释:[‘TRSP’,‘bgin’,‘fix+’,‘resp’,‘stm+’,‘stm-’]
共有517个事件

###4.根据事件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_id)
print(events_from_annot)

在这里插入图片描述

###5.绘制事件图
fig=mne.viz.plot_events(events_from_annot,sfreq=raw.info['sfreq'],
                       first_samp=raw.first_samp,event_id=event_dict)
subplots_adjust(right=0.7)

在这里插入图片描述

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

在这里插入图片描述

'''
获取采样频率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)
plot.title('Sample channels')

在这里插入图片描述
今天同样没有找到相应数据文件,里面的图仍然是公众号里的,实在惭愧

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值