八十条三小时记录定下的标准 — AHA 室性心律失常库

80 条开发集 / 75 条测试集 / 每段仅末 30 分钟逐搏标注

来源 https://physionet.org/content/ahadb/1.0.0/发布时间: 2026-10-27最后更新: 2026-10-27 阅读 15
八十条三小时记录定下的标准 — AHA 室性心律失常库

信息速览

数据集名称八十条三小时记录定下的标准 — AHA 室性心律失常库
数据类型时序信号,波形,人工标注
规模原库约 155 条记录(开发集 80 条 + 测试集 75 条),PhysioNet 只开放 1 条被剔除样本的两份片段
接入方式https://physionet.org/content/ahadb/1.0.0/
AI 就绪度

AHA 室性心律失常数据库(American Heart Association Database for Evaluation of Ventricular Arrhythmia Detectors)是美国心脏协会出资、美国国立心肺血液研究所配套资助,在 1970 年代末到 1980 年代中由华盛顿大学(圣路易斯)主持建成的动态心电数据库。它最反常识的一点是:每段记录长约三小时,而逐搏标注只覆盖其中末三十分钟;全长八十分钟的记录里,有四分之三以上是没有任何标注的原始信号。

这份数据库的身份不是「一个可以下载的数据集」,而是「一份 1985 年封版的评测标准」。它先在医院里按统一协议采集,再由专家组集中标注,最后按室性异位的最高等级分成八类、每类十条,交到评测者手里当作同一张考卷。完整库从未公开,PhysioNet 页面上能下载的,只是当年一条落选样本的两份片段。

本文要讲清三件事:为什么三小时的持续时长对室性心律失常研究是不可替代的;为什么这个三十多年前封版的库至今仍被引用;以及它的边界在哪里——尤其是它记录的是 1970 至 80 年代美国住院患者,那个年代的用药背景与今天相差极远。一屏速览见下表。

维度 内容
中文名 AHA 室性心律失常数据库
英文名 AHA Database for Evaluation of Ventricular Arrhythmia Detectors
资助方 美国心脏协会(AHA),美国国立心肺血液研究所(NHLBI)配套资助
建设机构 华盛顿大学(圣路易斯)
建设年代 1970 年代后期动工,1982 年发布首批,1985 年完成
商业发行 ECRI(美国急诊照护研究所),磁带、软盘、光盘、DVD 多代介质
开发集规模 80 条,八类各十条
测试集规模 75 条,R-on-T 类只有 5 条
单条时长 约三小时,双导联
标注范围 仅末三十分钟,逐搏标注
数字化参数 每通道 250 Hz,12 位,10 mV 量程
文件格式 WFDB(MIT 212 压缩 + 注释文件)
PhysioNet 开放内容 1 条被剔除样本记录的两份片段,共 9.2 MB
许可 ODC-BY 1.0(仅针对 PhysioNet 上开放的这部分)
获取完整库 只能向 ECRI 购买,无免费渠道

§1 它要解决的具体麻烦

1.1 一句话:室性早搏的临床意义取决于每小时多少次,三十分钟算不出来

室性早搏(PVC)是心电图上最常见的一种异位搏动,健康人也会出现。它要不要紧,临床上第一眼看的是频次:每小时少于十次通常按偶发处理,每小时超过三十次就要考虑干预,超过千次则进入另一个讨论区间。这三个数字的计量单位都是「每小时」,而不是「每段记录」。

这就是 1980 年代建库时面对的第一个硬约束。当时能做自动化算法的设备,手上大多是几十秒的静息心电或几分钟的监护条带。用这样的片段去判断一个患者是不是高危,等于用一张快照去判断一条河的水量。唯一可行的办法是让记录仪连续挂上几个小时,然后把其中一段完整地标出来,让算法知道自己该数多少。

第二个约束来自评测本身。算法不是拿真实患者去比,而是拿同一批固定记录去比——否则 A 组和 B 组的结果根本没法放在一张表里。要做到这一点,就得有一批「谁都拿得到、谁测都是同一段」的记录。1980 年 MIT-BIH 心律失常库开了这个头,1982 年 AHA 开发集跟进,两家走的路线不同:前者广撒网,四十八条半小时记录覆盖各类心律;后者专攻一类,八十条三小时记录只做室性异位。

约束 当年的现状 AHA 的做法 留下的代价
频次要按小时算 常规设备只给分钟级片段 每段连续录三小时 单条记录体积大,数字化成本高
评测要可复现 各家自选数据,结果不可比 固定八类、每类十条 类别边界一旦定下就难改
标注要准 人工逐搏看三小时不现实 只标末三十分钟 前两小时半永远无标签
结果要有说服力 算法容易在测试集上调参 另建七十五条测试集并封存 测试集二十年后才解禁

理解这张表,就理解了这份数据库的全部设计。它不是「尽量多地收集数据」,而是「用最少的记录把评测条件固定下来」。这个取向在今天看来是反效率的,但在没有互联网、没有标注平台、没有众包工人的 1983 年,这是唯一能保证可比性的路子。

1.2 三条常见的错误期待

第一条是「PhysioNet 上挂着 ahadb,所以这个库是免费公开的」。PhysioNet 页面写得很清楚:完整 AHA 数据库没有由 ECRI 授权在任何网站提供下载,只能向 ECRI 购买;页面上实际可下载的只有一条记录 0001 及其三十分钟版本 0201。也就是说,在公开渠道上,这个库的「开放部分」与「全体」之比是 1 比 155 量级。把这一条记录当作 AHA 数据库的代表来用,是这篇词条要反复纠正的最大误读。

第二条是「三小时长的记录,标注应该有三小时」。不是。每条记录只有末三十分钟逐搏标注,前两小时半是纯信号。这一点直接决定了它的用法:如果你想统计某一整段三小时里的 PVC 总数,标注文件给不出答案;如果你想验证一个检测器在真实背景噪声下连续跑三十分钟会不会崩,它正好对症。

第三条是「这是老数据库,早就过时了」。过时是真的,但过时的地方并不在信号质量。250 Hz 采样对 QRS 检测足够,磁带数字化带来的是低频失真和少量脱落段,这些都能处理。真正过时的是它背后的人群:1970 至 80 年代的美国住院患者,那时的抗心律失常药物使用习惯、起搏器普及率、监护条件,与今天几乎是两套语境。把它当作「今天的患者分布」来用,才是真正的错位。

错误期待 背后的错误假设 实际情况 后果
完整库免费 挂在 PhysioNet 就是公开 页面只开放 1 条被剔除样本 论文声称用了 AHA 全库,实际只用了一条
三小时都有标注 录多久就标多久 只标末三十分钟 长时程统计口径算错
信号质量不过关 老 = 差 250 Hz 对 QRS 足够,问题在低频 过度降噪反而伤 T 波形态
房间性早搏也在标注里 有注释 = 有全部注释 房早并入正常窦性搏动 室上性研究拿它做金标准必错
它是 MIT-BIH 的超集 同为 PhysioNet 心电库 定位正相反,一个广一个深 混用两库指标做对照

1.3 它能给到的与给不到的

你的需求 它给的 够不够
在真实长时程背景里跑一遍 QRS 检测器 一条完整三小时双导联记录(0001) 够,这是它最直接的用途
验证 PVC 检测器在连续半小时内的稳定性 末三十分钟的逐搏注释 够,且注释质量经过当时专家组校对
拿到八类分层的训练或评测数据 需要向 ECRI 购买完整库 公开渠道不够
核对自建转换流程是否把磁带数据转对 官方 SHA256 校验和,逐介质验证过 够,且是少见的长处
训练一个现代深度分类模型 1 条记录、一千余个室性搏动 远远不够
研究室上性心律失常 注释不区分房性早搏 不够,方向不对
做人群层面的灵敏度与特异度 无年龄、性别、用药、诊断 不够,无法分层
复现某篇论文的数值 需先弄清那篇用的是短版还是长版、哪四条 部分够,前提是读清版本规则
教学讲「Holter 长时程与短片段的分工」 一个极干净的对照案例 够,比讲抽象概念有效
论证模型对药物背景的鲁棒性 只能提供一种过时背景 不够,须配当代数据

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
手上有一个 QRS 检测器,想在长时间真实背景上做回归 0001 给出一万零八百秒连续双导联信号 准备好按 WFDB 读取,先跑一遍看误检集中在哪类段
在写一篇用 AHA 做跨库验证的论文 让你分清短版与长版的代号规则,避免写错 先读四个 RECORDS 清单,确认自己拿到的是哪一批
拿到一盘老磁带或一张 ECRI 光盘,想确认数字化没出错 官方给了逐文件 SHA256 用 WFDB 转换器转完后比对,不要手写转换
想找八十条三小时记录做训练 只能告诉你数据真实存在且去向明确 直接联系 ECRI 询价,别指望公开镜像
做动态心电设备,需要合规性的第三方参照 提供一个三十年前的基准点 搭配当代库一起用,报告里写清人群差异
教学演示「为什么 Holter 必须长」 三十分钟注释与两小时半无注释的对照 把波形图与频次计算放在一起讲
只想要一条真实长记录来验证读取流程 9.2 MB 的包,几分钟就能下完 直接按 §5.3 的命令跑一遍

