十五导联千赫兹 — PTB 诊断级心电库

549 段 15 导联 / 1000 Hz 16 位 / 290 名受试者

来源 https://physionet.org/content/ptbdb/1.0.0/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 4
十五导联千赫兹 — PTB 诊断级心电库

信息速览

数据集名称十五导联千赫兹 — PTB 诊断级心电库
数据类型时序信号,波形,临床元数据,多导联同步
规模290 名受试者 / 549 段记录
接入方式https://physionet.org/content/ptbdb/1.0.0/
AI 就绪度

一台心电图机在门诊里只跑十秒钟,输出十二道波形,医生看着它判断有没有心梗。一台动态心电记录仪在患者身上挂二十四小时,输出两道波形,医生看着它判断有没有阵发性房颤。两种设备的采样率都不高:常规十二导联机的采样率常在 250 Hz 到 500 Hz 之间,够画出 QRS 波的形状,却不够精细地界定 T 波到底在哪里结束。而心电学研究里有一批问题恰恰卡在这两个"不够"的交界处——QT 间期该从哪一点量到哪一点,T 波终点在不同导联上差多少毫秒,心室晚电位那种微伏级的碎裂信号能不能被稳定地检出。这些问题需要更宽的导联覆盖,也需要更细的时间刻度,公开数据里同时满足两者的并不多。

PTB Diagnostic ECG Database 是这条稀缺线上的一个老资格答案。德国联邦物理技术研究院(Physikalisch-Technische Bundesanstalt,PTB,德国的国家计量研究院)把柏林一所大学诊所心内科采集的静息心电整理成 549 段记录,在 2004 年 9 月 25 日交给 PhysioNet。它做了三件当时别处少有人做的事:把采样率提到 1000 Hz,把通道数从 12 提到 15(额外三路是 Frank 正交导联 vx、vy、vz,也就是心向量图的三个轴),并且把每一例的临床摘要——诊断、病史、用药、冠脉造影所见、心室造影、超声心动、血流动力学——直接写进头文件。

它的代价同样清楚:只有 290 名受试者、单一国家、单一采集设备、二十多年没有更新版本,标注形态是"一段自由文本临床摘要"而不是"一张规整的标签表"。它不是拿来训大模型的粮仓,是一件为特定问题打造的精密量具。一屏速览见下表。

维度 内容
全名 PTB Diagnostic ECG Database
发布方 PhysioNet(数据由德国联邦物理技术研究院 PTB 整理并捐赠)
首次发布 2004 年 9 月 25 日,版本 1.0.0
版本与最近改动 仅一个版本 1.0.0;目录内 CONTROLS 于 2006-04-24 更新,SHA256SUMS.txt 于 2019-02-20 更新
记录数 549 段
受试者数 290 名(页面导言另有一处写 294,见 §10 不一致说明)
年龄范围 17–87 岁,平均 57.2 岁;209 名男性平均 55.5 岁,81 名女性平均 61.6 岁
未记录年龄 15 名(1 名女性、14 名男性)
每人记录数 1 至 5 段
记录时长 多数约两分钟,少数更短,官方挑战赛文献称无短于 30 秒者
通道数 15(常规十二导联 + Frank 正交导联 vx、vy、vz)
采样率与分辨率 1000 Hz,16 位,量程 ±16.384 mV,0.5 μV/LSB(2000 A/D 单位每毫伏)
更高采样率 向贡献者特别申请可取得最高 10 kHz 的记录
采集设备 PTB 非商用原型机,16 路输入(14 路心电、1 路呼吸、1 路线电压),带宽 0–1 kHz
原始来源 柏林自由大学 Benjamin Franklin 大学诊所心内科,Michael Oeff 教授采集
临床信息 多数记录头文件内含临床摘要;22 名受试者无临床摘要,268 名归入九个诊断类别
文件格式 WFDB:.hea 头文件 / .dat(12 路)/ .xyz(3 路 Frank)
全量体积 解压后 1.7 GB
许可 Open Data Commons Attribution License v1.0(ODC-BY 1.0)
标识符 DOI 10.13026/C28C71
典型用途 心梗检测、QT 与 T 波终点测量、心向量图与导联变换、心电设备计量与算法基准

§1 它要解决的具体麻烦

1.1 三个"不够",各自卡在不同的维度上

心电公开数据的取舍,长期被三个互相牵制的维度拉扯:导联数、采样率、临床标注的深度。多数库只能占住其中一到两个。

第一个不够是导联不够。常规十二导联已经是临床常规,但它不是心电向量的完整表达。心向量图(vectorcardiography,VCG)用三个互相正交的轴描述心脏电活动的空间轨迹,Frank 导联体系就是为它设计的。凡是涉及空间向量方向的问题——QRS 波电轴、T 波环的形态、心室除极顺序的立体描述——十二导联要靠推导,Frank 导联可以直接测。绝大多数公开库只给十二导联,把 VCG 留给研究者自己用变换矩阵去推,而推导出来的结果与直接测得的结果是否等价,本身就是一个需要数据来验证的问题。

第二个不够是采样率不够。250 Hz 的采样间隔是 4 毫秒,500 Hz 是 2 毫秒。QT 间期的手动测量差异本来就在几十毫秒量级,T 波终点在多数导联上是一段缓慢回到基线的斜坡,2 毫秒与 1 毫秒的分辨率差异,直接决定了自动化算法能不能稳定地锚定它。再往下,心室晚电位是 QRS 末端之后微伏级的高频碎裂信号,采样率不足会把它和量化噪声混在一起。

第三个不够是临床上下文不够。多数公开心电库给的是标签:正常、房颤、心梗、束支阻滞。标签能支撑分类任务,但支撑不了"为什么"。同一份标着心梗的心电图,是急性期还是陈旧期,梗死在下壁还是前侧壁,患者是否接受了溶栓、溶栓药物剂量多少、冠脉造影显示哪支血管狭窄多少——这些信息决定了模型的判读有没有可解释的临床依据。

1.2 三条常见的错误期待

第一条,期待它是"一个大规模训练集"。549 段、290 名受试者,深度模型一两轮就能记完。它在规模上属于小库,任何"用数据量换性能"的路线在这里都走不通(§1.6)。

第二条,期待它带"规整的标签列"。它的临床信息是头文件里的自由文本,中文语境里常说的"标签"在这里对应的是一段英文临床摘要。要做分类任务,得自己从摘要里抽诊断词并归一化成类别,这一步的工作量和一个数据清洗项目相当(§5.5)。

第三条,期待它的十五路信号都是"导联"。其中十二路是常规导联,三路是 Frank 正交导联,物理意义、电极位置、幅度量级都不一样,而且存放在另一个文件里(.xyz 而不是 .dat)。把它们当成十五个平权的输入通道喂进模型,是把两种不同性质的测量混为一谈(§2.3)。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
心梗与非心梗的判别研究 九个诊断类别中含心肌梗死与心肌病等,另设健康对照 够做判别研究,样本量不足以训大模型
QT 间期与 T 波终点算法评测 1000 Hz、15 路同步、多数约两分钟 够,这是它最对口的一类任务
心向量图与导联变换研究 直接测得 vx、vy、vz,可与十二导联推导结果对照 够,且是公开库里少有的对照条件
十二导联到 Frank 导联的线性变换验证 同一时刻同时有两套测量 够,可把推导值与直接测得值直接比
心电设备的计量与噪声评估 采集设备带宽、噪声、输入电阻均有官方披露 够做方法学讨论,无原始设备可复现
心率变异性分析 单段约两分钟 不够,两分钟不足以支撑常规 HRV 指标
长时程心律失常检测 静息短段,最长约两分钟 不够,应改用长时程库
多中心泛化验证 单一国家、单一中心、单一原型设备 不够,只能做跨库验证
正常人群基线建模 设健康对照,且另有 CONTROLS 清单 边界:对照样本有限,且年龄结构偏大

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

