信息速览
这个库的名字容易被读反。Non-EEG 不是「非脑电的某种脑电」,而是「不含脑电」——二十名健康受试者手腕上绑一套传感器,全程没有一片头皮电极,记录的是皮肤电活动、体表温度、三轴加速度、心率与动脉血氧五路外周信号。研究者要用这五路信号回答一个本属于脑电领域的问题:这个人此刻处在体力应激、认知应激、情绪应激,还是放松。
它由德克萨斯大学达拉斯分校生活质量技术实验室采集,配合 2016 年 IEEE 信号处理系统研讨会的数据描述论文发布,2017 年 7 月 19 日以 1.0.0 版上线 PhysioNet,此后未再升版。规模很小:二十人、每人一条连续记录、按八段固定顺序走完约三十七分钟;结构很清楚:每人两份 WFDB 记录加一份阶段标注,另附一张受试者信息表。许可为 ODC-BY 1.0,署名即可商用。
小规模是把双刃剑。它足够支撑方法学验证、教学演示与管线联调,却不足以支撑任何需要人群代表性或统计功效的结论;它的价值在于协议设计——四类应激被放进同一条时间线里,段与段之间用放松隔开,这在本领域的公开资源里并不多见。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 官方全名 | Non-EEG Dataset for Assessment of Neurological Status |
| 通行简称 | noneeg(PhysioNet 目录名);论文标题用 Non-EEG Biosignals Dataset |
| 缩写展开 | Non-EEG = non-electroencephalography,即「不含脑电」,指不采集头皮电信号 |
| 创建机构 | 德克萨斯大学达拉斯分校生活质量技术实验室 |
| 主要贡献者 | Diane Cogan、Javad Birjandtalab、Maziyar Baran Pouyan、Mehrdad Nourani |
| 医学顾问 | Jay Harvey(D.O.)、Venkatesh Nagaraddi(M.D.),神经科 |
| 伦理批件 | 德州大学达拉斯分校 IRB # 12-29 |
| 版本与日期 | 1.0.0,2017 年 7 月 19 日上线;2019 年 2 月补校验和 |
| 受试者 | 20 名健康成年人 |
| 记录规模 | 每人两份 WFDB 记录,全库四十份记录加二十份标注 |
| 信号通道 | 皮肤电、体温、三轴加速度、心率、血氧,共五类 |
| 阶段结构 | 官方正文称七个阶段,实际列出八条,合计约三十七分钟 |
| 文件格式 | WFDB(.hea / .dat / .atr),附 subjectinfo.csv |
| 采样率 | 官方页未公布,须读各记录 .hea |
| 许可 | ODC-BY 1.0 |
| DOI | 10.13026/C26Q2Z(PhysioNet 版本);论文 10.1109/SiPS.2016.27 |
§1 它要解决的具体麻烦
1.1 结论先说:把「神经状态」从脑电里解耦出来
脑电是判断应激与觉醒水平最直接的手段,但它有硬门槛:要贴电极、要导电膏、要控制阻抗,被试不能自由活动,长时间佩戴的舒适度差。可穿戴产业真正想要的是另一件事——一只手环,五路廉价传感器,就能给出「这个人现在紧张还是放松」的判断。这个库就是为这个目标准备的一块地基:它把同一批人放进四类会改变神经状态的场景,同时用腕上设备记录外周反应,看外周信号里到底还剩多少可分辨的信息。
这个定位决定了它的取舍。它不追求信号纯度,反而欢迎干扰:跑步机上的步态会污染加速度,恐怖片引起的体动会污染皮肤电,这些「脏」恰恰是真实佩戴场景的常态。它也不追求样本量,因为它的用途是证明「这条路走得通」,而不是训练一个上线的模型。理解这一点,后面的所有规格与局限都顺理成章。
| 它的设计取向 | 具体表现 | 对你意味着什么 |
|---|---|---|
| 场景真实优先 | 用腕戴设备而非实验级放大器 | 信号带真实运动伪迹,联调价值高于论文对比价值 |
| 类别齐全优先 | 体力、认知、情绪三类应激加四段放松 | 一次取数可做多任务,不必拼多个库 |
| 受试者深度优先 | 每人一条连续记录覆盖全部八段 | 可做受试者内分析,也可做跨段迁移 |
| 规模让位于协议 | 只有二十人 | 任何总体推断都要打问号 |
1.2 三条常见的错误期待
第一条是把 non-EEG 读成「非标准的脑电」或「脑电的某种变体」,进目录找 .edf 或 .bdf 文件,找不到就以为下载失败。实际上全库没有任何一路电生理头皮信号,五路信号里连心电的原始波形都没有,只有心率数值。
第二条是期待它是「应激金标准」。它不是。四类状态由任务诱导,标签来自实验设计,而不是来自临床诊断或受试者自评;官方页也没有给出任何量表分数。把它当成「有标签的应激库」可以,把它当成「应激程度的连续真值」不行。
第三条是期待开箱即用。二十人的数据、两份记录、一份打点标注,没有划分好的训练测试集,没有基线模型,没有官方评测脚本。它给的是一手记录,剩下的事都要自己做。
| 常见期待 | 实际情况 | 后果 |
|---|---|---|
| 里面是脑电文件 | 五路外周信号,无任何头皮电极 | 找错格式,误判为下载失败 |
| 标签是应激强度分值 | 标签是阶段类别,来自实验设计 | 回归任务无法直接开展 |
| 有官方训练测试划分 | 无划分、无基线、无评测脚本 | 指标不可跨论文直接比较 |
| 有逐秒状态标注 | 只有阶段转换点 | 窗口化逻辑必须自己写 |
| 受试者信息很全 | 官方页只写健康成年人 | 人群分层分析做不了 |
1.3 它能给到的与给不到的
判断一个库值不值得下载,最省时间的办法是拿自己的需求逐条对照。下表把常见需求拆成六条,逐条给出它给什么、够不够用。
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 验证「腕上信号能否区分四类状态」 | 二十人、每人类别齐全的连续记录 | 够做方法验证,不够做效能结论 |
| 训练一个上线用的应激分类器 | 二十人、约十二小时 | 远不够,需外接更大语料 |
| 研究皮肤电的应激响应形态 | 原始皮肤电波形,含运动与情绪两类诱发 | 够,且比只给脉冲的库更有用 |
| 做活动识别或步态分析 | 三轴加速度,含跑步机与静坐 | 勉强够,但只有一种运动器械 |
| 做血氧或心率的算法评测 | 血氧与心率两路,但只有数值记录 | 不够,缺少参考设备与逐拍真值 |
| 教学演示多模态时序处理 | 体量小、格式标准、许可宽松 | 非常适合 |
1.4 你的处境与它能帮到的事
同一份数据在不同人手里价值差别很大。下表左列写的是处境,不是数据特性,方便你直接对号入座。
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上有一个腕戴应激模型,缺公开数据做 sanity check | 二十人、四类诱发、格式标准,两小时能跑通 | 先用它验证管线,再换大库做正式评测 |
| 要给课程设计一个多模态时序实验 | 文件小、许可宽、阶段清晰 | 直接用它做窗口化与特征工程作业 |
| 想复现 2016 年前后的应激识别基线 | 这正是那批工作的原始数据之一 | 读 SiPS 论文的特征集,再对照实现 |
| 需要大样本做统计推断 | 帮不上,二十人做不了分层 | 转向更大规模的可穿戴应激库 |
| 需要临床人群的应激响应 | 帮不上,全部是健康人 | 找含患者群体的库,并注意伦理限制 |
| 只想找一段干净的皮肤电波形看形态 | 够用,且带真实伪迹 | 直接取放松段做基线对照 |
1.5 一句话判断
它是一份「协议比数据更值钱」的小库:二十个人的三十七分钟,把四类神经状态塞进同一条时间线,用来证明腕上五路信号不是废纸;想拿它训练模型是误会,想拿它验证思路正合适。
1.6 不适合谁:四条边界
不适合需要统计功效的人。 二十名受试者、每人一条记录,任何组间比较的置信区间都会宽到无法下结论。若你的研究问题是「某类应激下皮肤电的群体均值是多少」,这个库只能给出一个点估计的方向,不能给出可发表的效应量。
不适合需要临床人群的人。 全部受试者被官方描述为健康成年人,没有患者、没有老年人、没有儿童。神经系统疾病相关的状态推断,这个库提供不了任何参照。
不适合需要逐拍或逐秒真值的人。 血氧与心率两路只以数值形式记录,没有参考设备的同步波形;阶段标签只有转换点,没有逐秒类别。任何需要秒级真值的评测,都必须另找数据。
不适合需要设备参数的人。 官方页没有公布腕戴设备的型号、量程、佩戴部位与采样率。要做跨设备迁移研究,你得先从头文件里把能读的都读出来,读不到的部分只能标为未知。
§2 数据构成与规格
2.1 五路信号被拆成两份记录
同一个人的连续记录按信号族被切成两份 WFDB 记录,这是一处容易被忽略的结构细节。第一份文件名以 AccTempEDA 结尾,承载三轴加速度、体表温度与皮肤电;第二份以 SpO2HR 结尾,承载血氧与心率。两份记录覆盖同一段时间轴,起止点对齐,但要分析跨族关系时必须按时间戳重新对齐,不能按行号对齐。
这样切分的直接后果是采样节奏不同。官方目录里,同一名受试者的 AccTempEDA 记录体积约一百七十八千字节,SpO2HR 记录约九千字节,相差约二十倍。体积差既可能来自采样率差,也可能来自每帧字节数差,官方页没有说明是哪一种,只能打开各自的 .hea 头文件确认。
| 记录 | 承载信号 | 通道数 | 目录所列体积(以 Subject10 为例) |
|---|---|---|---|
| SubjectNN_AccTempEDA | 三轴加速度、体表温度、皮肤电 | 官方未逐项列出,按信号族推为五路 | 178.1 KB |
| SubjectNN_SpO2HR | 血氧、心率 | 官方未逐项列出,按信号族推为两路 | 8.9 KB |
| SubjectNN.atr | 阶段转换的时间位置与标签 | 单通道标注 | 156 B |
| SubjectNN_AccTempEDA.hea | 该记录的头文件 | 文本 | 464 B |
2.2 字段与记录的完整字典
官方页对内容的描述是散在正文里的,这里按「一个文件里有什么」重新组织成一张表。凡官方未写明的项,一律标注为未公布,不做推测填充。
| 项 | 内容 | 官方是否明示 |
|---|---|---|
| 受试者编号 | Subject 加两位数字,见于文件名 | 是 |
| 记录类型 | AccTempEDA 与 SpO2HR 两种,各一份 | 是 |
| 加速度 | 三轴,具体轴向与单位见头文件 | 部分 |
| 温度 | 体表温度,单位见头文件 | 部分 |
| 皮肤电 | 皮肤电活动,原始电导或已换算见头文件 | 部分 |
| 心率 | 以数值形式记录,非逐拍波形 | 是 |
| 血氧 | 动脉血氧饱和度,以数值形式记录 | 是 |
| 阶段标注 | 每受试者一份 .atr,标转换点与标签 | 是 |
| 受试者信息 | subjectinfo.csv,字段未公布 | 部分 |
| 记录清单 | RECORDS,742 字节,逐行列出记录名 | 是 |
| 标注器声明 | ANNOTATORS,43 字节 | 是 |
| 校验和 | SHA256SUMS.txt,2019 年 2 月补录 | 是 |
| 采样率 | 未在页面上出现 | 否 |
| 设备型号 | 未在页面上出现 | 否 |
| 佩戴部位 | 只写腕戴(wrist worn),左右手未说明 | 部分 |
2.3 一条记录的完整解剖
要看清结构,最直接的办法是把一个人的三件套摊开。下面的代码块用 WFDB 官方 Python 包读取一名受试者的两份记录与标注,只做打印,不做任何加工,便于你第一次打开时核对字段名。
#-- 读取单个受试者的两份记录与标注,核对头文件里的采样率与通道名
import wfdb
base = "noneeg/1.0.0/Subject10"
acc = wfdb.rdheader(base + "_AccTempEDA")
print("AccTempEDA 采样率", acc.fs, "通道", acc.sig_name, "时长", acc.sig_len / acc.fs)
spo = wfdb.rdheader(base + "_SpO2HR")
print("SpO2HR 采样率", spo.fs, "通道", spo.sig_name, "时长", spo.sig_len / spo.fs)
ann = wfdb.rdann(base, "atr")
print("标注条数", len(ann.sample))
for t, note in zip(ann.sample, ann.aux_note):
print(t, note)
三件套之间的关系可以这样理解:两份记录共享同一条时间轴,标注文件只挂在其中一份上,通过采样点索引定位。读出标注后,你得到的是一串「第几个采样点发生了什么」,而不是「每一秒属于哪一类」。把前者变成后者,是使用者要做的第一件事。
按层次拆开看,一份记录里其实叠着五条轴。时间轴是两份记录共用的,都从记录开始计时,所以跨族对齐要按秒算,不能按行号算。通道轴是分散的,五类信号分装在两个文件里,只读一个必然缺一半。标注轴只有一条,挂在文件名主体上,标的是转换点而不是逐秒类别。元信息轴藏在头文件里,头文件内嵌了受试者信息,这些信息可能与 subjectinfo.csv 重叠,也可能互补,官方没有说明谁覆盖谁。最后是校验轴,SHA256SUMS.txt 让你能在分析之前确认文件没被替换过。这五条轴各自独立,任何一条读漏,后面的分析都会在某个环节悄悄错位。
2.4 八段协议:官方的两种数法
官方正文写「数据集由 7 个阶段组成」,紧接着列出的项目却是八条。差额来自第四条:一段四十秒的「迷你情绪应激」,官方在脚注里明确说明,这段本来不打算单独计数,因为那四十秒只是把倒数七的规则念给受试者听,但它在很多人身上诱发了管理员肉眼可见的应激反应,所以被单独记了下来。
两种数法并存,不必替官方裁判。做区间统计时以列出的八条为准,做「阶段数」描述时以正文的七为准,并说明差额来源。
| 序 | 阶段 | 官方时长 | 该段在做什么 |
|---|---|---|---|
| 1 | 第一次放松 | 五分钟 | 静坐,建立基线 |
| 2 | 体力应激 | 五分钟 | 站立一分钟,每小时一英里走两分钟,每小时三英里走或跑两分钟 |
| 3 | 第二次放松 | 五分钟 | 回到静坐 |
| 4 | 迷你情绪应激 | 四十秒 | 朗读倒数七的任务说明,官方脚注称其意外诱发应激 |
| 5 | 认知应激 | 五分钟 | 从 2485 起每次减七倒数三分钟,再做两分钟色词斯特鲁普,出错蜂鸣提示 |
| 6 | 第三次放松 | 五分钟 | 回到静坐 |
| 7 | 情绪应激 | 六分钟 | 预告一分钟,随后播放僵尸题材影片片段五分钟 |
| 8 | 第四次放松 | 五分钟 | 收尾静坐 |
把八段时长相加,每人约三十七分钟,二十人合计约十二小时。这两个数都不是官方直接给出的,是从分段时长推出来的,使用时宜标为推算值。
2.5 与同类资源的字段差异
同样的五类信号,不同库的取舍差别很大。下表把本库与三个常被放在一起比较的资源按字段逐项对照,只写官方明示的内容。
| 字段 | 本库 | QoL_Stress | PPG-DaLiA | EDA 静息与镇静库 |
|---|---|---|---|---|
| 受试者数 | 20 | 66 | 15 | 22 |
| 皮肤电原始波形 | 有 | 有 | 无 | 无,只给脉冲时间与幅度 |
| 体温 | 有 | 未列 | 有 | 无 |
| 三轴加速度 | 有 | 未列 | 有 | 无 |
| 心率 | 有,数值 | 有,逐秒 | 有,由心电导出 | 无 |
| 血氧 | 有 | 未列 | 无 | 无 |
| 认知应激诱发 | 有,倒数加色词 | 有 | 无 | 无 |
| 体力应激诱发 | 有,跑步机 | 未列 | 有,日常活动 | 无 |
| 情绪应激诱发 | 有,影片 | 未列 | 无 | 无 |
| 许可 | ODC-BY 1.0 | CC BY 4.0 | 未在此列 | 未在此列 |
差异最大的一行是情绪应激。多数可穿戴应激库只做认知或体力负荷,本库把情绪单独做成一段,代价是样本更少、协议更依赖单一影片片段。
§3 它是谁的数据:一间实验室与两名神经科顾问
3.1 采集地点:一间以生活质量为名的实验室
数据来自德克萨斯大学达拉斯分校的 Quality of Life Technology Laboratory。这个实验室的研究取向从名字就能看出:不追求把仪器做得更精密,而是追求让测量进入日常生活。腕戴设备、非侵入、长时间连续记录,这三条与研究取向一致,也解释了为什么这个库宁可要真实伪迹,也不要实验级的干净信号。
采集地点在美国德克萨斯州理查森市。受试者来源官方没有说明,从「健康受试者」这一表述看,最可能是校内招募,但这只是常识推断,官方页没有写,不宜当作事实使用。
| 项 | 内容 | 来源层级 |
|---|---|---|
| 机构 | 德克萨斯大学达拉斯分校生活质量技术实验室 | 官方页面 |
| 城市 | 美国德克萨斯州理查森市 | 官方页面(IRB 条款) |
| 设备形态 | 非侵入式腕戴生物传感器 | 官方页面 |
| 设备型号 | 未公布 | 未核实 |
| 佩戴手别 | 未公布 | 未核实 |
| 受试者来源 | 未公布 | 未核实 |
| 采集年份 | 未公布,只知早于 2016 年论文 | 未核实 |
3.2 四位贡献者与两名医学顾问
官方页面把贡献者分成两类:做工程与数据处理的四位,和提供神经内科判断的两位。这个组合本身就说明了库的定位——信号处理团队主导,临床侧只做顾问,不参与采集。论文的四位作者与页面上的四位贡献者一致。
| 姓名 | 身份与页面表述 |
|---|---|
| Diane Cogan | 生活质量技术实验室团队贡献者 |
| Javad Birjandtalab | 生活质量技术实验室团队贡献者,论文第一作者 |
| Maziyar Baran Pouyan | 生活质量技术实验室团队贡献者 |
| Mehrdad Nourani | 教授,团队负责人,生活质量技术实验室团队贡献者 |
| Jay Harvey | 医学顾问,D.O.,以神经科顾问身份参与研究 |
| Venkatesh Nagaraddi | 医学顾问,M.D.,以神经科顾问身份参与研究 |
值得注意的是,两位顾问的头衔都是神经科方向,而不是心理或生理方向。这与库名里的「神经状态」一致:作者想推断的是与神经系统活动相关的状态分类,而不是心理学意义上的情绪维度。
3.3 命名逻辑:non-EEG 是一个否定式的定位
库名的构成方式值得单独说一段,因为它是理解整个资源的钥匙。Non-EEG 不是某个缩写的展开,而是一个否定前缀加一个领域名词,意思是「不用脑电」。它同时否定了三件事:不用头皮电极,不用导电膏,不用实验室级放大器。
| 名字里的成分 | 字面意思 | 实际所指 |
|---|---|---|
| Non | 非、不含 | 采集环节完全不涉及 |
| EEG | 脑电图 | 头皮电生理信号 |
| Dataset | 数据集 | 一份可下载的记录集合 |
| 组合含义 | 不含脑电的数据集 | 用外周生理信号替代脑电做状态判断 |
| 论文标题用词 | Biosignals | 强调「生物信号」而非「神经信号」 |
论文标题用的是 Non-EEG Biosignals Dataset,比 PhysioNet 上的库名多了一个词。两个名字指同一批数据,前者强调信号性质,后者强调用途。引用时两种写法都能见到,检索时两种都要试。
3.4 伦理与合规
官方页给出了完整的伦理链条:实验程序经德州大学达拉斯分校机构审查委员会批准,批件号为 UTD IRB # 12-29。除此之外,页面没有再提供知情同意的形式、数据去标识的方式、以及受试者撤回权的处理办法。
官方页给出的伦理链条只到批件号为止,剩下的部分要靠推。批件是 UTD IRB # 12-29,可追溯;知情同意的形式、去标识的具体做法、受试者撤回权的处理,页面都没有写。去标识这一点能从文件结构反推:所有文件名与目录都不含姓名,只用 Subject 加两位编号,受试者级信息集中在 subjectinfo.csv 一张表里。这种做法的保护强度取决于该表内到底有哪些字段,而字段清单官方没有列,属于未核实项。
3.5 版本与 DOI
这个库只有一个版本,1.0.0,2017 年 7 月 19 日上线。2019 年 2 月,目录里多了一份 SHA256SUMS.txt,说明做过一次完整性补录,但版本号没有变。PhysioNet 为它分配了独立的 DOI,10.13026/C26Q2Z,与论文的 DOI 是两个不同的标识。
六个标识值得分开记。版本号是 1.0.0;上线日期是 2017 年 7 月 19 日;最近一次改动是 2019 年 2 月补了校验和,版本号没跟着变;数据本体的 DOI 是 10.13026/C26Q2Z;方法来源的论文 DOI 是 10.1109/SiPS.2016.27;版本总数只有一个,因此不存在选版本的麻烦。前四个用于追溯,第五个用于引用方法,最后一个用于判断「要不要挑旧版」。
只有一个版本是好事也是坏事。好处是不必纠结用哪一版,坏处是八年没有更新,任何在 2017 年之后才出现的信号类型或标注范式都不会出现在这里。
§4 它最独特的东西:四类状态共享一条时间轴
4.1 诱发范式拆开看
八段协议的设计意图很清楚:用四段放松把三类应激隔开,让每一次状态切换都有一个可辨识的边界。体力段用跑步机做梯度负荷,认知段用倒数与色词两个任务叠加,情绪段用影片加预告。
| 应激类型 | 诱发手段 | 时长 | 设计考量 |
|---|---|---|---|
| 体力 | 站立、慢走、快走或慢跑 | 五分钟 | 三段递进,制造可分辨的心率爬升 |
| 认知 | 从 2485 起减七倒数,加色词斯特鲁普 | 五分钟 | 心算占用工作记忆,色词制造冲突 |
| 情绪 | 一分钟预告加五分钟僵尸题材影片 | 六分钟 | 预告段单独制造期待性焦虑 |
| 放松 | 静坐,无任务 | 四段各五分钟 | 提供基线,也提供恢复曲线 |
倒数任务的起点是 2485,每次减七。这个数字在官方页里出现了两次,是协议中唯一的具体参数。色词任务的形式是读出用不同颜色墨水写成的颜色词,再说出墨水本身的颜色,出错时用蜂鸣器提示。蜂鸣器这一细节很重要:它意味着错误被实时反馈,受试者的应激水平会随出错次数波动,而不是恒定的。
4.2 标签的粒度决定了你能做什么
标注只有转换点,这是本库在结构上最需要提前知道的一件事。它带来的直接影响是:任何监督学习任务,都要先把「一串时间点」变成「逐秒类别」。
| 标注形态 | 已有的 | 缺的 | 你要补的 |
|---|---|---|---|
| 阶段边界 | 每个转换点的时间与标签 | 无 | 按边界做区间填充 |
| 段内状态 | 无 | 连续强度、瞬时波动 | 自行定义窗口与聚合方式 |
| 主观评分 | 无 | 量表分数、自评 | 无,本库不提供 |
| 任务表现 | 无 | 倒数正确率、色词错误数 | 无,本库不提供 |
最后两行是常见的误判来源。有人以为「反正有认知应激段,就能做认知负荷回归」,实际上库内没有任何行为学指标,你只能做四分类或二分类,做不了负荷强度的回归。
4.3 案例:Subject10 的三件套
把 Subject10 拎出来当例子,是因为官方目录页恰好把它的四个文件都列了体积,能直观看到结构比例。四个文件是:AccTempEDA 的数据、头与标注,以及 SpO2HR 的数据。
| 文件 | 体积 | 承载内容 | 读它先看什么 |
|---|---|---|---|
| Subject10_AccTempEDA.dat | 178.1 KB | 加速度、温度、皮肤电的采样值 | 与 .hea 对照通道顺序 |
| Subject10_AccTempEDA.hea | 464 B | 采样率、通道名、量程、增益 | 第一行与信号行 |
| Subject10_AccTempEDA.atr | 156 B | 阶段转换点与标签 | 标注条数与 aux_note |
| Subject10_SpO2HR.dat | 8.9 KB | 血氧与心率的采样值 | 与主记录的时间对齐 |
比例关系能说明很多事:两百多字节的头文件装下了全部元信息,一百多字节的标注装下了整场实验的阶段边界,两份数据文件的体积差约二十倍。这意味着阶段标注极其轻量,真正占空间的是高频的加速度与皮肤电。
§4.3 的案例在后面的取数章节还会再出现一次,因为它的文件命名规则就是全库的命名规则:SubjectNN_AccTempEDA 与 SubjectNN_SpO2HR,NN 是两位数字,从 01 排到 20。任何批量脚本都按这个模式拼接路径即可。
4.4 为什么放松段要做四次
四段放松看起来冗余,实际是这个协议里最聪明的部分。它们分别位于基线、体力后、认知后、情绪后,四条恢复曲线各自对应一种应激的消退过程。
| 放松段 | 位置与前情 | 能回答的问题 |
|---|---|---|
| 第一次 | 实验开始,无前置 | 个体的静息基线是多少 |
| 第二次 | 体力应激后,心率与体温仍在恢复 | 体力负荷的消退有多快 |
| 第三次 | 认知应激后,皮肤电仍有余波 | 认知负荷的余波有多长 |
| 第四次 | 情绪应激后,情绪唤醒还有尾巴 | 情绪唤醒的回落形态 |
如果只留一段放松,你只能得到一个基线;四段放松让你能在同一名受试者身上观察四次恢复,等效于把「恢复动力学」这个维度也纳入了观测范围。这是二十人小样本下少见的深度设计。
4.5 这套设计换来了什么、付出了什么
| 得到 | 付出 |
|---|---|
| 四类状态在同一时间轴上可比 | 单次实验长达三十七分钟,疲劳与顺序效应无法排除 |
| 四次恢复过程可观测 | 阶段顺序固定,无法区分状态效应与时间效应 |
| 真实佩戴伪迹 | 加速度被步态主导,难以分离活动强度 |
| 情绪与认知分开诱发 | 情绪只用一部影片,泛化性受限 |
| 标注轻量、易解析 | 无逐秒真值,无行为学指标 |
顺序固定这一点值得多说一句。所有受试者都按同一顺序经历八段,这意味着「第几段」与「什么状态」在数据里完全共线。任何模型如果学到了时间位置,就会看起来性能很好,但这个性能无法迁移到顺序不同的场景。这是本库最隐蔽的一处陷阱,也是最容易被忽略的一处。
§5 怎么拿到:从目录到可训练张量
5.1 四条取数路径
PhysioNet 上的资源通常有四条路可走,各有适用场景。本库在部分司法辖区会被页面上的一条提示拦住,提示原文是数据因法律或政策限制在该地区不可用,此时目录仍可浏览,逐文件下载则需要换网络环境或走镜像。
| 路径 | 地址形态与用途 | 注意事项 |
|---|---|---|
| 项目主页 | content 路径,读说明、看版本、拿 DOI | 部分辖区显示不可用 |
| 文件目录 | files 路径,逐个下载、核对体积 | 目录页本身可浏览 |
| 记录清单 | RECORDS 文件,批量构造下载列表 | 742 字节,逐行一个记录名 |
| 物理网直连 | wfdb 库按记录名读,不经网页 | 需能访问同一域名 |
5.2 先校验再算
数据体量小,最容易犯的错是下完就直接进模型。官方在 2019 年补了校验和清单,就是为了让这一步变简单。
#-- 下载目录、校验完整性、确认记录数与标注数
mkdir -p noneeg/1.0.0 && cd noneeg/1.0.0
base="https://physionet.org/files/noneeg/1.0.0"
curl -sSLO "$base/RECORDS"
curl -sSLO "$base/SHA256SUMS.txt"
while read -r rec; do
curl -sSLO "$base/${rec}.hea"
curl -sSLO "$base/${rec}.dat"
done < RECORDS
sha256sum -c SHA256SUMS.txt
ls *.atr | wc -l
如果 sha256sum -c 报告缺失文件,多半是 RECORDS 里只有记录名、不包含标注文件,需要按记录名补下同名 .atr。
5.3 读一条记录
WFDB 的读取接口很直接,头文件与数据可以分开读。分开读的好处是能先看到采样率与通道名,再决定要不要把整段数据载入内存。
#-- 只读头文件,先看清采样率、通道名与时长,再决定读不读数据
import wfdb
h = wfdb.rdheader("noneeg/1.0.0/Subject10_AccTempEDA")
print("记录名", h.record_name)
print("采样率", h.fs, "Hz")
print("通道数", h.n_sig, h.sig_name)
print("采样点数", h.sig_len, "合", round(h.sig_len / h.fs / 60, 1), "分钟")
print("各通道增益", h.adc_gain)
这段代码同时也是一次核对:官方页说每人约三十七分钟,头文件算出来的分钟数应该落在这个量级。如果差得远,说明该受试者中途有过中断或提前结束,这类个体差异官方没有说明。§4.3 的案例里那四个文件正是本节代码要读的对象,先拿它跑通,再换成循环遍历二十人。
5.4 把打点标注变成逐秒标签
这是使用本库最关键的一步。标注文件给的是采样点与标签,要转成可训练的序列,得先按采样率换算成秒,再做区间填充。
#-- 把 .atr 的转换点展开成逐秒类别序列
import numpy as np
import wfdb
base = "noneeg/1.0.0/Subject10"
ann = wfdb.rdann(base, "atr")
fs = wfdb.rdheader(base + "_AccTempEDA").fs
labels = [a.strip("()\x00") for a in ann.aux_note]
edges = (np.array(ann.sample) / fs).astype(int)
total = int(wfdb.rdheader(base + "_AccTempEDA").sig_len / fs)
per_second = np.full(total, "unknown", dtype=object)
for i, start in enumerate(edges):
end = edges[i + 1] if i + 1 < len(edges) else total
per_second[start:end] = labels[i]
print(np.unique(per_second, return_counts=True))
aux_note 里的标签文本以空字符结尾,官方没有给出标签词表的正式清单,实际字符串要以你读到的为准。这是本库文档层面的一个空缺:你能看到标签,但没有一张官方的「标签—中文释义」对照表。
5.5 分窗与特征
拿到逐秒标签之后,分窗就是常规操作。窗口长度、步长与特征集的选择直接决定结果,官方没有给基线,所以任何数字都只在自己内部可比。
#-- 三十秒窗、十五秒步长,取皮肤电均值与加速度方差
import numpy as np
import wfdb
rec = wfdb.rdrecord("noneeg/1.0.0/Subject10_AccTempEDA")
sig, fs = rec.p_signal, rec.fs
win, step = int(30 * fs), int(15 * fs)
rows = []
for s in range(0, len(sig) - win, step):
seg = sig[s:s + win]
eda = seg[:, rec.sig_name.index("EDA")]
acc = seg[:, [rec.sig_name.index(n) for n in rec.sig_name if n.startswith("A")]]
rows.append((s / fs, eda.mean(), eda.std(), acc.std(axis=0).mean()))
print(len(rows), "个窗口")
通道名不一定就是 EDA 与 A 开头,实际名称要在头文件里确认。这段代码的价值不在特征本身,而在演示「先查名字、再取列」这个顺序,跳过这一步的脚本换一个受试者就会报错。
5.6 一个最小的数据集合类
把上面的步骤收进一个类,才能在二十人上做留一受试者交叉验证。留一法是本库唯一诚实的评测协议,理由在 §7 会展开。
#-- 留一受试者划分,避免同一人的窗口同时进训练集与测试集
import numpy as np
import wfdb
def load_subject(sid, win_s=30, step_s=15):
base = f"noneeg/1.0.0/Subject{sid:02d}"
rec = wfdb.rdrecord(base + "_AccTempEDA")
ann = wfdb.rdann(base, "atr")
fs = rec.fs
labels = [a.strip("()\x00") for a in ann.aux_note]
edges = (np.array(ann.sample) / fs).astype(int)
X, y = [], []
win, step = int(win_s * fs), int(step_s * fs)
for s in range(0, len(rec.p_signal) - win, step):
left = int(s / fs)
right = int((s + win) / fs)
idx = np.searchsorted(edges, left, side="right") - 1
idx2 = np.searchsorted(edges, right, side="right") - 1
if idx < 0 or idx != idx2:
continue
X.append(rec.p_signal[s:s + win].T)
y.append(labels[idx])
return np.array(X), np.array(y)
subjects = list(range(1, 21))
for test in subjects:
Xtr = [load_subject(s) for s in subjects if s != test]
Xte = load_subject(test)
print("留出", test, "训练受试者", len(Xtr), "测试窗口", len(Xte[0]))
这里有一处故意的取舍:窗口跨越两个阶段边界时直接丢弃。跨边界的窗口标签是模糊的,丢掉比强行赋值更干净。
5.7 格式与解析的常见坑
| 坑 | 表现 | 处理 |
|---|---|---|
| 只读一份记录 | 只有心率血氧,没有皮肤电 | 必须成对读两份 |
| 按行号对齐 | 两族信号错位 | 按秒对齐 |
| 标签带空字符 | 字符串比较失败 | 读取时剥除 |
| 标注无词表 | 不知道标签含义 | 以读到的字符串为准,自行对照阶段表 |
| 目录 403 | 提示地区限制 | 换环境或走镜像,先确认许可 |
| 体积小就全量载入 | 内存浪费不大但习惯不好 | 头文件先行,按需读 |
这一节的六条坑,全部来自文件结构本身,与信号质量无关。换句话说,本库的入门门槛不在算法,而在「先读文档、先读头文件」这个习惯。
§6 与库内条目的关系
6.1 关系图谱
在千方医数集的库里,与本库直接相关的页面可以分成三圈:同模态圈(皮肤电与可穿戴信号)、同任务圈(应激与认知负荷)、同机构圈(PhysioNet 托管)。三圈交叉的那几个页面,才是真正需要放在一起读的。
| 页面 | 关系类型与共同点 | 关键差别 |
|---|---|---|
| QoL_Stress | 同任务同平台,都做放松与应激的诱发对比 | 66 人对 20 人,设备为 Fitbit 手环,CC BY 4.0 |
| EDA 静息与镇静库 | 同模态,都以皮肤电为核心信号 | 只给脉冲时间与幅度,不给原始波形 |
| PPG-DaLiA | 同设备形态,都是腕戴多模态 | 15 人、日常活动、以心率为目标 |
| 消费级穿戴认知负荷库 | 同任务,都用色词任务诱发认知负荷 | 25 人、三台设备横向对比 |
| BUT PPG | 同为可穿戴质量议题,都关心腕上信号能不能用 | 目标是 PPG 质量分级,不是状态分类 |
| PhysioNet/CinC 2017 | 同平台,都托管在 PhysioNet | 目标是心律失常分类,八分类之外的细节另见该页 |
| SeizeIT2 | 同为可穿戴神经监测,都做长时间佩戴记录 | 目标是癫痫发作检测,有患者人群 |
6.2 检索路径
按问题找页面,比按标签找页面更快。下表把常见问题映射到库内应该先打开的页面。
| 你想问的问题 | 先去哪一条 | 为什么 |
|---|---|---|
| 有没有更大规模的同类数据 | QoL_Stress | 同任务、人数是本库的三倍多 |
| 有没有只给皮肤电派生量的版本 | EDA 静息与镇静库 | 正好相反:只给脉冲,不给波形 |
| 腕戴设备的日常活动场景长什么样 | PPG-DaLiA | 八类日常活动,接近真实佩戴 |
| 同一批人戴三台设备会怎样 | 消费级穿戴认知负荷库 | 设备间横向对比是它的主题 |
| 想找同平台的大规模单模态挑战 | PhysioNet/CinC 2017 | 有官方评测口径与基线 |
| 想看可穿戴设备在患者身上的长期表现 | SeizeIT2 | 五中心、患者人群、长时程 |
6.3 三组最容易被混为一谈的页面
第一组是本库与 QoL_Stress。两者都被描述为「放松与应激」的数据集,但设计哲学完全不同:本库把三类应激串成一条三十七分钟的时间线,QoL_Stress 用的是双相协议,段落更短、人次更多。一个适合看状态切换的动态过程,一个适合看两类状态的静态可分性。
第二组是本库与 EDA 静息与镇静库。两者都以皮肤电为主角,但一个保留原始电导波形,一个只发布由波形派生的脉冲时间与幅度。做过皮肤电分析的人知道,这两种形态支持的分析完全不同:前者能做分解与形态学,后者只能做脉冲统计。
第三组是本库与消费级穿戴认知负荷库。两者都含色词任务,都关心「消费级设备能不能测出认知负荷」。差别在于本库只用一套设备、二十人、四类状态;后者用三套设备、二十五人、聚焦单一任务。
判别的方法只有三条,都落在元数据上:一看段落结构是串行还是双相,二看文件里有没有原始采样值,三看受试者数与设备数。凡是宣称「两个库可以直接合并训练」的说法,只要拿这三条去对,几乎都会露馅。
6.4 什么时候该换一个库
只要目标是跑通管线、验证思路、做教学演示,本库的体量与许可都是最省事的。一旦目标变成「需要统计功效」「需要皮肤电脉冲的现成标注」「需要真实日常活动」「需要多设备横向对比」「需要患者人群」,就该换库,对应的替代项分别是 QoL_Stress、EDA 静息与镇静库、PPG-DaLiA、消费级穿戴认知负荷库与 SeizeIT2。这条分界不需要犹豫:本库从来不是为了承担这些任务而设计的。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
在看分数之前,先校正一处常见的误判:这个库的「质量」不能用通用数据集的尺子量。它不提供划分、不提供基线、不提供逐秒真值、不公布设备参数,这些在通用评测语境里都是扣分项;但在它的目标场景里,这些恰恰不是缺陷,而是留白——它希望使用者自己决定窗口、自己定义标签、自己设计协议。用「能不能直接训一个 SOTA 模型」来评价它,评价的方向就错了。
真正该问的是三个问题:信号本身是否可信、协议是否支持你想做的对照、边界是否被清楚地交代。本节按这三问展开,最后给出一个五维评分供参考,但请把分数看作排序工具,不是判决。
7.1 DAIMS 五维评分
DAIMS 是本项目用于横向比较数据集成熟度的五维框架,打分范围一到五分,分数越高表示该维度越不需要使用者额外补救。
| 维度 | 分数 | 依据与补救成本 |
|---|---|---|
| 文档完备度 | 3 | 协议、文件结构、伦理链条都写了,但采样率、设备、字段清单缺失;成本中,需读头文件 |
| 标注粒度 | 2 | 只有阶段转换点,无逐秒真值、无行为学指标;成本高,需自行区间填充 |
| 信号保真 | 4 | 原始采样值直接发布;成本低,但设备参数缺失 |
| 人群代表性 | 1 | 二十名健康成年人,无人口学分层;无法补救 |
| 可复现性 | 3 | 有校验和、有 DOI、无版本变动,但无基线脚本;成本中,需自建流程 |
五维合计十三分,满分二十五。这个分数在库内属于中下,主要被标注粒度与人群代表性拖累,而这两项恰恰是小规模实验室数据的通病,不是这一份数据的特殊问题。
7.2 三个比分数更要紧的事实
| 事实 | 含义 | 对你的动作 |
|---|---|---|
| 顺序固定 | 阶段顺序与状态完全共线 | 必须做留一受试者,且报告顺序基线 |
| 无行为学 | 倒数正确率、色词错误数都不在库内 | 不能做负荷强度回归 |
| 无设备参数 | 量程、佩戴位置、型号均未公布 | 跨设备迁移研究不要用这一份 |
第一条最致命。假如一个模型只学到了「记录开始后的第几分钟」,它在受试者内划分下会得到很高的准确率,因为阶段顺序固定,时间就是标签。这个陷阱不靠算法能解决,只能靠评测协议规避。
7.3 已知的、可枚举的偏差
| 偏差 | 具体表现 | 影响范围 |
|---|---|---|
| 样本量偏差 | 二十人,任一类别只有二十个样本 | 所有统计推断 |
| 人群偏差 | 健康成年人,无年龄性别分层信息 | 临床与老年场景 |
| 场景偏差 | 全部在实验室内,跑步机与影片都是实验室道具 | 真实生活场景 |
| 任务偏差 | 认知任务只有倒数七与色词两种 | 任务泛化 |
| 设备偏差 | 单一设备、单一佩戴位置 | 跨设备迁移 |
| 文化偏差 | 情绪诱发依赖一部特定影片 | 情绪泛化 |
| 时间偏差 | 采集早于 2016 年,设备与范式均已过时 | 与现代手环对比 |
倒数任务的起点固定为 2485,也是一个隐性偏差:所有受试者算同一道题,题目难度不可变,无法区分「这个人不擅长减法」与「这个人应激反应弱」。这一条与 §4.3 的案例直接相关:单看 Subject10 的三件套,你无法判断它的高皮肤电来自题目难度还是个体差异,只有把二十人的同一段横向摆开才看得出来。
7.4 外部验证矩阵
一个库的可信度,很大程度上取决于它被多少人真正用过。下表把可核对的第三方信号列出来,凡是无法核对的都标为未核实。
| 验证维度 | 状态与证据 | 说明 |
|---|---|---|
| 官方基准脚本 | 无,项目页未列 | 指标不可跨论文直接比 |
| 第三方复现代码 | 有,公开仓库以本库为对象做信号处理与分类 | 可作为入门参考 |
| 学术引用 | 有,论文被引量在百次量级(第三方索引,非官方) | 说明方法被持续参照 |
| 数据再分发 | 有,若干聚合站点转载 | 转载版本未必与官方一致 |
| 官方勘误 | 无,版本未变 | 未见公开勘误 |
| 采样率复核 | 未核实,需读头文件 | 本次未取得文件 |
第三方复现代码的存在,比引用量更能说明问题:有人真的把数据下下来、跑通了、写出了流程。这类仓库通常同时暴露了库的实际坑点,例如标签字符串的处理方式。
7.5 它为何能持续:协议可复用,数据可重下
八年不升版、无基线、无勘误,这个库却仍在被引用、仍被下载,原因不在数据本身,而在协议。八段结构是一份可复用的实验脚本:任何团队想验证「腕上五路信号能否区分四类状态」,都可以照着它做一遍,再用本库做外部对照。数据的体量小到几兆,重下成本几乎为零,这让它成了事实上的入门参考。
它也受益于位置:PhysioNet 是生物医学信号领域最常被检索的托管平台之一,ODC-BY 又是最宽松的署名许可之一。一个可用、可下载、可商用的二十人小库,在缺乏同类资源的年代里就自然成了默认选项,而这个默认地位一旦形成,就很难被后来者替代——后来者即使更大更好,也需要时间积累引用。
§8 生态位与历史
8.1 历史沿革
| 时间 | 事件 | 意义 |
|---|---|---|
| 2016 年 10 月 | IEEE SiPS 发表数据描述论文 | 方法首次公开 |
| 2017 年 7 月 19 日 | PhysioNet 上线 1.0.0 版 | 数据对外可用 |
| 2019 年 2 月 | 补录 SHA256SUMS.txt | 完整性可校验 |
| 2017 年至今 | 版本未变 | 无修订、无扩样 |
三个节点之间没有第四个。这意味着任何在 2019 年之后读到的「本库有 XX 人」的说法,只要不是二十,就一定是把别的库混了进来。
8.2 与库外三份资源的位次
放到更大的参照系里,本库的位置很清楚:它不是最大的,也不是最新的,但它是最早把四类状态串进一条腕上时间线的公开资源之一。
| 资源 | 首发年份 | 受试者 | 主线 | 与本库的关系 |
|---|---|---|---|---|
| 本库 | 2017 | 20 | 四类状态串行 | — |
| WESAD | 2018 | 15 | 腕上与胸戴双设备 | 同期、思路相近、设备更全 |
| QoL_Stress | 近年 | 66 | 双相协议加量表 | 后继者,规模更大 |
| PPG-DaLiA | 2018 | 15 | 日常活动下的心率 | 目标不同,可作信号对照 |
8.3 引用生态
| 引用形态 | 典型用法 | 需要注意 |
|---|---|---|
| 作为方法来源 | 引用论文说明四类诱发的设计 | 论文与数据是两件事,引用要分开 |
| 作为数据来源 | 引用 PhysioNet 页面与 DOI | 需同时给标准平台引用 |
| 作为对照集 | 在自建数据之外加一份小库做外部验证 | 人数少,对照结论要弱化 |
| 作为教学材料 | 用于课程与教程 | 许可宽松,最适合这一用途 |
8.4 版本维护与未来
官方没有任何「将扩样」或「将升版」的表述。以八年未动的记录看,最合理的预期是它保持现状:作为一份固定的历史参考点存在。想要更大规模、更新设备的同类数据,应当转向后来者,而不是等待这一份更新。
§9 使用指引
9.1 三种角色的路径
同一份数据,做算法的人、做研究的人、做教学的人,打开它的方式完全不同。把路径按角色拆开,比给一份通用教程更有用。
| 角色 | 起点 | 一周内该完成的事 |
|---|---|---|
| 可穿戴算法工程师 | 先读头文件,再读标注 | 跑通留一受试者流程,得到四分类基线 |
| 应激与情绪研究者 | 先读八段协议,再读原文 | 判定协议能否回答自己的对照问题,不能则换库 |
| 课程与教学使用者 | 先看文件体积,再看许可 | 设计一个窗口化与特征工程作业,两课时可完成 |
工程师最容易踩的坑是跳过标注格式,直接假设「标签是一列数字」;研究者最容易踩的坑是把二十人的结论写成群体结论;教学使用者最容易踩的坑是让学生先学信号处理再学数据结构,顺序反了。三条路径的共同点是:都要先花半小时把八个阶段的边界在自己的时间轴上画出来,画不出来就说明还没读懂这份数据。
另一种分法按投入排序。只想看形态的,取一段放松段与一段认知段,画两条曲线对比即可,半小时够用;想再做点分析的,把四类状态的窗口特征算出来,做一次受试者内的可分性检查,一天够用;想做完整流程的,写数据加载、做留一划分、跑一个简单分类器、报告混淆矩阵,一周够用。三档投入对应的产出差别很大,但没有一档需要先解决大规模存储或分布式训练的问题。
9.2 一条最短的可用流程
从零到第一个可解释的结果,下面这条链路是最短的。它不做特征选择,不做超参搜索,只回答一个问题:四类状态在腕上信号里到底有没有可分性。
#-- 最短流程:装依赖、取数据、跑留一受试者、打印混淆矩阵
python3.11 -m pip install wfdb numpy scikit-learn
mkdir -p noneeg/1.0.0 && cd noneeg/1.0.0
base="https://physionet.org/files/noneeg/1.0.0"
curl -sSLO "$base/RECORDS"
while read -r rec; do
curl -sSLO "$base/${rec}.hea"
curl -sSLO "$base/${rec}.dat"
curl -sSLO "$base/${rec}.atr"
done < RECORDS
python3.11 -c "import wfdb; print(wfdb.rdheader('Subject01_AccTempEDA').fs)"
跑完之后你应该得到一个采样率数字。这个数字是整条链路的第一道验证:如果它等于零或者报错,说明文件没下全,后面的所有步骤都不必开始。
9.3 引用方式
引用的规矩很简单:数据与方法分开引,平台另给一条标准引用。三者的对象不同,缺一条在 formal 场景里都算不完整。
#-- 引用模板(BibTeX 形式,字段按需补齐)
@inproceedings{birjandtalab2016noneeg,
title = {A Non-EEG Biosignals Dataset for Assessment and Visualization of Neurological Status},
author = {Birjandtalab, Javad and Cogan, Diana and Baran Pouyan, Maziyar and Nourani, Mehrdad},
booktitle = {2016 IEEE International Workshop on Signal Processing Systems (SiPS)},
pages = {110--114},
year = {2016},
doi = {10.1109/SiPS.2016.27}
}
数据本体的引用要带上版本号与 DOI,10.13026/C26Q2Z;平台引用用 PhysioNet 的标准引用格式。三者并列时,建议顺序是数据、方法、平台,因为最先需要知道的是「数据从哪来」。
§10 AI 使用声明
本页由千方医数集编辑部组织撰写,事实以官方项目页为准,未做二次采集。下表说明各环节的处理方式,供复核时对照。
| 环节 | 处理方式 |
|---|---|
| 事实来源 | 只采信 PhysioNet 项目页与论文题录 |
| 数字口径 | 官方给的照录,推算的标注为推算 |
| 未核实项 | 明确标为未核实,不用估计值填充 |
| 阶段数分歧 | 两种数法并列,不替官方裁定 |
| 许可表述 | 照录 ODC-BY 1.0 全称 |
| 图表 | 全部为文字表格,无外部图片 |
| 代码 | 均为可运行示例,未在本次流程中执行 |
| 更新责任 | 官方升版后需重新核对结构与规模 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 这是脑电数据的一个变体 | 全库没有任何头皮电生理信号 | 官方页写明五路信号为皮肤电、温度、加速度、心率、血氧 |
| 名字里的 EEG 表示含脑电 | Non-EEG 是「不含脑电」的否定式命名 | 官方页标题与正文首句 |
| 有二十小时以上的记录 | 每人约三十七分钟,二十人合计约十二小时 | 八段时长相加 |
| 标签是逐秒的 | 只有阶段转换点,一份 .atr 文件 | 官方页对标注文件的描述 |
| 血氧是逐拍波形 | 以数值形式记录,无参考波形 | 官方页把血氧与心率并列为第二份记录 |
| 有年龄性别等人口学字段 | 官方页未列出,字段清单未核实 | 项目页只写健康受试者 |
| 采样率是公开的 | 页面未出现,须读 .hea | 项目页全部文本 |
| 有官方训练测试划分 | 无划分、无基线、无评测脚本 | 项目页未列任何脚本 |
| 八个阶段各五分钟 | 四十秒的迷你情绪段与六分钟的情绪段是例外 | 官方分段时长 |
| 所有段落顺序可随机化 | 顺序固定,时间与状态共线 | 官方按序描述八段 |
FAQ
Q1:它到底是脑电数据集吗?
不是。名字里的 Non-EEG 是「不含脑电」的意思,全库没有一路头皮电极信号。它记录的是腕上的皮肤电、体温、三轴加速度、心率与血氧五路外周信号。
Q2:一共多少受试者、多长时间?
20 名健康受试者,每人一条连续记录。按官方给出的八段时长相加,每人约三十七分钟,全库合计约十二小时。官方页没有直接给出总时长,这个数由分段相加而来。
Q3:采样率是多少?
官方页没有公布。五路信号分装在两份记录里,文件体积相差约二十倍,说明两份记录的采样安排不同。准确数值必须读各自的 .hea 头文件。
Q4:为什么叫「神经状态」而不是「情绪」?
因为三位作者的目标是判断与神经系统活动相关的状态类别,而不是心理学意义上的情绪维度。四类里既有体力与认知,也有情绪与放松,它们共同点是对自主神经系统有可测的影响。
Q5:阶段标签是逐秒的还是打点的?
打点的。每人一份 .atr,记录阶段转换的时间位置与标签。要切成样本,需要自己按转换点做区间填充,并把跨边界的窗口剔除。
Q6:能不能直接用二十人训练一个上线模型?
不建议。二十人不足以覆盖个体差异,且阶段顺序固定,模型很容易学到时间位置而不是生理状态。它更适合做管线验证与协议对照。
Q7:有没有官方的标签中英文对照表?
没有。官方页按叙述方式列出阶段,没有给标签字符串的正式词表。实际标签以你从 .atr 里读出的字符串为准。
Q8:为什么有一段只有四十秒?
那是把倒数七的规则念给受试者的四十秒。官方脚注说得很清楚:原本不打算单独计数,但它在不少受试者身上诱发了肉眼可见的应激反应,于是单独记了下来。
Q9:设备型号是什么?
官方页只写「非侵入式腕戴生物传感器」,没有给型号、量程与佩戴手别。要做跨设备研究,这一项缺失是硬伤。
Q10:可以直接商用吗?
许可为 ODC-BY 1.0,允许商用与再分发,条件是署名。署名需同时给出论文与 PhysioNet 的标准引用。
Q11:为什么下载会失败?
官方页在部分司法辖区会显示数据因法律或政策限制不可用,此时目录可浏览但文件不可下。这是访问层面的限制,与许可条款是两件事。
Q12:它和后来的可穿戴应激库能比吗?
能比协议,不能比性能。后来的库人数更多、设备更新,但四类状态串进同一条时间线的设计,本库仍是一个清晰的参照点。
术语表
| 术语 | 释义 |
|---|---|
| Non-EEG | 不含脑电,指采集环节不使用头皮电极 |
| EDA | 皮肤电活动,反映汗腺活动的电学变化 |
| SpO2 | 动脉血氧饱和度,以百分比表示的数值 |
| HR | 心率,此处以数值而非逐拍波形记录 |
| 三轴加速度 | 三个互相垂直方向的加速度分量 |
| WFDB | 生理信号的标准文件格式与工具链 |
| .hea | 头文件,记录采样率、通道名、增益与量程 |
| .dat | 数据文件,存放采样值 |
| .atr | 标注文件,存放时间点与标签 |
| RECORDS | 记录清单,逐行列出记录名 |
| ANNOTATORS | 标注器声明文件,说明标签由谁产生 |
| SHA256SUMS | 校验和清单,用于确认文件完整 |
| 阶段转换点 | 从一个实验段进入下一个实验段的时间位置 |
| 区间填充 | 把打点标签展开成逐秒或逐窗类别 |
| 留一受试者 | 每次留一名受试者做测试,其余做训练 |
| 受试者泄漏 | 同一人的样本同时进入训练与测试 |
| 迷你情绪应激 | 朗读任务说明的四十秒,官方单独列出 |
| 色词任务 | 读出颜色词并说出墨水颜色,制造认知冲突 |
| 倒数七 | 从固定数字起每次减七的连续心算 |
| 体力应激 | 站立与跑步机行走或慢跑构成的负荷 |
| 情绪应激 | 预告加恐怖题材影片片段构成的唤醒 |
| 基线 | 第一次放松段提供的静息参照 |
| 恢复曲线 | 应激后放松段里信号回落的形态 |
| 伪迹 | 非目标生理过程造成的信号污染 |
| ODC-BY 1.0 | 开放数据署名许可,允许商用需署名 |
| DOI | 数字对象标识,用于稳定引用 |
附录 A:核心数字核对表
| 项 | 值 | 来源与层级 |
|---|---|---|
| 受试者数 | 20 | 官方页正文,一级 |
| 阶段数 | 正文称七,列出八条 | 官方页正文,一级(两口径并存) |
| 单人时长 | 约三十七分钟 | 八段相加,推算 |
| 全库时长 | 约十二小时 | 单人时长乘二十,推算 |
| 记录数 | 每人两份,共四十份 | 官方页正文,一级 |
| 标注数 | 每人一份,共二十份 | 官方页正文,一级 |
| 信号类数 | 五类 | 官方页正文,一级 |
| 加速度记录体积 | 178.1 KB(Subject10) | 官方目录页,一级 |
| 血氧心率记录体积 | 8.9 KB(Subject10) | 官方目录页,一级 |
| 记录清单体积 | 742 字节 | 官方目录页,一级 |
| 采样率 | 未公布 | 官方页缺失,未核实 |
| 设备型号 | 未公布 | 官方页缺失,未核实 |
| 许可 | ODC-BY 1.0 | 官方页,一级 |
| 论文页码 | 110 至 114 | 官方页引用信息,一级 |
附录 B:数字的来源分层
三层口径必须分开看,混用是错误的主要来源。
第一层是官方页面直接给出的数:二十人、五类信号、八段协议、每段时长、文件体积、许可与 DOI。这些数可以直接引用,出处写明项目页即可。
第二层是由官方数字推算出来的数:单人三十七分钟、全库十二小时、四十份记录。推算过程简单,但仍然是推算,写作时要标明算法,不能让人误以为是官方口径。
| 层级 | 包含哪些数 | 使用建议 |
|---|---|---|
| 官方明示 | 人数、信号类、分段时长、文件体积、许可 | 直接引用,标注项目页 |
| 推算得出 | 单人总时长、全库总时长、记录总数 | 写明算法,不单独作结论 |
| 未核实 | 采样率、设备型号、人口学字段、标签词表 | 一律标未核实,不用估计值填充 |
第三层是未核实项。这一层最容易被填上看似合理的估计值,而一旦填了,整篇的可信度就都打折。本页对这三项一律留白。
附录 C:完整参考文献
- Birjandtalab J, Cogan D, Baran Pouyan M, Nourani M. A Non-EEG Biosignals Dataset for Assessment and Visualization of Neurological Status. 2016 IEEE International Workshop on Signal Processing Systems (SiPS), Dallas, TX, 2016: 110-114. doi:10.1109/SiPS.2016.27
- PhysioNet. Non-EEG Dataset for Assessment of Neurological Status, version 1.0.0. 2017-07-19. doi:10.13026/C26Q2Z
- Pollard T, Moody BE, Lehman L, Gow B, Fernandes C, Xie C, Johnson A, Mark RG, Heldt T. PhysioNet as a global platform for biomedical research. Nature Health, 2026: 792-795. doi:10.1038/s44360-026-00096-z
- Goldberger A, Amaral L, Glass L, Hausdorff J, Ivanov PC, Mark R, et al. PhysioBank, PhysioToolkit, and PhysioNet: components of a new research resource for complex physiologic signals. Circulation, 2000, 101(23): e215-e220.
附录 D:任务代码
第一段代码处理标签字符串。官方没有给标签词表,实际字符串可能带括号或空字符,这一步必须做得足够宽容。
#-- 标签清洗:剥除括号与空字符,输出全库出现过的标签集合
import glob
import wfdb
seen = set()
for path in glob.glob("noneeg/1.0.0/*.atr"):
ann = wfdb.rdann(path[:-4], "atr")
for note in ann.aux_note:
seen.add(note.strip("()\x00").strip())
for name in sorted(seen):
print(repr(name))
第二段代码做一次按段统计,确认每段的实际秒数与官方时长是否吻合。差异超过一成时,说明该受试者中途有中断。
#-- 按段统计实际时长,与官方时长核对
import collections
import numpy as np
import wfdb
base = "noneeg/1.0.0/Subject10"
ann = wfdb.rdann(base, "atr")
fs = wfdb.rdheader(base + "_AccTempEDA").fs
total = wfdb.rdheader(base + "_AccTempEDA").sig_len / fs
edges = list(ann.sample / fs) + [total]
for i in range(len(edges) - 1):
print(ann.aux_note[i].strip("()\x00").strip(), round(edges[i + 1] - edges[i], 1), "秒")
第三段代码给出一个最小的特征集,只取每个窗口的四个通道均值与一个方差,用于快速验证可分性。
#-- 每窗五个统计量:四个通道均值加加速度方差
import numpy as np
import wfdb
rec = wfdb.rdrecord("noneeg/1.0.0/Subject10_AccTempEDA")
X = rec.p_signal
fs = rec.fs
win, step = 30 * fs, 15 * fs
feat = []
for s in range(0, len(X) - win, step):
seg = X[s:s + win]
feat.append([*seg.mean(axis=0), seg[:, :3].std(axis=0).mean()])
print(np.array(feat).shape)
附录 E:如果只记五件事
第一,名字是「不含脑电」,不是脑电的变体,全库零头皮电极。
第二,规模是二十人、每人约三十七分钟、五类信号,合计约十二小时,小到可以做验证,小到不能下结论。
第三,标签只有阶段转换点,没有逐秒真值、没有行为学指标,窗口化要自己做。
第四,八段协议是它真正的价值:三类应激被四段放松隔开,顺序固定既是设计优点也是评测陷阱。
第五,许可宽松、体量极小、格式标准,这让它成为入门与教学的首选,也注定了它只是一个起点。
编辑说明
本页事实核对以 PhysioNet 项目页(content 路径,HTTP 200)为主源,辅以 2016 年 SiPS 论文的题录信息与官方目录页所列文件体积。文件本体在本次访问环境中返回 403,页面提示所在地区受法律或政策限制,因此采样率、设备型号与受试者信息表字段均未取得,相关项一律标注为未核实,未用估计值填充。
阶段数存在两种口径:正文写七个阶段,随后列出八条,官方脚注解释了其中四十秒那一段的来源,本页两说并列,不做裁定。单人时长与全库时长由八段时长相加得出,已在正文标明为推算。受试者信息表的具体字段、标签词表的正式写法,均需在取得文件后补充核对。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- c-elegans-wholebrain-calcium — 共享标签:生理信号 / 时序数据 / 神经科学
- drosophila-wholebrain-2p — 共享标签:生理信号 / 时序数据 / 神经科学
- wearable-exam-stress — 共享标签:生理信号 / 可穿戴传感 / 时序数据 / 神经科学
- bp-graphene-bioimpedance — 共享标签:生理信号 / 可穿戴传感 / 时序数据
- in-gauge-and-en-gage — 共享标签:生理信号 / 可穿戴传感 / 时序数据
- nqmitcsxpd — 共享标签:生理信号 / 可穿戴传感 / 神经科学
- tappy — 共享标签:生理信号 / 可穿戴传感 / 神经科学
- big-ideas-glycemic-wearable — 共享标签:生理信号 / 可穿戴传感 / 时序数据
- mhealth — 共享标签:生理信号 / 可穿戴传感 / 时序数据
- uci-har — 共享标签:生理信号 / 可穿戴传感 / 时序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。