1.5 一句话判断

它是一份 1985 年封版的评测标准,而不是一个可以随便下载的数据集;公开的那一条记录,是标准旁边的脚注,不是标准本身。

1.6 不适合谁:四条边界

第一,不适合把 PhysioNet 那一条记录当作 AHA 全库的人。 0001 是当年落选的一条记录,异位等级高于它原本竞争的类别,编号也是为它新编的。拿它做评测,结论无法与使用完整库的文献对齐。做流程验证可以,做结论不行。

第二,不适合需要当代人群分布的研究。 记录来自 1970 至 80 年代的美国住院患者,那个年代氟卡尼等 Ic 类抗心律失常药正被广泛用于抑制室性早搏,而这类药物后来被证明会增加死亡率。药物背景会重塑异位搏动的形态与频次,这一点没有任何协变量可以校正。

第三,不适合室上性心律失常与房颤研究。 官方说明房性早搏不区分于正常窦性搏动,注释粒度只到「正常 / 室性」两级。任何需要房性标签的任务,在这里都没有真值。

第四,不适合把它当作现代深度学习的训练集。 公开部分只有一条记录、一千余个室性搏动,类别极不平衡。即使买到完整库,一百五十五条记录在现代意义上仍然是一个小样本评测集,而不是训练集。

§2 数据构成与规格

2.1 八类分层:类别本身就是标签

AHA 数据库的组织方式和多数心电库不同。多数库是一条记录对应一个患者、一个诊断;这里是一条记录对应一个「最高异位等级」,同一个等级里十条记录彼此并列,谁也不比谁更重。八类的划分依据是记录中出现的最高级别室性异位,从完全无异位一直到室颤。

这个设计的好处是评测变得极其简单:一个检测器在某一类上的表现,就是它在十条记录上的汇总,类别之间还可以画出一条从易到难的曲线。坏处是类别内部异质性被抹平——同样是「室性心动过速」类的十条记录,发作次数、持续时间、形态可能相差很远,而元数据里没有任何一项告诉你差多少。

类号 名称 记录号(开发集) 判据 短版本号
1 无室性异位 1001–1010 三小时内未见室性异位搏动 1201–1210
2 单形性室性早搏 2001–2010 仅有形态单一的孤立室早 2201–2210
3 多形性室性早搏 3001–3010 孤立室早出现两种以上形态 3201–3210
4 室性二联律与三联律 4001–4010 室早呈二联或三联规律出现 4201–4210
5 R-on-T 型室早 5001–5010 室早落在前一搏动 T 波上 5201–5210
6 室性成对搏动 6001–6010 连续两个室性搏动 6201–6210
7 室性心动过速 7001–7010 连续三个以上室性搏动 7201–7210
8 室性扑动与颤动 8001–8010 心室节律失去可辨认的 QRS 8201–8210

需要说明的是,上表第三列是开发集的编号,PhysioNet 目录里对应的 RECORDS 清单还并列给出了短版本号(第二位为 2),两者在注释内容上完全一致,只差注释前那段无标注信号的长度。这一点在 §2.4 的版本表里会展开。

2.2 字段与记录的完整字典

整个数据库在 WFDB 里只有三种文件:头文件记录信号几何与量化参数,数据文件存原始采样,注释文件存逐搏标记。没有 CSV、没有 JSON、没有患者表。下面逐个字段说清楚。

字段 / 文件 所属 含义 取值或单位 在本库里的实际情况
记录名 文件名 四位数字,首位为类号 1xxx 至 8xxx 首位 0 表示被剔除样本
0001 首行第 1 列 .hea 记录名 字符串 与文件名一致,无后缀
首行第 2 列 .hea 信号路数 整数 全库固定为 2
首行第 3 列 .hea 采样率 每通道每秒点数 全库固定 250 Hz
首行第 4 列 .hea 采样点数 整数 长版本二百七十万点,短版本五十二万五千点
信号文件名 .hea 数据文件 文件名 两条导联共用一个 .dat
格式 .hea 存储格式码 212 MIT 212,每三个字节存两个 12 位样本
增益 .hea 每毫伏采样计数 ADC 单位/毫伏 200,对应 10 mV 量程、12 位
位分辨率 .hea ADC 位数 位 12
ADC 零点 .hea 零电压对应的采样值 整数 0
初始值 .hea 首样本值 整数 各记录不同,为直流偏置
校验和 .hea 首样本校验 整数 用于判断文件是否完整
块大小 .hea 分块长度 采样点 0,表示不分块
描述 .hea 信号名 字符串 统一写作 ECG
注释文件 .atr 逐搏标记 WFDB 注释二进制 只覆盖末三十分钟
注释时刻 .atr 采样点序号 整数 从 0 起算,全记录时间轴
注释类型 .atr 搏动类别 注释码 正常 N、室性 V、起搏 /、无法分类 Q 等
房性早搏 .atr 是否单独标记 布尔 否,并入正常窦性搏动
患者信息 无 年龄、性别、诊断 无 数据库不提供
用药信息 无 抗心律失常药物 无 数据库不提供
导联位置 无 电极贴放方案 无 页面未逐条说明

这张表里最需要注意的是「注释类型」与「房性早搏」两行。多数使用者的第一反应是「有 .atr 就有全部节律信息」,实际上注释粒度被刻意压缩到了检测器评测所需的最低限度:只需要区分该检出与不该检出。至于这个搏动是房早还是窦性,对当时的任务不重要,所以官方明确说不区分。

2.3 一条记录的完整解剖

以 PhysioNet 上真实可下载的 0001 为例,从文件名到注释,把一条记录从头拆到尾。它的头文件只有两行主体,却包含了全部几何与量化信息。

第一层,头文件。

0001 2 250 2700000
0001.dat 212 400 12 0 -83 -16218 0 ECG
0001.dat 212 400 12 0 -21 6575 0 ECG

首行说明:记录名 0001,两路信号,每秒 250 点,共 2,700,000 点。2700000 除以 250 得 10800 秒,正好三小时。后两行各描述一路导联:同一个数据文件,212 格式,每采样 400 个 ADC 单位对应 1 毫伏,12 位,零点为 0,初始值分别是 -83 与 -21,校验和分别为 -16218 与 6575。注意增益是 400 而不是通常的 200——官方页面写的是 10 mV 量程,而这里每毫伏 400 单位配 12 位,意味着实际可用量程约 10.24 毫伏,与页面描述一致。

第二层,数据文件。

0001.dat 未压缩 7.7 MB。212 格式每三个字节压两个样本:第一个样本取第一个字节的低 12 位,第二个样本取第二个字节加第一个字节高 4 位。两路导联交错排列,每路都是一个 12 位有符号整数。要还原成毫伏,把整数除以 400。

第三层,注释文件。

0001.atr 共 4.5 KB。用 WFDB 读取后,第一条注释出现在第 2,250,047 个采样点,即 9000.188 秒;最后一条在 2,699,891 个采样点,即 10799.564 秒。两者相减是 1799.4 秒,接近三十分钟。也就是说,注释严格落在第三小时的后半段,与官方描述一致。整条记录共有 2278 个搏动注释,其中 2164 个是正常搏动,114 个是室性异位搏动。按三十分钟折算,室性异位发作率约为每小时二百二十余次。

解剖层 文件 体积 读出来的东西 容易漏掉的关键点
头文件 0001.hea 98 B 两路×三小时×250 Hz 增益 400 而非 200
数据 0001.dat 7.7 MB 双导联 12 位采样 212 格式,三字节两样本
注释 0001.atr 4.5 KB 2278 个搏动标记 起点在 9000 秒处
清单 RECORDS 10 B 开放记录只有两条 0201 是同一条的短版
清单 RECORDS-development-set 800 B 160 行,长短各半 首位数字是类号
清单 RECORDS-test-set 750 B 150 行,R-on-T 类缺一半 测试集长期封存
校验 SHA256SUMS.txt 764 B 十个文件逐一校验 官方声明跨介质验证过
注释表 ANNOTATORS 31 B 只此一种注释 无事件级标注

2.4 版本矩阵:同一个记录名,三个不同的东西