你的处境 它能帮你什么 下一步该做什么
你在做 QT 间期自动测量,需要高分辨率数据验证算法 1000 Hz、十五路同步,可逐导联比较 T 波终点的差异 先按导联分组统计测量结果的离散度,再决定用哪一路做主判据
你在做心梗检测,手上只有标签级数据 有冠脉造影、心室造影、梗死定位等结构化程度更高的上下文 从头文件抽"Reason for admission"与"Acute infarction (localization)"字段建标签
你在研究十二导联与 VCG 的等价性 同一段记录同时给出两套测量 用 Kors 或逆 Dower 变换从十二导联推 VCG,与 .xyz 直接测得值逐点比较
你在评估心电采集链路的噪声底 官方披露噪声电压不超过 10 μV 峰峰值、3 μV 有效值 把该值作为设备规格边界写进方法学限制,不要当作每段记录的实际噪声
你需要"带完整临床背景的心电"做教学 头文件含诊断、用药、血流动力学、超声心动 选一两段摘要完整的记录做成教学案例,注意 22 名受试者无摘要
你想给模型加一个外部测试集 德国人群、非商用设备、1000 Hz,与常见训练库差异明显 按 patient 目录划分,绝不要按记录随机划分(§5.6)

1.5 一句话判断

它不适合当"更大的训练集",而适合当"更细的尺":在毫秒级的时间刻度和三轴正交的空间刻度上,量出常规十二导联 250 Hz 数据里量不出来的东西。

1.6 不适合谁:四条边界

不适合拿来做大规模预训练。 549 段记录、1.7 GB,规模上属于小库。想用数据量堆性能的项目,在这里会立刻过拟合。

不适合拿来做长时程节律研究。 它是静息心电,多数约两分钟。房颤负荷、阵发性事件的昼夜分布、长程心率变异性,这些都不是它能回答的。

不适合拿来直接跑分类流水线。 没有现成的标签列,临床诊断以自由文本写在头文件里。抽标签、定类别口径、处理缺失摘要,这三步必须由使用者自己完成并写进方法学。

不适合拿来代表"当代临床心电"。 采集于 1990 年代前后的德国单一中心,用非商用原型机录制,至今只有一个版本。它可以做方法学的参照,不适合当作当代设备性能的参照系。

§2 数据构成与规格

2.1 一段记录至少由四个文件组成

数据库采用 WFDB(Waveform Database)格式,这是 PhysioNet 自 1980 年代沿用至今的生理信号存储规范。每一段记录对应同名的若干文件:.hea 是纯文本头文件,声明采样率、信号条数、增益、基线,并把临床摘要以注释行的形式附在末尾;.dat 是二进制信号本体,按采样点交错存放十二路常规导联的整数值;.xyz 是第二个二进制文件,存放三路 Frank 正交导联。

两个信号文件的分离容易被忽略。用 wfdb.rdrecord 读记录时,库会自动按头文件的声明把两个文件拼成一条 15 路的矩阵,但如果你自己按文件名去找数据,只拿 .dat 就会丢掉整个心向量图,只拿 .xyz 则连一份完整的十二导联都没有。

根目录还有四个附属文件,各自的角色不同:

文件 体积 目录内标注的修改日期 内容
RECORDS 10.7 KB 2004-09-25 549 行记录路径,形如 patient001/s0010_re
CONTROLS 1.6 KB 2006-04-24 80 行健康对照记录的路径清单
README 1.6 KB 2004-08-05 采集者与机构信息、诊断类别列表、采集参数
SHA256SUMS.txt 143.4 KB 2019-02-20 全量文件的 SHA256 校验和

CONTROLS 是在数据库发布近两年后才加进去的,这说明"哪些记录属于健康对照"这件事在最初版本里并没有单独列出来。它是重要的边界信息,但也提醒使用者:健康对照的记录清单与"健康对照受试者人数"是两个不同口径,前者以记录计,后者以人计,README 与项目页在这两个数字上还各有一处不一致(§10)。

2.2 头文件的完整字段字典

本库的"字段"不是表格的列,而是 WFDB 头文件的记录行、信号行与注释行。下表逐条列出。

信息项 位置 形态 含义 使用注意
记录名 头文件第 1 行第 1 字段 s0010_re 记录标识 与文件名前缀一致
信号条数 头文件第 1 行第 2 字段 15 同步通道数 全部记录均为 15
采样率 头文件第 1 行第 3 字段 1000 每秒采样点数 与常见的 250/500 Hz 库不同
采样点数 头文件第 1 行第 4 字段 38400 / 115200 / 120012 记录长度 抽样头文件所见三种长度
数据文件名 信号行第 1 字段 s0010_re.dat 或 s0010_re.xyz 信号存放位置 前 12 行指向 .dat,后 3 行指向 .xyz
存储格式 信号行第 2 字段 16 16 位带符号整数 不是浮点
增益 信号行第 3 字段 2000 A/D 单位每毫伏 抽样记录均为 2000,即 0.5 μV/LSB
位分辨率 信号行第 4 字段 16 ADC 位数 与存储格式一致
ADC 零值 信号行第 5 字段 0 零电平对应整数 换算时先减零值
初始值 信号行第 6 字段 如 -489 首采样点整数值 逐导联不同
校验和 信号行第 7 字段 如 -8337 采样点累加和 用于校验信号文件完整性
块大小 信号行第 8 字段 0 每帧字节数 0 表示由库自动计算
导联名 信号行第 9 字段 i…v6、vx、vy、vz 通道标识 顺序固定,15 行一一对应
年龄 注释行 如 81 记录时年龄 以 \# age: 开头,15 名受试者缺失
性别 注释行 male / female 受试者性别 以 \# sex: 开头
检查日期 注释行 如 01/10/1990 心电图采集日期 以 \# ECG date: 开头,日为月/日/年格式
入院原因 注释行 自由文本 主要临床诊断 以 \# Reason for admission: 开头
急性梗死定位 注释行 如 infero-latera 梗死部位 以 \# Acute infarction (localization): 开头
既往梗死定位 注释行 no 或部位 陈旧性心梗 以 \# Former infarction (localization): 开头
附加诊断 注释行 自由文本 合并症 如 Diabetes mellitus
吸烟史 注释行 no / yes / unknown 吸烟状态 允许取值 unknown
受累冠脉数 注释行 数字或 unknown 病变血管数 以 \# Number of coronary vessels involved: 开头
梗死日期 注释行 日期或 n/a 急性梗死发生日 既往梗死另有两栏
血流动力学 注释行组 数值或 n/a 压力、心输出量、心指数等 十余项,缺失项统一写 n/a
冠脉狭窄 注释行组 文本 左前降支、回旋支、右冠脉分别描述 含狭窄百分比与部位描述
治疗与用药 注释行组 文本 入院前、住院、出院后用药 以 \# Therapy: 分节

2.3 十五路通道的物理含义

十五路不是十五个并列的"导联",而是两套不同性质的测量在同一时间轴上对齐。

序号 通道名 存放文件 体系 物理含义
1–3 i、ii、iii .dat 常规十二导联 标准肢体导联,反映额面电轴
4–6 avr、avl、avf .dat 常规十二导联 加压肢体导联,额面电轴的补充切面
7–12 v1–v6 .dat 常规十二导联 胸导联,由右向左横扫心室前壁与侧壁
13 vx .xyz Frank 正交导联 心向量图的 X 轴,左右方向
14 vy .xyz Frank 正交导联 心向量图的 Y 轴,上下方向
15 vz .xyz Frank 正交导联 心向量图的 Z 轴,前后方向

这十五路的采样是严格同步的。官方在采集设备规格里明确写了"0–1 kHz 带宽、所有通道同步采样",这句话的意义在于:任意两路之间不存在时间偏移,因此同一时刻的十五个采样值可以安全地组合成一个空间向量。如果各路不是同步采样,用它们去算瞬时心向量就会引入虚假的相位差。

