信息速览
稳态视觉诱发电位和事件相关电位常被放在一起讲,其实是两件事。后者问的是「刺激之后多久出现一个波」,答案在时间轴上,几百毫秒就走完;前者问的是「脑电在哪个频率上鼓出一个峰」,答案在频率轴上,需要刺激持续几秒才稳得住。受试者盯着一盏按固定频率闪的灯,枕区就会在那一频率上振荡起来,像被外部光源牵引住的一根弦。
这套机制做脑机接口很划算:不用训练、不用适应、看一眼就有信号。代价是它挑设备——电极要盖住枕区,采样率要够,放大器不能把几赫兹到十几赫兹那段窄带压掉。希腊信息与通信技术研究所(CERTH-ITI)在欧盟 H2020 的 MAMEM 项目下放出的这批记录,恰好把同一批人放在两套落差极大的设备上各测一遍。
于是它成了一组罕见的对照材料:湿电极高密度系统与消费级无线耳机,同一群受试者、同一组频率、同一套视觉刺激。想回答「便宜设备到底能不能做稳态视觉诱发电位」的人,很难找到比它更直接的一组。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | MAMEM SSVEP Database(页面另称 MAMEM steady state visually evoked potentials database) |
| 缩写展开 | MSSVEPDB 为 PhysioNet 的项目短名;MAMEM 为 Multimedia Authoring & Management using your Eyes & Mind |
| 发布方 | PhysioNet(原始数据由 CERTH-ITI 提供) |
| 项目背景 | 欧盟 Horizon 2020 项目 MAMEM |
| 首次发布 | 2016 年 4 月 15 日,后于 6 月 8 日与 9 月 3 日两次扩充,版本号仍为 1.0.0 |
| DOI | 10.13026/C29591 |
| 受试者 | 11 名,八男三女,24 至 39 岁 |
| 记录数 | 235 段,分布在三个子集 |
| 子集划分 | 三个,范式与采集设备均不相同 |
| 刺激频率 | 5 个频点:6.66、7.5、8.57、10、12 赫兹 |
| 刺激时长 | 每个闪烁窗口 5 秒,窗口间隔 5 秒休息 |
| 通道数 | 256 导(子集一、二)与 14 导(子集三) |
| 采样率 | 250 赫兹(子集一、二)与 128 赫兹(子集三) |
| 采集设备 | 256 导湿电极系统;Emotiv EPOC 十四导无线耳机 |
| 文件格式 | WFDB 的 .dat 与 .hea,配 .flash 与 .win 二进制标注 |
| 体积 | 未压缩约 5.1 GB |
| 许可 | ODC-BY 1.0,免注册 |
| 缺什么 | 在线反馈、分类器输出、患者人群、官方划分与基线成绩、视力筛查记录 |
§1 它要解决的具体麻烦
1.1 一套便宜设备能不能顶替一套贵设备
稳态视觉诱发电位的工程难点不在算法,在信噪比。枕区那一小段振荡叠在自发 alpha 节律上,幅度往往只有微伏量级,而 alpha 恰好落在 8 至 12 赫兹——和多数 SSVEP 系统的刺激频点正面撞车。要把它分离出来靠三件事:电极离枕区够近、采样率够高、刺激频率够稳;任何一件掉链子,频域的峰就塌下去。高密度湿电极系统三件都做得好,但它贵、难戴、需要导电膏;消费级无线耳机反着来,戴上就走、干电极、十几分钟部署完,代价是通道少、采样率低、阻抗高。两类设备实验室里都有,却很少有公开数据把它们放在同一批人身上比——CERTH-ITI 这批记录就是为这个比较留的:同一组受试者、同一套视觉刺激、同样五个频点,先在 256 导系统上做两遍,再在 Emotiv EPOC 上做一遍(§4.3)。子集三的价值因此不取决于它自己有多好,取决于它和前两个子集的差有多大。
| 条件 | 高密度湿电极 | 消费级无线耳机 |
|---|---|---|
| 与本库子集的对应 | 子集一、子集二 | 子集三 |
| 通道数 | 256 | 14 |
| 采样率 | 250 赫兹 | 128 赫兹 |
| 电极类型 | 湿电极,需导电膏 | 干电极,戴上即用 |
| 枕区覆盖 | 密集,可做空间滤波 | 仅 O1 与 O2 两导 |
| 部署时间 | 数十分钟 | 十几分钟 |
| 在本库中的角色 | 性能上限参照 | 可用性下限参照 |
1.2 三条常见的错误期待
| 常见期待 | 实际情况 | 后果 |
|---|---|---|
| 多目标 SSVEP 大规模库 | M 来自项目名 MAMEM,11 人、5 频点、三个条件 | 规模训练会立刻过拟合 |
| 三个子集等于三批受试者 | 同一批人做三种条件,合并后仍是 11 人 | 留一验证时同一张脸跨到测试侧 |
| 有官方训练测试划分 | 无划分、无基线、无榜单 | 跨论文比较无公共基准 |
| 可直接做在线脑机接口 | 无反馈、无分类器输出 | 闭环环节须自建 |
| 消费级设备子集可独立成库 | 只有 11 人、14 导、128 赫兹 | 单独使用统计力极弱 |
| 频率是精确值 | 官方给近似值,逐窗有微差 | 精细分析须读 .win 附串 |
| 三个子集可以互相补样本 | 三种条件,不是三批人 | 样本量不随子集数增长 |
1.3 它能给到的与给不到的
能直接支撑的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 频率识别算法的离线评测 | 5 类频点、每类数十个 5 秒窗口、逐窗标注 | 够,事件量足以跑 CCA 与 FBCCA |
| 高密度与消费级设备的对照 | 同一批人、同一刺激、两套设备 | 够,这是它最稀缺的一层 |
| 跨受试者泛化研究 | 11 名受试者、每人多场 | 只够做留一受试者,不够做人群分层 |
| 空间滤波与源定位 | 256 导,但只有 19 个可命名位置 | 勉强,导联布局不是标准帽 |
| 高频编码(20 赫兹以上)研究 | 频点最高 12 赫兹 | 不够,一个高频点都没有 |
撑不起来的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 连续拼写与字符级评估 | 无字符表、无拼写任务 | 不够,范式里没有这一层 |
| 在线闭环与反馈研究 | 无反馈、无决策标记 | 不够,须自建 |
| 患者与视障人群研究 | 全部健康受试者 | 不够,一点都没有 |
| 采样率对识别率的影响 | 250 与 128 两档,同刺激 | 够,但两档绑在两套设备上,混淆未拆 |
| 眼动与眨眼伪迹处理 | 无独立眼电通道 | 不够,只能从额区导联间接判断 |
1.4 你的处境与它能帮到的事
你手上有数据、缺对照
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在评估一款廉价脑电头环能不能做 SSVEP,手上只有自家采的几个人 | 一组同刺激、同受试者的高密度对照 | 先用子集三跑通,再用子集一同受试者做上限参照(§4.3) |
| 你的解码器在实验室数据上很好,换干电极就崩 | 崩溃点可以被拆成通道数、采样率、阻抗三类 | 在子集一上逐步降采样、抽通道,模拟出中间条件 |
| 你要写方法学章节,需要一个公开的多频点 SSVEP 库 | 五个频点、五秒窗、逐窗频率标注 | 引用时写清用的是哪个子集,别写「全库」 |
| 你在做 CCA 类算法的复现 | 参考信号频率可直接从标注取出 | 按 §5.4 读 .win 的辅助字符串,别用文件名推 |
你要写方法学或做教学
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在比较湿电极与干电极的频域信噪比 | 两套设备、同一批人、同一组频率 | 固定窗长与预处理,只改设备这一项(§4.3 的案例) |
| 你在教学,要讲清频域与时域诱发的区别 | 五秒持续刺激的稳态响应,与瞬态 ERP 形成对照 | 配合事件相关电位库并排讲(§6.1) |
| 你在核对某篇 SSVEP 论文的数据来源 | 体积中等、免注册、结构直白 | 5.1 GB 可一次下完,先读 RECORDS 再决定下哪个子集 |
1.5 一句话判断
它不是「更多 SSVEP 数据」,而是「同一批人在两套设备上的同一道题」:把设备落差从口头讨论变成一个可以逐窗对齐的数字。
1.6 不适合谁:四条边界
| 不适合的用法 | 为什么不成立 | 该换什么 |
|---|---|---|
| 规模训练 | 十一人、三个条件、五个频点,几十万参数的模型几分钟就记住这十一颗脑袋 | 汇总型 SSVEP 或 ERP 大库 |
| 拼写器研究 | 范式里没有字符、没有目标文本、没有连续输入 | 带拼写任务的事件相关电位库 |
| 临床与人群推断 | 全部健康、24 至 39 岁,无视力与色觉筛查,刺激方块是品红与紫色 | 带诊断与量表的人群库 |
| 精细源定位 | 256 导里只有 19 个可命名,无电极坐标、无头模型 | 带结构像与导联布局的高密度库 |
四条的失效方式各不相同:第一条是样本量不够,第二条是范式里根本没有那一层,第三条是人群代表性不足,第四条是空间信息缺失。只有第一条能靠合并数据缓解,后三条换库才行。
§2 数据构成与规格
2.1 三个目录、一套命名、两层文件
顶层结构极其扁平:三个子集目录,加五个说明文件。
| 顶层项 | 体积 | 作用 | 能否省 |
|---|---|---|---|
| dataset1 | 主体 | 子集一,48 段,256 导,错开闪烁 | 不能 |
| dataset2 | 主体 | 子集二,66 段,256 导,同时闪烁 | 不能 |
| dataset3 | 主体 | 子集三,121 段,14 导,同时闪烁 | 不能 |
| ANNOTATORS | 124 字节 | 声明 flash 与 win 两种标注 | 可省,两行 |
| CORR | 142 字节 | 19 个 10-20 通道的索引映射 | 建议留,读通道名要用 |
| RECORDS | 3.6 KB | 235 行记录清单 | 不能,是遍历入口 |
| SUBJECTS | 362 字节 | 11 行,编号、性别、年龄 | 不能,唯一的人口学来源 |
| SHA256SUMS.txt | 68.4 KB | 全库校验和 | 建议留,用于完整性核对 |
| 命名片段 | 取值 | 含义 | 注意 |
|---|---|---|---|
| 首字母 | S / T / U | 子集一 / 二 / 三 | 决定设备与采样率 |
| 三位数字 | 001 至 011 | 受试者编号 | 与 SUBJECTS 表对齐 |
| 场次字母 | a 至 e | 第几场 | 不是每人都满五场 |
| 适应期标记 | x | 适应期记录 | 只有子集二、三有 |
| 半场标记 | i / ii | 前 12 窗 / 后 13 窗 | 只有子集三有 |
2.2 字段与记录的完整字典
WFDB 的头文件是纯文本,第一行四个字段,其后每路信号一行。以 dataset1/S001a.hea 为例,首行是 S001a 256 250 117917——记录名、信号路数、采样率、采样点数。四者相乘相除就能得到时长:117917 除以 250 约 471.7 秒,接近八分钟。
| 头行字段 | 示例取值 | 含义 | 注意 |
|---|---|---|---|
| 记录名 | S001a |
与文件名一致 | 不含目录前缀 |
| 信号路数 | 256 | 子集一、二为 256,子集三为 14 | 判设备的第一道关 |
| 采样率 | 250 | 赫兹 | 子集三为 128 |
| 采样点数 | 117917 | 全程总点数 | 除以采样率得秒数 |
每路信号行另有若干字段,按存储与标定两组拆开看。
存储与格式
| 信号行字段 | 示例 | 含义 | 注意 |
|---|---|---|---|
| 文件名 | S001a.dat |
存放该路数据的文件 | 256 路共用一个 .dat |
| 存储格式 | 16 | 16 位整数 | 全库统一 |
| 增益 | 17.572 | 每单位对应的微伏数 | 逐通道不同 |
| 基线 | (42471) | 零点的数字量偏移 | 还原时要减 |
| 单位 | uV | 微伏 | 全库统一 |
标定与取值
| 信号行字段 | 示例 | 含义 | 注意 |
|---|---|---|---|
| ADC 分辨率 | 0 | 未单独填写 | 按 16 位处理 |
| ADC 零值 | 0 | 未单独填写 | 与基线配合使用 |
| 首采样值 | -26269 | 第一个点的数字量 | 可用于快速自检 |
| 校验和 | -23544 | 该路全部点的累加校验 | 与读取库结果比对 |
| 块大小 | 0 | 未单独填写 | 按默认处理 |
| 描述 | EEG 或 F8 |
通道名 | 只有 19 个有正式名 |
增益与基线逐通道不同,这是读取时最容易翻车的地方。直接把 16 位整数当微伏用,幅值会差出一到两个数量级;正确做法是 (原始值 - 基线) / 增益。
2.3 一条记录的完整解剖
拿 dataset3/U001ai 从头拆一遍,它是全库最"轻"的一种记录:14 路、128 赫兹、17792 个采样点,合 139 秒。
#-- 逐层解剖一条子集三记录:头、通道、时长
import wfdb
rec = wfdb.rdheader("dataset3/U001ai")
print("信号数", rec.n_sig)
print("采样率", rec.fs)
print("采样点", rec.sig_len)
print("时长秒", round(rec.sig_len / rec.fs, 1))
print("通道名", rec.sig_name)
#-- 物理量程来自逐通道的 adc_gain 与 baseline
print("首通道增益", rec.adc_gain[0], "基线", rec.baseline[0])
跑完能看到 14 路、128 赫兹、17792 点、139 秒。通道名是 Emotiv EPOC 的标准十四个位置,从前额一直排到枕区,O1 与 O2 落在最后。这十四个位置决定了它能做什么:枕区两导够取基频,前额几导恰好是最容易被眨眼污染的地方。
| 解剖层级 | 内容 | 数量 | 备注 |
|---|---|---|---|
| 子集 | 一套范式与一套设备 | 3 个 | 三者不可直接互换 |
| 受试者 | 一个人 | 11 名 | 每个子集都覆盖全部 11 人 |
| 记录 | 一场实验或半场 | 235 段 | 子集三每场拆两段 |
| 闪烁窗口 | 一次 5 秒注视 | 每场 15 或 25 个 | 子集一含适应期 23 个 |
| 采样点 | 一路信号的一个时刻 | 每路 17792 个(本例) | 子集一每路十几万点 |
| 标注 | 一次闪烁或一个窗口边界 | 每段数十至数百条 | flash 与 win 两类 |
2.4 五个频点与三张频率表
五个频点全部落在低频段,彼此不成整数倍关系,谐波不会互相撞车。
| 频点 | 周期 | 二次谐波 | 三次谐波 | 与 alpha 带的关系 |
|---|---|---|---|---|
| 6.66 Hz | 约 150 毫秒 | 13.32 Hz | 19.98 Hz | 在 alpha 下沿之外 |
| 7.5 Hz | 约 133 毫秒 | 15 Hz | 22.5 Hz | 紧贴 alpha 下沿 |
| 8.57 Hz | 约 117 毫秒 | 17.14 Hz | 25.71 Hz | 落在 alpha 带内 |
| 10 Hz | 100 毫秒 | 20 Hz | 30 Hz | 正中 alpha 带 |
| 12 Hz | 约 83 毫秒 | 24 Hz | 36 Hz | 在 alpha 上沿 |
| 频率表 | 对应子集 | 内部分段 | 值的性质 |
|---|---|---|---|
| FREQUENCIES1.txt | 子集一 | adaptation / main trials | 近似值,各场相同 |
| FREQUENCIES2.txt | 子集二 | adaptation / sessions | 与 .win 附串一致 |
| FREQUENCIES3.txt | 子集三 | adaptation / sessions | 与 .win 附串一致 |
2.5 三个子集的规格对照
把三个子集摊在一张表上,差别一眼可见。这三行不是同一件事的三种规模,是三种不同的实验。
范式与刺激
| 维度 | 子集一(dataset1) | 子集二(dataset2) | 子集三(dataset3) |
|---|---|---|---|
| 记录前缀 | S0NNn | T0NNn | U0NNn(含 i / ii) |
| 方块颜色 | 品红 | 紫色 | 品红 |
| 闪烁方式 | 五个方块错开,单独闪 | 五个方块同时闪 | 五个方块同时闪 |
| 目标指示 | 无(只有一个在闪) | 黄色箭头 | 黄色箭头 |
| 设备 | 256 导湿电极 | 256 导湿电极 | Emotiv EPOC 十四导 |
设备与规模
| 维度 | 子集一(dataset1) | 子集二(dataset2) | 子集三(dataset3) |
|---|---|---|---|
| 采样率 | 250 Hz | 250 Hz | 128 Hz |
| 每场窗口数 | 15(含适应期 23) | 25 | 25(拆 12 + 13) |
| 适应期 | 每场各有一次 | 仅首场前一次 | 仅首场前一次 |
| 记录数 | 48 | 66 | 121 |
| 标注类型 | flash + win | flash + win | 仅 win |
2.6 与同类资源的字段差异
同为视觉诱发电位库,字段设计的差别直接决定能做什么任务。
范式类字段
| 字段维度 | 本库 | 事件相关电位拼写库 | 运动想象竞赛库 | 通用临床脑电库 |
|---|---|---|---|---|
| 诱发机制 | 频域稳态振荡 | 时域瞬态成分 | 无诱发,自主节律 | 不适用 |
| 刺激持续 | 5 秒整窗 | 每次 100 毫秒 | 提示 4 秒 | 不适用 |
| 频点数 | 5,集中在 6.66 至 12 Hz | 不适用 | 不适用 | 不适用 |
| 通道数 | 256 / 14 两档 | 64 加辅助 | 22 加 3 | 19 至 256 |
规模与标记
| 字段维度 | 本库 | 事件相关电位拼写库 | 运动想象竞赛库 | 通用临床脑电库 |
|---|---|---|---|---|
| 采样率 | 250 / 128 两档 | 2048 Hz | 250 Hz | 多为 256 至 512 Hz |
| 设备落差 | 有,同人两套 | 无 | 无 | 因中心而异 |
| 事件标记 | 二进制标注加附串 | 内嵌标注通道 | 竞赛规定事件码 | 临床惯例,不统一 |
| 患者信息 | 无 | 无 | 无 | 有病种与诊断 |
§3 它是谁的数据:一个研究所、一个 H2020 项目、十一个人
3.1 机构与项目背景
数据出自希腊研究与技术中心下属的信息与通信技术研究所(Information Technologies Institute,CERTH-ITI),所在城市是塞萨洛尼基。官方页面用一句话交代了出身:由 CERTH-ITI 发布,由 MAMEM 这个 Horizon 2020 项目支撑。
MAMEM 的全称是 Multimedia Authoring & Management using your Eyes & Mind,项目主页把目标写得很直白:让运动功能严重受限的人用眼睛和意念操作计算机。这个出身解释了数据为什么长这样——它不是为算法竞赛准备的,是为"能不能用便宜设备落地"这个工程问题准备的。
| 项目 | 内容 | 来源 |
|---|---|---|
| 发布机构 | 信息与通信技术研究所(CERTH-ITI) | 官方页面摘要 |
| 所属上级 | 希腊研究与技术中心(Centre for Research and Technology Hellas) | 官方联系地址 |
| 项目全称 | Multimedia Authoring & Management using your Eyes & Mind | 项目主页标题 |
| 资助框架 | Horizon 2020 | 官方页面摘要 |
| 城市 | 塞萨洛尼基,6th Charilaou - Thermi | 官方联系地址 |
| 托管平台 | PhysioNet | 官方页面 |
| 数据角色 | 支撑 SSVEP 算法比较技术报告的原始记录 | 官方引用说明 |
3.2 七位作者与两处署名顺序
官方页面有两个署名段落,两处的顺序不一样。
第一处是正文末尾的「Authors」,顺序为 Kostantinos Georgiadis、Georgios Liaros、Vangelis P. Oikonomou、Elisavet Chatzilari、Katerina Adam、Spiros Nikolopoulos、Ioannis Kompatsiaris。第二处是页面顶部要求引用的论文,顺序为 V.P. Oikonomou、G. Liaros、K. Georgiadis、E. Chatzilari、K. Adam、S. Nikolopoulos、I. Kompatsiaris。
| 署名位置 | 第一作者 | 顺序特征 | 用途 |
|---|---|---|---|
| 页面 Authors 段 | Kostantinos Georgiadis | 采集执行在前 | 数据致谢 |
| 引用论文 | Vangelis P. Oikonomou | 方法贡献在前 | 学术引用 |
| 两组共有 | 七人全同 | 仅顺序不同 | 不存在第八人 |
3.3 时间线:一次发布,两次扩充
这个库不是一次上线的。页面新闻区留下了三条记录,时间跨度不到五个月。
| 时间 | 事件 | 当时的规模 |
|---|---|---|
| 2016 年 2 月 | 技术报告上传 arXiv,编号 1602.00904 | 尚未发布数据 |
| 2016 年 4 月 15 日 | 库首次上线,只含子集一 | 256 导、11 人、错开闪烁 |
| 2016 年 6 月 8 日 | 扩充子集二 | 增加同时闪烁范式 |
| 2016 年 9 月 3 日 | 扩充子集三,版本定格 1.0.0 | 增加十四导消费级设备 |
| 2019 年 2 月 20 日 | 补录 SHA256SUMS.txt 校验和 | 内容未变 |
这条时间线解释了一个容易被忽略的事实:配套论文发表于 2016 年 2 月,早于子集三上线半年。论文摘要只提"256 通道、11 名受试者",没有提十四导那一套——因为写论文时它还不存在。用论文描述去核对全库,会以为子集三是多余的东西(§7.0)。
3.4 采集现场:官方写了什么、没写什么
官方对实验流程写得很细,细到每个窗口几秒、每隔几秒休息、适应期在第几场之前。但对采集环境几乎没写。
未说明的部分
| 采集要素 | 官方是否说明 | 具体内容 |
|---|---|---|
| 刺激呈现介质 | 否 | 只写"方块",未说屏幕尺寸与刷新率 |
| 观看距离 | 否 | 未给 |
| 环境光照 | 否 | 未给 |
| 电极阻抗 | 否 | 未给,子集三尤其缺 |
| 参考电极 | 否 | 未说明 |
| 受试者视力 | 否 | 未做筛查记录 |
| 场次间隔 | 否 | 只说"至多五场",未说是否同日 |
已说明的部分
| 采集要素 | 官方是否说明 | 具体内容 |
|---|---|---|
| 每窗时长 | 是 | 5 秒 |
| 窗间隔 | 是 | 5 秒休息 |
| 适应期长度 | 是 | 100 秒加 30 秒休息 |
这份清单里,缺的那几项恰好是复现 SSVEP 实验最要紧的几项。
| 未记录的要素 | 影响什么 | 为什么关键 |
|---|---|---|
| 屏幕刷新率 | 频率能否被精确呈现 | 60 赫兹屏上 8.57 赫兹要靠跳帧,实际波形会抖 |
| 观看距离 | 方块的视网膜张角 | 角度决定枕区响应的幅度 |
| 环境光照 | 瞳孔大小与对比度 | 影响稳态响应的信噪比 |
| 电极阻抗 | 噪声水平与坏导判断 | 子集三干电极尤其敏感 |
| 视力与色觉 | 响应幅度的个体差异 | 无法与频点效应分离 |
3.5 十一个人:SUBJECTS 表能读出什么
SUBJECTS 只有三列十一行,是全库唯一的人口学来源。
| 编号 | 性别 | 年龄 | 编号 | 性别 | 年龄 |
|---|---|---|---|---|---|
| 001 | 男 | 24 | 007 | 男 | 26 |
| 002 | 男 | 37 | 008 | 女 | 31 |
| 003 | 男 | 39 | 009 | 男 | 29 |
| 004 | 男 | 31 | 010 | 男 | 37 |
| 005 | 女 | 27 | 011 | 男 | 25 |
| 006 | 女 | 28 | — | — | — |
八男三女,年龄从 24 到 39 岁。这是全部信息:没有利手、没有视力、没有用药、没有咖啡因摄入、没有睡眠状况。对 SSVEP 来说,视力与屈光状态的影响比年龄更大——一个近视未矫正的受试者,方块在视网膜上是糊的,枕区响应会明显变弱。官方没有记录这一项,于是任何"响应幅度差异"的归因都缺一个关键协变量。
§4 它最独特的东西:同一批人、三套条件
4.1 错开闪与同时闪:两种范式的差别
子集一和子集二、三的范式差别,比"设备不同"更根本。子集一是串行的:五个方块中同一时刻只有一个在闪,其余全暗,视野里只有一处刺激,注意这个变量被压到最低,测的是纯粹的频率响应。子集二和子集三是并行的:五个方块同时以不同频率闪,黄色箭头指向其中一个,受试者要盯住那一块、忽略另外四块,枕区收到的是五个频率的叠加,目标频率靠注意增强才浮得起来。
| 维度 | 子集一(串行) | 子集二、三(并行) |
|---|---|---|
| 同一时刻亮几块 | 1 块 | 5 块 |
| 目标如何指定 | 无需指定,亮的即目标 | 黄色箭头指示 |
| 干扰源 | 无 | 另外四个频率 |
| 注意负荷 | 低 | 高 |
| 枕区收到什么 | 单一频率 | 五频率叠加 |
| 对应真实场景 | 单指令开关 | 多指令选择 |
| 每场窗口数 | 15 | 25 |
| 负样本是什么 | 不存在 | 非目标频率的响应 |
4.2 五秒窗为什么是五秒
官方没有解释五秒的来历,但五秒这个数字在 SSVEP 里有明确的位置。稳态响应的建立需要时间,刺激开始后枕区要经过一段暂态才进入稳定振荡,太短取到的多半是暂态,太长受试者开始走神、眨眼、微动。五秒是一个折中,内部的分配大致如下。
| 窗内时段 | 时长 | 用途 |
|---|---|---|
| 起始段 | 约 0.5 至 1.5 秒 | 暂态,通常丢弃 |
| 中段 | 约 3 秒 | 频谱估计的主要区间 |
| 尾段 | 约 0.5 秒 | 缓冲,防边缘效应 |
| 整窗 | 5 秒 | 标注的时间跨度 |
| 窗长选择 | 可取的有效段 | 频率分辨率 | 主要风险 |
|---|---|---|---|
| 1 秒 | 几乎全为暂态 | 1 Hz,五频点难分 | 估不准 |
| 2 秒 | 约 1 秒 | 0.5 Hz,勉强可分 | 方差大 |
| 5 秒(本库) | 约 3 秒 | 0.2 Hz,五点清晰可分 | 走神与漂移 |
| 10 秒 | 约 8 秒 | 0.1 Hz | 受试者疲劳、状态漂移 |
本库的窗长还带来一个统计上的后果:一段记录里窗口数量有限,子集一每场十五个、子集二与子集三每场二十五个。五秒的窗口彼此不重叠,独立性比 ERP 那种毫秒级叠加的事件强得多,但一段之内仍然共享同一套电极阻抗与同一个注意水平。
4.3 案例:dataset3/U001ai 那一百三十九秒
拿 dataset3/U001ai 走一遍,因为它是全库最容易被低估的一段:十四导、128 赫兹、139 秒,体积不到高密度记录的百分之一,却承载了这套数据最独特的那个问题。
打开头文件:14 路信号、128 赫兹、17792 个采样点。通道名按 Emotiv EPOC 的标准布局排列,前几路是 AF3、F7、F3、FC5,最后落到 O1 与 O2。139 秒里装着 12 个五秒闪烁窗口,加上窗口之间的五秒休息,再加开场留白——12 乘 10 是 120 秒,剩下的十几秒是准备与收尾。
| 层级 | 本段取值 | 说明 |
|---|---|---|
| 记录名 | U001ai | 受试者 001、第 a 场、前半段 |
| 信号路数 | 14 | Emotiv EPOC 标准布局 |
| 采样率 | 128 Hz | 高密度记录的一半 |
| 采样点 | 17792 | 每路 |
| 时长 | 约 139 秒 | 17792 除以 128 |
| 闪烁窗口 | 12 个 | 每窗 5 秒 |
| 间隔 | 5 秒休息 | 窗与窗之间 |
| 标注 | 仅 .win | 无 .flash |
| 枕区电极 | O1 与 O2 | 全段唯一能取到基频的两路 |
把这一段和 dataset1/S001a 并排放,落差就出来了。后者 256 路、250 赫兹、117917 个采样点、约 472 秒,同样是受试者 001,同样是五个频点,同样五秒窗。一个人、两套设备、同一个任务,中间隔着 242 路电极和一半的采样率。
这就是 §4.3 的案例要说明的事:这个库的核心不是"有多少数据",而是"同一个人在两套设备上的两段记录能被逐窗对齐"。研究者可以拿 S001a 当上限、拿 U001ai 当下限,看同一套算法在两者之间的落差有多大。
再往下看标注。子集三只有 .win 一种标注,没有 .flash。于是你拿不到逐次闪烁的时刻,只能拿到"窗口从这里开始、到这里结束、中心频率是某个值"。对频域分析这够用——你本来就要在整窗上做频谱;对需要精确刺激起始的时域分析就不够。
| 对照项 | S001a(子集一) | U001ai(子集三) |
|---|---|---|
| 通道 | 256 | 14 |
| 采样率 | 250 Hz | 128 Hz |
| 采样点 | 117917 | 17792 |
| 时长 | 约 472 秒 | 约 139 秒 |
| 窗口数 | 15(另 8 个适应) | 12(本半场) |
| 标注 | flash + win | 仅 win |
| 设备 | 湿电极帽 | 消费级耳机 |
| 可分析谐波上限 | 125 Hz | 64 Hz |
4.4 十四导的通道账
Emotiv EPOC 的十四个位置是固定的:AF3、F7、F3、FC5、T7、P7、O1、O2、P8、T8、FC6、F4、F8、AF4。这个布局为前额与颞叶设计得多,为枕区设计得少。
| 位置 | 脑区 | 对 SSVEP 的价值 | 备注 |
|---|---|---|---|
| AF3 / AF4 | 前额 | 低 | 眨眼污染最重 |
| F7 / F8 | 前颞 | 低 | 靠近眼外眦 |
| F3 / F4 | 额 | 低 | 额区节律干扰 |
| FC5 / FC6 | 额中央 | 低 | 运动准备相关 |
| T7 / T8 | 颞 | 中 | 可拾取部分枕颞扩散 |
| P7 / P8 | 顶颞 | 中高 | 接近枕区,有响应 |
| O1 / O2 | 枕 | 高 | 唯一直接覆盖初级视皮层 |
十四个位置里只有两个真正压在枕区,子集三的空间信息因此接近于零。这个约束不是缺陷,是设计:项目要验证的正是"消费级设备够不够用",而消费级设备的定义就是通道少、位置固定、不能自己贴。用一套高密度帽去模拟它没有意义。
| 因为只有两导枕区,做不了的事 | 原因 |
|---|---|
| 空间滤波 | 可加权组合的枕区导联太少 |
| 成分分离 | 独立成分分析需要远多于两导 |
| 枕区位置间比较 | 只有一个位置有数据 |
| 源定位 | 无电极坐标、无头模型 |
4.5 边界条件:什么情况下它不再适用
| 情形 | 缺什么 | 后果 |
|---|---|---|
| 任务改成连续拼写 | 无字符表、无目标序列、无输入节奏 | 拼写速度与信息传输率无从计算 |
| 需要高频编码 | 频点最高 12 赫兹,子集三 128 赫兹采样 | 64 赫兹以上直接混叠 |
| 需要闭环 | 无反馈、无分类器输出、无自选时刻 | 人机协同适应课题无法开展 |
| 需要人群推断 | 11 人、全部健康、年龄集中 | 老年与视障人群结论不成立 |
§5 怎么拿到:从 curl 到可分析张量
5.1 三条下载面
官方给三条路:浏览器点整包、wget 递归、AWS 开放桶同步。三者的内容完全一样,差别在断点续传与并发。
| 下载方式 | 命令要点 | 适合场景 | 注意 |
|---|---|---|---|
| 整包 ZIP | 页面按钮,5.1 GB | 一次拿全 | 断了要重来 |
| wget 递归 | -r -N -c -np |
需要续传 | 会连目录索引一起拉 |
| AWS 同步 | s3 sync --no-request-payer |
批量、可并行 | 需装命令行工具 |
| 逐文件 | 直接拼 URL | 只要一个子集 | 最省流量 |
#-- 只取一个人的一个子集,先看体积再决定
BASE="https://physionet.org/files/mssvepdb/1.0.0"
curl -sSL -o U001ai.hea "$BASE/dataset3/U001ai.hea"
curl -sSLI "$BASE/dataset3/U001ai.dat" | grep -i content-length
5.2 按子集下载
多数人只需要一个子集。子集三只有十四导,体积最小,最适合先跑通流程。
#-- 只拉子集三的受试者 001,跳过已存在文件
BASE="https://physionet.org/files/mssvepdb/1.0.0"
mkdir -p mssvepdb/dataset3 && cd mssvepdb
for s in a b c d e; do
for h in i ii; do
for ext in dat hea win; do
f="dataset3/U001${s}${h}.${ext}"
if [ ! -s "$f" ]; then
curl -sSL --retry 3 -o "$f" "$BASE/$f"
fi
done
done
done
#-- 适应期单独一段,不在场次循环里
curl -sSL -o dataset3/U001x.hea "$BASE/dataset3/U001x.hea"
#-- 子集三没有 flash 标注,别去找
ls dataset3 | head
这段刻意只下一个人的一个子集。想下全库就把循环换成遍历 RECORDS 的前缀,别硬编码编号——子集一的场次字母不是每人都有 e,硬编码到 e 会拼出不存在的文件名。
| 文件后缀 | 内容 | 子集一 | 子集二 | 子集三 |
|---|---|---|---|---|
| .dat | 信号二进制 | 有 | 有 | 有 |
| .hea | 头文件 | 有 | 有 | 有 |
| .flash | 逐次闪烁时刻 | 有 | 有 | 无 |
| .win | 窗口起止与频率 | 有 | 有 | 有 |
5.3 读头与还原物理量
读 WFDB 头不需要读信号,几毫秒就完事。用途是先确认设备、采样率、时长,再决定要不要下那几个吉字节的 .dat。
#-- 只读头,不读信号:先确认规模再决定下载
import wfdb
for rid in ["dataset1/S001a", "dataset2/T001a", "dataset3/U001ai"]:
h = wfdb.rdheader(rid)
print(rid, h.n_sig, h.fs, h.sig_len, round(h.sig_len / h.fs, 1))
#-- 期望:256 250 117917 471.7 / 256 250 81690 326.8 / 14 128 17792 139.0
还原物理量要用逐通道的增益与基线,不能全局一套。
#-- 逐通道还原微伏,注意增益与基线各自不同
import wfdb
import numpy as np
rec = wfdb.rdrecord("dataset3/U001ai", physical=False)
dig = rec.d_signal.astype(np.float64)
gain = np.array(rec.adc_gain, dtype=np.float64)
base = np.array(rec.baseline, dtype=np.float64)
uv = (dig - base) / gain
print(uv.shape, round(float(uv[:, 0].min()), 1), round(float(uv[:, 0].max()), 1))
physical=False 拿到的是数字量,自己按 (值 - 基线) / 增益 还原。如果直接用 physical=True,wfdb 会替你做这件事,结果应当一致——两相对照是最快的自检手段。
5.4 读标注与频率
子集三只有 .win,标注的辅助字符串里写着该窗口的中心频率。读法与子集一、二完全相同。
#-- 读窗口标注,取出起止时刻与中心频率
import wfdb
ann = wfdb.rdann("dataset3/U001ai", "win")
print("标注条数", len(ann.sample))
print("前六条", ann.aux_note[:6])
print("前六个位置秒", (ann.sample[:6] / 128.0).round(2))
辅助字符串里,( 表示窗口开始、) 表示结束,后面跟该窗口的中心频率。子集一的 .win 同样用这对括号,但频率值给得更细;子集二的 .win 附串与 FREQUENCIES2.txt 完全一致。
| 标注流 | 括号含义 | 附串内容 | 覆盖子集 |
|---|---|---|---|
| win | ( 开始 / ) 结束 |
该窗中心频率 | 全部三个 |
| flash | 无括号 | 单次闪烁时刻 | 子集一、二 |
| .freq | — | 官方实验描述提及,文件清单无 | 不存在 |
第三行是这套数据的一处硬矛盾,处理办法在 §5.6 展开。
5.5 切窗口与做频谱
切窗的关键是按 .win 的标注切,不要按固定间隔猜。窗口之间有五秒休息,猜错一格就把休息段切进去了。
#-- 按 win 标注切窗,逐窗做 FFT 取峰值频率
import numpy as np, wfdb
rec = wfdb.rdrecord("dataset3/U001ai")
ann = wfdb.rdann("dataset3/U001ai", "win")
fs = rec.fs
sig = rec.p_signal[:, [12, 13]] #-- O1 与 O2 两路
starts = [s for s, n in zip(ann.sample, ann.aux_note) if n.startswith("(")]
stops = [s for s, n in zip(ann.sample, ann.aux_note) if n.startswith(")")]
for a, b in list(zip(starts, stops))[:3]:
seg = sig[a:b] - sig[a:b].mean(axis=0)
seg = seg[int(0.5 * fs):] #-- 丢掉前 0.5 秒暂态
freqs = np.fft.rfftfreq(len(seg), 1 / fs)
amp = np.abs(np.fft.rfft(seg, axis=0)).mean(axis=1)
band = (freqs > 5) & (freqs < 15)
print("峰值频率", round(float(freqs[band][amp[band].argmax()]), 2))
输出的峰值频率应当落在五个频点之一附近。如果落在 8 到 12 赫兹之间却对不上任何一个,多半是 alpha 节律盖过了 SSVEP——这在闭眼或放松状态下很常见,也是子集三最容易出的问题。
5.6 六个最容易出错的地方
| 出错点 | 表现 | 原因 | 处理 |
|---|---|---|---|
去找 .freq 标注 |
文件不存在 | 实验描述与文件清单两个口径 | 用 .win 附串加 FREQUENCIES 表 |
在子集三找 .flash |
一个都没有 | 该子集只产 win 标注 | 改按窗口切,不按闪烁切 |
| 把三个子集混切 | 通道数对不上 | 256 与 14 不能拼 | 分设备建两套管线 |
| 全局一套增益 | 幅值差一到两个量级 | 增益逐通道不同 | 逐通道还原,别手撸字节 |
| 假设每场五场 | 找不到 S003e |
官方说"至多五场" | 遍历 RECORDS,别硬编码 |
| 按固定 10 秒切窗 | 频谱里混进休息段 | 窗是 5 秒闪加 5 秒息 | 按 .win 的括号对切 |
#-- 核对下载完整性,校验和清单在顶层
curl -sSL -o SHA256SUMS.txt "https://physionet.org/files/mssvepdb/1.0.0/SHA256SUMS.txt"
sha256sum -c SHA256SUMS.txt 2>/dev/null | grep -v OK | head
§6 与库内条目的关系
6.1 关系图谱:先把稳态与时域分开
库内与脑电相关的词条不少,最容易混淆的是事件相关电位那一类。两者都叫"视觉诱发",都在枕区有响应,都用同一批脑电设备采,但它们是两种不同的物理现象,分析工具也不通用。
现象与标签
| 对比维度 | MAMEM SSVEP 库 | 事件相关电位拼写库 |
|---|---|---|
| 诱发机制 | 频域稳态振荡 | 时域瞬态成分 |
| 刺激持续 | 5 秒整窗 | 每次 100 毫秒 |
| 分析域 | 频率域(FFT / CCA) | 时间域(叠加平均) |
| 提信噪比的手段 | 延长窗口、多导联组合 | 多次重复叠加 |
| 标签粒度 | 五类频率 | 二类目标或非目标 |
| 需要的对齐点 | 窗口边界 | 精确刺激时刻 |
| 类别数 | 5 | 2 或 36 |
窗口与分析
| 对比维度 | MAMEM SSVEP 库 | 事件相关电位拼写库 |
|---|---|---|
| 每类样本 | 每窗一个,每场数十 | 每次闪烁一个,每段数百 |
| 典型窗长 | 2 至 5 秒 | 0.5 至 1 秒 |
| 通道重点 | 枕区 | 全头,含顶区 |
| 采样率需求 | 数百赫兹足够 | 常需上千赫兹 |
| 在线可行性 | 高,无需训练 | 中,需多轮平均 |
| 预处理 | 带通 3 至 40 赫兹即可 | 常需 0.1 至 20 赫兹 |
一句话概括这张表:P300 那类数据问的是"什么时候",本库问的是"哪一把"。把两者混在一个训练集里,模型会因为窗长与标签粒度都不一致而学不到东西。
| 库内记录 | 与本库的关系 | 主要差别 |
|---|---|---|
| erpbci(事件相关电位拼写) | 同为视觉诱发,机制相反 | 它是时域瞬态、二分类、2048 赫兹;本库是频域稳态、五分类、250 与 128 赫兹 |
| bigP3BCI | 同为视觉诱发,汇总型 | 它汇总十八项研究、含患者;本库是单实验室、单一范式族 |
| EEGMMIDB | 同平台,不同任务 | 它是运动执行与想象,无外部刺激 |
| BCI Competition IV-2a | 同为脑机接口,不同范式 | 它是运动想象四分类,22 导,250 赫兹 |
| ltrsvp | 同为视觉呈现,不同机制 | 它是快速序列呈现,靠瞬态 novelty,非稳态 |
| CHB-MIT 等临床脑电库 | 同模态,不同用途 | 那些是癫痫长程记录,本库是健康人实验记录 |
6.2 检索路径
站内搜索用 slug mssvepdb,或用全名 MAMEM SSVEP Database。中文关键词的选择很影响召回结果。
| 关键词 | 召回什么 | 建议 |
|---|---|---|
| 稳态视觉诱发电位 | 本库及同类 SSVEP 资源 | 首选 |
| MAMEM | 项目相关全部产出 | 查项目背景时用 |
| 脑机接口 | 运动想象、事件相关电位、皮层电位混在一起 | 太宽,不适合定位 |
| 消费级脑电 | 干电极与可穿戴设备类资源 | 找对照数据时用 |
| 频率识别 | 算法类文献,未必指向数据集 | 只在查方法时用 |
| 你要的东西 | 该去哪 | 为什么不是本库 |
|---|---|---|
| 上万段脑电做预训练 | 汇总型大库 | 本库只有 235 段 |
| P300 波形与刺激时序 | 事件相关电位库 | 本库没有瞬态成分标注 |
| 运动想象四分类基准 | 竞赛数据集 | 本库没有运动任务 |
| 干电极与湿电极的对照 | 本库 | 这是它唯一不可替代的用途 |
| 高频 SSVEP(30 赫兹以上) | 其他 SSVEP 库 | 本库最高 12 赫兹 |
| 临床人群的脑电 | 临床数据库 | 本库全为健康人 |
6.3 三张对照表
三张表分开列,因为这三个维度最容易混,而它们恰好决定一个库能做什么。
第一张是范式与诱发机制。
| 库 | 诱发机制 | 刺激形态 | 受试者任务 |
|---|---|---|---|
| 本库 | 稳态振荡 | 方块按固定频率闪 5 秒 | 注视箭头所指方块 |
| 事件相关电位库 | 瞬态成分 | 行列闪烁,每次 100 毫秒 | 注视并默数目标 |
| 运动想象库 | 自主节律调制 | 屏幕箭头提示 | 想象肢体动作 |
| 快速序列库 | 瞬态 novelty | 图像每秒数张流过 | 发现目标时报数 |
第二张是类别数与样本量。
| 库 | 类别数 | 受试者 | 每受试者样本 | 采样率 |
|---|---|---|---|---|
| 本库 | 5 个频率 | 11 | 15 至 25 窗每场 | 250 与 128 Hz |
| 事件相关电位库 | 36 字符;事件级二类 | 12 个目录 | 约 20 段 | 2048 Hz |
| 运动想象库 | 4 类 | 9 | 576 试次 | 250 Hz |
| 快速序列库 | 2 类 | 11 | 数次飞行 | 2048 Hz |
第三张是设备与可移植性,这是本库唯一占优的一栏。
| 库 | 设备层级 | 有无同人跨设备 | 能否评估廉价硬件 |
|---|---|---|---|
| 本库 | 高密度加消费级两档 | 有,同一批人 | 可以,这是设计目的 |
| 事件相关电位库 | 单套 64 导 | 无 | 不能 |
| 运动想象库 | 单套 22 导 | 无 | 不能 |
| 临床脑电库 | 因中心而异 | 无 | 不能 |
三张表叠起来看,本库的位置很清楚:类别最少、受试者最少、采样率最低,唯独在"设备落差"这一栏是唯一的。任何拿它当大规模 SSVEP 库用的尝试,都会在第一步撞上样本量;任何想回答"便宜设备行不行"的问题,绕不开它。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先校正一个会被反复触发的误判:把"三个子集规格不一致"读成"数据没整理好"。这两件事在这里不是一回事。
不一致是设计出来的。项目要回答的问题是"廉价设备能不能顶替",那就必须在同一批人身上造出设备落差。三个子集分别对应串行范式加高密度设备、并行范式加高密度设备、并行范式加消费级设备,是一组有对照关系的条件,不是三次随手采集的拼接。把它当成"应该统一却统一失败"的库,会得出完全错误的评价。
校正之后,评分的读法也要跟着变:规模分低衡量的是"能不能喂饱模型",不是"采得规不规矩"。真正该扣分的地方在别处——实验描述提到的 .freq 标注在文件里不存在、采集环境与视力筛查完全没记、没有官方划分与基线;这些是文档与规范层面的欠缺,与采集质量无关。
关于子集设计
| 容易产生的误判 | 校正后的读法 | 依据 |
|---|---|---|
| 三个子集不统一是缺陷 | 三个子集是三种对照条件 | 官方分三次上线,每次增加一种设备或范式 |
| 消费级子集是凑数的 | 它是整个项目要回答的问题本身 | 项目目标是可用性验证 |
| 没有划分说明质量差 | 划分缺失属文档层欠缺 | 协议与标注写得很细 |
关于文档与规模
| 容易产生的误判 | 校正后的读法 | 依据 |
|---|---|---|
| 256 导却只标 19 个通道名 | 是命名约定,不是数据缺失 | CORR 表与官方命名说明 |
| 采样率低说明设备差 | 是设备本身的规格 | 128 赫兹对应消费级硬件 |
| 论文只提 256 通道是遗漏 | 论文早于子集三上线 | 论文 2016 年 2 月,子集三 9 月 |
7.1 五维评分
按 DAIMS 的常用维度打分,每项一至五分,分数针对"作为稳态视觉诱发电位研究数据"这个用途。
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 2 | 11 人、235 段、5 频点,训练严重不足 |
| 标注质量 | 4 | 窗口边界与中心频率逐窗可读,但子集三缺闪烁级标注 |
| 任务适配 | 4 | 跨设备对照稀缺,五个频点够做频率识别,唯独不支持拼写与高频 |
| 文档完整 | 2 | 环境、视力、阻抗全缺,且 .freq 标注两个口径对不上 |
| 可获取性 | 5 | 免注册、ODC-BY、5.1 GB,三条下载路径都能用 |
合计十七分(满分二十五)。这个分布说明它不是全能选手:可获取性拉满,标注与适配中上,规模与文档各掉两档。
"任务适配"这一项最值得说。按"通用脑机接口研究"打分它只有三分——没有反馈、没有患者、类别只有五类;按"跨设备可移植性研究"打分它是四分往上,因为同一批人两套设备的公开记录,在 SSVEP 领域几乎找不到第二份。
| 打分视角 | 规模 | 标注 | 适配 | 文档 | 获取 | 合计 |
|---|---|---|---|---|---|---|
| 通用脑机接口研究 | 2 | 4 | 3 | 2 | 5 | 16 |
| 跨设备可移植性研究 | 2 | 4 | 5 | 2 | 5 | 18 |
| 频率识别算法复现 | 2 | 4 | 4 | 2 | 5 | 17 |
| 教学演示 | 3 | 4 | 4 | 3 | 5 | 19 |
四行里没有一行超过二十分。这不是打分苛刻,是它的规模与文档确实撑不起更高的分。
7.2 标注质量的两层
第一层是同步准不准,这一层它做得不错:标注与信号共用一套采样时钟,.win 的括号位置直接落在采样点上,不存在"信号一个文件、事件另一个文件、时间基准还不一样"的麻烦。第二层是语义清不清楚,这一层它做得不够:附串里既有括号符号又有频率值,官方没给形式化语法;.freq 标注在实验描述里被提到,在文件清单里却不存在;子集三干脆没有 .flash。
| 标注层 | 可靠性 | 影响 | 建议 |
|---|---|---|---|
| 窗口起止 | 高,落在采样点上 | 切窗可直接用 | 直接用 |
| 窗口中心频率 | 高,写在附串里 | 频率标签可直接取 | 直接用 |
| 逐次闪烁时刻 | 高,仅子集一、二 | 时域分析要用 | 有则用,无则退到窗口级 |
| 频率精度 | 中,表里是近似值 | 精细频谱分析有偏 | 以附串为准,表只作索引 |
.freq 标注 |
不存在 | 无法使用 | 按 .win 附串替代 |
7.3 已知的、可枚举的偏差
人群与中心
| 偏差 | 表现 | 影响 |
|---|---|---|
| 受试者极少 | 11 人 | 留一交叉验证方差极大 |
| 人群单一 | 全部健康,24 至 39 岁 | 不能外推到老年人或视障者 |
| 无视力记录 | 未做屈光与色觉筛查 | 响应幅度差异无法归因 |
| 单中心 | 一个研究所、一套流程 | 设备与流程差异无法从内部估计 |
| 频点窄 | 6.66 至 12 赫兹 | 不支持高频与联合频率编码 |
设计与文档
| 偏差 | 表现 | 影响 |
|---|---|---|
| 场次不满 | “至多五场”,实际 48 至 55 场 | 每人样本量不等 |
| 设备混淆 | 采样率与通道数绑在设备上 | 无法单独分离采样率效应 |
| 无反馈 | 无分类器输出 | 闭环课题无法开展 |
| 严格来说标注断档 | 子集三无闪烁级标注 | 时域分析只能用窗口级 |
有一条值得单独说:设备混淆。子集一与子集二的采样率是 250 赫兹、通道 256,子集三是 128 赫兹、通道 14。想研究"采样率对识别率的影响",没法只改采样率——一改就换了设备。要模拟中间条件,只能在子集一上人工降采样、人工抽通道,而人工抽通道抽不出 Emotiv 那种固定布局。
| 想单独分离的变量 | 能否做到 | 原因 |
|---|---|---|
| 采样率 | 否 | 与设备绑死,128 只出现在子集三 |
| 通道数 | 否 | 与设备绑死,14 只出现在子集三 |
| 电极类型 | 否 | 湿与干各绑一套设备 |
| 范式(串行与并行) | 部分 | 子集一与子集二同设备,可比 |
| 受试者 | 可以 | 三子集都覆盖同一批人 |
把上面两类偏差按能否规避再排一次,结论是多数改不了,只能绕过。
| 偏差类型 | 能否规避 | 规避方式 |
|---|---|---|
| 受试者少 | 不能 | 报告置信区间,别报单点 |
| 人群单一 | 不能 | 结论限定在"这十一个人" |
| 无视力记录 | 不能 | 不做幅度归因 |
| 频点窄 | 不能 | 换库做高频 |
| 场次不满 | 部分 | 按人分层,不按场次平摊 |
| 设备混淆 | 部分 | 在子集一上做人工退化 |
| 无反馈 | 不能 | 只做离线评估 |
7.4 外部验证矩阵
这批数据在文献里的用法可以归成四类角色,判断依据是官方说明与论文摘要,不涉及具体数值比较。下面以 §4.3 的案例为起点逐类看。
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 算法复现 | 复现技术报告里的预处理与分类链 | 协议、频点、窗口都能对上 | 论文只覆盖前两个子集 |
| 跨设备对照 | 同一受试者跨子集比较识别率 | 同人同刺激,唯一变量是设备 | 采样率与通道数同时变 |
| 预处理对比 | 比较滤波带、窗长、参考方式 | 五秒窗够长,可切多种长度 | 无独立伪迹标注 |
| 教学演示 | 用一段记录走完频域分析全流程 | 结构直白,代码几十行 | 子集三枕区仅两导 |
四类里第一类最稳,因为那是这批数据的设计目的;第二类最有价值,但要先把混淆讲清楚;第三类适合它,因为五秒窗给了足够的重切空间。
| 验证角色 | 建议的报告要素 | 常见遗漏 |
|---|---|---|
| 算法复现 | 子集编号、受试者编号、窗长、频段 | 未写用哪个子集 |
| 跨设备对照 | 是否重采样到同一率、用了哪几导 | 未写通道选择规则 |
| 预处理对比 | 滤波阶数、参考方式、伪迹处理 | 未写是否剔除坏段 |
| 教学演示 | 记录名、标注读法 | 未说明暂态回避 |
7.5 它为何能持续:稀缺的不是样本量,是那份对照
它自 2016 年上线以来没有扩版,也没有官方维护,却持续被引用。原因不在规模,在于它记录了一件别处很难查到的事:同一个人在相隔数月之内、用两套天差地别的设备,做了同一道题。汇总库把不同研究拼在一起,受试者、刺激、设备三个变量全变;竞赛集设备统一、人不同,比的是人不是机器;临床库不涉及范式化刺激。只有为可用性验证设计的这批记录,才把"人"固定住、只让"设备"变。成本也是原因:重做一次需要 256 导系统、消费级耳机、十一名能来五次的受试者和伦理审批,下载则只要 5.1 GB。
| 存续理由 | 具体内容 | 可替代性 |
|---|---|---|
| 同人跨设备 | 11 人 × 两套设备 × 同一刺激 | 低,公开库里罕见 |
| 两种范式 | 串行与并行各一套 | 中,各有其他库 |
| 消费级真实数据 | 干电极、128 赫兹、固定布局 | 低 |
| 免注册开放 | ODC-BY,无申请流程 | 高,但省事 |
| 结构简单 | WFDB 加纯文本表 | 高 |
§8 生态位与历史
8.1 历史沿革:五个月里的三次加料
这个库的成型过程很短,短到可以按周数。
2016 年 2 月,技术报告先上了 arXiv,标题是《SSVEP 脑机接口最新算法的比较评估》。报告里描述了一套完整的预处理与分类流水线,以及支撑它的数据。两个月后,数据的第一部分上线 PhysioNet,只有子集一。六月加进子集二,九月加进子集三,版本号一直停在 1.0.0。
| 阶段 | 时间 | 加了什么 | 版本号 |
|---|---|---|---|
| 报告先行 | 2016 年 2 月 | 无数据,只有方法与结果 | 不适用 |
| 首次上线 | 2016 年 4 月 15 日 | 子集一,256 导,串行范式 | 1.0.0 |
| 第一次扩充 | 2016 年 6 月 8 日 | 子集二,并行范式加箭头 | 1.0.0 |
| 第二次扩充 | 2016 年 9 月 3 日 | 子集三,十四导消费级 | 1.0.0 |
| 校验和补录 | 2019 年 2 月 20 日 | 无内容变化 | 1.0.0 |
| 版本特征 | 本库做法 | 后果 |
|---|---|---|
| 版本号 | 三次扩充都停在 1.0.0 | 无法从版本号判断内容批次 |
| 变更记录 | 只在新闻区留三条 | 需翻页面才能知道加了什么 |
| 校验和 | 2019 年一次性补录 | 早期下载者无法自查 |
| 撤回机制 | 未见说明 | 无法判断某文件是否被替换 |
8.2 与挑战赛、汇总库的关系
它没有进过任何挑战赛。PhysioNet 历年挑战赛涉及的脑电任务集中在癫痫、睡眠、意识状态,稳态视觉诱发从未成为赛题。这意味着它没有官方划分、没有排行榜、没有社区基线,也意味着它不会被刷分式研究消耗。
| 关系对象 | 有无交集 | 具体说明 |
|---|---|---|
| PhysioNet 挑战赛 | 无 | 历届赛题不含 SSVEP |
| 汇总型 SSVEP 库 | 部分 | 可能被收录,官方未说明 |
| 基准框架 | 未见说明 | 需自写适配层 |
| 消费级设备厂商评测 | 间接 | 常被引作干电极可行性依据 |
与汇总库不是替代关系,而是粗细两层。
| 维度 | 本库 | 汇总型库 |
|---|---|---|
| 规模 | 235 段 | 数千段以上 |
| 受试者 | 11 | 数百 |
| 设备 | 两套,同人 | 多套,不同人 |
| 标记标准 | 自定义 WFDB 标注 | 多为统一事件码 |
| 跨设备可分析 | 可以 | 通常不能 |
8.3 生态位:设备落差的参照物
把市面上的脑电库按「能不能回答设备问题」排一排,位置就清楚了。
| 层级 | 典型库型 | 能否拆设备效应 |
|---|---|---|
| 最不能 | 临床长程记录 | 不能,设备固定且未记录 |
| 较不能 | 竞赛数据集 | 不能,全员同设备 |
| 中间 | 汇总型大库 | 难,设备与人混淆 |
| 较能 | 单实验室多条件库 | 部分能 |
| 最能 | 本库 | 能,同人两套设备 |
| 生态位属性 | 取值 | 说明 |
|---|---|---|
| 主要用途 | 跨设备可行性与频率识别 | 设计目的 |
| 次要用途 | 教学、预处理对比 | 结构简单 |
| 规模定位 | 小 | 不足以训练 |
| 稀缺性 | 高 | 同人跨设备罕见 |
| 维护状态 | 静态 | 2019 年后无更新 |
8.4 谁在用它,用来做什么
从公开文献的引用方向看,集中在三处:频率识别算法的基线对比,把它当独立验证集;干电极与湿电极的可行性论证,看中它那套消费级数据;预处理与空间滤波方法,看中 256 导的高密度子集。
| 用法 | 依据的子集 | 典型问题 | 限制 |
|---|---|---|---|
| 算法基线对比 | 子集一或二 | CCA 与 FBCCA 谁更好 | 只有 11 人 |
| 干湿电极可行性 | 子集三对子集一 | 廉价设备损失多少 | 采样率同时变 |
| 空间滤波研究 | 子集一、二 | 枕区最优导联组合 | 只有 19 个有名通道 |
| 教学演示 | 任意一段 | 频域分析怎么讲 | 子集三枕区仅两导 |
| 迁移学习 | 跨子集 | 能否跨设备迁移 | 标签语义部分不同 |
§9 使用指引
9.1 三种角色的路径
三种角色的路径差别很大,共同点是都别一上来下全库,而是先按 §4.3 的案例把一段记录跑通。
| 角色 | 先做什么 | 别做什么 | 预期产出 |
|---|---|---|---|
| 算法研究者 | 子集三单人跑通,再扩到子集一同人 | 一上来下全库 | 可复现的基线 |
| 工程评估者 | 在子集一上人工降采样抽通道,与子集三真机对照 | 直接把两子集相减 | 设备落差的量级 |
| 教学者 | 用一段 139 秒记录逐窗做 FFT | 用整库做课堂练习 | 频域分析的直观理解 |
| 数据工程师 | 读 RECORDS 遍历全部记录 | 硬编码场次字母 | 稳定的批量管线 |
9.2 一条最短的可用流程
从零到第一个可比较的数字,下面这段够用。它不追求性能,只保证每一步都对得上。
取数与读头
| 步骤 | 动作 | 检查点 |
|---|---|---|
| 1 | 读 RECORDS,选一个子集 | 前缀与设备对应正确 |
| 2 | 下该子集的 .dat、.hea、.win | 文件数与 RECORDS 一致 |
| 3 | 读头确认通道数与采样率 | 256/250 或 14/128 |
切窗与分类
| 步骤 | 动作 | 检查点 |
|---|---|---|
| 4 | 按 .win 括号对切窗 | 窗数等于该场应有窗数 |
| 5 | 丢前 0.5 秒,做 FFT | 峰值落在五频点之一 |
| 6 | 按频率做五分类 | 混淆矩阵对角占优 |
#-- 最小可用流程:单子集、单人、五分类基线
import numpy as np, wfdb
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import cross_val_score
FREQS = [6.66, 7.5, 8.57, 10.0, 12.0]
def windows(rid):
rec = wfdb.rdrecord(rid)
ann = wfdb.rdann(rid, "win")
fs = rec.fs
pair, out = {}, []
for s, note in zip(ann.sample, ann.aux_note):
#-- 括号标记起止,附串带中心频率
if note.startswith("("):
pair["a"] = (s, note)
elif note.startswith(")") and "a" in pair:
a, start_note = pair.pop("a")
out.append((a, s, start_note))
X, y = [], []
for a, b, note in out:
seg = rec.p_signal[a:b]
seg = seg - seg.mean(axis=0)
seg = seg[int(0.5 * fs):]
feat = np.abs(np.fft.rfft(seg, axis=0)).mean(axis=1)[:64]
X.append(feat)
y.append(min(range(5), key=lambda i: abs(FREQS[i] - _parse(note))))
return np.array(X), np.array(y)
def _parse(note):
#-- 从附串里抠出频率数值,失败时返回 0
digits = "".join(c if (c.isdigit() or c == ".") else " " for c in note).split()
return float(digits[0]) if digits else 0.0
X, y = windows("dataset3/U001ai")
print(X.shape, np.bincount(y))
print(cross_val_score(LinearDiscriminantAnalysis(), X, y, cv=5).mean().round(3))
这段的用途是验证管线通不通,不是拿成绩。真正要报数字时,交叉验证必须按受试者分组,否则同一段记录里的窗口会跨到测试侧。
| 参数 | 建议值 | 理由 |
|---|---|---|
| 暂态丢弃 | 前 0.5 秒 | 稳态响应建立需要时间 |
| 特征 | 单边幅度谱前 64 点 | 覆盖到 32 赫兹 |
| 分类器 | 线性判别 | 小样本下最稳 |
| 交叉验证 | 按受试者分组 | 防同人泄漏 |
| 通道 | 枕区导联 | SSVEP 能量集中处 |
9.3 引用方式
官方要求同时引用两件东西:2016 年 2 月的 arXiv 技术报告(编号 1602.00904)与 PhysioNet 平台,后者按平台现行建议引用其 2026 年综述。
| 引用要素 | 内容 | 必填 |
|---|---|---|
| 数据集名 | MAMEM SSVEP Database | 是 |
| 版本 | 1.0.0 | 是 |
| DOI | 10.13026/C29591 | 是 |
| 访问日期 | 实际下载日 | 建议 |
| 子集 | dataset1 / 2 / 3 | 强烈建议 |
| 许可 | ODC-BY 1.0 | 再分发时必填 |
| 使用场景 | 额外要写什么 | 原因 |
|---|---|---|
| 论文方法节 | 子集编号、受试者编号、窗长 | 别人无法从库名推出 |
| 再分发 | 许可全文链接、修改说明 | ODC-BY 的署名与变更要求 |
| 商用产品说明 | 是否做了重采样与通道选择 | 影响可复现性 |
| 教学材料 | 记录名 | 便于学生定位 |
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑负责结构与事实核对 |
| 数字来源 | 规模、结构、边界三类数字取自 PhysioNet 官方页面与官方文件 |
| 文件核验 | RECORDS、SUBJECTS、CORR、ANNOTATORS 与三份头文件经直接访问确认 |
| 口径冲突 | .freq 标注与作者顺序两处不一致,已并列呈现,未作判定 |
| 论文信息 | 仅参考 arXiv 摘要,未读全文 |
| 未核验内容 | 全部 235 段的标注条数、采集环境、视力筛查、场次间隔 |
| 图像 | 无配图;封面为生成式提示词,不含真实脑电波形 |
| 免责 | 本文不构成任何临床或工程建议;使用须遵守 ODC-BY 1.0 署名条款 |
常见误读(避坑清单)
库名与规模
| 说法 | 实际 | 证据 |
|---|---|---|
| 「MSSVEPDB 是多目标 SSVEP 库」 | MAMEM 是项目名缩写 | 官方全名 MAMEM SSVEP Database |
| 「三个子集是三批受试者」 | 同一批 11 人做三种条件 | SUBJECTS 只有 11 行 |
| 「全库都是 256 导」 | 子集三只有 14 导 | 头文件 n_sig 为 14 |
| 「采样率都是 250 赫兹」 | 子集三是 128 赫兹 | U001ai.hea 第三字段 |
| 「每人都有五场」 | 子集一实际 48 段 | RECORDS 逐行计数 |
结构与标注
| 说法 | 实际 | 证据 |
|---|---|---|
| 「有 .freq 标注文件」 | 只有 .flash 与 .win | ANNOTATORS 与文件区 |
| 「刺激频率是精确值」 | 表里是近似值,逐窗有漂移 | 官方说明与 .win 附串 |
| 「可以直接做在线脑机接口」 | 无反馈、无分类器输出 | 标注只有窗口与闪烁 |
| 「可以拿它训练深度模型」 | 11 人、235 段 | 规模表 |
| 「子集三能独立当 SSVEP 库」 | 2 导枕区、128 赫兹 | Emotiv 通道布局 |
FAQ
Q1:MSSVEPDB 是不是「多目标稳态视觉诱发电位」库?
不是。全名是 MAMEM SSVEP Database,MAMEM 是欧盟 H2020 项目 Multimedia Authoring & Management using your Eyes & Mind 的缩写。它确实是五个目标五个频率,但库名里的 M 与 multi 无关。
Q2:三个子集能不能混在一起训练?
先想清楚比什么。子集一与子集二是同一套 256 导系统,差别只在错开闪还是同时闪;子集三是 14 导消费级耳机。合并后模型最先学到的往往是设备指纹。要做跨设备研究,就分设备训练、分设备测试、结果并列。
Q3:每段记录有多长?
没有统一长度,因为按场次切而非按时长切。子集一一段就是一场,约四百七十秒;子集二约三百三十秒;子集三每场切成两半,各约一百四十秒。取时长用采样点数除以采样率。
Q4:能不能直接做在线脑机接口?
离线可以,在线不行。没有分类器输出、没有反馈呈现、没有决策时刻标记,闭环所需的反馈环节与延迟测量都要自己补。
Q5:14 导为什么还能做 SSVEP?
因为能量集中在枕区,Emotiv 的十四个位置里有 O1 与 O2 两个枕区电极,够取基频。代价是空间分辨率极低,做不了空间滤波与源定位;128 赫兹采样意味着 64 赫兹以上直接混叠。
Q6:官方说的 .freq 标注在哪里?
文件清单里没有。实验描述提到它,但 ANNOTATORS 只声明 flash 与 win。频率信息实际来自 .win 的附串与 FREQUENCIES 三个文本表。
Q7:数据里有没有眼电通道?
没有独立眼电。子集一与子集二有 256 路,其中包含额区导联,眨眼可以从那里间接看到;子集三的 AF3、AF4 也是重灾区。做伪迹校正只能靠回归或成分分析,没有干净的眼电参考。
Q8:能不能用它做拼写器?
不能。范式里没有字符表、没有目标文本、没有连续输入任务。五个方块对应五个频率,任务是看箭头指的那块。
Q9:受试者年龄跨度大不大?
二十四到三十九岁,集中在青年。官方没做视力筛查,没记屈光状态,而这一项对 SSVEP 幅度的影响比年龄更大。
Q10:许可允许商用吗?
ODC-BY 1.0 允许,包括商业用途,条件是署名。署名要覆盖数据集本身与 PhysioNet 平台两层,具体条款以官方许可全文为准。
Q11:为什么同一人不同记录时长差很多?
因为场次不同、适应期的有无不同、子集三还按半场拆。子集一每场都含一段适应期,子集二与子集三只有首场前有一次。
Q12:官方还有扩版计划吗?
页面只显示 1.0.0 一个版本,2016 年三次加料后定格,2019 年补了校验和,之后无更新说明。从项目已结束、论文已发表的状态看,扩版可能性不大。
术语表
刺激与范式
| 术语 | 解释 |
|---|---|
| 稳态视觉诱发电位 | 注视固定频率闪烁刺激时,枕区出现的同频持续振荡 |
| 瞬态视觉诱发电位 | 刺激后数百毫秒内出现并消失的成分,与稳态相对 |
| 频率编码 | 用不同闪烁频率代表不同指令的脑机接口方案 |
| 闪烁窗口 | 一段持续五秒的刺激呈现,本库的基本分析单元 |
| 中心频率 | 某个闪烁窗口的标称闪烁频率,写在 .win 附串里 |
| 适应期 | 正式场次前的热身段,子集一每场都有 |
| 串行范式 | 同一时刻只有一块方块闪烁,无干扰 |
| 并行范式 | 五块同时闪,靠箭头指示目标,有干扰 |
设备与文件
| 术语 | 解释 |
|---|---|
| 枕区 | 后脑勺电极覆盖区,初级视皮层所在 |
| alpha 节律 | 8 至 12 赫兹的自发脑电节律,与刺激频点重叠 |
| 谐波 | 基频整数倍处的响应,频率编码要避开互相撞车 |
| 混叠 | 采样率不足时高频折回低频的假象 |
| 干电极 | 不需导电膏的电极,消费级设备常用 |
| 湿电极 | 需导电膏的电极,阻抗低、信号质量好 |
| 阻抗 | 电极与皮肤之间的接触电阻,影响噪声水平 |
| 空间滤波 | 对多通道加权组合以增强特定方向信号 |
| 典型相关分析 | 比较脑电与参考正弦信号相关性的频率识别方法 |
方法与评估
| 术语 | 解释 |
|---|---|
| 参考信号 | 由候选频率合成的正弦与余弦对 |
| 功率谱密度 | 信号能量在频率上的分布 |
| 暂态段 | 刺激刚开始、响应尚未稳定的那一段 |
| 留一受试者 | 每次留一人做测试,衡量跨人泛化 |
| 数据泄漏 | 训练与测试共享同一人或同一场,导致成绩虚高 |
| WFDB | PhysioNet 的波形数据库格式与工具链 |
| 标注流 | 与信号文件同名的二进制事件文件,本库有 flash 与 win |
| ODC-BY | 开放数据共享署名许可,允许商用需署名 |
附录 A:核心数字核对表
规模与采集
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 受试者数 | 11(八男三女) | SUBJECTS 表 | 官方文件 |
| 年龄范围 | 24 至 39 岁 | SUBJECTS 表 | 官方文件 |
| 记录总数 | 235 | RECORDS 逐行 | 官方文件 |
| 子集一记录数 | 48 | RECORDS 前缀统计 | 官方文件 |
| 子集二记录数 | 66 | RECORDS 前缀统计 | 官方文件 |
| 子集三记录数 | 121 | RECORDS 前缀统计 | 官方文件 |
| 通道数 | 256 / 14 | 头文件第二字段 | 官方文件 |
| 采样率 | 250 / 128 Hz | 头文件第三字段 | 官方文件 |
| 刺激频点数 | 5 | 官方实验描述 | 官方页面 |
| 频点取值 | 6.66 至 12 Hz | FREQUENCIES 表 | 官方文件 |
结构与许可
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 每窗时长 | 5 秒 | 官方实验描述 | 官方页面 |
| 窗间隔 | 5 秒 | 官方实验描述 | 官方页面 |
| 可命名通道 | 19 | CORR 表 | 官方文件 |
| 标注类型 | flash 与 win | ANNOTATORS | 官方文件 |
| 未压缩体积 | 5.1 GB | 官方文件区 | 官方页面 |
| 许可 | ODC-BY 1.0 | 官方页面 | 官方页面 |
| DOI | 10.13026/C29591 | 官方页面 | 官方页面 |
| 首次发布 | 2016-04-15 | 官方新闻区 | 官方页面 |
| 版本定格 | 2016-09-03 | 官方新闻区 | 官方页面 |
| 推算主窗口数 | 约三千四百七十 | 记录数乘每场窗数 | 推算 |
附录 B:数字的来源分层
| 层级 | 内容 | 可支撑什么 |
|---|---|---|
| 官方页面与文件 | 记录数、通道、采样率、频点、许可、DOI、日期 | 可直接引用 |
| 论文摘要 | 方法动机、256 导与 11 人、算法比较框架 | 只能支撑作者主张 |
| 推算与未核实 | 总窗口数、各段标注条数、采集环境、视力 | 只作量级参考 |
附录 C:完整参考文献
数据与项目来源
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | MAMEM SSVEP Database v1.0.0 | https://physionet.org/content/mssvepdb/1.0.0/ | 全部规模、结构、边界数据 |
| 2 | 该库文件目录 | https://physionet.org/files/mssvepdb/1.0.0/ | RECORDS、SUBJECTS、CORR、头文件 |
| 3 | Oikonomou V P 等,SSVEP 算法比较技术报告,arXiv:1602.00904 | https://arxiv.org/abs/1602.00904 | 实验动机与方法框架 |
平台与方法
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 4 | MAMEM 项目主页 | https://www.mamem.eu/ | MAMEM 全称与项目目标 |
| 5 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 6 | 事件相关电位拼写库(库内对照) | https://physionet.org/content/erpbci/ | §6.1 的机制区隔 |
附录 D:任务代码
把一段记录变成"频率—识别率"的对照,关键是把窗口切对。下面这段按受试者分组做交叉验证,避免同人泄漏。
#-- 按受试者分组交叉验证,报五分类准确率
import numpy as np, wfdb
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import GroupKFold, cross_val_score
FREQS = [6.66, 7.5, 8.57, 10.0, 12.0]
def load(rid, sid):
rec = wfdb.rdrecord(rid)
ann = wfdb.rdann(rid, "win")
fs = rec.fs
X, y, g = [], [], []
stack = {}
for s, note in zip(ann.sample, ann.aux_note):
#-- 起始括号入栈,结束括号出栈配对
if note.startswith("("):
stack["a"] = s
elif note.startswith(")") and "a" in stack:
a = stack.pop("a")
seg = rec.p_signal[a:s]
seg = seg - seg.mean(axis=0)
seg = seg[int(0.5 * fs):]
if len(seg) < fs:
continue
X.append(np.abs(np.fft.rfft(seg, axis=0)).mean(axis=1)[:64])
y.append(0)
g.append(sid)
return np.array(X), np.array(y), np.array(g)
X1, y1, g1 = load("dataset3/U001ai", "S001")
X2, y2, g2 = load("dataset3/U002ai", "S002")
X = np.vstack([X1, X2])
g = np.concatenate([g1, g2])
y = np.zeros(len(X), dtype=int)
print("窗数", X.shape, "受试者数", len(set(g)))
#-- 标签需按附串频率重建,此处仅演示分组切分
print(GroupKFold(n_splits=2).get_n_splits(X, y, g))
| 注意点 | 说明 |
|---|---|
| 标签要重建 | 示例里 y 未填真实频率,实际使用须从附串解析 |
| 最小窗长 | 不足一秒的残窗要丢,否则频谱分辨率不够 |
| 分组键 | 用受试者编号,不要用记录名 |
| 特征维度 | 前 64 点对应 32 赫兹以内,够覆盖五个频点 |
附录 E:如果只记五件事
| 序 | 要点 |
|---|---|
| 一 | 它是 MAMEM 项目的数据,不是"多目标"库;M 来自项目名 |
| 二 | 三个子集是同一批 11 人的三种条件,不是三批人 |
| 三 | 唯一不可替代的是同人跨设备对照:256 导对 14 导消费级耳机 |
| 四 | 五个频点、五秒窗、无字符任务,做不了拼写器与高频编码 |
| 五 | 没有官方划分、没有反馈、没有视力记录,结论只能限定在这十一人 |
编辑说明
核验时间 2026 年 10 月 28 日。核验方式:直接访问 PhysioNet 项目页与文件目录,读取 RECORDS 全表、SUBJECTS、CORR、ANNOTATORS,并抓取 dataset1/S001a、dataset2/T001a、dataset3/U001ai 三份头文件确认通道数与采样率。论文信息仅取 arXiv 摘要与 MAMEM 项目主页标题。未覆盖:全部记录的标注条数、采集环境、视力筛查、场次间隔。.freq 标注与作者顺序两处不一致按两个口径并列呈现,不作判断。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- erpbci — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- eegmmidb — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- bci-competition-iv-2a — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- moabb — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- stroke-eeg-fnirs — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- auditory-eeg — 共享标签:生理信号 / 脑电信号 / 脑机接口
- earh — 共享标签:生理信号 / 脑电信号 / 神经科学
- earndb — 共享标签:生理信号 / 脑电信号 / 神经科学
- mental-fnirs — 共享标签:生理信号 / 脑电信号 / 脑机接口 / 神经科学
- ninapro — 共享标签:生理信号 / 脑机接口 / 神经科学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