这是该库最容易踩错的地方。同一份三小时录音,在数据库里有短版与长版两种载体;开发集与测试集又各有一套编号;再加上开放的那条被剔除样本,一共出现了三套数字规则。下表把它们摊平。

数据集 长版编号规则 短版编号规则 条数 覆盖字节
开发集(系列一) 首位类号 + 0 + 两位序号 首位类号 + 2 + 两位序号 80 首位 1–8
测试集(系列二) 首位类号 + 1 + 两位序号 首位类号 + 3 + 两位序号 75 首位 1–8
被剔除样本 0001 0201 1 首位 0
PhysioNet 开放 0001 0201 1 仅首位 0

读法:看到 4207,第二位是 2,所以它是开发集第 7 类记录 4007 的短版;看到 6102,第二位是 1,所以是测试集第 6 类的长版。测试集在 R-on-T 类只有五条,所以 51xx 与 53xx 都只有五位尾号,不是缺文件。

版本 注释前无标注段 总时长 采样点数 适用场景
长版(第二位 0/1) 两小时半 三小时 二百七十万点 连续检测、长时程鲁棒性评测
短版(第二位 2/3) 五分钟 三十五分钟 五十二万五千点 快速回归、逐段复算
开放长版 0001 两小时半 三小时 二点七百万点 流程自测、教学
开放短版 0201 五分钟 三十五分钟 五十二万五千点 与长版对照,验证裁剪逻辑

一个实用的核对办法是把两条记录相减:0201 的五十余万个采样点,正好等于 0001 最后 2100 秒的信号,即 0001 的第 2,175,000 点到最后一点。如果你自己写的读取程序在这两条上对不齐,说明裁剪逻辑写错了。

核对项 0001 应有值 0201 应有值 对不齐说明什么
采样点数 二百七十万 五十二万五千 头文件读错或块大小处理错
注释条数 2278 2278 少了几条,说明注释起点偏移没处理
首注释时刻 9000.188 秒 0.188 秒 短版时间轴重新从零开始
末注释时刻 10799.564 秒 1799.564 秒 差 9000 秒,正好是裁剪掉的部分
正常搏动数 2164 2164 同上
室性搏动数 114 114 同上

这张表值得在动手之前先抄一遍。它把「短版是长版的尾巴」这一句话,拆成了六行可以对得上的数字。

2.5 与同类资源的字段差异

同期和后来的几个心电库常被混为一谈。它们最实质的差异不在采样率,而在「一条记录代表什么」。

资源 条数 × 单条时长 导联 标注覆盖 组织方式 主要用途
AHA(本库) 约 80 × 3 小时 2 末 30 分钟 按室性异位等级八类 室性心律失常检测器评测
MIT-BIH 心律失常库 48 × 30 分钟 2 全程 按来源与心律混编 通用心律失常分类
欧洲 ST-T 库 90 × 30 分钟 2 描记级 + 搏动级 按 ST 事件分层 缺血与 ST 改变
克赖顿大学室速库 35 × 8 分钟 2 全程 按室速类型 室速终止算法
心室颤动数据库 80 × 分钟级 2 全程 按除颤器适应证 心律失常分析与除颤测试
MIT-BIH 房颤库 25 × 10 小时 2 搏动 + 节律 按房颤发作 房颤检测

把这张表读一遍就能看出 AHA 的独特处:它是这一列里唯一把「单条时长」做到三小时、同时把「标注」压到三十分钟的库。前者保证评测有足够长的背景,后者保证标注成本可控。MIT-BIH 心律失常库走的是另一条路——单条短、条数少、但全程逐搏标注,因此更适合做分类研究而不是长时程检测。两者的数字不能互相套用,这一点在 §6.1 的关系图谱里还会展开。

§3 它是什么:一份标准,而不是一个数据仓库

3.1 组织方式:资助方、执行方、发行方分属三家

AHA 室性心律失常数据库最容易被弄错的是它的「归属」。问卷里问「谁做的这个数据集」,常见答案有四个:PhysioNet、MIT、美国心脏协会、ECRI。四个都对,但都不是完整的答案。

角色 机构 做了什么 今天还管不管
资助与名义所有者 美国心脏协会(AHA) 出钱、定题目、组织专家 不再维护,仅保留名义
配套资助 美国国立心肺血液研究所 与 AHA 共同资助建设 否
技术执行 华盛顿大学(圣路易斯) 设计采集协议、数字化、集中标注 否
商业发行 ECRI 数十年间以多种介质分发,负责销售 是,目前唯一合法来源
当代托管(部分) PhysioNet 托管一条被剔除样本的转换版本 是,但只托管公开那一部分

这种三角结构今天已经很少见了。当代数据集通常由一家机构同时承担采集、加工、发布与维护,出了问题找得到人。AHA 这份库的奇特之处在于,技术团队早已解散,资助方退出,唯一还在运行的是商业发行方——而它的价格、条款与交付方式,都不在 PhysioNet 页面上。

3.2 时间线:从动工到封存

时间 事件 对使用者的意义
1975 年前后 MIT 与贝斯以色列医院开始心律失常分析合作 同期参照库 MIT-BIH 起步更早
1970 年代末 AHA 与 NHLBI 出资,项目在华盛顿大学启动 采集协议定稿
1980 MIT-BIH 心律失常库首次发行 通用心律失常评测有了第一个基准
1982 AHA 开发集首批发布 室性心律失常评测有了第二个基准
1985 AHA 数据库完成,共八十条开发集 版本从此冻结
1985 年后 未做任何修订或更新 所有后来的转换都是格式层面
约 2003 测试集解禁 七十五条记录首次可用于评测
2003-06-06 PhysioNet 发布 v1.0.0 公开一条被剔除样本的转换版本
2008-04-05 头文件修订 仅格式层修正,信号未动
2012-08-06 补入开发集与测试集清单 使用者第一次能看到全量编号规则
2019-02-20 补入 SHA256 校验和 跨介质核对成为可能

这张表里有一个细节值得留意:从 1985 年封版到 2012 年补上清单,中间二十七年里,PhysioNet 页面上并没有告诉你八十条记录分别叫什么名字。早期使用者手上的编号,多半是从论文附录或 ECRI 光盘里抄来的。这种「数据早就有、索引后补」的状态,是那一代数据库的常态。

3.3 它在评测史里的位置

如果把室性心律失常检测器的评测史按十年切开,1980 年代是「固定记录集」的时代。在这之前,各实验室用自家医院的片段互相比较,结论无法迁移;在这之后,才有了「同一批记录、同一套指标、跨实验室可比」的范式。

AHA 库在这个范式里扮演的是「深」的那一侧。MIT-BIH 心律失常库解决的是广度问题:四十八条记录覆盖各类心律,谁都能找到自己关心的那一类。AHA 解决的是深度问题:一条记录持续三小时,足以让检测器在真实背景里跑很久,暴露它在长时间运行下的漂移与误检累积。两者不是替代关系,而是评测的两个维度。

评测维度 短片段库更长于 AHA 更长于
类别覆盖 全,四十八类心律 窄,只做室性异位
单类样本量 少,一类常常只有一两条 多,每类固定十条
连续运行稳定性 测不出来 三小时连续背景,暴露累积误差
每小时频次统计 无法计算 可从末三十分钟折算
标注完整性 全程逐搏 仅末段
复现论文数值 难度中等 依赖版本,易错

3.4 三种「拿到」的含义

在讨论授权之前,先把「拿到」这个词拆开。对这份库来说,拿到有三种完全不同的含义,代价与权限也完全不同。

拿到的方式 内容 legality 典型用途
从 PhysioNet 下载 1 条被剔除样本的两份片段 ODC-BY 1.0,可再分发 流程验证、教学、读格式
从 ECRI 购买 完整开发集、测试集及其短版 商业许可,条款由 ECRI 定 正式评测、论文报告
从第三方镜像获取 来源不明,未经 ECRI 授权 授权状态存疑 不建议,结论不可引用

第二行与第三行的区别,正是这篇词条要在多处强调的:PhysioNet 页面明确写了完整库「未由 ECRI 授权在任何网站提供下载」,这意味着网上流传的所谓完整 AHA 数据包,多半绕开了授权。用这样的数据写出的结果,在同行评议时是一个可以被质疑的点。第三行不是道德问题,是能不能站住的问题。

§4 质量与特色:为什么三十年过去还在被引用

4.1 长时程与逐搏标注的组合是稀缺品

心电数据库按「时长」和「标注粒度」两轴一画,绝大多数落在左下角:短片段、粗标注。中间偏上是「短片段、逐搏标注」,MIT-BIH 心律失常库就在这里。右下角是「长时程、无标注」,现代可穿戴设备产生的大量数据属于这一类。右上角——长时程且逐搏标注——几乎是空的,AHA 就站在这个角落里。