增益的处理也值得单独说。抽样记录的十五路增益都是 2000,对应 0.5 μV 每最小可分辨单位,量程 ±16.384 mV——这个换算关系是自洽的:16 位带符号整数的范围是 ±32768,除以 2000 得到 ±16.384 mV。但增益是写在头文件里的值,逐条读取时仍应按头文件换算,而不是假定它恒为 2000。

2.4 一条记录的完整解剖

以 patient001 的 s0010_re 为例。头文件首行:

s0010_re 15 1000 38400

读作:记录名 s0010_re,15 路信号,1000 Hz,共 38400 个采样点。38400 ÷ 1000 = 38.4 秒。这一段属于较短的那批记录。

随后是 15 行信号声明,前十二行指向 .dat,后三行指向 .xyz:

s0010_re.dat 16 2000 16 0 -489 -8337 0 i
s0010_re.dat 16 2000 16 0 -458 -16369 0 ii
s0010_re.xyz 16 2000 16 0 -3 -13009 0 vx
s0010_re.xyz 16 2000 16 0 120 7109 0 vy
s0010_re.xyz 16 2000 16 0 -18 -1992 0 vz

从右往左读最后一行:通道名 vz;块大小 0;校验和 -1992;初始值 -18;ADC 零值 0;位分辨率 16;增益 2000;格式 16;文件 s0010_re.xyz。

再往后是临床摘要,分节组织:

\# age: 81
\# sex: female
\# ECG date: 01/10/1990

\# Diagnose:
\# Reason for admission: Myocardial infarction
\# Acute infarction (localization): infero-latera
\# Former infarction (localization): no
\# Additional diagnoses: Diabetes mellitus
\# Smoker: no
\# Number of coronary vessels involved: 1
\# Infarction date (acute): 29-Sep-90

连起来读:81 岁女性,1990 年 10 月 1 日检查,因心肌梗死入院,急性梗死位于下侧壁,无陈旧性梗死,合并糖尿病,不吸烟,一支冠脉受累,急性梗死发生于 1990 年 9 月 29 日。

摘要继续往下还有三节:血流动力学(导管检查日期、心室造影、胸片、外周血压、肺动脉压、主动脉压、左室舒张末压、各支冠脉狭窄情况、超声心动);治疗(梗死日期、导管日期、入院日期、入院前用药、溶栓开始时刻、溶栓药物与剂量、附加用药、住院用药、出院后用药)。这几节里大量字段取值为 n/a,表示该项未做或未记录。

标准读取写法:

import wfdb

#-- 远程直读,无需先下载;pn_dir 指向 PhysioNet 上的库名
rec = wfdb.rdrecord('s0010_re', pn_dir='ptbdb/1.0.0/patient001')
hdr = wfdb.rdheader('s0010_re', pn_dir='ptbdb/1.0.0/patient001')

print(rec.fs, rec.sig_len)          #-- 1000 38400
print(rec.sig_name)                 #-- ['i','ii','iii','avr','avl','avf','v1'...'vx','vy','vz']
print(rec.p_signal.shape)           #-- (38400, 15) 已按增益换算成毫伏
print(rec.units)                    #-- 全部为 'mV'

#-- 临床摘要是一组字符串,逐行拆开后自行解析
for c in hdr.comments[:12]:
    print(c)

p_signal 是按增益与零值换算过的浮点毫伏值;要原始整数用 d_signal。注意 pn_dir 必须写到 patient 子目录,本库的记录不在根目录,这是与 MIT-BIH 系列库一个容易混淆的差别。

2.5 与同类库在字段口径上的差异

把本库与站内常见的两个心电库放在一起,可以看出字段口径的差别集中在三处:导联体系、采样率、临床信息的载体。

维度 PTB 诊断级心电库(本库) PTB-XL MIT-BIH 心律失常库
记录数 549 21799 48
受试者数 290 18869 47
导联体系 12 常规 + 3 Frank 12 常规 2(多为改良肢体导联)
采样率 1000 Hz 500 Hz 与 100 Hz 两版 360 Hz
单段时长 多数约两分钟 10 秒 约 30 分钟
临床信息载体 头文件自由文本临床摘要 结构化 CSV 与 SCP 声明编码 基本无
标注粒度 记录级临床摘要,无逐搏标注 记录级诊断语句 逐搏注释
许可 ODC-BY 1.0 CC BY 4.0 ODC-BY 1.0
下载体积 1.7 GB 数 GB 量级 数十 MB

这张表要说明的不是优劣,而是任务分工:要逐搏心搏分类,去 MIT-BIH 系列;要做大规模诊断分类,去 PTB-XL 一类的大库;要把时间刻度压到毫秒、把空间刻度扩到三轴、并且要求为每一次判读给出可追溯的临床依据,才是本库的位置。

2.6 目录结构与命名规则

全库按受试者分目录,每个受试者一个 patientNNN 目录,编号从 patient001 到 patient294,官方明确说明不存在 124、132、134、161 四个编号,因此实际目录数为 290 个,与受试者数一致。

记录名以 s 加四位数字开头,后接一个后缀。抽样记录名里出现过四种形态:

后缀形态 示例 抽样所见记录长度
_re s0010_re、s0222_re 38400(38.4 秒)或 120012(120.012 秒)
lre s0014lre、s0015lre 115200(115.2 秒)
are s0020are、s0204are 115200(115.2 秒)或 38400(38.4 秒)
bre s0020bre、s0021bre 未见抽样

同一受试者目录下的 a/b 后缀成对出现(如 patient004 的 s0020are 与 s0020bre),说明同一次就诊被拆成了两个文件。这一点在划分数据集时很关键:同一次就诊的两段记录之间的相关性,远高于不同就诊之间的相关性。

§3 它是谁的数据

3.1 贡献者:一家计量院,不是一家医院

捐赠方是 Physikalisch-Technische Bundesanstalt,德国的国家计量研究院。这个身份决定了它的气质:它不是医院顺手导出的临床数据,而是一份由计量机构按"可追溯、可复现"的标准整理出来的参考资料。官方对项目用途的措辞是"用于研究、算法基准测试或教学"。

原始心电由 Michael Oeff 教授在柏林自由大学 Benjamin Franklin 大学诊所心内科采集,受试者包括健康志愿者与各类心脏病患者。Oeff 教授后来的工作单位是勃兰登堡的 Klinikum Brandenburg 心内科。

为 PhysioNet 制备这份数据的是四个人:PTB 的 Hans Koch(教授、博士)、Ralf Bousseljot(工学博士)、Dieter Kreiseler(工学博士),以及来自夏里特医学院 Virchow 院区与德国心脏中心的 Lothar Schmitz 医生。这个组合本身也说明问题:三名前两名的工程师加一名临床医生,工程规格与临床解释两头都有人负责。

3.2 时间线

时间 事件 依据
1995 Bousseljot、Kreiseler、Schnabel 发表 CARDIODAT 心电信号数据库论文 官方引用文献
1995 Kreiseler 与 Bousseljot 发表基于 CARDIODAT 的自动心电分析论文 官方引用文献
2004-08-05 根目录下的 README 修改日期 文件目录
2004-09-25 版本 1.0.0 发布,RECORDS 同日 官方页面
2006-04-24 CONTROLS 健康对照清单加入 文件目录
2006 PhysioNet/CinC 2006 挑战赛(QT 间期测量)全部采用本库 549 段记录 挑战赛论文
2019-02-20 SHA256SUMS.txt 校验和文件更新 文件目录
至今 仍只有 1.0.0 一个版本 官方页面版本列表

这条时间线里最值得注意的是两件事。一是它从 2004 年到今天没有出过第二个版本——不是被遗忘,而是原始采集已经结束,没有新数据可加。二是它发布两年后就被 CinC 挑战赛选作唯一数据源,说明它在采样率上的优势从一开始就被社区认出来了。

3.3 采集场景:一台原型机,一套完整公开的规格

官方把采集设备的规格完整列了出来,这在公开心电库里是罕见的:

