用Matlab完成 PhysioNet MI 数据集裁切、处理与存储(附完整代码)
数据集描述(以运动想象数据为例)
数据集地址:https://physionet.org/content/eegmmidb/1.0.0/
其包含109个用户的运动想象与真实运动数据,每个用户都会执行以下四种任务:
- Task 1 = ”左拳或右拳打开或关闭,真实的运动“
- Task 2 = ”想象左拳或右拳的开合,实际不进行运动“
- Task 3 = ”左脚或右脚打开或关闭,真实的运动“
- Task 4 = ”想象左脚或右脚打开或关闭,实际不进行运动“
每个用户会按照图中顺序,进行不同的Task,共进行14轮次,数据集将轮次称为”run“。每一”run“中(除去1、2的基线”run“),数据包含对应Task的30个样本,采样率为160Hz,通道数为64。

数据集格式(以运动想象数据为例)
将数据下载完毕后,共109个文件夹,对应109名被试者的数据,如下图所示:

每个文件夹中,可以寻找到每一轮次(Run)的”.edf“数据,共14个edf文件与其对应的”.event“文件:

数据集读取(附完整代码)
这里我利用Matlab读取EEG数据,读取前需要安装EEGLab,这个网上很多教程,大家自行搜索。利用EEGLab的"pop_biosig"函数完成对应“.edf”数据的读取,如若出现报错大家记得在EEGLab中更新这个函数。
读取时只需指定对应的“subject”与“run”就可以,如读取第一个用户第三个run的数据(即读取“S001R03.edf”),代码如下:
subject = 1;
Run = 3;
Physio_data_path = '你存放数据集的路径\';
if subject < 10
if Run < 10
EEG = pop_biosig([Physio_data_path, 'S00', int2str(subject), '\', ...
'S00', int2str(subject), 'R0', int2str(Run), '.edf']); % 将edf文件数据加载至EEGlab
event_path = [Physio_data_path, 'S00', int2str(subject), '\'];
filename = ['S00', int2str(subject), 'R0', int2str(Run), '.edf'];
else
EEG = pop_biosig([Physio_data_path, 'S00', int2str(subject), '\'