这个位置的价值不在于数据量,而在于它让某一类问题第一次变得可回答:检测器在真实背景里连续运行几十分钟,会不会因为基线漂移、肌电干扰或导联接触不良而持续误报。短片段测不出这种问题,因为误报往往需要时间累积才会显现。

时长 标注粒度 代表资源 能回答的问题
分钟级 粗 大多数公开片段 形状分类
分钟级 逐搏 MIT-BIH 心律失常库 分类、检测精度
小时级 无 现代可穿戴数据 流行度、上游信号质量
小时级 末段逐搏 AHA(本库) 连续检测稳定性、频次折算
小时级 全程逐搏 少数临床研究数据,多不公开 长时程事件统计

4.2 八类分层让「难度」变成一条可以走的阶梯

多数评测集把所有记录混在一起,报一个总体数字。AHA 的分层结构允许另一种玩法:不报总体,而是报一条从第 1 类到第 8 类的曲线。

一个合理的检测器,在这条曲线上应该表现出特定的形状——第 1 类(无异位)误报率低,第 2 到 4 类检出率逐步稳定,第 5 类(R-on-T)最难,第 7、8 类(室速、室颤)因为形态极端反而容易检出。如果某人在第 1 类上误报极高、在第 8 类上检出率极低,曲线的形状就会出错,而这比一个总体 F1 更能说明问题在哪里。

类别 检测难度来源 常见的失败模式 曲线上的预期形态
1 无室性异位 背景噪声导致的假阳 把肌电尖峰当成室早 低且平
2 单形性室早 与正常搏动的形态差 宽 QRS 正常搏动被误判 平稳
3 多形性室早 形态多变,无统一模板 模板法在这里普遍失效 明显下降
4 二联律三联律 节律规律,可被规则法利用 规则法在这里虚高 平稳甚至回升
5 R-on-T 事件极短,落在 T 波上 漏检率最高的地方 低谷
6 成对搏动 两个连发,边界判定 把一个算两个或反之 平稳
7 室速 连续宽 QRS 与伪差混淆 回升
8 扑动与颤动 无 QRS,需另立判据 QRS 检测器直接失灵 取决于是否换算法

4.3 案例:0001 这条落选记录

PhysioNet 上能公开下载的 0001,是理解这份库最好的入口,而它自己就是一段被剔除的故事。1980 年,建库方向当时的一位创作者要了这条录音,它原本是某个类别的候选,按与正式记录完全相同的方法完成了数字化与逐搏标注。标注完成后,专家发现它包含的异位搏动等级高于它被提名的那一类,于是被排除出了数据库。

这段经历留在文件里:编号 0001 与 0201 都是新编的,不属于八类中的任何一类。它不是「第 1 类的样例」,而是「一个差一点入选的失败者」。正因为是失败者,它反而成了唯一可以在公开渠道看到的样本。

按 §2.3 的解剖,这条记录的三十分钟里有 2164 个正常搏动和 114 个室性异位搏动。这个比例对应到等级上,大约是孤立室早的量级——单看数字,它落在第 2 类附近;但既然被判定「高于候选类别」,说明判定的依据不只是总数,还包括形态与联律。这正是 AHA 分层逻辑的微妙处:最高等级是一个复合判断,不是简单的计数阈值。

§4.3 的案例在后面还会被引用三次:一次在 §7.3 说明为什么单条记录不能代表全库,一次在 §8.2 说明公开样本与商业发行之间的关系,一次在 §9.2 的最短流程里作为实际操作对象。这三次引用都指向同一件事——这条记录的价值在于「能下载、能验证」,而不在于「能代表」。

属性 数值 说明
原始来源年份 1980 建库方创作者提供
入选状态 被剔除 异位等级高于候选类别
原始编号 无 0001 与 0201 为后续新编
时长 三小时 10800 秒
采样率 250 Hz 每通道
导联数 2 页面未说明贴放位置
注释覆盖 末三十分钟 从 9000.188 秒起
搏动总数 2278 含正常与室性
正常搏动 2164 占绝大多数
室性异位搏动 114 折合每小时约二百二十余次
文件体积 7.7 MB + 4.5 KB 数据与注释
许可 ODC-BY 1.0 可再分发,须署名

4.4 质量的两个来源:统一协议与集中标注

这份库的标注质量来自一个在今天已经很难复制的组织方式:多家医院按同一份采集协议录制,录完的磁带全部送到同一个中心,由同一批专家用同一套规则逐搏标注。这保证了「第 3 类的十条记录」在标注口径上是可比的。

代价是这套流程无法扩展。集中标注意味着所有记录都得物理运到一个地方,标注员的产出受限于人力,一旦项目结束,标注规则就再也不会被重新解释。后来的数据库大多改成了分布式标注或众包,规模上去了,口径一致性却下降了。

质量维度 这份库的做法 当代常见做法 差异后果
采集协议 统一,多家医院共用一份 各机构自行其是 跨记录可比性更高
标注地点 集中一处 分布式或众包 口径一致但不可扩展
标注人数 少量专家 大量标注员加质控 个体差异更小
标注轮次 一次性 多轮迭代 无版本演进
规则文档 内部使用 常随数据公开 复现细节需靠猜
更新周期 封版后不动 持续增补 引用时不必注明版本

4.5 稀缺性还能维持多久

右上角之所以空,是因为长时程逐搏标注的成本一直没有降下来。一份三小时记录,专家逐搏看一遍至少需要数小时,再加上复核,单条记录的人力成本在今天的价格体系下仍然不低。众包可以降低初级标注的成本,但室性异位与伪差的区分恰好是众包最不擅长的部分。

这解释了为什么三十年过去,这个位置几乎没有新来者。现代大规模心电数据集(例如各种可穿戴队列)在上游数据量上远超 AHA,但标注粒度普遍粗;标注精细的临床研究数据,又因为隐私原因极少公开。AHA 站在两个短板的交叉处,这个位置至今仍是它独有。

竞争资源 时长 标注 条数 能否替代 AHA
现代可穿戴队列 数天至数周 弱标签或无 数十万条 不能,标注不够细
公开心律失常评测集 分钟级 逐搏 数十条 不能,时长不够长
医院内部 Holter 数据 24 小时 报告级 数千条 不能,不公开
电生理实验室记录 分钟级 事件级 数百条 不能,场景不同
起搏器程控记录 数天 标记级 数千条 不能,人群高度筛选

§5 怎么拿到:公开部分与商业部分

5.1 公开部分的边界

PhysioNet 页面把这层关系写得很直白:完整 AHA 数据库没有由 ECRI 授权在 PhysioNet 或任何其他网站提供下载,只能向 ECRI 购买。页面上能下载的,是 0001 与 0201 两个文件组,外加四个清单与一个校验文件,总共 9.2 MB。

所以「公开比例」的正确说法不是「百分之一」这种精确比,而是「一条被剔除样本记录」。按记录数算,开发集八十条加测试集七十五条,一共一百五十五条,公开的是一条落选记录,它在任何一批里都不占位置。用「155」这个数字做分母在数学上说得通,但在语义上会误导——它从来不是那 155 条中的一员。

组成部分 是否公开 条数 获取方式 授权主体
被剔除样本 0001 是 1 PhysioNet 直接下载 ODC-BY 1.0
被剔除样本 0201 是 1(同一条的短版) PhysioNet 直接下载 ODC-BY 1.0
开发集长版 否 80 向 ECRI 购买 ECRI 商业许可
开发集短版 否 80 向 ECRI 购买 ECRI 商业许可
测试集长版 否 75 向 ECRI 购买 ECRI 商业许可
测试集短版 否 75 向 ECRI 购买 ECRI 商业许可

注意第四行与第六行:短版与长版不是两份独立数据,而是同一条录音的两种裁剪。购买时如果只买长版,自己按 §2.4 的规则裁出短版是完全可行的,但要注意时间轴与注释起点的重算。

5.2 下载命令

PhysioNet 提供了三种下载方式。对 9.2 MB 的包,任何一种都够用。下面三条命令都可以直接跑。

#-- 方式一:整包下载并解压
wget -r -N -c -np https://physionet.org/files/ahadb/1.0.0/
ls -lh physionet.org/files/ahadb/1.0.0/
#-- 方式二:AWS 命令行同步,适合脚本化
aws s3 sync --no-sign-request \
  s3://physionet-open/ahadb/1.0.0/ ./ahadb
du -sh ./ahadb
#-- 方式三:只取需要的几个文件
mkdir -p ahadb && cd ahadb
for f in 0001.hea 0001.dat 0001.atr 0201.hea 0201.dat 0201.atr \
         RECORDS RECORDS-development-set RECORDS-test-set ANNOTATORS SHA256SUMS.txt; do
  curl -sSL -O "https://physionet.org/files/ahadb/1.0.0/$f"