规格项 官方数值
输入通道数 16(其中心电 14 路、呼吸 1 路、线电压 1 路)
输入电压范围 ±16 mV
可补偿失调电压 最高 ±300 mV
输入电阻 100 Ω(直流)
分辨率 16 位,0.5 μV/LSB(2000 A/D 单位每毫伏)
带宽 0–1 kHz,所有通道同步采样
噪声电压 峰峰值最大 10 μV,短路输入时有效值 3 μV
附加记录 皮肤电阻在线记录;采集期间同步记录噪声电平

最后两项容易被忽略,但它们是"计量院风格"的最好说明:设备在采集心电的同时,把皮肤电阻和当时的噪声电平也录了下来。这意味着研究者原则上可以知道某一段记录的电极接触质量如何、采集时的噪声环境如何。这两路信号不在发布的十五路里,官方也未说明它们是否可随记录一并取得(§10)。

3.4 来源层次:三层结构要分清

层次 内容 可追溯性
第一层:原始采集 柏林 Benjamin Franklin 大学诊所心内科的静息心电 由 Oeff 教授采集,采集年份见头文件的 ECG date
第二层:整理与捐赠 PTB 数字化、整理、加临床摘要,提交 PhysioNet 制备者四人名单明确
第三层:平台托管 PhysioNet 托管、分配 DOI、声明许可 DOI 10.13026/C28C71,ODC-BY 1.0

三层分清楚有一个实际用途:引用时要分别致谢。官方明确要求使用本资源时引用 1995 年的原始论文,并同时引用 PhysioNet 平台论文。把这两条引全,是对第一层与第二层贡献者的正确归属。

§4 它最独特的东西

4.1 稀缺性:十五路同步,且其中三路是直接测得的正交导联

公开心电库里,给十二导联的不少,给心向量图的极少。给两套、并且保证同步的,几乎只有这一个。这个组合的价值要靠具体研究问题才能说清楚。

十二导联与 Frank 正交导联之间存在线性变换关系,研究者常用 Kors 变换或逆 Dower 变换,从常规十二导联推算出三轴心向量。这类变换是近似:推导出来的 VCG 与真正测得的 VCG 在形态上相似,但在幅度、电轴角度、环体细节上会有偏差。要评估这个偏差有多大,唯一可靠的办法就是拿同一颗心脏的两种测量直接对比——这正是本库提供的条件。

研究问题 只用十二导联能做到吗 本库能提供什么
十二导联能否推导出可用的 VCG 不能验证,只能假设 同一时刻的直接测得值作为参照
QRS/T 环的空间形态分析 需先推导,误差不可知 直接测得,误差仅来自设备
常规导联与正交导联的诊断一致性 做不到 两套测量可对同一判读做交叉验证
导联数目对分类性能的影响 可做,但空间信息不完整 可在 12 与 15 之间做消融

4.2 差异化证据:1000 Hz 带来的毫秒级刻度

1000 Hz 是 1 毫秒一个点。官方还说明,向贡献者特别申请可以取得最高 10 kHz 的记录。这个上限意味着原始采集链路的带宽不是瓶颈,发布的 1000 Hz 是为了兼顾体积与通用性的选择。

毫秒级刻度最直接受益的是波形边界的测量:QRS 起点、QRS 终点、T 波终点、QT 间期。PhysioNet/CinC 2006 挑战赛的主题就是 QT 间期测量,而它的数据全部来自本库——这不是巧合,是当时公开数据里少有能满足该任务分辨率要求的库。挑战赛的一篇参赛论文明确写道:本库记录通常约两分钟长,少数更短,没有短于 30 秒的。

4.3 具体案例:一段记录里能读出多少临床

回到 s0010_re。它的临床摘要里有这样几行:

\# Reason for admission: Myocardial infarction
\# Acute infarction (localization): infero-latera
\# Number of coronary vessels involved: 1
\# Infarction date (acute): 29-Sep-90

\# Therapy:
\# Start lysis therapy (hh.mm): 19:45
\# Lytic agent: Gamma-TPA
\# Dosage (lytic agent): 30 mg

这几行连起来给了一个完整的临床叙事:1990 年 9 月 29 日发生急性下侧壁心肌梗死,当天入院,晚上 19 点 45 分开始溶栓,用的是 Gamma-TPA,剂量 30 毫克;10 月 1 日的心电图是溶栓后第二天的记录;10 月 16 日做了导管检查,心室造影显示下壁运动消失,冠脉造影显示左前降支在第二对角支发出之前近段狭窄 70%,回旋支与右冠脉无狭窄。

一个数据集能把"心电图"与"这份心电图是在什么临床背景下被采集的"绑定得这么紧,是它区别于标签级数据集的根本之处。研究者可以据此把心电图特征与梗死部位、罪犯血管、再灌注治疗时间一一对应起来,而不是停在一个"心梗/非心梗"的二分类上。

4.4 标注粒度:记录级临床摘要,而不是逐搏注释

本库没有 .atr 注释文件,也没有逐搏心搏标注。它的"标注"是记录级的临床摘要。这个粒度决定了它适合什么任务、不适合什么任务。

标注层次 本库是否提供 由此决定了什么
逐搏心搏类型 不提供 不能做心搏分类,也不能算心搏级别的形态统计
节律段标注 不提供 不能做节律分段与长程负荷评估
波形界标(QRS/T 波终点) 不提供 界标要自己检测,这也是 QT 挑战赛把它设为题目的原因
记录级诊断 提供,自由文本 可做记录级分类,但需自行抽取与归一化
记录级临床上下文 提供,分节自由文本 可做临床关联分析,字段缺失需逐条处理

4.5 边界条件:官方自己划出的几条线

第一,22 名受试者没有临床摘要。这不是字段缺失,是整个摘要块不存在。任何依赖诊断信息的研究都必须先把这 22 人剔除或单独处理。

第二,268 名受试者被归入九个诊断类别:心肌梗死、心肌病/心力衰竭、束支阻滞、心律失常、心肌肥厚、瓣膜病、心肌炎、杂项、健康对照。官方给出的是类别划分,不是一张可以直接 read_csv 的标签表。

第三,15 名受试者未记录年龄(1 名女性、14 名男性)。做年龄分层研究时,这 15 人要单独处理。

第四,受试者编号不连续:124、132、134、161 四个编号不存在。按整数区间切分数据集的代码会踩到这个坑。

第五,健康对照的口径有两个:CONTROLS 文件按记录列了 80 行,README 与项目页按人分别写了 54 与 52。三者不是同一个东西,混用会造成对照集大小的差异(§10)。

§5 怎么拿到

5.1 目录结构

ptbdb/1.0.0/
├── RECORDS                 #-- 549 行记录路径
├── CONTROLS                #-- 80 行健康对照记录路径
├── README                  #-- 采集与制备信息
├── SHA256SUMS.txt          #-- 全量校验和
├── ptb.png                 #-- 缩略图
├── patient001/
│   ├── s0010_re.hea
│   ├── s0010_re.dat
│   ├── s0010_re.xyz
│   ├── s0014lre.hea
│   └── ...
├── patient002/
└── patient294/

注意 patient124、patient132、patient134、patient161 四个目录不存在,遍历时不要假设编号连续。

5.2 四种下载方式

#-- 方式一:PhysioNet 官方命令行工具
physionet download ptbdb --version 1.0.0

#-- 方式二:递归 wget,适合断点续传
wget -r -N -c -np https://physionet.org/files/ptbdb/1.0.0/

#-- 方式三:AWS 公开桶,带宽通常更好
aws s3 sync --no-sign-request s3://physionet-open/ptbdb/1.0.0/ ./ptbdb

#-- 方式四:整包 ZIP,解压后 1.7 GB
#-- 从项目页 "Download the ZIP file" 获取

四种方式里,如果只需要临床摘要而不需要波形,最省事的做法是只拉 .hea 文件:549 个头文件都是几 KB 的纯文本,全量不超过几 MB,而 .dat 与 .xyz 占了 1.7 GB 里的绝大部分。

5.3 流式读取与按患者分组

