信息速览
自主神经管的是那些不需要你操心的事:站起来时血压别掉、躺下时心率别飙、呼吸之间心跳该快该慢。这套调节能力从成年早期就开始走下坡,到了七八十岁,心率变异性可能只剩年轻时的一小截。问题是这条下坡曲线很难画——它太慢,慢到任何一项横断面研究都得横跨几十岁才看得见形状。
耶拿大学医院心身医学与心理治疗科用十年时间攒了一批横跨 18 到 92 岁的静息记录:一千一百余名自述健康、经体检与实验室筛查排除心血管相关疾病的志愿者,每人平卧采一段心电加连续无创血压,采样率 1000 Hz,单段 8 到 45 分钟。它不提供任何标注,也不提供任何算好的指标,给的是最原始的两路波形和一张六列的人口学表。
这份克制既是它的价值也是它的门槛:想做心率变异性、想做压力反射、想做生物年龄,信号都在,但每一步都得自己走;想拿现成标签训练分类器的人,在这里会一无所获。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Autonomic Aging: A dataset to quantify changes of cardiovascular autonomic function during healthy aging |
| 中文通称 | 自主神经衰老数据集 / 心血管自主神经衰老库 |
| 作者 | Andy Schumann、Karl-Jürgen Bär |
| 采集机构 | 耶拿大学医院心身医学与心理治疗科 LANIC 实验室(德国耶拿) |
| 发布平台 | PhysioNet,2021 年 7 月 30 日,版本 1.0.0 |
| 配套论文 | Scientific Data,2022 年,DOI 10.1038/s41597-022-01202-y |
| 数据 DOI | 10.13026/2hsy-t491(v1.0.0) |
| 受试者 | 1,121 名健康志愿者,18–92 岁,女性 670、男性 433 |
| 年龄结构 | 平均 32.5 ± 14.7 岁,泛化为十五个年龄组 |
| 每段内容 | II 导联心电(部分含 I 导联)+ 指端连续无创血压 |
| 采样率 | 心电 1000 Hz;血压原始 100 Hz,插值后统一到 1000 Hz |
| 单段时长 | 官方项目页:平均 19 分钟,区间 8–45 分钟 |
| 标注 | 无。无心拍、无节律、无派生指标 |
| 元数据 | subject-info.csv 六列:编号、年龄组、性别、BMI、时长、设备 |
| 文件格式 | WFDB:.hea 文本头 + .dat 二进制波形 |
| 体量 | 解压后 5.9 GB,整包 ZIP 5.2 GB |
| 许可 | ODC-ODbL 1.0,免注册 |
§1 它要解决的具体麻烦
1.1 衰老是慢变量,横断面研究只能靠人海
心率变异性随年龄下降这件事,教科书上写了四十年,但要把曲线画准,难点不在算法而在样本。一个人从二十五岁到七十五岁,心率变异性会掉一大截,可这五十年里任何一次测量只是一个点。纵向随访要等五十年,没人等得起;退而求其次的做法是横断面——同一时间点上找一批不同年龄的人,每人测一次,把点连起来当曲线。
这条路有两个陷阱。第一个是健康定义:老年人身上多多少少带着高血压、糖尿病、正在吃的β受体阻滞剂,这些都会压低心率变异性。如果筛得不严,测出来的"衰老效应"里混着大量疾病与药物效应,曲线会被夸大。第二个是年龄覆盖:大学附属医院最容易招到的是二十几岁的学生和三十几岁的职工,六十岁以上的人难招,八十岁以上更难,于是曲线的高龄端总是稀疏的,越是要紧的地方越没有点。
这份数据在这两件事上都下了功夫。排除标准写得很硬:任何可能影响心血管功能的疾病、违禁药物或用药一律排除,体检、静息心电图、电解质与血常规都必须无异常。年龄覆盖做到了 18 到 92 岁,末端还留下了 85 岁以上的组。
代价是入组十年、只攒下一千一百余人。这个规模在深度学习时代不算大,但在"严格健康筛选 + 全年龄段覆盖"这个约束下已经很难得——它不是靠规模取胜的库,是靠入组质量取胜的库。
1.2 三条常见的错误期待
第一条,期待它像 MIMIC 或 PTB-XL 那样"开箱即用"。它没有诊断标签、没有节律标签、没有心拍位置,连 R 峰都没标。打开 .dat 你拿到的是一串 16 位整数,得先除以头文件里的增益才知道是毫伏。所有任务都要自建标签,这是它最容易被低估的门槛。
第二条,期待它包含完整的自主神经试验组合。很多自主神经功能评估的标准流程是"静息 + 深呼吸 + 瓦氏动作 + 站立",四项各有各的指标。这份数据只有第一项。它是静息库,不是自主神经功能全套检查库。
第三条,期待它的年龄可以直接当回归目标。年龄已经被泛化成十五个组了。你可以拿组编号做有序分类,可以拿组中点做粗略回归,但不能声称自己在做"逐岁预测"——误差下限就是组宽的一半。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 年龄对心率变异性的横断面曲线 | 全年龄段、严格健康筛选、统一静息协议 | 够,这是它设计出来要回答的问题 |
| 压力反射敏感度的自发估计 | 心电与逐拍血压同步,可直接做序列法 | 够做自发 BRS,做不了激发态 BRS |
| 心电与血压的耦合分析 | 两路同源、同频、同时间轴 | 够,且对齐质量优于多数公开库 |
| 心拍级或节律级分类 | 没有任何标注 | 不够,须全套自建 |
| 逐岁生物年龄回归 | 只有十五个年龄组 | 部分够,量化误差至少半个组宽 |
| 高龄人群的稳健建模 | 八十岁以上样本很少 | 不够,尾部统计功效低 |
| 多中心泛化验证 | 单一中心、单一国家 | 不够,只能做跨库而非跨中心 |
| 动态血压或夜间血压 | 只有白天平卧一段 | 不够,无昼夜覆盖 |
| 药物或干预效应 | 无用药记录、无随访 | 不够,连用药名单都没有 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你要论证某个 HRV 指标随年龄下降,但手上的库年龄偏窄 | 提供 18 到 92 岁的连续覆盖,且健康筛选严格 | 先用年龄组做非参数趋势检验,再考虑拟合;不要假设线性 |
| 你在做无袖带血压算法,需要一个"有真实动脉压参考"的评测集 | 指端连续血压经肱动脉示波法标定,与心电同步 | 注意它是指端容积夹持法,不是桡动脉张力法,波形形态有差异 |
| 你想验证心电与血压的耦合指标(如相位同步) | 两路信号同频同源,无需做时间对齐 | 先检查 NaN 缺口,剔掉重新标定的片段再算耦合 |
| 你在做生物年龄模型,缺一个心血管通路的标签源 | 年龄组可作为有序标签,人群健康度高、混杂少 | 用组中点做软标签,并在报告中说明量化误差 |
| 你只有单导联可穿戴数据,想找高采样率参考 | 1000 Hz 心电,可降采样到任意目标频率 | 降采样后重算一遍指标,确认结果对带宽不敏感 |
| 你要教心率变异性的时频分析 | 干净静息段足够长,适合演示 Welch 与 AR 谱 | 挑一段无缺口记录,先做 RR 校正再演示 |
| 你在复现某篇自主神经衰老论文 | 原始信号齐全,可逐段重算 | 先对齐论文的预处理口径,否则数字对不上 |
1.5 一句话判断
它不提供任何结论,只提供画曲线所需的横轴与纵轴:横轴是十五个年龄组,纵轴是两路未经加工的高采样率波形,剩下的活全是你的。
1.6 不适合谁:四条边界
不适合想要标签的人。 没有心拍、没有节律、没有诊断,连一次 QRS 检测都没做过。任何监督学习任务都要从零标注,标注成本可能高于数据本身的价值。
不适合做激发态自主神经评估。 只有平卧静息一段。倾斜试验、瓦氏动作、握力试验、深呼吸比值这些经典项目一个都没有,做不了压力反射的激发增益,也做不了体位性低血压研究。
不适合做高龄人群的精细建模。 平均年龄 32.5 岁,样本重心明显偏年轻。八十岁以上虽有覆盖,但人数少,任何按年龄分层的结果在高龄端都会宽得没有信息量。
不适合做多中心泛化。 全部来自耶拿一家机构,连设备都只有两套、都出自同一家厂商。跨中心差异在这里无法体现,用它训练出的模型换到别的中心,性能下降有多少说不清。
§2 数据构成与规格
2.1 一千一百多个二文件包加一张表
仓库的组织方式极简:每名志愿者对应两个同名文件,.hea 是纯文本头,.dat 是二进制波形;全部记录共用一张 subject-info.csv。没有目录分层,没有分组子文件夹,没有额外的标注目录。解压后所有文件平铺在同一层。
| 文件 | 数量 | 内容 | 是否必需 |
|---|---|---|---|
NNNN.hea |
与记录数相同 | ASCII 头:信号条数、采样率、采样点数、每路增益与基线 | 必需,缺了无法还原物理单位 |
NNNN.dat |
与记录数相同 | 16 位无符号整数序列,按采样点交错存放各路信号 | 必需 |
subject-info.csv |
1 | 六列人口学与记录属性,含表头共一千一百二十二行 | 强烈建议,缺了没有年龄与分组 |
| 项目说明页 | 1 | HTML,非文件 | 协议、排除标准、年龄组定义 |
编号 0001 至 1121 是随机重排后的伪名,与入组顺序无关,也不含任何地理或时间信息。这一点在合并外部数据时要注意:不能假设编号相邻的人采集时间也相邻。
2.2 六列元数据与两路信号的完整字典
subject-info.csv 只有六列,是整个数据集全部的结构化信息。官方项目页给出的码表与文件实际内容一致,逐列如下。
| 列名 | 类型 | 取值 | 含义与注意点 |
|---|---|---|---|
ID |
四位字符串 | 0001–1121 | 与 .hea/.dat 文件名一致,前导零有意义 |
Age_group |
整数 | 1–15 | 年龄组编号,非年龄。1 组为 18–19 岁,中间各组跨五岁,15 组为 85–92 岁 |
Sex |
整数 | 0 或 1 | 0 为男性,1 为女性。注意与常见编码相反 |
BMI |
整数或小数 | 十几到三十几 | 体质指数,单位 kg/m²,由现场身高体重计测得 |
Length |
整数 | 8–45 | 记录时长,单位分钟,取整 |
Device |
整数 | 0 或 1 | 0 为 Task Force Monitor,1 为 CNAP 500 联合 MP150 |
年龄组与岁数的对应关系是这份数据里最容易被记错的一张表。它不是等宽的:首组只有两岁,末组跨八岁,中间十三组各五岁。
| 组号 | 岁数区间 | 组宽 | 备注 |
|---|---|---|---|
| 1 | 18–19 | 2 岁 | 唯一位于成年前后的窄组 |
| 2 | 20–24 | 5 岁 | 样本最密集的区间之一 |
| 3 | 25–29 | 5 岁 | — |
| 4 | 30–34 | 5 岁 | — |
| 5 | 35–39 | 5 岁 | — |
| 6 | 40–44 | 5 岁 | — |
| 7 | 45–49 | 5 岁 | — |
| 8 | 50–54 | 5 岁 | — |
| 9 | 55–59 | 5 岁 | — |
| 10 | 60–64 | 5 岁 | — |
| 11 | 65–69 | 5 岁 | — |
| 12 | 70–74 | 5 岁 | — |
| 13 | 75–79 | 5 岁 | — |
| 14 | 80–84 | 5 岁 | — |
| 15 | 85–92 | 8 岁 | 唯一的宽尾组 |
信号本身没有列名表,通道名写在 .hea 里。两套设备产生的通道不完全相同,这是必须提前知道的事。
| 通道名 | 出现条件 | 物理量 | 单位 | 采样率 |
|---|---|---|---|---|
ECG1 |
仅 TFM 记录 | 心电 I 导联 | mV | 1000 Hz |
ECG2 |
仅 TFM 记录 | 心电 II 导联 | mV | 1000 Hz |
ECG |
仅 MP150 记录 | 心电 II 导联 | mV | 1000 Hz |
NIBP |
全部记录 | 指端连续动脉压 | mmHg | 1000 Hz(原始 100 Hz 插值) |
通道命名的不一致看着是小问题,实际会绊人:写通用读取脚本时如果按名字取 ECG2,遇到 MP150 记录就会直接报通道不存在。稳妥的写法是按位置取第二路之前的全部信号,或者先读头文件再决定。
2.3 一条记录的完整解剖
以 0001 号记录为例,头文件只有四行,却把重建物理量所需的信息全写齐了。
0001 3 1000 900401
0001.dat 16 23356.8192(1481)/mV 16 0 5833 -20492 0 ECG1
0001.dat 16 50596.9407(-13216)/mV 16 0 -15951 -13487 0 ECG2
0001.dat 16 936.0181(-126035)/mmHg 16 0 -20028 -6578 0 NIBP
第一行四个数依次是记录名、信号条数、采样率、采样点数。900401 个采样点在 1000 Hz 下等于 900.4 秒,约十五分钟,与人口学表里 Length 的 15 对得上。
后三行是信号描述,字段顺序固定:文件名、存储位宽、增益(基线)/单位、位宽、零值、首采样整数、校验和、零值、信号名。换算回物理量的公式是 (原始整数 − 基线) / 增益。以第二路为例,增益 50596.9407、基线 −13216,意味着一个毫伏对应约五万个整数单位,量化分辨率约 0.02 微伏——这个精度远高于临床需要,是为后续做高频心电分析留的余量。
对应的表行同样简短:
0001,2,1,23,15,0
组号 2 表示 20–24 岁,性别 1 表示女性,BMI 23,时长 15 分钟,设备 0 表示 Task Force Monitor。把这两段文本拼起来,就构成了这份数据能告诉你的全部——没有诊断、没有用药、没有吸烟史、没有采血结果。
再看 0006 号,它是另一套设备的样本,结构差异一眼可见:
0006 2 1000 920744
0006.dat 16 27857.7948(-14289)/mv 16 0 -12240 -31852 0 ECG
0006.dat 16 1141.6364(-89938)/mmHg 16 0 -18274 1585 0 NIBP
只有两路信号,心电通道直接叫 ECG,单位写成小写 mv。920744 个采样点折合 920.7 秒,而表里 Length 记的是 15——说明这一列是取整后的分钟数,不能反推精确时长。要精确秒数,永远从头文件的首行去算。
2.4 两套采集设备的对照
设备差异不只是通道数,它贯穿了整个测量链路。理解这张表,才能理解为什么设备编码必须进模型。
| 维度 | TFM(编码 0) | CNAP 500 联合 MP150(编码 1) |
|---|---|---|
| 全称 | CNSystems Task Force Monitor | CNSystems CNAP 500 + BIOPAC MP150 |
| 电极数 | 4 枚,右臂、左臂、左腹、右腹 | 3 枚,右锁骨下、左胸第七肋间、胸骨 |
| 心电导联 | I 导联与 II 导联同步,两路 | 仅 II 导联,一路 |
| 心电采样 | 1000 Hz | 1000 Hz |
| 血压通路 | 主机内置连续血压模块 | 外接监护仪,经 MP150 数字化 |
| 血压原始采样 | 100 Hz | 100 Hz |
| 标定方式 | 初始化时一次示波法肱动脉测量 | 同左,精度标注 ±3 mmHg |
| 样本量 | 六百二十一名 | 五百名 |
两套系统都出自同一家奥地利厂商,血压都是血管卸载法——指端袖带被伺服控制维持恒定压力,光电容积描记的容积变化在恒压下正比于指动脉压力,再按初始化的肱动脉读数映射成绝对血压。方法相同,但模拟前端、滤波器、数模转换路径不同,逐拍波形的细节会有系统性差异。
2.5 与同类资源的字段差异
把它和库里其他心电、血压类资源摆在一起,字段层面的差别很直观。
| 资源 | 人数量级 | 每段时长 | 血压 | 标注 | 年龄粒度 |
|---|---|---|---|---|---|
| 本库 | 一千一百余 | 平均十九分钟 | 连续无创,逐拍 | 无 | 十五个组 |
| Fantasia | 四十 | 两小时 | 无 | 无 | 青年/老年两组 |
| INCART | 三十二 | 三十分钟 | 无 | 逐搏 | 逐岁 |
| PTB-XL | 两万余 | 十秒 | 无 | 诊断语句 | 逐岁 |
| PulseDB | 五千余 | 数十秒至数分钟 | 有创或袖带校准 | 分段标签 | 逐岁 |
| 丙泊酚自主神经库 | 九 | 分阶段 | 无 | 阶段标签 | 逐岁 |
差别集中在三处:一是它把"连续血压"当成一等公民,而不是附带;二是它的年龄是区间而非数值;三是它没有任何标注。这三点决定了它只能进"指标计算"这条流水线,进不了"波形分类"那条。
§3 它站在哪条学术脉络上
3.1 把衰老变成一个可测量的数
心血管自主神经功能这个词听着抽象,量化路径其实很收敛:看心率在时间上的波动有多大(时域),看在哪些频率上波动(频域),看血压升高时心率是否跟着降(压力反射),看血压自身的波动(血压变异性)。这四五类指标合起来,就是一份自主神经的体检报告。
这份数据的设计逻辑正是围绕这条路径。它选静息、选长段、选高采样率,都是为了把这几个量算准:静息保证不受体位与运动干扰,长段保证频域分析有足够的分辨率(十分钟以上的稳定段才能把低频段分清楚),高采样率保证 R 峰定位足够精确(RR 间期误差直接进入所有时域指标)。
3.2 为什么静息一段就够了
这句话只对一半。静息一段能回答"基线调节能力有多强",回答不了"面对扰动时调节有多快"。前者是增益,后者是动态响应。衰老同时影响两者,但影响的方式不同:增益随年龄单调下降,动态响应的退化更复杂,往往要到一定年龄才显现。
作者的取舍是明确的:宁可要一千人的基线,不要一百人的全套。这个取舍让数据在"画曲线"这件事上很强,在"刻画动态"这件事上很弱。使用前想清楚自己要的是哪一个。
3.3 它继承的测量传统
血管卸载法不是新技术,1970 年代就有了原型,1990 年代随 Finapres 系列进入研究现场。它的价值在于逐拍——袖带法几十秒才出一个数,逐拍法能看到每一搏的波动,这是压力反射与血压变异性研究的前提。代价是指端血管的收缩状态会影响读数,天冷、紧张、手没放平都会引入偏差。
心电侧的传统更老:II 导联、埃因托芬三角、银氯化银一次性电极,这套配置几十年没变过。1000 Hz 的采样率是个偏高的选择,多数 Holter 是 200 到 400 Hz。高采样率对 RR 间期精度有实际好处——R 峰定位误差与采样间隔成正比,1000 Hz 下理论分辨率是 1 毫秒,250 Hz 下是 4 毫秒。对 SDNN 这类毫秒级指标,这个差别不可忽略。
3.4 与生物年龄研究的关系
这批数据在 2022 年之后被反复用于一个具体问题:能不能用心血管指标反推年龄。逻辑很直白——如果自主神经功能随年龄稳定退化,那么从功能指标应该能估出年龄;估出来的值与真实年龄之差,就是所谓的"自主神经年龄差",可以当作加速衰老的代理指标。
| 研究 | 样本 | 指标数 | 方法 | 主要结论 |
|---|---|---|---|---|
| Scientific Data 2022 数据描述 | 一千一百二十一 | 三项示例 | 工具箱计算 | SDNN 随年龄下降,RMSSD 与减速容量在五十岁后趋平 |
| Frontiers in Aging Neuroscience 2022 | 八百八十四入模,七十二肥胖者留出 | 二十九项 | 四种回归对比 | 高斯过程回归最优,相关系数 0.81,平均绝对误差 5.6 岁 |
| AJP-Heart 2025 | 一千零六十 | 二十九项 | 高斯过程回归 | 提出自主神经年龄差,高风险组差值约十一年 |
这张表说明一件事:数据本身不含指标,但指向的指标空间是明确的、可复现的。二十九项这个数字来自下游论文,不是官方字段清单,用它当特征模板要注明出处。
§4 信号质量与协议约束
4.1 干净到什么程度
采集环境被控制得比多数临床研究严:室温 22 摄氏度、完全遮光、间接光源恒定照度、绝对安静。受试者平卧后,操作者先等几分钟让其平静,检查信号质量,电极或袖带位置不佳就重贴,确认可用才开始记录。记录全程有人值守。
这套流程换来的是低噪声的静息段。把它和 Holter 类数据比,差别是数量级的:没有走动、没有翻身、没有电极牵拉,基线漂移主要来自呼吸,肌电干扰主要来自偶尔的吞咽。对需要长稳定段的频域分析,这是实打实的优势。
4.2 协议约束带来的三个限制
第一,没有扰动。受试者被要求避免移动、打哈欠、咳嗽,也就意味着没有体位改变、没有等长握力、没有节律呼吸。经典的压力反射敏感度测定里,最常用的两种激发是药物法(静脉给苯肾上腺素或硝普钠)与倾斜法,这里都做不了。能做的只有自发序列法——从自然的血压波动里挑出"血压升、RR 延长"的连续三拍以上序列,用斜率当增益估计。自发法的数值通常低于激发法,跨研究比较时口径必须统一。
第二,没有昼夜。所有记录都在白天实验室完成,最长四十五分钟。夜间血压下降、清晨血压 surge 这些现象完全看不到,做昼夜节律或动态血压研究的人不用考虑它。
第三,没有状态标记。记录中不标注受试者何时入睡、何时深呼吸、何时说话。虽然协议要求安静平卧,实际记录里仍会有零星的动作与吞咽,而没有任何事件标记可以定位它们。做伪迹剔除只能靠信号本身。
4.3 案例:0001 与 0006 这对镜像记录
把 0001 与 0006 放在一起看,能一次性看清这份数据的两副面孔。两段都是十五分钟、都是女性、BMI 都在二十出头,唯一的大差别是设备:0001 走 TFM,两路心电加一路血压;0006 走 MP150,一路心电加一路血压。
| 对照项 | 0001 | 0006 |
|---|---|---|
| 年龄组 | 2(20–24 岁) | 4(30–34 岁) |
| 性别 | 1(女) | 1(女) |
| BMI | 23 | 21 |
| 时长 | 15 分钟 | 15 分钟(表内取整) |
| 设备 | 0(TFM) | 1(CNAP 500 + MP150) |
| 信号条数 | 3 | 2 |
| 采样点数 | 900401 | 920744 |
| 心电通道名 | ECG1、ECG2 | ECG |
| 心电增益(单位/毫伏) | 约 2.3 万与 5.1 万 | 约 2.8 万 |
| 血压增益(单位/mmHg) | 936 | 1142 |
§4.3 的案例最实用的地方在于它暴露了一个常被忽略的事实:同一份数据里,心电的量化分辨率可以差一倍以上。0001 的 II 导联每毫伏约五万一千个单位,0006 只有约两万八千个。对形态学分析这无关紧要,但对需要亚毫秒级 R 峰定位的研究,两组的等效噪声底不同,混在一起做统计时应当把设备当协变量。
§4.3 的案例还说明时长字段不可尽信。0001 的 900401 点正好是 15.0 分钟,0006 的 920744 点是 15.3 分钟,两者在表里都记 15。做按秒计的负荷统计(比如"每分钟早搏数")时,用表里的整分钟会带入百分之二左右的误差,用头文件点数才准。
4.4 缺失与断点
官方明确说明了一种缺失:记录过程中系统会为重新标定而再次测量肱动脉血压,这段时间连续血压信号中断,缺失点被置为 NaN。也就是说,NIBP 通道里存在成段的全 NaN 区间,长度从几秒到十几秒不等。
这个设计对分析的影响分两种。做全程平均血压,NaN 段直接忽略即可,影响很小;做血压变异性或压力反射,NaN 段必须整段剔除,否则插值会凭空造出一段平直的假信号,把变异性压低。更稳妥的做法是把 NaN 段当作断点,切成若干连续子段,每段单独算再按长度加权合并。
人口学侧的缺失以 NaN 填充。官方论文的统计表给出了缺失计数:年龄缺 25 例,性别缺 2 例,BMI 无缺失。这些数字来自论文表格,不是从数据里数出来的。
4.5 两套设备能不能混
能混,但要分层。设备差异体现在至少三个层面:心电导联数(两路对一路)、心电增益(相差一倍)、血压模拟前端(内置模块对外接监护仪)。前两个影响特征提取,第三个影响血压波形形态。
最稳的做法是把 Device 当成一个必进的协变量。做组间比较时按设备分层;做回归时把设备作为哑变量;做机器学习时把它当特征——虽然它在生理上没有意义,但它在统计上携带了系统性偏移的信息,丢掉它等于把偏移塞进残差。
一个反向的诱惑是"只用一套设备的数据求干净"。这在方法上没错,但会砍掉近一半样本,而且被砍掉的那一半不是随机的一半——两套设备的使用时段不同,可能与招募年份相关。真要这么做,得先验证设备与年龄组之间没有系统性关联。
§5 从波形到指标:一条完整的取数路径
5.1 先把目录拉下来
全量 5.9 GB,整包 ZIP 5.2 GB。只想看结构的话,先取头文件和那张表就够了,几百 KB 的事。
#-- 建立工作目录
mkdir -p aging/data && cd aging/data
#-- 只取元数据表与两条样例记录的头文件,约几 KB
BASE=https://physionet.org/files/autonomic-aging-cardiovascular/1.0.0
curl -sL "$BASE/subject-info.csv" -o subject-info.csv
curl -sL "$BASE/0001.hea" -o 0001.hea
curl -sL "$BASE/0006.hea" -o 0006.hea
#-- 确认行数与列名
head -1 subject-info.csv
wc -l subject-info.csv
#-- 需要全量时再整包下载
curl -sL "https://physionet.org/content/autonomic-aging-cardiovascular/get-zip/1.0.0/" -o aging.zip
如果机器上装了 AWS 命令行工具,走开放存储桶通常比 HTTP 稳:
#-- 无需凭证,直接从开放桶同步
aws s3 sync --no-sign-request \
s3://physionet-open/autonomic-aging-cardiovascular/1.0.0/ ./aging/
5.2 读一段波形
WFDB 官方 Python 包能直接读,也能直接按项目名从云端取,不必先下全量。
#-- 依赖:pip install wfdb numpy
import wfdb
import numpy as np
#-- 直接按项目名远程读取,只拉这一段的 .hea 与 .dat
rec = wfdb.rdrecord('0001', pn_dir='autonomic-aging-cardiovascular/1.0.0')
print(rec.fs) # 1000
print(rec.sig_name) # ['ECG1', 'ECG2', 'NIBP']
print(rec.units) # ['mV', 'mV', 'mmHg']
print(rec.p_signal.shape) # (900401, 3),已按增益换算成物理量
ecg = rec.p_signal[:, rec.sig_name.index('ECG2')]
nibp = rec.p_signal[:, rec.sig_name.index('NIBP')]
#-- 统计 NaN 占比,定位血压断点
nan_ratio = float(np.isnan(nibp).mean())
print(round(nan_ratio, 4))
两点要留意。第一,p_signal 已经把整数按增益与基线换算成毫伏与毫米汞柱,别再做一次换算,否则数值会离谱。第二,sig_name 在不同记录里不一样,TFM 记录有 ECG2,MP150 记录只有 ECG,写死会崩。
5.3 把表读进来并对上号
#-- 读人口学表,注意 ID 是字符串,前导零不能丢
import pandas as pd
info = pd.read_csv('subject-info.csv', dtype={'ID': str})
info = info.set_index('ID')
print(info.columns.tolist()) # ['Age_group', 'Sex', 'BMI', 'Length', 'Device']
print(info.shape) # (1121, 5)
#-- 年龄组换算成区间中点,供粗略回归使用
edges = {1: (18, 19)}
for g in range(2, 15):
lo = 20 + (g - 2) * 5
edges[g] = (lo, lo + 4)
edges[15] = (85, 92)
info['age_mid'] = info['Age_group'].map(lambda g: sum(edges[g]) / 2)
print(info['age_mid'].describe().round(2))
组中点是近似,不是还原。18–19 岁组的真正中点 18.5,把 18 和 19 的人各算一半,误差半岁;末组 85–92 的中点 88.5,误差可达四岁。做逐岁回归时,这个误差会直接变成标签噪声,把模型的决定系数压下来。
5.4 自己找 R 峰
数据没有心拍位置,第一步得自己检测。1000 Hz 下用 Pan-Tompkins 类检测器足够稳,PhysioNet 心血管信号工具箱里的 jqrs 是作者自己在技术验证时用的实现。
#-- 用 scipy 做一个够用的 R 峰检测,仅供流程演示
import numpy as np
from scipy.signal import butter, filtfilt, find_peaks
def detect_r(ecg, fs=1000):
b, a = butter(3, [5, 30], btype='band', fs=fs)
x = filtfilt(b, a, np.nan_to_num(ecg))
#-- 以 0.3 秒为最小间距,避免把 T 波当 R 波
peaks, _ = find_peaks(x, distance=int(0.3 * fs), height=np.percentile(x, 75))
return peaks
rr = np.diff(detect_r(ecg)) / 1000.0 # 秒
print(len(rr), round(float(rr.mean()), 3))
这段代码能跑,但不要把它当最终方案。简易阈值法在基线漂移明显的段会漏检,漏一拍会让 RR 序列出现一个双倍长的间期,直接把 SDNN 拉高。生产流程里要做异位搏动剔除,常用做法是把偏离局部中位数超过一定倍数的间期标记出来,再用插值或直接删除。
5.5 时域与频域指标
#-- 时域:SDNN 与 RMSSD
sdnn = float(np.std(rr, ddof=1))
rmssd = float(np.sqrt(np.mean(np.diff(rr) ** 2)))
print(round(sdnn, 2), round(rmssd, 2))
#-- 频域:把 RR 按时间戳重采样成等间隔序列再做 Welch
from scipy.signal import welch
from scipy.interpolate import interp1d
t_rr = np.cumsum(rr)
f_interp = interp1d(t_rr, rr, kind='cubic', fill_value='extrapolate')
t_uni = np.arange(t_rr[0], t_rr[-1], 0.25)
rr_uni = f_interp(t_uni)
f, pxx = welch(rr_uni, fs=4.0, nperseg=256)
lf = pxx[(f >= 0.04) & (f < 0.15)].sum()
hf = pxx[(f >= 0.15) & (f < 0.40)].sum()
print(round(float(lf / hf), 3)) # LF/HF 比
LF/HF 这个比值的解释在文献里一直有争议,用它的时候最好同时报告 LF 与 HF 的绝对值,不要只给一个比值。另外频段边界不统一:有人把 LF 下界设在 0.04 Hz,有人设在 0.03 Hz,跨研究比较前先对齐。
5.6 压力反射敏感度
自发序列法的思路简单:找连续三拍以上,血压持续升(或降)且 RR 持续延长(或缩短)的片段,对每段做线性回归,斜率即该段的 BRS,单位毫秒每毫米汞柱。全部合格段的斜率取中位数,就是这一段的 BRS 估计。
#-- 序列法估计 BRS:扫描连续三拍以上的同向片段
import numpy as np
def brs_sequence(sbp, rr, min_len=3, min_slope=0.0):
slopes = []
n = min(len(sbp), len(rr))
i = 0
while i < n - min_len:
for L in range(min_len, 9):
if i + L >= n:
break
d_bp = np.diff(sbp[i:i + L + 1])
d_rr = np.diff(rr[i:i + L + 1])
up = (d_bp > 0).all() and (d_rr > 0).all()
dn = (d_bp < 0).all() and (d_rr < 0).all()
if not (up or dn):
break
k = np.polyfit(sbp[i:i + L + 1], rr[i:i + L + 1], 1)[0]
if k > min_slope:
slopes.append(k)
i += 1
return float(np.median(slopes)) if slopes else float('nan')
print(brs_sequence(nibp_sys, rr))
这段代码演示的是骨架,三点必须补齐才能用于研究:一是 nibp_sys 要自己从连续血压波形里取每一搏的收缩压,需要先做逐拍分割;二是要设置最小血压变化幅度(常见阈值是 1 mmHg)过滤噪声触发的假序列;三是要把 RR 与收缩压按同一搏对齐,早一拍晚一拍都会让斜率符号翻转。
还有一层精度问题藏在前面。§4.3 的案例里两段记录的心电增益相差近一倍,等效的量化噪声底不同,R 峰时刻的抖动幅度也不同。BRS 是斜率,斜率的方差对自变量的测量误差很敏感——自变量是收缩压,因变量是 RR,两者都有误差时斜率会被系统性地压低,这在统计上叫回归稀释。序列法里的收缩压来自指端波形,本身带有血管卸载法的固有偏差,再叠上 R 峰抖动,单段 BRS 的不确定度可以相当大。所以单段 BRS 只适合做组内比较,跨组比较必须用同一套预处理与同一批参数,否则组间差异里会混进流水线差异。
5.7 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 单位换算 | 对 p_signal 再除一次增益 |
数值小几个数量级 | p_signal 已是物理量,直接用 |
| 通道取值 | 写死 ECG2 |
MP150 记录直接报错 | 按设备或按 sig_name 动态取 |
| 时长统计 | 用表里 Length 的整分钟 |
百分之二左右的负荷误差 | 用头文件采样点数除以采样率 |
| 血压缺口 | 对 NaN 直接插值 | 造出平直假信号,压低变异性 | 按 NaN 段切分,分段计算 |
| 年龄回归 | 把组号当逐岁年龄 | 标签带半组宽的量化误差 | 用组中点并声明误差,或做有序分类 |
§6 与库内其他记录的关系
6.1 关系图谱
在心电与血压这片区域里,它的位置可以用"是否有连续血压"与"年龄跨度"两个轴定位。
| 库内资源 | 连续血压 | 年龄跨度 | 与本库的关系 |
|---|---|---|---|
| Fantasia | 无 | 青年与老年两组 | 最近的邻居:同为健康静息 HRV,但只有四十人、两小时、无血压 |
| INCART | 无 | 18–80 岁 | 互补:它有逐搏标注与十二导联,本库有血压与全年龄段 |
| PTB-XL | 无 | 逐岁 | 互补:它规模大、有诊断标签,但每段十秒 |
| PulseDB | 有,含动脉压参考 | 逐岁 | 部分重叠:它为无袖带血压算法设计,本库为自主神经设计 |
| CardioWave-Portable | 有,袖带校准 | 逐岁 | 部分重叠:可穿戴场景,本库是实验室高保真 |
| 丙泊酚自主神经库 | 无 | 成人 | 主题最近:同为自主神经动态,但只有九人、有药物干预 |
| WESAD | 无 | 青年 | 场景不同:可穿戴压力检测,非衰老主题 |
和 Fantasia 的关系最值得展开。两者都是"健康人静息长段心电",都被用来研究心率变异性的年龄依赖,但设计目标不同:Fantasia 要的是分形动力学,两小时的超长段、四十人、青年与老年各二十,适合做长程相关分析;这份库要的是横断面覆盖,一千余人、十五个年龄组,适合做趋势估计。做分形指数用 Fantasia,画年龄曲线用本库。
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 健康人 HRV 参考 | healthy, normal sinus rhythm, HRV |
Fantasia、本库 |
| 连续无创血压 | continuous non-invasive blood pressure, CNAP, vascular unloading |
本库、PulseDB |
| 压力反射 | baroreflex, baroreflex sensitivity, BRS |
本库(PhysioNet 主题标签含此项) |
| 生物年龄与衰老 | biological age, aging, autonomic age |
本库及三篇下游论文 |
| 逐搏标注 | beat annotation, atr |
INCART、MIT-BIH 系列 |
| 无袖带血压算法 | cuffless blood pressure |
PulseDB、CardioWave-Portable |
| 体位与激发试验 | tilt, head-up tilt, Valsalva |
本库不覆盖,需另找倾斜试验库 |
6.3 与其他库的分工判据
| 任务 | 主力该用什么 | 本库的位置 | 原因 |
|---|---|---|---|
| HRV 随年龄的趋势估计 | 本库 | 主力 | 全年龄段加严格健康筛选,别处难找 |
| HRV 的分形与长程相关 | Fantasia | 辅助 | 两小时段才够算长程指数 |
| 心拍分类与节律检测 | MIT-BIH 系列、INCART | 不适用 | 无标注 |
| 无袖带血压回归 | PulseDB、CardioWave | 可当外部集 | 有真实血压参考,但设备固定 |
| 压力反射的激发态测定 | 倾斜或药物试验库 | 不适用 | 只有静息 |
| 生物年龄建模 | 本库 | 主力 | 二十九项指标的原始素材齐全 |
| 可穿戴算法验证 | WESAD 类 | 不适用 | 实验室高保真,与腕式设备域差大 |
| 信号质量算法 | BUT QDB 类 | 部分可用 | 噪声类型单一,缺真实劣质样本 |
这张表最容易被看错的是第二行与第六行。分形与长程相关看起来只是"更复杂的 HRV",实际上它对段长的要求是硬约束:去趋势波动分析要看到跨多个时间尺度的幂律,最短也得几十分钟,十五分钟往往只能覆盖两三个尺度,指数估出来很不稳。同样,激发态的压力反射不是"更准的 BRS",而是另一个生理量——它测的是闭环增益在扰动下的表现,与静息自发的斜率没有换算关系,用静息数据去替代激发试验,得到的结论方向可能一致、数值却无法对比。
反过来,第一行与第六行的不可替代性也是真的。全年龄段加严格健康筛选这个组合,在公开库里极少见;二十九项指标的原始素材齐全,意味着你可以自己定义特征集,而不是被动接受别人算好的那一套。这两点是它区别于"又一个心电库"的根本。
一个实际的组合策略是把它当"标尺"而不是"粮仓":用大库做训练,用它的年龄曲线校准模型的输出,看模型在某一年龄段是否系统偏离。这种用法对样本量要求不高,对人群纯度要求很高,正好对上它的长处。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个容易发生的误判:不要用"标注完整度"这把尺子量它。这份数据从设计上就没有标注,也不打算有。拿"没有心拍标注所以质量差"来评价,等于拿鱼会不会爬树来评价鱼。
正确的读法是把它当成一份原始测量记录来评:环境控制得怎么样、设备标定得怎么样、人群筛得怎么样、区间给得够不够。这四个维度上它的表现都在中上,但每一条都带着明确的、可枚举的代价——而这些代价恰恰决定了它不能用在哪些任务上。
7.1 DAIMS 五维评分
按 DAIMS 常用的五个维度打分,每项 1 到 5 分,针对"作为心血管自主神经研究数据"这个用途。
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 3 | 一千一百余人,在严格健康筛选条件下不算少,但训练深度学习仍偏小 |
| 标注质量 | 1 | 无任何标注,这是设计选择而非缺陷,但评分只能按标注维度给 |
| 任务适配 | 4 | 自主神经与衰老主题上几乎无可替代,其他主题上用途有限 |
| 文档完整 | 4 | 协议、排除标准、码表、匿名化方法都写清楚了,缺的是派生指标口径 |
| 可获取性 | 5 | 免注册、ODC-ODbL、HTTP 与开放桶双通道 |
合计十七分(满分二十五)。分数结构很清楚:可获取性与任务适配拉高,标注一项拉到底。这不是一份"通用"数据,是一份"专用"数据。
7.2 信号质量的两层判断
第一层是采集层面。室温、照度、噪声、体位、电极型号、标定方式都在论文里写死,属于可复现的实验室条件。这一层的质量明显高于临床随手记录。
第二层是可用性层面。官方没有给出逐段的信噪比、伪迹比例、可分析时长占比。也就是说,哪一段能用、哪一段需要剔除,得自己判断。这对批量处理是个实际负担:一千多段,人工看不现实,必须写自动质控。
| 质控项 | 官方是否提供 | 自建方法 | 阈值建议 |
|---|---|---|---|
| 心电信噪比 | 否 | 带通后比较 QRS 频段与基线频段能量 | 按分位数剔除尾部 |
| R 峰漏检率 | 否 | 用两个检测器交叉验证,比对不一致处 | 不一致率高于百分之五则人工复核 |
| 血压缺口长度 | 否 | 统计 NaN 连续段长度 | 超过十秒的段整段剔除 |
| 血压异常值 | 否 | 收缩压超出 70–200 mmHg 视为可疑 | 结合相邻拍判断 |
| 全程漂移 | 否 | 分段均值的一阶差分 | 突跳超过 10 mmHg 复查 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 对结论的影响 |
|---|---|---|
| 年龄重心偏轻 | 平均 32.5 岁,青年占多数 | 曲线在高龄端不稳,拟合斜率对末端点敏感 |
| 单一中心 | 全部来自耶拿 | 人群遗传背景、饮食、体力活动模式单一 |
| 招募来源混合 | 社区招募加医院职工 | 医院职工的健康素养与作息可能不同于一般人群 |
| 健康筛选偏严 | 排除任何可能影响心血管功能的疾病与用药 | 得到的是"理想健康"人群,与真实老年人群差距大 |
| 设备混用 | 两套系统、两种导联配置 | 设备效应与年龄效应可能部分混淆 |
| 静息单状态 | 只有平卧 | 无法外推到日常活动状态 |
| 年龄区间化 | 十五个组 | 逐岁回归的标签噪声下限为半个组宽 |
| 无随访 | 每人一次 | 无法区分队列效应与年龄效应 |
最后一条值得多说一句。横断面设计的固有问题是:七十岁组的人和二十岁组的人,不只是年龄不同,他们出生的年代也不同。营养、医疗、职业暴露、体力活动模式在两代人之间差异很大。把这些差异全部归因于"衰老",是横断面研究无法完全排除的系统性误差。这份数据没有 longitudinal 设计,也就无法自证这一点。
7.4 外部验证矩阵
这份数据在文献里的角色,可以从三篇核心论文看出轮廓。
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 指标—年龄关系的基准 | 用 SDNN、RMSSD、减速容量对年龄做趋势 | 信号干净、年龄跨度大,趋势稳健 | 只有三项示例,不能代表全部指标 |
| 生物年龄模型的训练集 | 二十九项指标加高斯过程回归 | 健康人群混杂少,模型学的是生理而非病理 | 高龄样本少,模型在高龄端外推能力弱 |
| 肥胖与风险分层的对照 | 留出肥胖组做外部验证 | 有 BMI 字段,可直接分层 | BMI 是整数或一位小数,分层边界敏感 |
| 算法复现的公共底料 | 直接下载原始波形重算 | 免注册、格式标准、工具链成熟 | 预处理口径不统一会导致数字对不上 |
第二行那条尤其要注意。论文报告的平均绝对误差是 5.6 岁,这个数字在健康人群里算出,换到有合并症的人群会明显变大。把它当成"模型精度"引用,会高估实际可用性。
7.5 它为何能持续:稀缺的是入组条件,不是数据量
一千多段十五分钟的记录,存储上只有几个 GB,任何一家有科研经费的实验室都攒得出。真正稀缺的是"十年、全年龄段、严格健康筛选、心电与逐拍血压同步"这个组合。要复现它,得有一间恒温遮光的自主神经实验室、一套指端连续血压设备、一套能坚持十年的招募流程,还要有伦理批件允许把原始波形公开。
这套前提在全世界并不多。所以它不会因为新库出现而被替代——新库要么规模更大但健康筛选松,要么筛选严但年龄集中,要么有血压但没有十年跨度。只要这个组合仍然稀缺,它就会持续被引用。
§8 生态位与历史
8.1 十年采集,一次发布
时间线很清楚:2010 年开始入组,持续到 2020 年;2021 年 7 月以版本 1.0.0 发布到 PhysioNet;2022 年 3 月在 Scientific Data 发表数据描述论文。发布后没有再出过新版本,最新 DOI 指向的仍是同一批文件。
| 时间 | 事件 |
|---|---|
| 2010 | 开始招募与采集 |
| 2020 | 采集结束 |
| 2021-06-14 | 数据文件最后修改日期(据文件列表) |
| 2021-07-30 | PhysioNet 发布 v1.0.0 |
| 2022-02-10 | 数据描述论文接收 |
| 2022-03-23 | 论文正式发表 |
这个节奏说明它是"先攒后发"型:数据在抽屉里放了十年,等样本量与年龄覆盖都够了才整理公开。这和很多"边采边发"的库不同,好处是一次性给全,坏处是没有增量版本,后续修订只能等大版本。
8.2 论文与数据的分工
数据描述论文承担了三件数据本身不做的活:定义排除标准、报告人口学统计、做技术验证。技术验证用的是三个指标——SDNN、RMSSD、减速容量,全部用 PhysioNet 心血管信号工具箱里的公开函数算出,代码在论文的可用性声明里逐一点名。
这带来一个实用的推论:如果你想复现论文里的图,就得用同一套工具链(jqrs 做 QRS 检测、ada_f 做自适应滤波、runrmssd 与 prsa 做指标)。换成自己写的检测器,趋势方向不会变,但绝对数值会有系统偏差——尤其是减速容量,它对相位重建的细节很敏感。
8.3 生态位:横断面的标尺
| 角色 | 纵向队列 | 本库这类横断面 |
|---|---|---|
| 回答的问题 | 同一个人的功能怎么变 | 不同年龄的人功能差多少 |
| 主要偏倚 | 失访、练习效应 | 队列效应、选择性存活 |
| 样本成本 | 极高,要等很多年 | 中等,一次采完 |
| 适合的建模 | 混合效应、生存分析 | 趋势拟合、年龄预测 |
它坐在右边这一列。用它做纵向问题会立刻碰壁——每人只有一次测量,连个体内的重复都没有。
8.4 谁在用它,用来做什么
从公开文献看,使用者集中在三类。做自主神经与衰老机制的研究组,把它当横断面基准,验证某个指标是否真随年龄变化。做生物年龄与风险分层的建模组,把它当训练底料,因为健康人群的标签噪声小。做信号处理方法的研究组,把它当高采样率、双模态的测试床,验证新算法在心电与血压上的表现。
第三类最少但很有意思:因为心电与血压严格同步、采样率高、噪声低,它很适合验证跨模态方法,比如心电与血压的相位耦合、逐拍传递函数估计。这类方法在噪声大的数据上根本跑不通,必须先有一个干净的实验台。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 生理信号研究者 | 读项目页与论文方法,取两条样例记录跑通读取 | 建质控流水线,算出二十六项指标的基线分布 | 先定预处理口径再算,否则数字不可比 |
| 算法工程师 | 确认设备编码与通道名的对应关系 | 做一个年龄组分类基线,记录混淆矩阵 | 设备效应必须显式建模 |
| 教学与临床工程 | 用一段干净记录演示 RR 序列与功率谱 | 做年龄分组的对照图,讲清趋势与个体差异 | 强调组中点是近似,不要当精确年龄 |
9.2 一条最短的可用流程
#-- 1. 取元数据
curl -sL https://physionet.org/files/autonomic-aging-cardiovascular/1.0.0/subject-info.csv -o subject-info.csv
#-- 2. 取若干条记录的头文件,确认通道配置
for r in 0001 0002 0006; do
curl -sL "https://physionet.org/files/autonomic-aging-cardiovascular/1.0.0/${r}.hea" -o "${r}.hea"
head -1 "${r}.hea"
done
#-- 3. 按设备分组,统计两组的通道数
awk -F, 'NR>1 {print $6}' subject-info.csv | sort | uniq -c
#-- 4. 按年龄组统计人数,确认高龄段是否够用
awk -F, 'NR>1 {print $2}' subject-info.csv | sort -n | uniq -c
第 4 步的输出会直接告诉你高龄段能不能支撑分层分析。这是使用这份数据前最该先看的一张表,比任何文档都直观。
9.3 引用方式
官方给出的引用格式是作者加年份加版本号,落到具体写法:
| 场景 | 引用对象 | 标识 |
|---|---|---|
| 引用数据本身 | Schumann 与 Bär,2021,版本 1.0.0 | DOI 10.13026/2hsy-t491 |
| 引用方法学描述 | Scientific Data 论文,2022 | DOI 10.1038/s41597-022-01202-y |
| 引用平台 | PhysioNet 平台论文 | RRID SCR_007345 |
| 版本更新后的引用 | 最新 DOI | 10.13026/mwad-va85 |
规范做法是两个都引:数据给 DOI,方法给论文。只引论文不引数据,使用者找不到原始文件;只引数据不引论文,排除标准与协议细节无从查证。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 数据来源 | PhysioNet 项目页与 Scientific Data 论文,均为公开可访问文本 |
| 采集方式 | 人工阅读官方页面与论文全文,未使用自动抓取工具做批量统计 |
| 数字口径 | 只采用官方公布的规模、结构、边界三类数字,未自行计算分布 |
| 派生数字 | 凡由官方数字推算者,文中均标注为折算 |
| 未核实项 | 逐段信噪比、可分析时长占比、各年龄组确切人数,官方未公布 |
| 内容生成 | 正文由 AI 辅助撰写,事实核对以官方文本为准 |
| 局限声明 | 本页不构成对数据质量的背书,使用前请自行验证 |
| 更新策略 | 官方出新版本时,本页需重新核对版本号与文件体量 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 这是带标注的自主神经数据库 | 没有任何标注,连 R 峰都没有 | 项目页文件列表只有 .hea 与 .dat,无 .atr 或注释目录 |
| 年龄是精确岁数 | 泛化为十五个组 | 项目页年龄组定义与 ARX 匿名化说明 |
| 里面有 HRV 和 BRS 的算好结果 | 只有原始波形,指标需自算 | 论文中 SDNN 等是技术验证示例,不在数据文件内 |
| 时长上限四十五分钟 | 论文写的是 8 到 35 分钟 | 项目页与论文两个口径并存,差额官方未说明 |
| 每人有多次随访 | 每人一次,横断面 | 文件编号与 ID 一一对应,无重复 ID |
| 可以做倾斜试验分析 | 全部平卧静息,无体位改变 | 方法部分只描述平卧一段 |
| 血压是袖带间断测量 | 指端连续逐拍,经肱动脉标定 | 血管卸载法描述与 100 Hz 原始采样 |
| 两套设备数据可以无差别混用 | 导联数、增益、血压通路都不同 | 头文件中 TFM 三通道、MP150 两通道 |
| 采样率 250 Hz 级 | 心电 1000 Hz,血压插值后同为 1000 Hz | 头文件首行与论文重采样说明 |
| 这是普通人群样本 | 严格健康筛选后的理想健康人群 | 排除标准:任何影响心血管功能的疾病与用药 |
FAQ
Q1:它的年龄是精确值还是区间?
是区间。官方为满足匿名化要求,用 ARX 工具把年龄泛化成十五个组,首组 18–19 岁,中间十三组各跨五岁,末组 85–92 岁。做回归时应把组编号当区间中点或有序变量,不要当逐岁年龄。
Q2:为什么官方页面和论文写的时长上限不一样?
项目页写平均 19 分钟、区间 8 到 45 分钟;Scientific Data 论文写 8 到 35 分钟。两个口径都出自官方文本,差额构成官方未说明。引用时以项目页为准,并注明另一口径。
Q3:数据里带 HRV 和压力反射指标吗?
不带。仓库只有原始波形与一张六列的表。论文里的 SDNN、RMSSD、减速容量是作者用公开工具箱算出的验证示例,属于论文结果。二十九项指标出现在后续下游研究里,不是官方字段。
Q4:能做倾斜试验或深呼吸试验的分析吗?
不能。全部记录都是平卧静息,受试者被要求避免移动、打哈欠与咳嗽,没有体位改变也没有节律呼吸指令。压力反射只能从自发波动里用序列法估计。
Q5:两套设备的数据可以直接混吗?
可以混,但必须把设备编码作为特征或分层变量。TFM 记两个心电导联、走院内模块;CNAP 500 联合 MP150 只记一个 II 导联、走外接监护仪。两组血压通路与滤波器不同。
Q6:为什么女性比男性多这么多?
官方论文的统计表给出女性 670、男性 433,性别缺失 2 例。招募来源是社区加医院职工,医院职工中女性比例偏高,这是最可能的原因,但官方未就此做说明。
Q7:八百八十四和一千零六十这两个数是怎么回事?
它们来自不同的下游研究。2022 年的建模论文报告八百八十四份数据满足入模条件,另有七十二名肥胖者被留作评估;2025 年的论文报告一千零六十份。都是研究者的筛选结果,不是数据集的记录总数。
Q8:血压信号里为什么有整段空缺?
记录过程中系统会为重新标定再测一次肱动脉血压,这段时间连续血压中断,缺失点置为 NaN。处理时要按 NaN 段切分,不要直接插值。
Q9:一千赫兹的采样率有必要吗?
对 RR 间期精度有必要。R 峰定位误差与采样间隔成正比,1000 Hz 下理论分辨率 1 毫秒,250 Hz 下是 4 毫秒。SDNN 这类指标的差异常在毫秒级,这个精度不是浪费。
Q10:能用来训练心电分类模型吗?
技术上可以,但没有标签。全部样本都是健康人静息心电,没有心律失常、没有诊断,做分类只能做自监督预训练或无监督表征学习。要监督分类,得另找带标注的库。
Q11:这份数据会更新吗?
自 2021 年 7 月发布 1.0.0 以来没有新版本。采集已于 2020 年结束,官方未公布扩样计划。最新 DOI 指向同一批文件,说明当前没有增量。
Q12:只想要一小部分数据,必须下 5 GB 吗?
不必。WFDB 的 Python 包支持按项目名远程读取单条记录,只拉那一条的 .hea 与 .dat。样本文件从几 MB 到十几 MB 不等,取决于时长与通道数。
术语表
| 术语 | 英文 | 释义 |
|---|---|---|
| 自主神经 | autonomic nervous system | 不受意识控制的神经系统分支,调节心率、血压、消化等 |
| 心率变异性 | heart rate variability, HRV | 相邻心拍间期长短的波动程度,反映自主神经调节能力 |
| SDNN | standard deviation of NN intervals | 全部正常心拍间期的标准差,衡量整体变异性 |
| RMSSD | root mean square of successive differences | 相邻间期差值的均方根,主要反映副交感活动 |
| 减速容量 | deceleration capacity, DC | 基于相位重建的减速事件指标,与迷走张力相关 |
| 压力反射 | baroreflex | 血压升高时反射性减慢心率的负反馈环路 |
| 压力反射敏感度 | baroreflex sensitivity, BRS | 血压每变化 1 mmHg 对应的心拍间期变化量,单位毫秒每毫米汞柱 |
| 序列法 | sequence method | 从自发血压与间期波动中挑同向连续片段估计 BRS |
| 血管卸载法 | vascular unloading technique | 指端袖带伺服恒压,由容积变化推算逐拍动脉压 |
| 连续无创血压 | continuous non-invasive blood pressure | 逐拍输出的动脉压波形,区别于袖带间断测量 |
| 光电容积描记 | photoplethysmography, PPG | 用光吸收变化记录血容积的方法 |
| 示波法 | oscillometry | 袖带充放气测肱动脉压的常规方法,用于本库的初始标定 |
| 埃因托芬三角 | Einthoven triangle | 双上肢加左下肢构成的标准心电导联几何 |
| II 导联 | lead II | 右臂至左腿方向的电位差,心律判读最常用 |
| 低频 | low frequency, LF | 0.04 至 0.15 Hz 频段,混合交感和副交感成分 |
| 高频 | high frequency, HF | 0.15 至 0.40 Hz 频段,主要反映呼吸性窦性心律不齐 |
| 衰老 | aging | 随年龄累积的功能性下降,本库关注其中的心血管调节部分 |
| 生物年龄 | biological age | 由生理指标反推的年龄估计,与实际年龄之差可作风险代理 |
| 队列效应 | cohort effect | 不同出生年代的人在营养、医疗、环境上的系统差异 |
| 横断面设计 | cross-sectional design | 同一时点测不同个体,用组间差异代替时间变化 |
| 匿名化 | anonymization | 去除或泛化可识别个体身份的信息 |
| k 匿名 | k-anonymity | 保证任一记录至少与 k−1 条其他记录不可区分 |
| WFDB | Waveform Database | PhysioNet 沿用的生理信号存储格式 |
| 增益与基线 | gain and baseline | 头文件中把整数还原成物理量的两个参数 |
| NaN | not a number | 缺失值标记,本库用于血压断点与缺失的人口学项 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 受试者数 | 1,121 | 项目页摘要与论文摘要 | 官方页面 |
| 年龄均值 | 32.5 ± 14.7 岁 | 论文表 1 | 论文全文 |
| 年龄缺失 | 25 例 | 论文表 1 | 论文全文 |
| 性别构成 | 女 670、男 433、缺 2 | 论文表 1 | 论文全文 |
| BMI 均值 | 23.7 ± 4.5 | 论文表 1 | 论文全文 |
| 年龄组数 | 15 | 项目页 | 官方页面 |
| 年龄跨度 | 18–92 岁 | 项目页组定义 | 官方页面 |
| 心电采样率 | 1000 Hz | 项目页与头文件 | 官方页面 |
| 血压原始采样率 | 100 Hz | 论文方法 | 论文全文 |
| 血压存档采样率 | 1000 Hz(插值) | 论文数据记录节 | 论文全文 |
| 单段时长(口径一) | 平均 19 分钟,8–45 分钟 | 项目页 | 官方页面 |
| 单段时长(口径二) | 8–35 分钟 | 论文方法 | 论文全文 |
| TFM 样本 | 621 | 论文表 1 | 论文全文 |
| MP150 样本 | 500 | 论文表 1 | 论文全文 |
| 解压总体量 | 5.9 GB | 项目页文件汇总 | 官方页面 |
| ZIP 体量 | 5.2 GB | 项目页 | 官方页面 |
| 采集年份 | 2010–2020 | 论文方法 | 论文全文 |
| 许可 | ODC-ODbL 1.0 | 项目页 | 官方页面 |
| DOI | 10.13026/2hsy-t491 | 项目页 | 官方页面 |
附录 B:数字的来源分层
| 层级 | 含义 | 本文涉及的数字 |
|---|---|---|
| 官方页面 | PhysioNet 项目页直接写明 | 受试者数、年龄组定义、时长两口径之一、采样率、体量、许可、DOI |
| 论文摘要与全文 | Scientific Data 论文写明 | 年龄均值与缺失、性别构成、BMI、两套设备样本量、采集年份、血压重采样、排除标准 |
| 下游研究 | 其他已发表论文报告 | 二十九项指标、八百八十四与一千零六十的筛选样本、5.6 岁误差 |
| 官方未公布 | 页面与论文都没给 | 各年龄组确切人数、总时长、逐段信噪比、可分析时长占比、男女在各组内的分布 |
第四行是使用前必须自己补的功课。官方不给分布,意味着任何按年龄分层的分析都要先做一次样本量检查,否则会出现某组只有个位数、统计量剧烈波动的情形。
附录 C:完整参考文献
| 序号 | 文献 | 用途 |
|---|---|---|
| 1 | Schumann A, Bär K. Autonomic Aging(版本 1.0.0). PhysioNet, 2021. DOI 10.13026/2hsy-t491 | 数据本体 |
| 2 | Schumann A, Bär K. Autonomic aging — A dataset to quantify changes of cardiovascular autonomic function during healthy aging. Scientific Data, 2022. DOI 10.1038/s41597-022-01202-y | 方法、人群、技术验证 |
| 3 | 同组作者. Using machine learning to estimate the calendar age based on autonomic cardiovascular function. Frontiers in Aging Neuroscience, 2022. DOI 10.3389/fnagi.2022.899249 | 二十九项指标与建模基线 |
| 4 | 同组作者. Quantifying cardiovascular autonomic aging with machine learning. AJP-Heart and Circulatory Physiology, 2025. DOI 10.1152/ajpheart.00693.2025 | 自主神经年龄差 |
| 5 | Fortin J 等. Continuous non-invasive blood pressure monitoring using concentrically interlocking control loops. Comput Biol Med, 2006 | 血管卸载法原理 |
| 6 | Prasser F 等. Flexible data anonymization using ARX. J Software Pract Exper, 2020 | 匿名化工具 |
| 7 | Goldberger A 等. PhysioBank, PhysioToolkit, and PhysioNet. Circulation, 2000 | 平台与格式 |
| 8 | Vest A 等. An open source benchmark for cardiovascular signal processing(PhysioNet 心血管信号工具箱) | 技术验证所用工具链 |
附录 D:任务代码与复现清单
| 步骤 | 命令或动作 | 预期产出 |
|---|---|---|
| 取表 | curl 下载 subject-info.csv |
六列、一千一百二十二行 |
| 验通道 | 读若干 .hea 首行 |
确认三通道与两通道两种配置 |
| 分组 | 按 Device 分列 |
两组样本量与通道数 |
| 分层 | 按 Age_group 计数 |
十五行的人数表,用来判断高龄段是否够用 |
| 质控 | 统计 NaN 段与 R 峰一致性 | 可分析片段清单 |
| 指标 | 时域、频域、BRS 三套 | 逐段指标表 |
| 复现 | 对齐论文的工具链 | SDNN、RMSSD、DC 的对照值 |
附录 E:如果只记五件事
| 序号 | 要点 |
|---|---|
| 1 | 一千一百余名严格筛选的健康志愿者,18 到 92 岁,2010 到 2020 年采集于耶拿 |
| 2 | 每段是平卧静息的心电加连续逐拍血压,1000 Hz 同步,平均十九分钟 |
| 3 | 零标注、零派生指标,HRV 与 BRS 全部要自己算 |
| 4 | 年龄是十五个组不是岁数,末组 85 到 92 岁,高龄样本稀少 |
| 5 | 两套设备混用,导联数与增益不同,设备必须进模型 |
编辑说明
本页事实核对以 PhysioNet 项目页(版本 1.0.0)与 Scientific Data 论文全文为准,核对时间为 2026 年 10 月 28 日。项目页与论文在记录时长上限上存在两个口径(45 分钟与 35 分钟),本页两处并列,不作判断。
未覆盖的内容包括:各年龄组确切人数、逐段信号质量指标、男女在各年龄组内的分布、总记录时长。这些官方均未公布,本页不做推算。
页面中的代码块为流程演示,参数按 1000 Hz 采样率设定,换用其他采样率时需同步调整滤波截止与最小峰间距。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- shareedb — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- music-sudden-cardiac-death — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- norwegian-athlete-ecg — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- fantasia — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- ecgcipa — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- brugada-huca — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 队列研究
- wctecgdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
- ahadb — 共享标签:生理信号 / 心电信号 / 心血管疾病
- chfdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
- crisdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