done
ls -l

下载完成后第一件事是核对校验和。官方给的 SHA256SUMS.txt 覆盖十个文件,包括两份 .hea 与 .dat、.atr、四个清单、ANNOTATORS。

#-- 校验:进入文件所在目录后执行,逐个比对
sha256sum -c SHA256SUMS.txt 2>&1 | tail -12

如果输出里有任何一行不是 OK,不要再往下走。磁带时代的文件,最大的一类问题就是某一盘磁带读出来差了几百字节,肉眼看不出来,跑算法时表现为莫名其妙的漂移。

5.3 用 WFDB 读一条记录

WFDB 是 PhysioNet 的官方工具库,Python 版一条命令就能装好。下面的代码把一个完整的三小时记录与它的注释一起读进来,并核对官方页面给出的几何参数。

#-- 读取 0001 并核对几何参数
import wfdb
import numpy as np

rec = wfdb.rdrecord("ahadb/0001")
print(rec.fs, rec.sig_len, rec.n_sig)        #-- 预期 250 2700000 2
print(rec.sig_name, rec.fmt)                  #-- 预期 ['ECG','ECG'] ['212','212']

#-- 只取末三十分钟,不把整个 7.7 MB 数组常驻内存
seg = wfdb.rdrecord("ahadb/0001", sampto=int(30 * 60 * 250), physical=True)
print(seg.p_signal.shape)                     #-- (450000, 2)
#-- 读注释并做最基本的分布核对
import wfdb
from collections import Counter

an = wfdb.rdann("ahadb/0001", "atr")
print("首注释秒", an.sample[0] / 250)         #-- 预期 9000.188
print("末注释秒", an.sample[-1] / 250)        #-- 预期 10799.564
print("注释条数", len(an.sample))             #-- 预期 2278

c = Counter(an.symbol)
print(c)                                      #-- 预期 N 2164 / V 114

两段代码跑完,你应该拿到与 §2.3 表格完全一致的数字。如果拿不到,问题一定出在读取环节,不在数据本身——官方校验和这一层已经把数据完整性问题挡掉了。

5.4 从注释折算每小时频次

这是这份库最实用的一步换算。注释只覆盖三十分钟,而临床关心的单位是每小时。代码里把窗口长度作为参数,换算方法写死在函数里,避免各处口径不一。

#-- 末三十分钟的室性异位折算为每小时次数
import wfdb
from collections import Counter

def pvc_per_hour(record_path):
    an = wfdb.rdann(record_path, "atr")
    c = Counter(an.symbol)
    v = c.get("V", 0)
    span_min = (an.sample[-1] - an.sample[0]) / 250 / 60
    return v / span_min * 60, span_min, v

rate, mins, v = pvc_per_hour("ahadb/0001")
print(f"窗口 {mins:.2f} 分钟,室性搏动 {v} 次,折算 {rate:.1f} 次/小时")

以 0001 为例,窗口 29.99 分钟、114 次室性搏动,折算约每小时 228 次。这个数字落在「频发室早」的区间边缘,与 §4.3 的案例中「被判定高于候选类别」的说法在方向上一致——但必须强调,折算值不等于三小时全程的发作率,前两小时半的异位情况没有任何记录。

5.5 常见读取陷阱

陷阱 现象 原因 处理
把 9000 秒当成信号起点 末段波形对不上 注释时间轴从全记录起点算 用绝对采样点索引,不要重排
短版首注释不是 0 0201 的首注释在 0.188 秒 裁剪点落在两次搏动之间 保留绝对时刻,不要强行归零
增益用 200 幅值整体偏大一倍 混淆了本库与 MIT-BIH 的增益 读头文件,不要写死
用 sig_len 推算注释长度 注释只占末段 二者本来就不等 分别读,分别核对
忽略 212 格式的奇偶样本 两路信号错位 自己手写了解压器 一律用 WFDB 读
把 V 当作唯一异位码 少数记录还有其他码 注释表因记录而异 先统计符号,再决定映射

5.6 没有数据时能做什么

在拿到完整库之前,最合理的做法是先把整条流水线在 0001 上跑通:读、转、检测、比对、出表。等 ECRI 的数据到了,换路径就能直接出结果,不用再花时间调格式。这也是§4.3 的案例被写进这篇词条的第二个理由——它的首要用途是「把工具链跑对」。

没有完整库时的问题 能在 0001 上解决的 解决不了的
我的读取代码对不对 能,与官方六个数字逐一核对 其他记录的格式变体
我的检测器会不会漂 能,三小时连续信号足够看出漂移 不同类别的难度差异
我的报告模板格式对 能,用真实数字填一遍 类别分层报告
我的结论能不能发表 不能 必须有完整库或明确声明只用公开样本

§6 与库内条目的关系

6.1 关系图谱

这个库在本站心电类条目里处于一个特殊位置:它是评测史的起点之一,但公开内容极少。与它关系最近的是 MIT-BIH 心律失常库,两者常被并列引用,实际上分工截然不同。

关联条目 关系类型 关键差异 何时用哪个
MIT-BIH 心律失常库 同期兄弟库 48 条 × 30 分钟,全程逐搏;AHA 80 条 × 3 小时,仅末段逐搏 分类研究用前者,长时程评测用后者
心室颤动数据库 任务部分重叠 后者专做室颤与室速的分析与除颤测试 室颤专项用后者
克赖顿大学室速库 任务部分重叠 后者专注室速终止算法 终止策略研究用后者
欧洲 ST-T 库 标注范式类似 后者以 ST 事件为核心 缺血研究用后者
心律失常心电数据集 当代替代 规模更大、格式统一、开放 现代模型训练用它
MIT-BIH 房颤库 任务互补 后者专做房颤,AHA 不做房性区分 房颤任务用后者

6.2 检索路径

按用途检索,比按名字检索更省时间。下面这张表是几种常见意图对应的入口。

你的意图 建议先看哪一条 理由
找长时程真实心电验证流程 本篇 §5.2 9.2 MB,几分钟到位
找逐搏标注做分类 MIT-BIH 心律失常库 全程标注,类别更全
找室速与室颤的连续片段 心室颤动数据库 专做此类,条数更多
找现代深度学习训练集 心律失常心电数据集 规模与格式更适合训练
找 ST 段改变 欧洲 ST-T 库 标注围绕 ST 事件
找可穿戴长时程数据 可穿戴类条目 时长更长,标注更弱

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

在给这份库打分之前,要先纠正一个位置上的错位:它常被当成一个「数据集」来评价,而它实际是一份「评测标准」。两者的评价维度完全不同。

评价一个数据集,看的是样本量、人群代表性、标注一致性、缺失率;评价一份评测标准,看的是记录是否稳定、条件是否明确、结果是否可复现。用前一套尺子量后者,必然得出「样本太少、人群过时、标注不全」的结论,而这三点在 1985 年都是被明确接受的设计取舍,不是缺陷。反过来,用后一套尺子量它,才会看到它真正的强项:条件固定、编号规则明确、校验和跨介质验证。

这不是为它辩护,而是说清楚「误判」发生在哪一步。下面的五维评分与偏差枚举,都已按「评测标准」这把尺子重新校准。§4.3 的案例在这一节会被再次引用,因为它正是「标准之外的样本」如何被误读的典型。

7.1 五维评分

维度 分数 理由 主要扣分点
可获得性 2 / 5 完整库须付费,公开仅一条 无免费全量渠道
信号质量 4 / 5 250 Hz 对 QRS 足够,磁带数字化可控 低频失真,个别段落脱落
标注质量 4 / 5 集中标注,口径统一 不区分房早,仅覆盖末段
元数据完整度 1 / 5 无年龄、性别、用药、诊断 无法做任何分层
可复现性 5 / 5 版本冻结,校验和跨介质验证 无,这是它最强的一项
综合(加权) 3.2 / 5 按评测标准打分,而非按数据集打分 可获得性与元数据是硬伤

这张表的加权方式是:可复现性与标注质量合计占四成,可获得性与元数据合计占四成,信号质量占两成。若换成「数据集」的权重,分数会更低,但那不是它该被评价的方式。

7.2 与当代基准的对比

对比项 AHA(本库) 当代公开心电库 差距的性质
公开可下载量 1 条 数千至数十万条 量级差
单条时长 三小时 十秒至数天 AHA 偏长,当代两极分化
标注粒度 逐搏,仅末段 逐搏或粗标 当代更全,AHA 更精
人群代表性 1970–80 年代美国 多为近十年 年代差
元数据 几乎没有 含年龄性别诊断 结构性差距
版本稳定性 封版后不动 持续更新 AHA 更利于复现
许可 商业许可 + 部分开放 多为 ODC-BY 或 CC AHA 更严