import wfdb
import numpy as np
from sklearn.model_selection import GroupShuffleSplit

#-- 读 RECORDS 拿到全部 549 条记录路径
paths = [l.strip() for l in open('RECORDS') if l.strip()]
groups = [p.split('/')[0] for p in paths]      #-- patient001 ... patient294

#-- 按受试者分组划分:同一 patient 目录绝不跨训练/测试
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0)
tr, te = next(gss.split(paths, groups=groups))
print(len(tr), len(te), len(set(groups[i] for i in te)))

这段代码的要点在 groups。本库同一受试者有 1 至 5 段记录,同一次就诊还可能拆成 a/b 两个文件;若按记录随机划分,测试集里会出现训练集中同一颗心脏的兄弟记录,成绩虚高且无法外推。

5.4 从头文件抽标签

import re, glob, os

def parse_summary(path):
    #-- 临床摘要是注释行,形如 "# Reason for admission: Myocardial infarction"
    d = {}
    for line in open(path, encoding='utf-8', errors='replace'):
        if not line.startswith('#'):
            continue
        if ':' not in line:
            continue
        k, v = line.lstrip('#').split(':', 1)
        d[k.strip().lower()] = v.strip()
    return d

rows = []
for hea in sorted(glob.glob('patient*/**/*.hea', recursive=True)):
    d = parse_summary(hea)
    rows.append({
        'record': os.path.basename(hea)[:-4],
        'patient': os.path.basename(os.path.dirname(hea)),
        'age': d.get('age'),
        'sex': d.get('sex'),
        'reason': d.get('reason for admission'),
        'acute_loc': d.get('acute infarction (localization)'),
    })

reason for admission 是最接近"标签"的一列,但它仍然是自由文本:同一个临床含义可能写成不同字符串,需要再做一次归一化。抽取后应先看取值集合的规模再决定映射规则,不要凭几条样例就写死规则。

5.5 标签口径的三个层次与官方不一致

口径 载体 规模 适用场景
健康对照记录清单 CONTROLS 文件 80 行记录路径 直接拿到一组对照记录
诊断类别 项目页数据描述 + README 268 名受试者分入九个类别 需要类别划分时以此为框架
逐例临床摘要 每个 .hea 的注释行 大多数记录有,22 名受试者无 需要临床上下文时逐条解析

三个口径不可互换。特别要提醒的是,README 与项目页在两处数字上不一致:杂项类别 README 写 5 名、项目页写 4 名;健康对照 README 写 54 人、项目页写 52 人。以哪一处为准取决于你的引用偏好,但必须在论文里写清引用的是哪一份文件(§10)。

5.6 五个坑

坑一:把 15 路当 15 个导联。 后三路是 Frank 正交导联,物理含义与常规导联不同,且存在另一个文件里。做消融实验时,应把"12 路"与"15 路"作为两种配置分别报告,而不是把某一路单独删掉。

坑二:把采样率当 250 或 500。 1000 Hz 的信号直接送进按 500 Hz 设计的前端,等于在时间轴上做了二倍降采样而不自知。跨库混合训练前必须统一重采样。

坑三:忽略患者编号不连续。 缺失的编号是 124、132、134、161。任何 range(1, 295) 式的遍历都会在这四个位置报错。

坑四:按记录而不是按受试者划分。 同一受试者最多 5 段、同一次就诊可能拆成两个文件,随机划分会造成严重泄漏(§5.3)。

坑五:把 n/a 当缺失值直接丢弃或当零值。 血流动力学那一节里大量字段是 n/a,含义是"该项未做或未记录",与"数值为零"完全不同。当成零值参与计算会得到错误的统计量。

§6 与库内其他数据集的关系

6.1 关系图谱

在心电类数据集里,可以用"导联数 × 采样率 × 单段时长"三个轴把本库的位置摆出来:

站内数据集 导联 采样率 单段时长 与本库的关系
PTB-XL 12 500 Hz / 100 Hz 10 秒 同名机构、同为十二导联,但采集年代、人群与设备不同
PTB-XL+ 12 500 Hz 10 秒 在 PTB-XL 之上做特征增强,与本库无数据继承关系
INCART 心律失常库 12 257 Hz 30 分钟 互补:它长而本库宽且细
MIT-BIH 心律失常库 2 360 Hz 约 30 分钟 互补:逐搏标注在本库完全没有
MIT-BIH 房颤库 2 250 Hz 10 小时 互补:长时程节律任务归它
Georgia 十二导联挑战库 12 500 Hz 10 秒 对照:同为十二导联短段,人群不同
WCTECGdb 37 高分辨率 短段 对照:直接测量威尔逊中心电端,同属多通道精细采集
本库 15(含 3 路 Frank) 1000 Hz 多数约两分钟 三轴上同时不低的少数几个之一

6.2 检索路径

你要找的东西 检索词 会落到哪里
大规模十二导联诊断分类 PTB-XL、12-lead、18869 §6.1 表与 §2.5
逐搏心搏标注 MIT-BIH、atr、beat annotation §4.4 说明本库不含此项
十二导联长时程 INCART、30 min、12-lead §6.1 表
心向量图与正交导联 Frank、VCG、xyz §2.3 与 §4.1
QT 间期与波形界标 QT、T-wave end、challenge-2006 §4.2 与 §8.2
高分辨率多通道直接测量 WCT、Wilson central terminal §6.1 表
噪声与鲁棒性评测 NSTDB、noise stress §7.3

6.3 与其他库的分工判据

选数据集时最实际的问题不是"哪个最好",而是"哪个负责哪一段"。下表把常见心电任务逐项拆开:

任务 主粮仓该用什么 本库的位置 原因
大规模诊断分类预训练 万级以上的十二导联库 不适用 549 段训不动
QT 间期与 T 波终点测量 无可替代 主力 1000 Hz 且十五路同步
心向量图与导联变换 无可替代 主力 唯一同时给出两套测量
心梗检测与梗死定位 大规模十二导联库 主力之一 有冠脉造影与梗死定位上下文
心搏形态分类 MIT-BIH 系列 不适用 无逐搏标注
长时程房颤检测 长时程房颤库 不适用 单段约两分钟
噪声鲁棒性评测 专用噪声库 辅助 设备噪声规格已知,但无噪声通道随记录发布
多中心泛化验证 多中心库 不适用 单一国家、单一中心
跨库外部测试 任意与训练库异质的库 主力之一 德国人群、非商用设备、1000 Hz,异质性强

这张表的读法是:本库只在三行上是"主力",且这三行都是别处真的难以替代的。把它的价值安放在这三行上,是正确使用它的前提;把它当成"又一个十二导联库"去和万级数据比规模,则是常见的误判。

§7 质量评估与局限性

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

先纠正一个常见误判:把"只有一个版本、二十年没更新"当成"维护得不好"。本库的数据来源是一次已经结束的临床采集,没有新的受试者可加,版本不变是数据性质决定的,不是维护懈怠。评价它时应问的问题是:在它负责的那几个任务上,它的规格够不够?

这个校正会改变评分的读法。规模一项它拿不到高分,但在"时间与空间分辨率"上它几乎没有对手。把这两件事混在一起,会得出"不值得用"的错误结论。

7.1 五维评分

按常用数据集评估维度打分,每项 1–5 分,分数针对"作为心电算法研究数据"这个用途:

维度 分数 理由
数据规模 2 549 段、290 名受试者,训练不足,测试与验证够用
采集规格 5 1000 Hz、16 位、十五路同步,设备规格完整披露
临床上下文 4 逐例临床摘要深度罕见,但 22 名受试者缺失且为自由文本
标注可用性 2 无结构化标签列,无逐搏标注,需自行抽取与归一化
人群与中心多样性 2 单一国家、单一中心、单一原型设备、人群年龄偏大

7.2 两层信息的质量差异

本库的信息质量是分层的,两层之间差距很大。

