MNE读取竞赛数据集gdf格式脑电数据,并简单可视化

MNE是用于探索、可视化和分析人类神经生理学数据的开源 Python 包
这里使用的数据集为BCI CompetitionIV(2008)中的数据集2a。数据集文件如下图:
在这里插入图片描述使用mne.io.read_raw_gdf()读取,具体参数设置见官网:https://mne.tools/stable/generated/mne.io.read_raw_gdf.html#examples-using-mne-io-read-raw-gdf

1.读取数据

import mne
import matplotlib.pyplot as plt
input_fname = 'BCI_data/BCICIV_2a_gdf/A01E.gdf'  # 选取01E文档
# 通道名称映射
mapping = {
    'EEG-Fz': 'eeg',
    'EEG-0': 'eeg',
    'EEG-1': 'eeg',
    'EEG-2': 'eeg',
    'EEG-3': 'eeg',
    'EEG-4': 'eeg',
    'EEG-5': 'eeg',
    'EEG-C3': 'eeg',
    'EEG-6': 'eeg',
    'EEG-Cz': 'eeg',
    'EEG-7': 'eeg',
    'EEG-C4': 'eeg',
    'EEG-8': 'eeg',
    'EEG-9': 'eeg',
    'EEG-10': 'eeg',
    'EEG-11': 'eeg',
    'EEG-12': 'eeg',
    'EEG-13': 'eeg',
    'EEG-14': 'eeg',
    'EEG-Pz': 'eeg',
    'EEG-15': 'eeg',
    'EEG-16': 'eeg',
    'EOG-left': 'eog',
    'EOG-central': 'eog',
    'EOG-right': 'eog'
}
raw = mne.io.read_raw_gdf(input_fname)
raw.set_channel_types(mapping)  # 这里我进行了一步映射,如果不映射会显示无法将EEG与EOG区分开

显示脑电数据的信息

print(raw)
print(raw.info)

如果不进行映射,打印的结果如下:

<RawGDF | A01E.gdf, 25 x 687000 (2748.0 s), ~29 kB, data not loaded>
<Info | 7 non-empty values
 bads: []
 ch_names: EEG-Fz, EEG-0, EEG-1, EEG-2, EEG-3, EEG-4, EEG-5, EEG-C3, EEG-6, ...
 chs: 25 EEG
 custom_ref_applied: False
 highpass: 0.5 Hz
 lowpass: 100.0 Hz
 meas_date: 2005-01-19 12:00:00 UTC
 nchan: 25
 projs: []
 sfreq: 250.0 Hz

可以看到chs那里把EOG通道也归到EEG通道中了,正确结果应为下面打印的:

<RawGDF | A01E.gdf, 25 x 687000 (2748.0 s), ~29 kB, data not loaded>
<Info | 7 non-empty values
 bads: []
 ch_names: EEG-Fz, EEG-0, EEG-1, EEG-2, EEG-3, EEG-4, EEG-5, EEG-C3, EEG-6, ...
 chs: 22 EEG, 3 EOG
 custom_ref_applied: False
 highpass: 0.5 Hz
 lowpass: 100.0 Hz
 meas_date: 2005-01-19 12:00:00 UTC
 nchan: 25
 projs: []
 sfreq: 250.0 Hz
>

显示前10秒所有的脑电信号

plt.figure(figsize=(10, 8))
raw.plot(duration=10, n_channels=25, scalings='auto')
plt.show()

结果如图:
在这里插入图片描述

60HZ下的psd

raw.plot_psd(fmax=60)
plt.show()

结果如下图:(我觉得这个绘制的有点问题,通道数不明显,有懂得可以讨论一下)

在这里插入图片描述

获取10-20秒内良好的eog数据

# 方法一
picks = mne.pick_types(raw.info, eog=True, exclude='bads')  # 换成eeg即可显示eeg数据
t_idx = raw.time_as_index([10., 20.])
data, times = raw[picks, t_idx[0]:t_idx[1]]
plt.plot(times, data.T)
plt.title("Sample channels")
plt.show()
# 方法二
sfreq = raw.info['sfreq']
data, times = raw[22:25, int(sfreq*10):int(sfreq*20)]
plt.plot(times, data.T)
plt.title("Sample channels")
plt.show()

结果如下图所示:
方法一:
在这里插入图片描述
方法二:
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好的!文西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值