7.3 已知的、可枚举的偏差

选择偏差。 记录来自 1970 至 80 年代的美国住院患者,且是为「检测器评测」而选,不是为流行病学抽样。八类分层本身就意味着每一类的频次被人为拉平,不能用来估计人群中各类室性异位的实际比例。

年代偏差。 那个年代氟卡尼等 Ic 类抗心律失常药被广泛用于抑制室性早搏,这类药物会改变异位搏动的形态与频次。记录里出现的 PVC 形态,可能有一部分是药物作用下的样子,而这个信息在元数据里完全没有。

标注粒度偏差。 房性早搏并入正常窦性搏动,等于告诉使用者「这一类不存在」。任何在 AHA 上训练的室上性模型,学到的都是错误的负类。

样本代表性问题。 §4.3 的案例里那条落选记录,被不少人当作「AHA 的代表样本」。它不是,它是一条被判定不合格的记录,而且编号规则与正式记录不同。

偏差类型 表现 影响哪类结论 能否校正
选择偏差 八类各十条,人为拉平 人群频次估计 不能
年代偏差 药物背景与今天差异大 形态学与频次 不能,无协变量
标注粒度 房早并入正常 室上性研究 不能
样本代表 公开样本是落选记录 泛化结论 能,只需说明
设备偏差 记录仪型号未公开 硬件相关分析 不能
导联位置 页面未说明贴放方案 形态比对 不能

7.4 外部验证矩阵

验证方式 能否在公开数据上完成 需要的额外条件 结论强度
与 MIT-BIH 心律失常库交叉测试 部分能 两者都要有,AHA 只有一条 弱,只能说明读取正确
与当代可穿戴数据交叉测试 能 需自备当代数据 中,可观察年代漂移
与临床报告核对 不能 无报告可核 不可行
与另一实现比对 能 两个独立实现 中,可查读取错误
与官方论文数值比对 部分能 需找到对应版本 弱,版本差异大
重复运行一致性 能 无 强,确定性数据应当逐位一致

7.2b DAIMS 二十四项对照

这里用数据管理指标(DAIMS)的常用条目逐个过一遍,看官方在每一项上交代了什么。判断标准只有一条:PhysioNet 页面、四个清单与头文件里有没有白纸黑字。

维度 判定 依据
目的与用途说明 是 页面标题即写明用于室性心律失常检测器评测
采集方法描述 部分 说明为两导联动态心电,未说记录仪型号与导联贴放
采样率与位深 是 250 Hz、12 位、10 mV
变量清单 是 两路心电,头文件逐行给出增益与零点
单位说明 是 毫伏,通过增益 400 与 ADC 零点换算
记录长度 是 长版三小时、短版三十五分钟
标签体系 是 八类室性异位等级,加逐搏正常 / 室性
标签来源 部分 说明由专家逐搏标注,未说人数与流程
标签一致性 否 未报告标注者间一致性
受试者人口学 否 无年龄、性别
队列纳入排除标准 部分 仅说明每条记录须达到某级室性异位
采集时间跨度 部分 只说 1970 年代后期至 1980 年代
设备与厂商 否 未说明
滤波与预处理 部分 数字化参数给出,滤波设置未说
信号质量指标 否 无逐条质量评分
缺失数据处理 否 无缺失项说明
数据划分建议 是 开发集与测试集预先划好
代码可用性 部分 提供 WFDB 转换器,不提供分析代码
许可与访问条款 部分 公开部分为 ODC-BY,完整库条款在 ECRI
伦理审批 否 页面未提
知情同意 否 页面未提
资助来源 是 美国心脏协会与 NHLBI
版本与 DOI 是 v1.0.0,DOI 10.13026/C27P4P
已知限制 部分 未单列限制,限制散见正文

是 10 项,部分 8 项,否 6 项。缺得最多的是「人」这一侧:人口学、伦理、知情同意三项全无,而这恰恰是当代数据使用者最先要问的。

7.5 它为何能持续:因为长时程逐搏标注这件事,三十年来没有人用更低成本重做过

一份 1985 年封版、内容须付费购买、公开部分只有一条的数据集,在今天仍然出现在论文的方法章节里,原因不是它的质量无可挑剔,而是它占的那个位置一直没有被占领。长时程保证评测有真实背景,逐搏标注保证指标能算,两个条件同时满足的公开资源,三十年来几乎没有新增。当代数据在上游量上远超它,在标注精度上却普遍退了一步。

§8 生态位与历史

8.1 历史沿革:一次由学会主导的建库

1980 年代初的美国心电算法研究,面临一个具体问题:各家实验室的检测器都在自建数据上报告很高的准确率,但换个实验室就下降。学会层面的反应是资助一个公共评测集,让所有人都用同一批记录。

AHA 与 NHLBI 出钱,华盛顿大学执行,1970 年代末动工,1982 年发布首批,1985 年完成。这套流程在今天是标准的「基准数据集」做法,在 1982 年是新鲜的。同时期的 MIT-BIH 心律失常库走的是另一条路——由医院与研究机构自发建设,1980 年就发行了,比 AHA 早两年。

两者的差别也体现在命名上:MIT-BIH 是「机构缩写的并置」,AHA 是「学会名 + 任务描述」。前者像一个实验室的产物,后者像一份行业标准的编号。

8.2 商业发行:ECRI 的角色

库建成之后,维护与分发的责任交给了 ECRI。这家机构在数十年间把同一份数据以磁带、软盘、光盘、DVD 等介质反复重发,并在每一代介质上做过校验。PhysioNet 页面提到,官方提供的转换器可以把 AHA 格式转成 WFDB 格式,转完可以用官方 SHA256 核对——这些校验和「已用 AHA 数据库的九轨磁带、软盘、光盘与 DVD 的副本验证过」。

这一段话解释了一个常被忽略的事实:这份数据之所以在四十年后仍然可用,靠的不是某一个机构持续投入,而是一代代介质迁移时都有人做了核对。§4.3 的案例之所以能被反复引用,前提正是这条校验链没有断——0001 虽然是被剔除的记录,但它的数字化与标注方法和正式记录完全一致,校验也同样做过。

介质世代 大致年代 典型容量 对使用者的影响
九轨磁带 1980 年代 百兆字节级 需要专用驱动器,单位内部流转
软盘 1990 年代 兆字节级 需要多张盘,拷贝易出错
光盘 1990 年代末起 数百兆字节 首次可以单张交付全库
DVD 2000 年代 数吉字节 容量不再是瓶颈
网络分发 2000 年代起 不限 仅限公开部分,全库仍走商业渠道

8.3 测试集封存的意义

1985 年建库时,另有一组 75 条记录按完全相同的标准构造,被称为测试集或系列二。这一组直到约 2003 年才对外提供,理由是防止检测器被针对测试数据调优。

这个做法在今天看来平平无奇,在 1985 年是相当超前的。当时的算法评测普遍没有「留出集」的概念,很多人是在同一批数据上调参、报结果。AHA 把测试集物理封存近二十年,等于用组织手段保证了一次干净的外部验证。

集合 构造标准 条数 解禁时间 设计意图
开发集(系列一) 同一协议 80 1982 起 供开发者调参与自测
测试集(系列二) 同一协议 75 约 2003 防止针对测试数据调优
测试集 R-on-T 类 同一协议 5 同上 该类样本更稀缺

8.4 今天的生态位

四十年过去,这份库的定位已经从一个活跃的评测基准,变成了一个历史参照点。新论文里出现它,通常有三种情境:一是做跨库验证,用一个老库证明模型不是只对现代数据有效;二是做历史回顾,说明室性心律失常检测的评测范式是怎么来的;三是教学,用它的长短版本对照讲清楚「标注覆盖」这个概念。

这三种情境都不需要完整库,前两种靠文献与公开样本就能写,第三种更是只要一条记录。这也是为什么它的商业许可没有妨碍它继续被引用——真正需要完整库的场景,本来就有预算去买。

使用情境 需要完整库吗 公开样本够不够 常见误用
跨库验证 视声明而定 若明确说「只用公开样本」则够 声称用了全库,实际只用一条
历史回顾 不需要 够 把 1985 年的数字当成今天的水准
教学演示 不需要 够 把落选样本讲成代表样本
正式评测 需要 不够 用公开样本的分数与文献比
格式转换测试 不需要 够,且有校验和 忽略增益差异

§9 使用指引

9.1 三种角色的路径

算法研究者。 如果你的目标是发表一个有说服力的室性心律失常检测结果,第一件事不是下数据,而是决定要不要买完整库。只用公开样本,可以在方法章节写「在 AHA 公开样本上做了格式与流程验证」,但不能写「在 AHA 数据库上评测」。这两句话的分量差得很远。

