非脑电的五路腕上信号 — Non-EEG 神经状态库

二十人 / 腕上五路 / 八段协议约三十七分钟

来源 https://physionet.org/content/noneeg/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 12
非脑电的五路腕上信号 — Non-EEG 神经状态库

信息速览

数据集名称非脑电的五路腕上信号 — Non-EEG 神经状态库
数据类型时序信号,波形,元数据,人工标注
规模20 名健康受试者 / 每人两份 WFDB 记录与一份标注
接入方式https://physionet.org/content/noneeg/1.0.0/

这个库的名字容易被读反。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:完整参考文献

  1. 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
  2. PhysioNet. Non-EEG Dataset for Assessment of Neurological Status, version 1.0.0. 2017-07-19. doi:10.13026/C26Q2Z
  3. 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
  4. 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 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

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

需要更高工程化程度或合规出域的商业版本?

当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。

前往商城查看可交易产品 →
返回 AI-Ready 数据集