信号层质量高。 采样率、位分辨率、带宽、同步性、噪声规格都有官方说明,且这些说明来自计量机构。就"这段波形本身可不可信"而言,它的可追溯性在公开心电库里属于第一梯队。

标注层质量取决于使用者的加工。 临床摘要是自由文本,没有统一的取值字典。同一个概念在不同记录里的写法可能不同,缩写、拼写变体、空值表示(n/a、unknown、no)混在一起。这层的质量不是官方保证的,是由使用者抽取规则的水平决定的。

两层之间的落差是使用本库的主要工作量所在:拿到信号很容易,把信号与可信的标签对齐很难。

7.3 可枚举的偏差来源

偏差来源 具体表现 影响
人群偏差 单一国家、单一中心,年龄 17–87 岁且平均 57.2 岁 结论外推到其他人群需谨慎
设备偏差 非商用原型机,与商用设备的滤波与基线处理策略不同 波形细节与当代设备不完全可比
性别偏差 209 名男性、81 名女性 性别分层分析时样本不对称
诊断构成偏差 心肌梗死在九个类别中占比最大 做二分类时正负样本量级需自行核对
缺失偏差 22 名受试者无临床摘要、15 名无年龄 依赖这些字段的分析会静默丢样本
采集年代偏差 临床实践与用药方案与当代不同 用药字段不能直接套用当代指南解读
泄漏偏差 同一受试者 1–5 段、同次就诊可能拆成两个文件 按记录随机划分会显著虚高成绩

7.4 外部验证:挑战赛给出的背书

本库最有力的外部验证不是论文引用数,而是 PhysioNet/CinC 2006 挑战赛把它选作唯一数据源。挑战赛论文里对数据的描述与项目页一致,并补充了项目页没有的信息:记录通常约两分钟长,少数更短,没有短于 30 秒的;论文作者把原始 549 段从 1000 Hz 降采样到 250 Hz 后处理,幅度分辨率保持不变。

这段描述有两个实用含义。第一,"约两分钟"这个时长口径来自挑战赛文献而非项目页,引用时应写清出处。第二,连当年的参赛者都要先降采样到 250 Hz 才能复用既有算法,说明 1000 Hz 在 2006 年是"超前"的规格——今天算力与存储都不再是瓶颈,这个规格反而成了它的优势。

7.5 为什么它至今仍在被用

官方页面记录它被 48 篇出版物引用,最新的一批涉及心电向量标志物的可重复性审计、通用心电压缩模型、心律失常检测的综述等。

它持续被用的原因是结构性的,不是情怀性的:凡是要在毫秒量级上定位波形边界、或要在三维空间里描述心电向量的研究,都需要一个同时具备高采样率与正交导联的数据集,而这类数据集在二十多年里并没有新增几个。规模大的库不断出现,但它们并不覆盖这个特定的格子。

§8 生态位与历史

8.1 沿革:从 CARDIODAT 到 PhysioNet

本库的前身是 PTB 的 CARDIODAT 心电信号数据库。1995 年 Bousseljot、Kreiseler 与 Schnabel 发表论文,介绍通过互联网使用 CARDIODAT;同年 Kreiseler 与 Bousseljot 又发表了基于该库的自动心电分析工作。九年之后,整理好的版本以 PhysioBank 新库的身份在 PhysioNet 上线。

这条沿革解释了两件事。一是为什么临床摘要写得那么细——它本来就是为临床与工程联合分析设计的,不是为了机器学习。二是为什么没有逐搏标注——CARDIODAT 体系的目标是诊断级的心电判读与自动分析,不是心搏计数的基准。

8.2 与挑战赛:一次被完整采用的经历

PhysioNet/CinC 2006 挑战赛的主题是 QT 间期测量,数据全部来自本库的 549 段记录。这个选择本身就是对数据规格的背书:QT 间期测量的参考标准需要人工或半人工精标,而对 15 路、1000 Hz、约两分钟的记录做精标,在当时是可行的。

挑战赛文献还留下了一条方法学信息:参赛者普遍只取每段记录的前 30 秒处理。这意味着如果今天有人要对齐当年挑战赛的结果,应把对齐范围限定在前 30 秒,而不是整段。

8.3 生态位:三个轴上的唯一交集

轴 本库取值 常见库的取值 交集稀缺性
采样率 1000 Hz(可申请至 10 kHz) 250 / 500 Hz 高分辨率库少
导联体系 12 常规 + 3 Frank 12 常规或 1–3 路 带正交导联的库少
临床上下文 逐例多节临床摘要 标签或无 深度上下文库少
三轴同时满足 是 罕见 这是它的生态位

8.4 谁在用

角色 用法 关心什么
心电算法研究者 QT 检测、波形界标、心梗分类 采样率与临床上下文
心向量图研究者 Frank 导联与导联变换验证 十二导联与 VCG 的同步对照
医学计量与设备工程 采集链路规格、噪声底、同步性 设备规格的完整披露
心电教学 带完整临床背景的真实案例 摘要的可读性与完整性
临床信息学 从自由文本临床摘要抽结构化标签 抽取规则的可靠性

§9 使用指引

9.1 三种角色的最短路径

角色 第一步 第二步 第三步
算法工程师(QT / 界标) 只拉头文件确认时长与通道 按 patient 目录分组划分 用 1000 Hz 直接建模,不要先降采样
研究者(VCG / 导联变换) 同时读 .dat 与 .xyz 用变换矩阵从十二导联推 VCG 与 .xyz 直接测得值逐点比较
临床信息学(标签工程) 全量解析 549 个头文件 看 reason for admission 取值集合再定映射 剔除 22 名无摘要受试者并记录剔除依据

9.2 最短上手流程

import wfdb

#-- 1. 远程读一条记录(不必先下载 1.7 GB)
rec = wfdb.rdrecord('s0010_re', pn_dir='ptbdb/1.0.0/patient001')
X = rec.p_signal                       #-- (38400, 15) 毫伏
twelve, frank = X[:, :12], X[:, 12:]   #-- 十二导联与 Frank 三路分开

#-- 2. 降采样前先想清楚:本库的价值就在 1000 Hz
#--    若要对齐 CinC 2006,只取前 30 秒
head = twelve[:30 * 1000]

#-- 3. 临床摘要单独解析,不要指望有标签列
hdr = wfdb.rdheader('s0010_re', pn_dir='ptbdb/1.0.0/patient001')
print([c for c in hdr.comments if 'Reason' in c or 'age' in c])

9.3 引用方式

使用本资源时,官方要求引用原始论文,并同时引用 PhysioNet 平台论文:

引用对象 文献
原始数据库 Bousseljot R, Kreiseler D, Schnabel A. Nutzung der EKG-Signaldatenbank CARDIODAT der PTB über das Internet. Biomedizinische Technik, Band 40, Ergänzungsband 1 (1995) S 317
相关方法学 Kreiseler D, Bousseljot R. Automatisierte EKG-Auswertung mit Hilfe der EKG-Signaldatenbank CARDIODAT der PTB. Biomedizinische Technik, Band 40, Ergänzungsband 1 (1995) S 319
数据版本 PTB Diagnostic ECG Database v1.0.0,DOI 10.13026/C28C71
托管平台 Pollard T, Moody BE, Lehman L, 等. PhysioNet as a global platform for biomedical research. Nature Health (2026)
许可 Open Data Commons Attribution License v1.0(ODC-BY 1.0)

§10 AI 使用声明

