盯住一个闪着的方块 — MAMEM 稳态视觉诱发电位库

十一人 / 三个子集 / 256 与 14 通道

来源 https://physionet.org/content/mssvepdb/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 12
盯住一个闪着的方块 — MAMEM 稳态视觉诱发电位库

信息速览

数据集名称盯住一个闪着的方块 — MAMEM 稳态视觉诱发电位库
数据类型时序信号,波形,人工标注,元数据
规模11 名受试者 / 235 段记录 / 3 个子集
接入方式https://physionet.org/content/mssvepdb/1.0.0/
AI 就绪度

稳态视觉诱发电位和事件相关电位常被放在一起讲,其实是两件事。后者问的是「刺激之后多久出现一个波」,答案在时间轴上,几百毫秒就走完;前者问的是「脑电在哪个频率上鼓出一个峰」,答案在频率轴上,需要刺激持续几秒才稳得住。受试者盯着一盏按固定频率闪的灯,枕区就会在那一频率上振荡起来,像被外部光源牵引住的一根弦。

这套机制做脑机接口很划算:不用训练、不用适应、看一眼就有信号。代价是它挑设备——电极要盖住枕区,采样率要够,放大器不能把几赫兹到十几赫兹那段窄带压掉。希腊信息与通信技术研究所(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 — 共享标签:生理信号 / 脑机接口 / 神经科学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集