设备厂商。 合规部门通常需要一份「第三方基准」的说明。这份库可以作为一个历史参照,但必须同时说明人群年代差异。更实际的做法是把它当作回归测试的一部分:每次算法更新,在 0001 上跑一遍,看三小时连续信号上的误检数有没有变化。

教学人员。 这份库最好用的地方是它的「不完整」:三十分钟注释加两小时半空白,正好用来说明为什么标注覆盖范围是数据集说明书里最重要的一行。配合 §2.4 的版本矩阵讲,学生很快就能理解「同一份数据为什么有三个名字」。

角色 首要动作 需要的材料 最容易犯的错
算法研究者 决定是否购买完整库 ECRI 报价与许可条款 用公开样本冒充全库
设备厂商 把 0001 加进回归测试 固定版本的算法与脚本 每次换数据导致结果不可比
教学人员 准备长短版本对照 0001 与 0201 两条都下 只讲波形不讲标注范围
数据工程师 先跑通读取与校验 WFDB 工具链 手写解压 212 格式
文献综述者 核对论文用的是哪一版 四个 RECORDS 清单 把长版与短版混为一谈
学生 从 §5.3 的代码开始 Python 与 wfdb 直接上深度学习,跳过格式

9.2 一条最短的可用流程

从零到跑出一个可核对的数字,最短路径是下面四步。整条流程在一台普通笔记本上不出五分钟。

#-- 第一步:下载并校验
mkdir -p ahadb && cd ahadb
for f in 0001.hea 0001.dat 0001.atr 0201.hea 0201.dat 0201.atr SHA256SUMS.txt; do
  curl -sSL -O "https://physionet.org/files/ahadb/1.0.0/$f"
done
sha256sum -c SHA256SUMS.txt 2>&1 | grep -c OK   #-- 应有 7 行 OK
cd ..
#-- 第二步:读记录,核几何
import wfdb
rec = wfdb.rdrecord("ahadb/0001")
assert rec.fs == 250 and rec.sig_len == 2700000 and rec.n_sig == 2
print("几何参数正确")

#-- 第三步:读注释,核分布
from collections import Counter
an = wfdb.rdann("ahadb/0001", "atr")
c = Counter(an.symbol)
assert len(an.sample) == 2278 and c["V"] == 114
print("注释条数与室性搏动数正确")

#-- 第四步:折算每小时频次
span_min = (an.sample[-1] - an.sample[0]) / 250 / 60
print(f"室性异位 {c['V'] / span_min * 60:.1f} 次/小时")

这四步走完,你手上就有了一个可引用的数字:在 0001 的末三十分钟里,室性异位搏动折算为每小时二百二十余次。这个数字的正确用法是「验证流程」,不是「报告性能」。§4.3 的案例在这里第三次出场,正是因为它是最容易拿到、也最容易被过度解读的那一条。

9.3 引用方式

引用这份库时,要区分三种情况:引用 PhysioNet 上的托管版本、引用原始数据库、引用 PhysioNet 平台本身。

引用对象 应引用的条目 何时用
原始数据库 AHA 数据库本身及其 1985 年封版说明,配合 ECRI 发行信息 声称使用完整库时
托管版本 PhysioNet 上的 ahadb v1.0.0,DOI 10.13026/C27P4P 只用了公开样本时
平台 PhysioNet 平台论文 作为数据来源的总体说明
版本 必须写明长版还是短版、哪一条记录 任何可复现的场景

最常见的引用错误是只写「AHA database」而不写版本与记录号。一旦读者去核对,会发现无论用哪一版都对不上——这不是数据的问题,是引用粒度的问题。

§10 AI 使用声明

项目 说明
文本生成 本文正文由 AI 辅助起草,经人工编辑核对结构与数字
数字来源 仅取自 PhysioNet 官方页面、目录清单、头文件与注释文件,以及一篇论文摘要
数字核验 记录条数、采样率、时长、注释覆盖范围、注释条数与符号分布均已在公开样本上核对
未核验项 完整库的逐条编号内容、ECRI 的售价与条款、测试集解禁的确切日期
图片 未使用任何来自该数据库的波形截图
医学判断 文中涉及的临床概念仅作背景说明,不构成诊疗建议
适用边界 本文不替代官方文档;使用前应以 PhysioNet 页面与 ECRI 交付条款为准
更新责任 若官方页面改动,以官方为准,本文不承诺同步

常见误读(避坑清单)

常见说法 实际 证据
PhysioNet 上的 ahadb 就是完整 AHA 数据库 只开放一条被剔除样本的两份片段 PhysioNet 页面「Original Database」段
0001 属于第一类(无室性异位) 不属于任何一类,是被剔除的候选记录 页面「The Sample Excluded Record」段
每条记录三小时都有标注 仅末三十分钟有逐搏注释 页面明确写「the final thirty minutes」
记录里只有正常与室性两种搏动 还有起搏、无法分类等其他符号 注释文件符号统计
短版本是另一批患者 同一条录音的前段被裁掉 页面关于第二位数字的说明
房性早搏有单独标注 房早并入正常窦性搏动 页面明确写不区分
增益是 200 0001 的头文件是 400 0001.hea 第 2、3 行
测试集也有一百条 只有七十五条,R-on-T 类只有五条 页面与 RECORDS-test-set 清单
这是一个免费数据集 完整库须向 ECRI 购买 页面首段
三小时信号的注释从零秒开始 0001 的首注释在 9000.188 秒 注释文件首条记录

FAQ

Q1:PhysioNet 上的 ahadb 是完整的 AHA 数据库吗?
不是。页面写得很直接:完整 AHA 数据库没有由 ECRI 授权在 PhysioNet 或任何其他网站提供下载,只能向 ECRI 购买。页面上能下的是 0001 与 0201 两组文件,共 9.2 MB。

Q2:为什么公开的偏偏是一条被剔除的记录?
1980 年,建库方的一位创作者把这条录音作为候选交了上来,按同一套方法完成了数字化与标注,之后发现它的异位等级高于候选类别,于是被排除。它成了唯一一条可以不受商业许可限制公开的样本。

Q3:短版和长版到底差在哪?
注释段完全一样,都是末三十分钟。差别在注释之前的无标注信号:短版保留五分钟,长版保留两小时半。编号上第二位数字不同,开发集长版为 1、短版为 2,测试集长版为 1、短版为 3。

Q4:它的采样率为什么是 250 Hz?
原始数据是模拟磁带,1980 年代统一数字化时选了每通道 250 Hz、12 位、10 mV 量程。这个采样率对 QRS 检测足够,对高频细节(如晚电位)不够,这正是它不适合某些精细形态研究的原因。

Q5:能不能用它训练深度学习模型?
公开部分只有一条记录、一千余个室性搏动,训练远远不够。即使买到完整库,一百五十五条记录在现代意义上仍是评测集而非训练集。更合适的用途是跨库验证。

Q6:它和 MIT-BIH 心律失常库能互相替代吗?
不能。MIT-BIH 是四十八条半小时记录、四十七名受试者,全程逐搏标注,适合分类研究;AHA 是八十条三小时记录,按室性异位等级分层,只标末段,适合长时程检测评测。

Q7:为什么它至今仍被引用?
因为「长时程 + 逐搏标注」这个组合三十年来几乎没有新的公开替代品。当代数据量大但标注粗,标注精的临床数据又因隐私不公开。它站在两条短板的交叉处。

Q8:记录里的患者信息有哪些?
几乎没有。没有年龄、性别、用药、诊断、导联贴放位置,也没有记录仪型号。这是它作为评测标准的设计选择,但对任何分层分析都是硬伤。

Q9:那个年代的药物背景会影响结果吗?
会,而且无法校正。1970 至 80 年代氟卡尼等 Ic 类抗心律失常药被广泛用于抑制室早,这类药物会改变异位搏动的形态与频次,而元数据里没有任何用药信息。

Q10:房性早搏在标注里怎么处理?
不区分。官方说明房性早搏并入正常窦性搏动,所以任何需要房性标签的任务,在这里都拿不到真值。

Q11:我该怎么核对下载到的文件没坏?
用官方的 SHA256SUMS.txt 逐文件比对。官方声明这些校验和已用九轨磁带、软盘、光盘与 DVD 的副本验证过,是这个库少见的可靠环节。

Q12:非商业研究可以免费拿完整库吗?
页面没有说明这一点。它只写了完整库须向 ECRI 购买,价格、条款与是否对学术用途有折扣,都必须直接向 ECRI 询问,不能从 PhysioNet 页面推断。

术语表