项目 说明
文本生成 全文由人工智能模型撰写,经三道机检闸门(结构与 frontmatter、文风与禁词、数字纪律与链接一致性)校验
数字来源 全部规模、结构、边界数字来自 PhysioNet 项目页 https://physionet.org/content/ptbdb/1.0.0/ 与文件目录 https://physionet.org/files/ptbdb/1.0.0/ ,包括 RECORDS、CONTROLS、README 与抽样头文件
文件核验 已核验 RECORDS 为 549 行、覆盖 290 个 patient 目录;CONTROLS 为 80 行;抽样 30 个头文件确认 15 路、1000 Hz、增益 2000,并见到 38400、115200、120012 三种采样点数
不一致说明 项目页导言写 294 名受试者、数据描述写 290 名,正文采用 290 并以 RECORDS 覆盖目录数交叉确认;README 写杂项 5 名、健康对照 54 人,项目页写 4 名与 52 人;CONTROLS 按记录计 80 行,与按人计的两个数字口径不同
论文信息 引用文献、挑战赛沿革与设备规格均取自官方页面与 PhysioNet/CinC 2006 挑战赛公开论文摘要,未阅读全文
未核验内容 每类诊断的受试者人数未逐项引用;呼吸通道与线电压通道是否随记录发布未提供说明;皮肤电阻与噪声电平记录是否在文件中可得未核实;各记录的信噪比与噪声段分布需下载全量后计算,本文未做;10 kHz 版本的申请流程与实际可用性未核实
图像 封面图由文生图模型依据 frontmatter 中的提示词生成,不含真实受试者信息
免责 本文为数据集说明,不构成医疗建议;数据集不得用于临床诊断

常见误读(避坑清单)

说法 实际 证据
它和 PTB-XL 是同一个库的不同版本 不是,两者采集年代、设备、人群、标注口径均不同 §2.5 对照表、§6.1
它有 15 个常规导联 12 个常规导联加 3 个 Frank 正交导联 §2.3 通道表、头文件后三行指向 .xyz
它是长时程动态心电数据 静息心电,多数约两分钟,无短于 30 秒者 CinC 2006 挑战赛论文描述
它有逐搏心搏标注 没有,无 .atr 注释文件,标注是记录级临床摘要 §4.4
可以直接读出诊断标签列 诊断是头文件里的自由文本,需自行抽取归一化 §2.2、§5.4
受试者编号从 001 连续到 294 缺 124、132、134、161 四个编号,实际 290 个目录 官方数据描述、RECORDS
每段记录长度一致 抽样见到 38400、115200、120012 三种采样点数 抽样头文件首行
增益可以假定为固定值 值写在头文件里,抽样均为 2000,仍应逐条按头文件换算 §2.3、§2.4
按记录随机划分训练测试集没问题 同一受试者 1–5 段、同次就诊可能拆成两文件,会泄漏 §5.3、§7.3
血流动力学字段的 n/a 等于零 n/a 表示未做或未记录,与零值完全不同 §2.4、§5.6 坑五
1000 Hz 是它唯一的可用采样率 官方称向贡献者特别申请可取得最高 10 kHz 官方数据描述
1.7 GB 是压缩后体积 是解压后体积,但只拉头文件可省下绝大部分流量 官方文件页面

FAQ

Q1:它的 549 段记录到底来自 290 人还是 294 人?

官方页面自身有两处不一致:开头的导言写 294 名受试者,数据描述段写 290 名,并明确说明不存在 124、132、134、161 四个编号。用 RECORDS 文件核验,549 行记录路径覆盖 290 个不重复的 patient 目录,与 290 这一数字一致。正文统一采用 290,并在 §10 记录这处不一致。若你的论文要引用受试者数,建议写明引用的是数据描述段并附注导言的异文。

Q2:我只需要诊断标签,不想下载 1.7 GB,可以吗?

可以。549 个 .hea 头文件都是几 KB 的纯文本,全量只有几 MB,临床摘要就在其中。用 wget 只拉 .hea 后缀,或在 AWS 桶上用 --exclude 排除 .dat 与 .xyz 即可。需要注意两点:一是 22 名受试者没有临床摘要,抽取后会少一批样本;二是摘要是自由文本,抽取后仍需归一化。

Q3:它和 PTB-XL 到底该怎么选?

看任务的时间与空间刻度。做大规模诊断分类、需要上万条样本、需要结构化标签表,选 PTB-XL:它有 21799 段记录、18869 名患者、10 秒十二导联、500 Hz 与 100 Hz 两版、CC BY 4.0 许可。做 QT 间期测量、波形界标、心向量图与导联变换、需要毫秒级刻度与三轴正交测量,选本库:1000 Hz、十五路同步、附逐例临床摘要。两者不是新旧关系,也不共享记录。

Q4:为什么它二十年只有一个版本?

因为原始采集已经结束。数据来自柏林一所大学诊所心内科在特定年份采集的静息心电,没有新增受试者的机制,也没有重新采集的计划。目录里的两次文件改动是补充性的:2006 年加入 CONTROLS 清单,2019 年更新 SHA256SUMS.txt。版本不变在这里是数据性质的体现,不是维护状态的问题。

Q5:十五路能直接当十五个通道喂进模型吗?

技术上可以,语义上不建议。前十二路是常规导联,反映体表特定方向的电位差;后三路是 Frank 正交导联,构成心向量图的三个轴。它们的电极位置、幅度量级、解释方式都不同。合理的做法是把"十二路"与"十五路"作为两种配置分别训练并对照报告,从而量化正交导联到底带来了多少增量;把两种性质的测量混作平权通道,会让消融实验失去解释力。

术语表

术语 解释
PTB Physikalisch-Technische Bundesanstalt,德国联邦物理技术研究院,德国的国家计量研究院
PhysioNet 由 MIT 计算生理实验室维护的生理信号与临床数据开放平台
PhysioBank PhysioNet 旗下的生理信号数据库集合
WFDB Waveform Database,PhysioNet 自 1980 年代使用的生理信号存储规范,含头文件、信号文件与注释文件
头文件(.hea) WFDB 的纯文本描述文件,声明采样率、通道数、增益、基线,并可附临床注释
Frank 正交导联 用三个互相正交的轴(X 左右、Y 上下、Z 前后)描述心脏电活动空间轨迹的电极体系
心向量图(VCG) Vectorcardiography,把心电活动表示为三维空间中的向量环
Kors 变换 从常规十二导联推算 Frank 正交导联的线性回归变换
逆 Dower 变换 另一种从十二导联推导心向量图的线性变换
A/D 单位每毫伏 增益的表示方式,2000 表示 1 毫伏对应 2000 个整数单位,即 0.5 μV 每 LSB
LSB Least Significant Bit,模数转换的最小可分辨单位
同步采样 多个通道在同一时刻各取一个点,通道间不存在时间偏移
QT 间期 心电图 QRS 起点到 T 波终点的时间间期,反映心室除极与复极的总时长
心室晚电位 QRS 末端之后的微伏级高频碎裂信号,与室性心律失常风险相关
心室造影 向心室注入造影剂后 X 线成像,用于观察室壁运动
血流动力学 关于血压、心输出量、心指数、楔压等循环功能参数的测量集合
溶栓治疗 用药物溶解冠脉内血栓以恢复血流,疗效与开始时间密切相关
束支阻滞 希氏束左右分支传导受阻,心电图上表现为 QRS 增宽与形态改变
ODC-BY 1.0 Open Data Commons Attribution License v1.0,要求署名即可自由使用的开放数据许可
CinC Computing in Cardiology,国际计算机心脏病学会议,PhysioNet 挑战赛的合办方

附录 A:核心数字核对表

项 值 来源 来源层级
记录数 549 官方数据描述;RECORDS 逐行 549 行 官方页面 + 官方文件
受试者数 290(导言另写 294) 官方数据描述;RECORDS 去重 patient 目录 官方页面 + 官方文件
缺失受试者编号 124、132、134、161 官方数据描述 官方页面
年龄范围 17–87 岁 官方数据描述 官方页面
平均年龄 57.2 岁 官方数据描述 官方页面
性别构成 209 名男性、81 名女性 官方数据描述 官方页面
分性别平均年龄 男 55.5 岁、女 61.6 岁 官方数据描述 官方页面
未记录年龄 15 名(1 女、14 男) 官方数据描述 官方页面
每人记录数 1 至 5 段 官方数据描述 官方页面
同步通道数 15 官方数据描述;抽样头文件首行第 2 字段 官方页面 + 官方文件
常规导联数 12 官方数据描述 官方页面
Frank 导联数 3(vx、vy、vz) 官方数据描述 官方页面
采样率 1000 Hz 官方数据描述;抽样头文件首行第 3 字段 官方页面 + 官方文件
位分辨率 16 位 官方数据描述 官方页面
量程 ±16.384 mV 官方数据描述 官方页面
增益 2000 A/D 单位每毫伏(0.5 μV/LSB) 官方设备规格;抽样头文件信号行 官方页面 + 官方文件
可申请最高采样率 10 kHz 官方数据描述 官方页面
设备输入通道 16(心电 14、呼吸 1、线电压 1) 官方设备规格 官方页面
设备噪声 峰峰值最大 10 μV、有效值 3 μV 官方设备规格 官方页面
无临床摘要人数 22 名 官方数据描述 官方页面
归入诊断类别人数 268 名,九个类别 官方数据描述 官方页面
健康对照记录数 CONTROLS 文件 80 行 CONTROLS 文件 官方文件
抽样记录长度 38400 / 115200 / 120012 采样点 抽样头文件首行第 4 字段 官方文件
全量体积 解压后 1.7 GB 官方文件页 官方页面
首次发布 2004-09-25,版本 1.0.0 官方页面版本列表 官方页面
许可 ODC-BY 1.0 官方页面许可段 官方页面
DOI 10.13026/C28C71 官方页面 官方页面
被引用 48 篇出版物 官方页面 Cited by 官方页面

附录 B:数字的来源分层

第一层:官方页面与官方文件。 记录数、受试者数、年龄范围与构成、通道构成、采样率、位分辨率、量程、设备规格、缺失编号、无摘要人数、许可、DOI、发布日期。这些数字来自项目主页的数据描述段与设备规格段,以及 RECORDS、CONTROLS、README 与抽样头文件。

第二层:挑战赛公开论文。 “记录通常约两分钟、少数更短、无短于 30 秒者"这一时长口径,以及参赛者普遍只取前 30 秒处理的做法,来自 PhysioNet/CinC 2006 挑战赛的公开论文。该层只能支撑"当年是这样用的”,不能支撑"这样用效果如何"。

第三层:未核实。 各诊断类别的受试者人数、呼吸与线电压通道是否发布、皮肤电阻与噪声电平记录是否可得、逐段信噪比、10 kHz 版本的实际获取方式。这些需要下载全量或向贡献者申请后才能确认,正文涉及处只做定性表述。

附录 C:完整参考文献

编号 文献 链接 用途
1 PTB Diagnostic ECG Database v1.0.0 https://physionet.org/content/ptbdb/1.0.0/ 全部规模、结构、边界数据的来源
2 该库 PhysioNet 文件目录 https://physionet.org/files/ptbdb/1.0.0/ RECORDS、CONTROLS、README、抽样头文件
3 Bousseljot R, Kreiseler D, Schnabel A. CARDIODAT 心电数据库(1995) 官方页面引用文献 原始出处与引用要求
4 Kreiseler D, Bousseljot R. 基于 CARDIODAT 的自动心电分析(1995) 官方页面引用文献 方法学背景
5 PhysioNet/CinC Challenge 2006(QT 间期测量) https://physionet.org/content/challenge-2006/1.0.0/ 时长口径与沿革
6 Pollard T 等. PhysioNet as a global platform for biomedical research. Nature Health (2026) https://doi.org/10.1038/s44360-026-00096-z 平台引用规范
7 PTB-XL v1.0.3(对照) https://physionet.org/content/ptb-xl/1.0.3/ §2.5 与 §6.1 的对比
8 ODC-BY 1.0 许可文本 https://opendatacommons.org/licenses/by/1-0/ 许可条款

附录 D:任务代码

任务一:按受试者分组划分并读取十五路信号

import wfdb
import numpy as np
from sklearn.model_selection import GroupShuffleSplit

#-- 读 RECORDS:549 行,形如 patient001/s0010_re
paths = [l.strip() for l in open('RECORDS') if l.strip()]
groups = [p.split('/')[0] for p in paths]

gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0)
tr, te = next(gss.split(paths, groups=groups))

def load(rel):
    #-- pn_dir 必须写到 patient 子目录
    d, name = rel.rsplit('/', 1)
    rec = wfdb.rdrecord(name, pn_dir=f'ptbdb/1.0.0/{d}')
    return rec.p_signal          #-- (采样点, 15) 毫伏

X = load(paths[tr[0]])
print(X.shape, len(set(groups)))

任务二:十二导联推导 VCG 并与直接测得的 Frank 导联对照

import wfdb
import numpy as np

#-- Kors 回归矩阵:由十二导联推算 vx, vy, vz
KORS = np.array([
    [-0.130, 0.050, 0.090, -0.010, 0.130,  0.060, 0.340, 0.380, 0.200, 0.110, -0.070, 0.010],
    [ 0.070, 0.030, 0.020,  0.050, 0.060, -0.170, 0.320, 0.440, 0.320, 0.180, -0.110, 0.080],
    [ 0.070,-0.130,-0.190,  0.030, 0.090,  0.070, 0.080, 0.130, 0.270, 0.310,  0.320, 0.190],
])

rec = wfdb.rdrecord('s0010_re', pn_dir='ptbdb/1.0.0/patient001')
X = rec.p_signal
twelve, frank = X[:, :12], X[:, 12:]

pred = twelve @ KORS.T                       #-- 推导所得 VCG
for i, ax in enumerate('xyz'):
    a, b = pred[:, i], frank[:, i]
    #-- 只做相对量级比较,不做拟合优度的统计推断
    print(f'{ax}: 推导峰峰值 {np.ptp(a):.3f} mV  直接测得峰峰值 {np.ptp(b):.3f} mV')

这段代码的目的不是判定哪个变换更好,而是把"推导值与直接测得值差多少"这件事量化出来。拿到峰峰值之比之后,再决定是否需要针对特定任务重新拟合变换矩阵。

附录 E:如果只记五件事

序号 记住什么 为什么
1 549 段、290 名受试者、15 路、1000 Hz 这四个数字定义了一切用法与限制
2 15 路 = 12 常规 + 3 Frank 正交 混作平权通道会让消融实验失去解释力
3 标注是记录级自由文本临床摘要,无逐搏标注 标签要自己抽,22 名受试者没有摘要
4 按 patient 目录划分,不按记录划分 同一受试者 1–5 段,随机划分会泄漏
5 它是毫秒级与三轴测量的稀缺格子 大规模分类不该找它,QT 与 VCG 几乎只能找它

编辑说明

本文的核验时间为 2026 年 10 月 29 日。核对方式为直接访问 PhysioNet 项目页与文件目录,逐一确认 RECORDS、CONTROLS、README 的可访问性与内容,并抽样三十个头文件确认通道数、采样率、增益与记录长度;CinC 2006 挑战赛部分取自公开论文摘要,未读全文。受试者数在官方页面存在 290 与 294 两处异文,正文采用 290 并以 RECORDS 覆盖的 patient 目录数交叉确认,同时在 §10 记录该不一致。未覆盖的内容包括:各诊断类别的受试者人数、呼吸与线电压通道是否随记录发布、皮肤电阻与噪声电平记录的可得性、逐段信噪比、以及 10 kHz 版本的申请流程。这些需要下载全量或向贡献者申请后确认,本文按要求只写规模、结构、边界三类数字。


相关数据集导航

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

  • ptb-xl — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • ptb-xl-plus — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • incartdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • mit-bih-arrhythmia — 共享标签:生理信号 / 心电信号 / 心律失常
  • mit-bih-afdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • wctecgdb — 共享标签:生理信号 / 心电信号 / 多通道采集
  • georgia-12-lead-ecg-challenge — 共享标签:生理信号 / 心电信号 / 十二导联
  • openecg — 共享标签:生理信号 / 心电信号 / 十二导联
  • code-15 — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • chapman-shaoxing — 共享标签:生理信号 / 心电信号 / 心律失常

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

返回 AI-Ready 数据集