术语 英文 含义
室性早搏 Premature Ventricular Contraction, PVC 起源于心室的提前搏动,QRS 宽大畸形
室性异位 Ventricular Ectopy 一切起源于心室的异常搏动,包括早搏、成对、室速
室性心动过速 Ventricular Tachycardia, VT 连续三个以上室性搏动,心率通常超过每分钟一百次
室性扑动 Ventricular Flutter 极快的规则室性节律,波形呈连续正弦状
心室颤动 Ventricular Fibrillation, VF 心室电活动完全紊乱,无可辨认 QRS
R-on-T 现象 R-on-T Phenomenon 室性早搏落在前一搏动的 T 波上,易诱发室速室颤
二联律 Bigeminy 一个正常搏动后跟一个室早,交替出现
三联律 Trigeminy 两个正常搏动后跟一个室早,或一正常两室早,交替出现
成对搏动 Couplet 连续两个室性搏动
动态心电图 Holter Monitoring 连续二十四小时或更长时间的心电记录
逐搏标注 Beat-by-beat Annotation 对每一个搏动的类型与时刻单独标记
开发集 Development Set 供开发者调参自测的记录集合,本库为系列一
测试集 Test Set 留作外部验证、长期封存的记录集合,本库为系列二
212 格式 Format 212 每三个字节存两个十二位样本的压缩格式
头文件 Header File WFDB 中描述信号几何与量化参数的文件
注释文件 Annotation File WFDB 中存放逐搏标记的二进制文件
校验和 Checksum 用于判断文件完整性的摘要值
美国心脏协会 AHA 本库的资助方与名义所有者
急诊照护研究所 ECRI 本库的商业发行方,也是今天唯一合法来源
抗心律失常药 Antiarrhythmic Drug 用于抑制或终止心律失常的药物,本库时代以 Ic 类为主

附录 A:核心数字核对表

项 值 来源 来源层级
开发集条数 80 PhysioNet 页面 官方页面
开发集类数 8 PhysioNet 页面 官方页面
每类条数 10 PhysioNet 页面 官方页面
测试集条数 75 PhysioNet 页面 官方页面
测试集 R-on-T 条数 5 PhysioNet 页面 官方页面
单条时长 约三小时 PhysioNet 页面 官方页面
导联数 2 PhysioNet 页面与头文件 官方页面
采样率 250 Hz PhysioNet 页面与头文件 官方页面
位分辨率 12 位 PhysioNet 页面与头文件 官方页面
量程 10 mV PhysioNet 页面 官方页面
注释覆盖 末三十分钟 PhysioNet 页面 官方页面
短版前置无标注段 5 分钟 PhysioNet 页面 官方页面
长版前置无标注段 2.5 小时 PhysioNet 页面 官方页面
开放包体积 9.2 MB PhysioNet 页面 官方页面
0001 采样点数 2,700,000 0001.hea 官方文件
0001 增益 400 0001.hea 官方文件
0001 注释条数 2278 0001.atr 官方文件
0001 正常搏动数 2164 0001.atr 官方文件
0001 室性搏动数 114 0001.atr 官方文件
0001 首注释时刻 9000.188 秒 0001.atr 官方文件
0001 末注释时刻 10799.564 秒 0001.atr 官方文件
0201 采样点数 525,000 0201.hea 官方文件
开发集清单行数 160 RECORDS-development-set 官方文件
测试集清单行数 150 RECORDS-test-set 官方文件
测试集解禁时间 约 2003 年 PhysioNet 页面 官方页面
PhysioNet 版本 v1.0.0 PhysioNet 页面 官方页面
DOI 10.13026/C27P4P PhysioNet 页面 官方页面
许可 ODC-BY 1.0 PhysioNet 页面 官方页面

附录 B:数字的来源分层

第一级:官方页面与官方文件。 两类集合的条数、八类名称与编号、单条时长、导联数、采样率、位深、量程、注释覆盖范围、长短版差异、开放包体积、许可与 DOI,取自 PhysioNet 的 ahadb 页面。0001 与 0201 的采样点数、增益、注释条数与符号分布,取自可下载的头文件与注释文件,并已用 WFDB 读取核对。两套具体编号取自 RECORDS 清单。

第二级:论文摘要。 一篇 2023 年的论文摘要提到,基于一维 U-Net 的室性早搏检测模型以 Icentia 11k、INCART 与自建数据训练,随后在 AHA、MIT-BIH 与 NST 上做外部验证,并指出 AHA 上的灵敏度指标偏低。这条信息佐证了「AHA 至今仍被当作外部验证集」这一判断,但没有提供任何关于 AHA 规模的数字,因此不用于核对规模。

第三级:未核实。 完整库的具体售价、交付方式、学术折扣、测试集解禁的确切日期、导联贴放的解剖位置、记录仪型号,以及除 0001 以外各条记录的实际心率与异位频次,均未核实。本文凡涉及这些内容,均以「页面未说明」或「须向 ECRI 询问」表述,不作推断。

附录 C:完整参考文献

  1. PhysioNet. AHA Database Sample Excluded Record, version 1.0.0. 2003-06-06. DOI: 10.13026/C27P4P. https://physionet.org/content/ahadb/1.0.0/
  2. PhysioNet. AHA Database 文件目录. https://physionet.org/files/ahadb/1.0.0/
  3. PhysioNet. 头文件 0001.hea. https://physionet.org/files/ahadb/1.0.0/0001.hea
  4. PhysioNet. 头文件 0201.hea. https://physionet.org/files/ahadb/1.0.0/0201.hea
  5. PhysioNet. 开发集记录清单 RECORDS-development-set. https://physionet.org/files/ahadb/1.0.0/RECORDS-development-set
  6. PhysioNet. 测试集记录清单 RECORDS-test-set. https://physionet.org/files/ahadb/1.0.0/RECORDS-test-set
  7. PhysioNet. 校验和清单 SHA256SUMS.txt. https://physionet.org/files/ahadb/1.0.0/SHA256SUMS.txt
  8. PhysioNet. MIT-BIH Arrhythmia Database, version 1.0.0. https://physionet.org/content/mitdb/1.0.0/
  9. Pollard T, Moody BE, Lehman L, et al. PhysioNet as a global platform for biomedical research. Nature Health, 2026. DOI: 10.1038/s44360-026-00096-z
  10. ECRI. American Heart Association ECG Database. https://www.ecri.org/american-heart-association-ecg-database-usb
  11. Europe PMC 检索到的 2023 年会议摘要:End-to-End Premature Ventricular Contraction Detection Using Deep Neural Networks,PMID 37896666。

附录 D:术语与编号速查

你看到 说明 快速判断
4 开头四位 开发集,成对搏动类 第二位 0 为长版,2 为短版
7 开头四位 开发集,室速类 同上
1 开头第二位 1 开发集长版,无异位类 完整三小时
6 开头第二位 1 测试集长版 约 2003 年后才有
0 开头 被剔除样本 只在 PhysioNet 开放
.hea 头文件 先读它,别猜参数
.atr 注释文件 只覆盖末段
.dat 采样数据 212 格式,别手写解压

附录 E:如果只记五件事

  1. 它不是免费数据集。 完整库须向 ECRI 购买,PhysioNet 只开放一条被剔除样本。
  2. 三小时是重点,三十分钟也是重点。 三小时保证背景真实,三十分钟保证标注可算,两者缺一不可。
  3. 八类各十条,类别就是标签。 分层结构让难度变成一条从易到难的曲线。
  4. 它测的是检测器,不是诊断。 标注粒度只到「正常 / 室性」,房早不区分。
  5. 人群过时是硬边界。 1970 至 80 年代美国住院患者,药物背景与今天差得远,无法校正。

编辑说明

核验时间:2026-10-27。

核验方式:逐个访问 PhysioNet 的 ahadb 页面与 /files/ 目录,下载 0001 与 0201 的头文件、注释文件及四个清单与校验和文件,用 WFDB 读取注释并统计符号分布;另检索 Europe PMC 取得一篇 2023 年论文摘要作为旁证。

未覆盖内容:ECRI 的购买条款与价格、测试集解禁的准确日期、导联贴放的解剖位置、各条记录的实际心率与异位频次。凡涉及未覆盖内容,正文均以「页面未说明」或「须向 ECRI 询问」表述,不作推断。

口径说明:本文把「开发集」与「测试集」统称「记录」,把八类分层称为「标签」,是因为在本库的组织方式里,类别编号首位数字同时承担了类别标签与命名的作用。正文中出现的千分位数字为精确值,其余规模表述采用概数以免重复计数。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • wctecgdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • chfdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • crisdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • cudb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • ltdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • ltstdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • vfdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • svdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • mhd-effect-ecg-mri — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • physiozoo — 共享标签:生理信号 / 心电信号 / 心血管疾病

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

返回 AI-Ready 数据集