十二段半小时,逐个标出 P 波 — MIT-BIH P 波标注库

12 段 30 分钟 / 2 导联 360 Hz / 双人标注复核

来源 https://physionet.org/content/pwave/1.0.0/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 6
十二段半小时,逐个标出 P 波 — MIT-BIH P 波标注库

信息速览

数据集名称十二段半小时,逐个标出 P 波 — MIT-BIH P 波标注库
数据类型时序信号,波形标注,元数据
规模12 名受试者 / 12 段记录
接入方式https://physionet.org/content/pwave/1.0.0/
AI 就绪度

心电图上被研究得最透的是 QRS 波群,被标得最全的也是 QRS 波群。四十多年里,公开心电库几乎把注意力都投给了那个最高最尖的波:MIT-BIH 心律失常库给出十几种心搏类型码,QT 数据库给出 P、QRS、T 的起点、峰点与终点,各类挑战赛的训练标签也大多建立在心搏分类之上。而真正的难点——幅度只有零点几毫伏、宽度不到一百毫秒、在基线漂移与肌电噪声里几乎看不见的 P 波——长期没有一个公开的人工标注集。已发表的 P 波检测算法报告出的灵敏度很高,但那些数字绝大多数来自窦性心律记录;一旦换成有室性早搏、束支阻滞或房室传导异常的记录,同一套算法的表现会明显逊色,而这恰恰是缺少参考标注造成的:没有真值,就无法证明它到底掉了多少。MIT-BIH P 波标注库补的就是这一格——从母库的四十八段里挑出十二段,一段一段把 P 波峰的位置人工标出来。它的规模小得不能再小,只有十二段、十二个人、合计约六小时的波形,但它把「病理记录下的 P 波检测到底有多难」这个此前只能靠定性描述的问题,变成了可以量化的度量。一屏速览见下表。

维度 内容
全名 MIT-BIH Arrhythmia Database P-Wave Annotations
发布方 PhysioNet;数据由捷克布尔诺理工大学 Andrea Němcová 等人贡献
首次发布 2018 年 1 月 9 日,版本 1.0.0
最近改动 2019 年 2 月 20 日,补入 SHA256SUMS.txt 校验清单
记录数 12 段(编号 100–231,非连续,全部取自 MIT-BIH 心律失常库)
受试者数 12 名,每段对应一人
每段时长 约 30 分钟(650000 采样点 ÷ 360 Hz,约 1805.6 秒)
通道数 2,上通道均为 MLII,下通道为 V1、V2 或 V5
采样率与分辨率 360 Hz 每通道,11 位分辨率,覆盖 10 mV 量程
原始来源 MIT-BIH 心律失常库,1975–1979 年采集,1980 年首次发行
标注内容 P 波峰位置,注释文件中类型码统一为 p
标注方式 一位专家人工标注,第二位专家复核,疑难片段共同会商
文件格式 WFDB:.hea 头文件 / .dat 信号 / .pwave 注释
全库体积 未压缩 22.4 MB
许可 Open Data Commons Attribution License v1.0(ODC-BY 1.0),开放访问
典型用途 P 波检测算法的开发与评价、病理记录下的心房活动识别

§1 它要解决的具体麻烦

1.1 心电标注的三个粒度,P 波落在最细的那一层

心电数据的监督信号按粒度可以分成三层,理解这三层是判断任何一个心电库能不能用的前提。

最粗的一层是节律级(rhythm):给一段时间贴一个标签,比如「这段是房颤」「这段是窦性心律」。它回答的是「这段时间整体上发生了什么」,粒度通常是秒到分钟,适合做节律分类与负荷统计。

中间一层是心搏级(beat):给每一次心搏标出位置与类型,比如正常心搏、室性早搏、房性早搏。它回答的是「这一次搏动属于哪一类」,粒度是一次心搏。绝大多数公开心电库停在这一层,因为它是心律失常检测的主流任务,也相对容易标注——QRS 波群幅度大、特征明显,自动初标加人工修正就能得到可用的真值。

最细的一层是波形边界级(delineation):把一个心搏内部的 P 波、QRS 波群、T 波各自的起点、峰点、终点都标出来。它回答的是「这段波的边界在哪里」,粒度是几十毫秒。

三层的差别不只是粗细,而是「谁都能标、机器也能标」与「只有人能标、而且人也会犹豫」之间的差别。

粒度 标注单位 自动初标可行性 公开资源丰富度 代表任务
节律级 一段时间 高 丰富 房颤检测、负荷统计
心搏级 一次心搏 高,加人工修正即可用 丰富 心搏分类、早搏检测
波形边界级 一个波段的起止点 低,人工为主 稀少 P 波检测、QT 间期测量

P 波落在第三层,而且是最难标的那一段。它的幅度通常只有零点零几到零点二五毫伏,宽度不到一百毫秒,在存在基线漂移、工频干扰或肌电噪声的记录里,人眼都要反复比对才能确定峰的位置。这直接导致了公开数据的空缺:给一段记录标心搏类型,一个有经验的标注者几小时能做完;给同一段记录逐个标出 P 波峰,工作量与争议量都要高一个数量级。这个空缺的后果是具体的——不是「少了一个数据集」,而是「病理条件下的 P 波检测性能无法被验证」。

1.2 三条常见的错误期待

第一条,把它当成一套自动生成的标注。 它不是。官方页面写明,标注由一位专家人工完成,第二位专家复核,两人对不确定的片段共同会商。它是一份人工真值,不是某个算法的输出。把它当作算法输出来用时(比如用它训练后又在同一批记录上评测),得到的数字不说明任何问题。

第二条,以为它标出了 P 波的起点与终点。 它没有。官方页面说的是 P 波「标注」(annotations),注释文件中的类型码为 p,对应的是 P 波峰的位置。想做 P 波时限、P 波离散度一类需要起点与终点的研究,这份数据给不了——它给的是峰,不是边界。这一点决定了它能做什么任务、不能做什么任务(§4.4)。

第三条,以为十二条记录能代表母库的四十八条。 不能。官方页面明确说,选取记录时有意纳入了会让 P 波检测变难的病理特征。它是一个「故意挑难的」子集,不是一个随机抽样。用它估计一个算法在一般人群上的表现,会系统性低估。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
P 波检测算法的评测真值 十二段半小时记录的 P 波峰位置 够,且这正是它唯一的设计目标
病理条件下 P 波检测的难度量化 记录选取时有意纳入难检病理 够,论文给出了含室早与生理节律两组的对照结果
开发新的 P 波检测器并调参 十二段约六小时波形 勉强,样本量小,调参极易过拟合
训练端到端深度模型 约六小时、两人标注 不够,比主流心电预训练库小几个数量级
P 波起点与终点边界 — 不够,只标峰位置
P 波形态学参数(时限、离散度) — 不够,需要起止边界
房颤的阵发时刻与持续时长 母库 .atr 中的节律注释 可借助母库,本库不额外提供
多中心泛化验证 单一来源(波士顿贝斯以色列医院,1975–1979) 不够
用药、随访、结局变量 — 完全没有
十二导联的 P 波电轴研究 每段仅两通道 不够

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

你的处境 它能帮你什么 下一步该做什么
你写了一个 P 波检测器,只在窦性心律上测过 提供含室早、束支阻滞、房室传导异常的记录,让你量出难度落差 先跑全十二段,把含室早的四段与其余段分开报告
你在复现一篇 P 波检测论文,对不上数字 论文自述的评测集为九条记录,与库的十二条不一致 核对论文用的是哪几条,只在那几条上比(§10)
你要评测可穿戴单导联设备的 P 波能力 下通道多为 V1 或 V2,接近单导联场景 只用下通道跑,并在方法节写明用了哪一路
你要给标注质量做交叉验证 两位专家标注加复核的流程已公开 引用流程说明,但注意官方不保证完备与正确
你在教心电图判读,缺难例 头文件里附有官方对困难片段的文字描述 按 §2.4 表挑记录,配合官方描述讲
你要做大样本统计或人群研究 — 换库,这个库回答不了这类问题

1.5 一句话判断

它不是一个可以拿来训练模型的数据集,而是一把可以拿来量模型「在难例上掉了多少分」的尺子——六小时波形、十二个人、双人复核,规模上什么都谈不上,但它是公开心电库里极少数把 P 波峰位置逐个人工标出来的资源之一。

1.6 不适合谁:四条边界

不适合拿来做端到端训练。 十二段、合计约六小时、十二名受试者。任何有一定容量的模型都能在几轮之内把这些波形记全。想靠数据量换性能的项目,用它会立刻遇到无法解释的「高指标」。

不适合拿来做 P 波形态学定量研究。 官方给的是峰位置,不是起止边界。P 波时限、P 波面积、P 波离散度这类指标都依赖起止点,这份数据无法支撑。

不适合拿来做人群推断。 记录来自 1975–1979 年波士顿一家医院的心律失常实验室,且是刻意挑出的难例。它既不代表当代人群,也不代表一般心律失常人群。

不适合拿来做独立评测却忽略母库重叠。 官方在使用说明里明确提醒:这些记录与 MIT-BIH 心律失常库重叠,构造训练集与评测集时必须考虑这个重叠。在 MIT-BIH 上预训练过的模型,在这十二段上评测不构成外部验证。

§2 数据构成与规格

2.1 每段记录由三个文件组成,根目录另有三个文件

数据采用 WFDB(Waveform Database)格式存储,这是 PhysioNet 自 1980 年代沿用至今的生理信号存储规范。每一段记录对应同名的三个文件:

文件 角色 说明
100.dat 信号本体 二进制,两路信号按采样点交错存放,格式 212(每 3 字节打包两个 12 位样本)
100.hea 头文件 纯文本,声明通道数、采样率、采样点数、增益、ADC 零值、初始值、校验和、导联名,后附患者上下文
100.pwave 注释文件 二进制,存放 P 波峰的采样点序号与类型码,用 rdann 以 pwave 为注释器名读取

三者缺一不可。只有 .dat 无法还原毫伏值,因为增益写在 .hea 里;只有 .pwave 无法知道这些时刻对应哪段波形,因为时间基准也来自 .hea。

根目录还有三个文件:RECORDS 列出十二个记录名,共十二行;ANNOTATORS 只有一行,内容是 pwave reference P-wave annotations,说明注释文件的角色;SHA256SUMS.txt 是三十八条文件的校验和清单,用于下载后验证完整性。

2.2 信息项的完整字典

本库的「字段」不是表格列,而是 WFDB 头文件的关键字行、注释类型码与附属清单项。下表逐条列出。

信息项 所在位置 取值形态 含义 使用注意
记录名 .hea 第 1 行首字段 100–231 记录标识 与母库记录编号一致,可直接对应
信号条数 .hea 第 1 行第 2 字段 2 通道数 全部记录均为 2
采样率 .hea 第 1 行第 3 字段 360 每秒采样点数 与母库一致
采样点数 .hea 第 1 行第 4 字段 650000 每段总长度 十二段全部相同
信号文件名 .hea 信号行第 1 字段 100.dat 数据存放位置 两通道共用一个 .dat
存储格式 .hea 信号行第 2 字段 212 每 3 字节打包两个 12 位样本 不是 16 位,也不是浮点
增益 .hea 信号行第 3 字段 200 ADC 单位/毫伏 全部记录均为 200
位分辨率 .hea 信号行第 4 字段 11 ADC 有效位数 量程 10 mV
ADC 零值 .hea 信号行第 5 字段 1024 零电平对应的整数值 换算时先减零值
初始值 .hea 信号行第 6 字段 如 995 首采样点的整数值 逐记录不同
校验和 .hea 信号行第 7 字段 如 -22131 采样点累加和 用于校验 .dat 是否完整
块大小 .hea 信号行第 8 字段 0 每帧字节数 由 wfdb 自动计算
导联名 .hea 信号行第 9 字段 MLII / V1 等 解剖位置 上通道固定 MLII
年龄 .hea 注释行第 1 行 如 69,缺失为 -1 受试者年龄 103 号记录未记录年龄
性别 .hea 注释行第 1 行 M / F 受试者性别 与官方清单一致
用药 .hea 注释行第 2 行 自由文本或 None 记录时用药 不是完整用药史
补充说明 .hea 注释行第 3 行起 自由文本 官方对该段的定性描述 只有部分记录有
P 波峰位置 .pwave 采样点序号 每个 P 波峰的时刻 除以 360 得秒
标注类型码 .pwave p P 波峰 注释文件中类型码统一
注释器角色 ANNOTATORS pwave reference P-wave annotations 注释文件的语义 与母库 .atr 区分
记录清单 RECORDS 12 行记录名 全库记录列表 按空白切分计数得 12

2.3 一条记录的完整解剖

以 100 号记录为例,头文件全文如下:

100 2 360 650000
100.dat 212 200 11 1024 995 -22131 0 MLII
100.dat 212 200 11 1024 1011 20052 0 V5
\# 69 M 1085 1629 x1
\# Aldomet, Inderal

(上面注释行前的反斜杠只是为了避开正文的标题语法,实际文件里是 # 开头。)

第一行 100 2 360 650000 读作:记录名 100,2 个通道,360 Hz,每段 650000 个采样点。650000 ÷ 360 ≈ 1805.6 秒,即约 30 分 5.6 秒——官方页面表述为「约半小时」,与头文件一致。

接下来两行是通道声明。以第一行为例,从右往左读:导联名 MLII;块大小 0(由 wfdb 自动计算);校验和 -22131;初始值 995;ADC 零值 1024;位分辨率 11;增益 200(即 200 个整数值对应 1 毫伏,约 5 微伏/单位);存储格式 212;文件名 100.dat。第二行只是换成了 V5 导联、初始值 1011、校验和 20052。

值得留意的是增益。母库的十二段在本库里增益统一为 200,这比某些多中心库逐记录变动的增益要省心;但存储格式是 212 而不是更常见的 16,意味着每个样本只有 12 位,若用自己写的解析器按 16 位整数读取,整段波形会错位。实际使用时应直接用 wfdb 读取,而不是手写二进制解析。

后面两行注释是患者上下文:69 岁男性,记录时用药为 Aldomet 与 Inderal。第三行出现的两个数字是母库内部的编号字段,官方页面没有逐项解释,本文不做推测(§10)。

读取信号与 P 波标注的标准写法:

import wfdb

#-- pn_dir 指向 PhysioNet 上的库名;annotator 用 pwave
rec = wfdb.rdrecord('100', pn_dir='pwave')
ann = wfdb.rdann('100', 'pwave', pn_dir='pwave')

print(rec.fs, rec.sig_len, rec.sig_name)   #-- 360 650000 ['MLII', 'V5']
print(rec.p_signal.shape)                  #-- (650000, 2) 已换算成毫伏
print(len(ann.sample), set(ann.symbol))    #-- 标注条数与类型码集合
print(ann.sample[:5])                      #-- 前五个 P 波峰的采样点序号

p_signal 是已按增益与 ADC 零值换算过的浮点毫伏值;若要原始整数,用 d_signal。ann.sample 是采样点序号,除以 360 即得秒数。

2.4 十二条记录清单

官方页面给出的对应关系与受试者信息如下。导联名、头文件体积与注释体积来自文件目录。

注释文件 对应记录 性别 年龄 上通道 下通道 .hea 体积 .pwave 体积
100.pwave 100 男 69 MLII V5 143 B 4.4 KB
101.pwave 101 女 75 MLII V1 131 B 3.6 KB
103.pwave 103 男 未记录 MLII V2 142 B 4.1 KB
106.pwave 106 女 24 MLII V1 158 B 3.0 KB
117.pwave 117 男 69 MLII V2 127 B 3.0 KB
119.pwave 119 女 51 MLII V1 158 B 3.2 KB
122.pwave 122 男 51 MLII V1 221 B 4.8 KB
207.pwave 207 女 89 MLII V1 546 B 2.9 KB
214.pwave 214 男 53 MLII V1 270 B 3.9 KB
222.pwave 222 女 84 MLII V1 333 B 2.8 KB
223.pwave 223 男 73 MLII V1 258 B 4.1 KB
231.pwave 231 女 72 MLII V1 333 B 3.9 KB

两点可以直接从这张表读出来。第一,上通道全部是 MLII(改良肢体 II 导联),这是母库采集时的固定配置,因此跨记录比较时上通道是同质的。第二,下通道并不统一:九条是 V1,两条是 V2,一条是 V5。做「单导联算法评测」时,若混用下通道而不加说明,等于把不同观察方向的数据拼在一起(§5.6)。

头文件体积的差异也说明问题:最大的 207 号头文件有 546 字节,因为它附了六行官方文字描述;最小的 117 号只有 127 字节,只有记录声明与两行患者信息。这些描述是官方提供的定性上下文,做难例筛选时比任何自动指标都直接。

2.5 与同类资源的字段差异

对比项 本库(pwave) MIT-BIH 心律失常库 QT 数据库 BUT PDB
记录数 12 48 105 50
受试者数 12 47 未统一公布 未统一公布
单段时长 约 30 分钟 约 30 分钟 15 分钟 2 分钟
通道数 2 2 2 2
采样率 360 Hz 360 Hz 250 Hz 未统一公布
标注对象 P 波峰 心搏类型 + 节律 + 信号质量 P/QRS/T 起止边界 P 波峰
标注粒度 峰位置 心搏级 / 节律级 波形边界级 峰位置
是否与母库重叠 是,即母库子集 — 部分 是,取自三个公开库
许可 ODC-BY 1.0 ODC-BY 1.0 ODC-BY 1.0 公开

这张表要说清的一件事是:本库与 BUT PDB 在任务上高度接近(同为 P 波峰人工标注),但两者是不同时间、不同规模、不同记录集合的独立资源,不是同一份数据的两个版本。挑选时看的不是「哪个更好」,而是「你要长段还是多段」(§6.3)。

2.6 两个通道的物理含义

每段记录只有两路信号,选哪一路直接决定 P 波能不能看清。

导联 安放位置 观察方向 对 P 波的意义 主要失真来源
MLII 右臂—左腿(改良肢体 II) 左下方向 P 波电轴多与之接近,幅度较稳定,是常规判读首选 呼吸与体位变化引起的基线摆动
V1 胸骨右缘第 4 肋间 前后偏右 心房活动在 V1 常呈双向波,有助于区分房性与交界性 呼吸起伏最明显
V2 胸骨左缘第 4 肋间 前后偏右 与 V1 相邻,常作为 V1 的替代 同上
V5 左腋前线第 5 肋间 左外侧 P 波幅度通常偏低,心房细节弱 心尖搏动造成的运动伪迹

上通道统一为 MLII 这一点,让跨记录的横向比较有了共同的基准;下通道的多样性则提醒:把十二条记录的下通道当成同一种信号来处理,是不成立的。

§3 它是谁的数据

3.1 贡献者与机构

数据库由捷克布尔诺理工大学(Brno University of Technology)生物医学工程系的四位研究者贡献:Andrea Němcová、Radovan Smíšek、Martin Vítek、Lukáš Smital。页面显示四位作者同属该系的同一研究组(UBMI),这是一个长期从事心电信号分析与 Holter 数据处理的团队,其相关工作还包括 P 波检测、心电信号质量评估与压缩后信号质量评价等方向。

官方在方法部分对标注者资质给出了明确说明:两位标注者均从事心电处理与分析工作,具有五年以上 Holter 心电分析经验,并持有布尔诺理工大学生物医学工程与生物信息学硕士学位。这类信息在公开数据集中并不常见——多数心电库只写「由专家标注」而不写经验年限与学科背景,本库把它写进了方法节,这对判断标注可信度是有用的。

3.2 时间线

时间 事件 说明
1975–1979 母库原始记录在波士顿贝斯以色列医院采集 本库不重新采集,沿用母库波形
1980 MIT-BIH 心律失常库首次发行 本库信号的来源
1999-09 / 2005-02 母库全部记录经 PhysioNet 免费开放 使二次标注成为可能
2016 标注所用工具 SignalPlant 发表 Plesinger 等,Physiological Measurement
2018-01-09 本库在 PhysioNet 上线,版本 1.0.0 首次公开,含 36 个记录文件
2018-01-30 补入 RECORDS 与 ANNOTATORS 便于批量读取与注释器识别
2019-02-20 补入 SHA256SUMS.txt 提供下载后的完整性校验

文件目录里的修改时间印证了这条线:.dat 与 .hea 的时间戳是 1992-07-30,说明它们是母库原样复制过来的文件;.pwave 的时间戳是 2018-01-09,与发布日一致。

3.3 采集场景与纳入口径

采集场景完全继承自母库:原始记录来自波士顿贝斯以色列医院心律失常实验室,1975–1979 年间约四千份 24 小时动态心电记录中的一部分,其中约六成来自住院患者、四成来自门诊患者。数字化参数为 360 Hz、11 位分辨率、10 mV 量程。

纳入口径是本库自己定义的部分。官方页面写明:选取这些记录,是因为它们包含会使 P 波检测更困难的病理特征;同时也纳入了用于评价窦性心律下检测表现的记录。配套研究进一步说明,含室性早搏的记录为 106、119、214、223,用于生理节律验证的记录为 100、101、103、117、122。

这里的口径值得强调:这不是随机抽样,而是按难度定向挑选。它的好处是把难例集中起来,让评测有区分度;代价是任何在它上面得到的绝对指标都不能外推。把它当「困难子集」用是对的,把它当「代表性样本」用是错的。

3.4 数据来源的三个层次

理解这份数据要分清三层。

层次 内容 是否公开 影响
原始采集层 1975–1979 年波士顿的 24 小时动态心电记录 否 无法回溯电极与采集细节
母库公开层 MIT-BIH 心律失常库的三文件记录(.hea/.dat/.atr) 是 本库的信号与患者信息直接来自这里
新增标注层 本库的 .pwave 文件 是 唯一的原创贡献,也是本库存在的理由

第一层不可得,意味着一些方法论问题无法回答:比如这十二段在整个病程中的位置、电极的具体安放与皮肤处理、采集当天的活动记录。第二层决定了信号与患者上下文都是母库原样,本库没有做任何重采样或重新滤波,因此把本库的 .dat 与母库同名文件互换不会产生任何差异。第三层是唯一新增的东西,体积小(十二个文件合计约四十余 KB),但它是把「P 波检测在病理记录上到底行不行」从断言变成度量的关键。

这个分层还有一个直接后果:因为波形与患者信息都不是本库原创,本库能提供的证据强度完全取决于标注层。评价本库时看的是标注流程是否可信、标注者是否有资质、官方对完备性的表述是否诚实——而不是看它有多少段记录。

§4 它最独特的东西

4.1 稀缺的不是波形,是 P 波的真值

公开心电数据里,三十分钟的双通道波形并不稀缺,MIT-BIH 心律失常库本身就提供了四十八段。真正稀缺的是 P 波位置的人工真值。原因不复杂:QRS 波群幅度大、边界陡,自动检测器加上人工修正就能得到可靠的心搏标注;P 波幅度小、边界平缓,且与 T 波、噪声在频带上大量重叠,自动方法在这里既容易漏也容易误,人工标注因此无法省。

结果是一个不对称的格局:心搏级标注几乎是所有心电库的标配,而 P 波级标注长期空缺。算法论文想证明自己的 P 波检测器好,只能在窦性心律记录上自证,或者干脆不报 P 波指标。本库的价值就在这个空缺上——它把十二段病理记录里的 P 波峰逐个标出来,让「病理条件下的 P 波检测」第一次有了可以对照的参考。

4.2 差异化证据

维度 本库的位置 对比对象 差异在哪
标注对象 P 波峰 心搏类型标注库 更细一层,直接对应心房活动
记录选取 定向纳入难检病理 随机抽样库 难度集中,区分度高
标注流程 一人标注、一人复核、疑难会商 自动初标加人工修正 人工占比更高,但主观性也更高
与母库关系 母库的真子集 独立采集库 可复用母库原 .atr,但须防重叠泄漏
单段时长 约 30 分钟 2 分钟片段库 上下文更长,适合节律相关研究
记录数量 12 数十至数百 明显偏小,不适合训练
工具链 SignalPlant + WFDB 各家自研工具 与 PhysioNet 生态完全兼容

配套研究还给出了该检测方法在上述记录上的自述指标:含室性早搏的记录上灵敏度为 98.94%、正预测率为 98.30%;无病理的记录上灵敏度为 98.47%、正预测率为 99.99%。这两个数字通常被读成「病理记录上也不差」,但需要注意口径——它们来自论文自己的评测设置,且正预测率一项在两组之间差距明显大于灵敏度,说明病理条件下多出来的主要是误检而非漏检。引用这些数字时应连同记录编号与时间容差一并说明(§10)。

4.3 案例:207 号记录为什么被官方称为「极其困难」

207 号记录的头文件里附了官方的一段描述,原文大意是:这是一份极其困难的记录,主要节律为窦性心律,合并一度房室传导阻滞与左束支阻滞;有若干时段传导阻滞图形会转变为右束支阻滞形态;室性早搏呈多形性;在最长的一段室性扑动之后出现室性自主心律;记录结束时正处于室上性心动过速发作之中。

这段描述把 P 波检测的难点列全了,逐条拆开看:

难点 对 P 波检测的具体影响
一度房室传导阻滞 PR 间期延长且不固定,靠「QRS 前固定窗口」找 P 波的做法会失效
左束支阻滞 QRS 增宽,其起始部分与 P 波在时间上更接近,容易混淆
阻滞图形在左右束支间转换 同一段记录内 QRS 形态不恒定,基于模板减法的 P 波提取会出错
多形性室性早搏 室早提前出现,其前的 P 波可能被掩盖或根本不存在,判断「有没有 P 波」本身就成了难题
室性扑动与室性自主心律 心房与心室活动脱节,P 波可能独立存在,也可能被完全淹没
记录结束于室上性心动过速 心率快时 P 波与前一 T 波重叠,视觉上都难以分辨

一个算法在这类记录上扣分,扣的不是实现质量,而是「在心房与心室关系被破坏时,还能不能找到心房活动」这个根本问题。这也是为什么只看窦性心律记录上的指标会给出过于乐观的印象。

把这段话与其余几条记录的官方描述放在一起看,选取意图就更清楚了:106 与 223 都注明室性早搏呈多形性,231 注明房室传导明显异常,222 注明阵发性房扑或房颤之后常跟随交界性逸搏,122 注明下通道全程有低幅高频噪声,214 注明有两次伪迹性幅度下降与一次磁带打滑。也就是说,困难既来自心律本身,也来自记录质量——后者恰恰是真实可穿戴场景里最难回避的部分(§7.3)。

4.4 标注的粒度:只有峰,没有边界

本库提供的是 P 波峰的位置,不是 P 波的起点与终点。这个区别决定了任务的边界。

你想做的事 需要什么 本库给不给
评测 P 波检测器「找没找到」 峰位置 + 匹配容差 给
评测检测器的时间误差分布 峰位置 给
算 P 波时限 起点与终点 不给
算 P 波离散度(各导联时限差) 各导联起止点 不给
算 PR 间期 P 起点 + QRS 起点 只给 P 峰,还需母库心搏标注
做 P 波形态聚类 波形片段 可自行切窗,但需自己定窗长

评测时还要处理一个官方明确指出的问题:未标注的区间不能直接解读为「这里没有 P 波」。官方说明里写得很清楚,并非所有 P 波都一定被标注,部分标注也可能有误。因此把「参考标注」当成完备真值来计算特异度,会低估算法的真实表现。

4.5 边界条件:什么情况下它不再适用

当你的模型已经在母库上训练过。 这十二段是母库的子集,在其上评测等价于在训练集里划出一块做测试,除非你明确按记录把母库中对应编号排除干净。

当你的目标人群不是心律失常人群。 记录来自心律失常实验室,且刻意挑了难例。

当你的任务需要多导联信息。 每段只有两路,做不了 P 波电轴、心房激动顺序一类需要空间维度的研究。

当你需要严格的统计功效。 十二条记录、十二名受试者,做组间比较的样本量不足。

§5 怎么拿到

5.1 目录结构与下载面

版本 1.0.0 的目录是一个扁平结构,没有任何子目录,共三十九个文件。

类别 文件 数量 体积
信号 100.dat–231.dat 12 各约 1.9 MB
头文件 100.hea–231.hea 12 127 B–546 B
注释 100.pwave–231.pwave 12 2.8 KB–4.8 KB
记录清单 RECORDS 1 48 B
注释器说明 ANNOTATORS 1 35 B
校验清单 SHA256SUMS.txt 1 2.7 KB
合计 — 39 未压缩 22.4 MB

官方提供了四种取数方式:整包 ZIP 下载、PhysioNet Python 包命令行、wget 递归、AWS S3 同步。全库只有二十几兆,四种方式里任何一种都不构成负担。

5.2 批量下载

#-- 整包下载,一次拿全三十九个文件
wget -r -N -c -np https://physionet.org/files/pwave/1.0.0/

#-- 或用官方 Python 包,自动带版本号
physionet download pwave --version 1.0.0

#-- 或用 AWS 开放桶,无需账号
aws s3 sync --no-sign-request s3://physionet-open/pwave/1.0.0/ ./pwave

#-- 下载后校验:比对官方 SHA256SUMS.txt
sha256sum -c SHA256SUMS.txt

最后一行不是可选项。波形文件在传输中断时不会报错,只会静默截断,而截断的信号在多数下游管线里仍然「能跑」,只是结果无意义。

5.3 用 wfdb 流式读取

import wfdb

#-- 从 RECORDS 直接取记录名,无需手写列表
names = wfdb.get_record_list('pwave')
print(len(names), names)

#-- 逐段流式读取,不落盘
for name in names:
    rec = wfdb.rdrecord(name, pn_dir='pwave')
    ann = wfdb.rdann(name, 'pwave', pn_dir='pwave')
    assert rec.fs == 360
    print(name, rec.sig_name, rec.sig_len, len(ann.sample))

get_record_list 直接解析 RECORDS,避免手写记录名时漏掉某一条。远程读取的好处是不占磁盘,代价是每段都要重新走网络;全库过一遍时间不长,但如果要做多次遍历,落盘更省事。

5.4 转成通用的表结构

下游若是常规深度学习管线,通常需要把 P 波峰标注转成定长片段或逐搏表:

import wfdb
import numpy as np
import pandas as pd

FS = 360
PRE, POST = 180, 180          #-- 峰前 0.5 秒到峰后 0.5 秒

rows = []
for name in ['100', '101', '103']:
    rec = wfdb.rdrecord(name, pn_dir='pwave', physical=True)
    ann = wfdb.rdann(name, 'pwave', pn_dir='pwave')
    for s, sym in zip(ann.sample, ann.symbol):
        if s - PRE < 0 or s + POST > rec.sig_len:
            continue
        seg = rec.p_signal[s - PRE:s + POST, :]    #-- (360, 2)
        rows.append({'record': name, 'peak_sample': int(s),
                     'peak_sec': s / FS, 'symbol': sym,
                     'mlII': seg[:, 0].astype('float32')})
df = pd.DataFrame(rows)
print(df.shape, df['record'].value_counts().to_dict())

这段代码有三个地方在正式实验时必须改:一是窗长 PRE/POST 要按你的检测器设计来定,写死 0.5 秒只是演示;二是只留了上通道一列,做多通道模型要把两列都留住;三是要显式处理与母库 .atr 心搏标注的对应关系,否则无法区分「这次搏动有没有 P 波」。

5.5 与母库心搏标注对齐

本库只标 P 波峰,母库的 .atr 标心搏。把两者对齐,才能回答「这一次心搏前面有没有 P 波」:

import numpy as np
import wfdb

rec_name = '100'
beats = wfdb.rdann(rec_name, 'atr', pn_dir='mitdb')
pw    = wfdb.rdann(rec_name, 'pwave', pn_dir='pwave')

TOL = int(0.05 * 360)        #-- 50 毫秒容差
SEARCH = int(0.40 * 360)    #-- 只在该心搏前 0.4 秒内找 P 波

matched = 0
for b in beats.sample:
    lo, hi = b - SEARCH, b - TOL
    if lo < 0:
        continue
    if np.any((pw.sample >= lo) & (pw.sample <= hi)):
        matched += 1
print(matched, len(beats.sample))

对齐逻辑里最容易被忽略的不是算法,而是容差。rdann 的时间基准是采样点,而「检测成功」的判定完全依赖你设定的时间窗:窗放宽一点,灵敏度就涨一截;窗收紧一截,正预测率就掉一截。官方在使用说明中明确要求,报告评测结果时应一并说明使用了哪些记录、排除了哪些区间、以及用多大的时间容差来匹配检测结果与参考标注。缺了这三项,别人无法复现你的数字。

若要进一步构建「每次心搏是否有前置 P 波」的标签表,可在同一循环里把 beats.symbol 带出,与心搏类型一并落表。

5.6 五个最容易出错的地方

位置 错误写法 后果 正确做法
注释器名 用 .atr 读 .pwave 读不到或读到母库标注 rdann 指定 pwave
时间基准 把采样点当毫秒 时间轴错 360 倍 除以 360 得秒
存储格式 按 16 位整数解析 .dat 波形错位、幅值失真 用 wfdb 读取,格式是 212
完备性假设 未标注即无 P 波 特异度被系统性低估 把参考标注当非完备真值
数据集划分 母库训练、本库测试但不排除同编号 泄漏,指标虚高 母库中排除对应编号的记录

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

6.1 关系图谱

本库在心电类数据集里的位置,可以用「标注粒度 × 记录来源」两个轴摆出来。

相关数据集 标注粒度 与本库的关系
MIT-BIH 心律失常库 心搏级 + 节律级 母库,本库信号与患者信息的直接来源
BUT PDB P 波峰 同一团队的后续资源,任务相同、记录更短更多
QT 数据库 波形边界级 唯一给出 P 波起止点的公开库,长程互补
MIT-BIH 室上性心律失常库 心搏级 同为母库家族,偏室上性心律失常
MIT-BIH 房颤库 节律级 长时程房颤,P 波消失的典型场景
长期房颤数据库 节律级 日级负荷,P 波研究的对照端
NSTDB 噪声压力测试库 信号质量 噪声叠加源,可与本库组合做鲁棒性评测
European ST-T 数据库 波形边界级 缺血标注,两小时长程
BUT QDB 信号质量库 信号质量 同一团队,先判数据能不能用
ECG-Arrhythmia 大规模库 诊断标签 规模端,本库是精度端
IAFDB 心内房颤库 心搏级 心内电图,心房活动的侵入式对照
AF 终止挑战赛库 节律级 房颤终止预测,临床端任务

6.2 检索路径

你要找的东西 检索词 会落到哪里
本库信号的来源与患者信息 mitdb、MIT-BIH Arrhythmia MIT-BIH 心律失常库词条
同一批作者的 P 波后继资源 BUT PDB、P wave annotation BUT PDB 词条
P 波起止边界 qt-database、delineation QT 数据库词条
噪声鲁棒性评测方法 nstdb、noise stress test NSTDB 词条
大规模心电预训练 ecg-arrhythmia、12-lead ECG-Arrhythmia 词条
心房活动的侵入式对照 iafdb、intracardiac AF IAFDB 词条

6.3 与其他数据集的分工判据

任务 该用谁 本库的位置 原因
P 波检测算法的客观比较 本库 + BUT PDB 主力之一 两者是少数提供 P 波峰人工真值的资源
长段节律背景下的 P 波研究 本库 主力 每段约 30 分钟,BUT PDB 只有 2 分钟
多记录、多病理类型的统计 BUT PDB 辅助 五十条记录,覆盖面更广
P 波时限与离散度 QT 数据库 不适用 只有 QT 库给出起止边界
大规模心电表征预训练 大规模十二导联库 不适用 本库合计约六小时
房颤检测与终止预测 房颤库与挑战赛库 不适用 房颤时 P 波本就消失
噪声鲁棒性评测 NSTDB + 长时程库 可组合 用 NSTDB 噪声叠到本库波形上

§7 质量评估与局限性

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

先纠正一个常见的误判:把小样本库的问题当成「质量差」。本库的十二条不是采集能力不足,而是「逐个人工标出 P 波峰」这件事本身成本高、可投入的规模有限(§4.1)。评价它的时候不能套用「越大越好」的尺子,而应该问:在它设计要回答的那个问题上,它的样本够不够、流程可不可信。

7.1 五维评分

每项 1–5 分,分数针对「作为 P 波检测算法评价数据」这个用途。

维度 分数 理由
任务匹配度 5 标注对象就是 P 波峰,与任务一一对应
标注可信度 4 双人流程、资质公开;但官方不保证完备与正确
规模 1 十二段、约六小时、十二名受试者
元数据完整度 3 有年龄、性别、用药、困难描述;无随访、无结局、无完整诊断列表
复用便利度 5 WFDB 标准格式,与 PhysioNet 工具链完全兼容

7.2 标注质量的两层

第一层是完备性。 官方明确说,并非每一个存在的 P 波都一定被标注。原因可以推断:在室性早搏、束支阻滞、室性扑动等情况下,P 波是否存在本身就存在判断困难,标注者可能选择跳过而不是硬标。

第二层是正确性。 官方同时说明,部分标注可能不正确。这与第一层是不同性质的问题:完备性缺失导致特异度被低估,正确性缺失则同时污染灵敏度与特异度。

对使用者的实际含义是:把这份标注当成下限参考而不是绝对真值。报告结果时,把「未标注区间」的处理方式写清楚,比追求一个漂亮的数字更重要。

7.3 已知的、可枚举的偏差

偏差 具体表现 影响
难度定向选择 官方有意纳入难检病理记录 绝对指标偏悲观,不能外推到一般人群
受试者数量 仅 12 名,且各 1 段 无法做人群层面推断,置信区间宽
年代偏差 采集于 1975–1979 年 采集设备与当代设备存在差异
单中心 波士顿贝斯以色列医院 无法评估跨中心泛化
通道数 每段仅两路 无法做空间维度分析
与母库重叠 十二段是母库真子集 若母库用于训练则评测泄漏
标注粒度 只有峰位置 无法支撑 P 波时限类研究

7.4 外部验证矩阵

维度 本库能验证 本库不能验证
P 波检测灵敏度 能,需声明时间容差 跨中心泛化
病理 vs 生理节律的性能差 能,论文给出了两组对照 病种覆盖面
P 波峰定位时间误差 能 P 波起止边界精度
检测器的漏检模式 能,可逐段人工复核 人群层面的负荷估计
噪声鲁棒性 能,叠加标准噪声后测 真实可穿戴场景的伪迹谱

7.5 它为何持续:稀缺的不是数据量,是那个组合

一个 P 波标注库要成立,需要三个条件同时满足:有一个被广泛使用的母库提供波形、有一批具备 Holter 判读经验的人愿意做标注、有一个足够通用的格式让所有人都能读。本库三者齐备,因此即使只有十二条记录、四十余 KB 的注释,它仍然被持续引用。反过来也说明它的上限:规模受制于人工标注的成本,而这个成本不会因为数据需求增长而下降。

§8 生态位与历史

8.1 历史沿革

时间 阶段 说明
1975–1979 母库采集 波士顿贝斯以色列医院心律失常实验室
1980 母库首次发行 首个公开可用的心律失常评测记录集
1999 / 2005 母库完整开放 全部 48 段经 PhysioNet 免费提供
2016 标注工具就绪 SignalPlant 发表
2018-01-09 本库发布 十二条记录的 P 波峰人工标注
2018–2019 配套元数据补齐 记录清单、注释器说明、校验清单
2021-01-19 后继资源发布 同一团队发布 BUT PDB,五十条两分钟记录

8.2 与挑战赛及后继资源的关系

本库本身不是任何一届 PhysioNet/CinC 挑战赛的官方数据集,它是一项独立发布的标注补充。它与挑战赛生态的连接是间接的:母库是心律失常检测类赛题长期使用的来源,而本库给母库补上了原先没有的 P 波维度。

同一团队在 2021 年发布了 BUT PDB,收录五十条两分钟双通道记录,来源为 MIT-BIH 心律失常库、MIT-BIH 室上性心律失常库与长期房颤数据库。两者不是替代关系:本库段长、记录少;BUT PDB 段短、记录多、来源更广。做 P 波检测评测时,按「要不要长程上下文」来选,而不是按发布时间来选。

8.3 生态位:病理条件下的度量工具

把它放进整个心电数据生态看,它占据的是一个很窄但很清晰的格子:

生态位 代表资源类型 本库是否在位
大规模预训练 万级十二导联诊断库 否,规模差几个数量级
心搏分类基准 母库、INCART 类 否,标注对象不同
节律分类与负荷 房颤长程库 否
波形边界金标准 QT 数据库 否,只标峰不标边界
病理条件下的 P 波真值 — 是

8.4 谁在用它,用来做什么

使用者 用法 依赖的库特性
P 波检测算法研究者 作为评测真值,报告灵敏度与正预测率 双人人工标注、P 波峰位置
心电信号处理方法研究者 用相量变换一类方法做检测后在本库上对照 含室早与生理节律两组记录
可穿戴设备算法工程师 单通道条件下评测 P 波能力 下通道多为 V1/V2
标注质量研究者 研究人工标注的一致性与完备性 官方公开标注流程与资质
心电图教学人员 用官方描述的困难片段做教学案例 头文件附带的定性描述

§9 使用指引

9.1 三种角色的路径

角色 第一步 第二步 第三步
算法研究者 按 §5.2 下载全库 用 §5.3 远程读取确认参数 按 §5.5 与母库 .atr 对齐后评测
工程师 只取需要的记录号 按 §2.4 表挑病理类型 只用一个通道跑,记录用了哪一路
教学人员 按 §2.4 挑困难记录 读 .hea 里的官方描述 用 §5.3 导出波形做图

9.2 一条最短的可用流程

import wfdb

#-- 1) 取记录清单
names = wfdb.get_record_list('pwave')

#-- 2) 逐段读出信号与 P 波峰
data = {}
for name in names:
    rec = wfdb.rdrecord(name, pn_dir='pwave')
    ann = wfdb.rdann(name, 'pwave', pn_dir='pwave')
    data[name] = (rec, ann)

#-- 3) 打印每段的基本信息,先确认没有异常
for name, (rec, ann) in data.items():
    print(f'{name:>3}  fs={rec.fs}  len={rec.sig_len}  '
          f'leads={rec.sig_name}  pwave={len(ann.sample)}')

跑通这三步之后,再进入真正的评测逻辑。很多人在第 2 步就出问题——比如把注释器名写错,或者没注意到 pn_dir 要指向库名而不是记录名。

9.3 引用方式

官方要求同时引用资源本身与配套研究,并包含 PhysioNet 的标准引用。

引用对象 内容
资源 Nemcova, A., Smisek, R., Vitek, M., and Smital, L. (2018). MIT-BIH Arrhythmia Database P-Wave Annotations (version 1.0.0). PhysioNet. https://doi.org/10.13026/C2108F
配套研究 Maršánová L, Němcová A, Smíšek R, Goldmann T, Vítek M, Smital L. Automatic Detection of P Wave in ECG During Ventricular Extrasystoles. World Congress on Medical Physics and Biomedical Engineering 2018. Springer, Singapore; 2018. p. 381–385. DOI: 10.1007/978-981-10-9038-7_72
母库 Moody GB, Mark RG. The impact of the MIT-BIH Arrhythmia Database. IEEE Engineering in Medicine and Biology Magazine. 2001;20(3):45–50. doi:10.1109/51.932724
标注工具 Plesinger F, Jurco J, Halamek J, Jurak P. SignalPlant: an open signal processing software platform. Physiological Measurement. 2016;37(7):N38–N48. doi:10.1088/0967-3334/37/7/N38
平台 Pollard, T., Moody, B. E., Lehman, L., Gow, B., Fernandes, C., Xie, C., Johnson, A., Mark, R. G., and Heldt, T. (2026). PhysioNet as a global platform for biomedical research. Nature Health. https://doi.org/10.1038/s44360-026-00096-z

§10 AI 使用声明

项目 说明
文本生成 本文由 AI 辅助撰写,编辑负责结构、事实与措辞把关
数字来源 规模、结构、边界三类数字来自 PhysioNet 官方页面与文件目录;论文数字来自公开摘要
文件核验 RECORDS、ANNOTATORS、SHA256SUMS.txt 与全部十二份 .hea 经直接访问确认
不一致说明 官方页列出十二条记录,配套研究摘要自述的评测集为九条(含室早四条:106、119、214、223;生理节律五条:100、101、103、117、122),207、222、231 不在该自述评测列表内;使用时需按记录号核对
论文信息 配套研究仅依据公开摘要与出版信息,未读全文;灵敏度与正预测率为论文自述值
未核验内容 全部十二份 .pwave 的标注条数、各条记录的 P 波峰总数、漏标与错标的具体规模、头文件注释行中母库内部编号字段的确切含义
图像 无真实心电图配图;封面为生成式提示词产物,不含任何真实波形
免责 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 的署名要求

常见误读(避坑清单)

说法 实际 证据
「它和 MIT-BIH 心律失常库是两个数据集」 它是母库十二段记录之上的一层标注,信号完全来自母库 官方页写明取自 MIT-BIH 心律失常库
「它是自动检测器的输出」 一位专家人工标注、另一位复核、疑难共同会商 官方方法节
「它标了 P 波的起点和终点」 只标峰位置 官方页称 P-wave annotations,注释类型码为 p
「十二条记录是随机抽的」 有意纳入让检测变难的病理特征 官方方法与背景节
「没标注的地方就没有 P 波」 官方明确说并非所有 P 波都被标注 官方使用说明
「标注一定正确」 官方明确说部分标注可能有误 官方使用说明
「可以在母库上训练、在本库上评测」 两者记录重叠,必须排除同编号记录 官方使用说明提醒
「每段三十分钟整」 650000 ÷ 360 ≈ 1805.6 秒,约 30 分 5.6 秒 头文件第 1 行
「十二条记录的下通道都一样」 十条 V1、两条 V2、一条 V5 各记录 .hea 信号行
「采样率是 250 Hz」 360 Hz 头文件第 1 行第 3 字段
「它有十二个患者,因为记录有十二段」 恰好一一对应,但这是母库编号决定的,不代表任何抽样设计 官方记录—受试者对应表

FAQ

Q1:它和 MIT-BIH 心律失常库是什么关系?是不是重复收录?
不是重复收录,是叠加关系。它的十二条记录全部取自母库,.dat 与 .hea 是母库原样文件,唯一新增的是 .pwave 注释。因此它不能脱离母库单独理解:波形、采样参数、患者信息都继承自母库,原创贡献只有那一层 P 波峰标注。这也直接带来使用上的约束——若训练时用过母库,必须排除对应编号的记录,否则评测不是外部验证(§5.6)。

Q2:能不能用它训练一个 P 波检测模型?
技术上能,但不推荐把它当主训练集。十二条记录、合计约六小时、十二名受试者,任何有容量的模型都能在几轮内记全,验证集上的指标会与真实泛化能力脱节。更合适的用法是:在大规模库上预训练或直接用无监督方法,把本库留作评测集;或者只用本库做方法对比,比较不同检测器在相同难例上的相对表现。

Q3:论文里报的九条记录和库里的十二条,我该用哪一组?
看你目的。若你要与那篇配套研究的数字直接对比,就只用其摘要自述的那九条(106、119、214、223 为含室性早搏组;100、101、103、117、122 为生理节律组),并在方法节写明记录号。若你要做一次独立的完整评测,用全部十二条,并同样逐条列出记录号。两种口径在论文里都必须显式说明——官方在自己的使用说明里就把「报告纳入了哪些记录、排除了哪些区间、用了多大时间容差」列为要求。

Q4:标注里只有 P 波峰位置,够用吗?
取决于任务。评测「检测器找没找到 P 波」以及「定位误差有多大」完全够用,这也是本库的设计目标。但若你要做 P 波时限、P 波离散度、PR 间期一类需要起点与终点的形态学指标,就不够——这类研究应使用 QT 数据库那类给出波形起止边界的资源。把「峰位置」当成「边界」来用,是本库最常见也最难在审稿阶段被发现的错误之一。

Q5:十二条记录怎么挑?有没有优先级建议?
按你要检验的难点挑。想看心房与心室关系被破坏时的表现,106(多形性室早)、223(多形性室早合并慢速双向室速)、231(异常房室传导,含 2:1 与莫氏 II 型阻滞、心率相关右束支阻滞)是最直接的三条。想看节律层面的干扰,222 官方描述提到阵发性房扑或房颤后常跟随交界性逸搏、且两通道均有高频噪声或伪迹。想看记录质量造成的困难,122 的下通道全程存在低幅高频噪声,214 有两次伪迹性幅度下降与一次磁带打滑。207 是官方自己标注为「极其困难」的一条,通常作为压力测试而非基线。

术语表

术语 解释
P 波 心心电图上对应心房除极的波形,幅度小、时限短
QRS 波群 对应心室除极的波形群,幅度大、边界陡,是多数自动检测器的基准
T 波 对应心室复极的波形,常与 P 波在时频上重叠
PR 间期 P 波起点到 QRS 起点的时间间期,用于判断房室传导
窦性心律 由窦房结主导的正常心律,节律规整
室性早搏 心室提前除极产生的心搏,其前通常无相关 P 波
多形性 同一记录内早搏形态不一致,提示多个起源点
束支阻滞 左右束支传导受阻,QRS 增宽且形态改变
一度房室传导阻滞 房室传导延迟但每个心房激动都能下传,PR 间期延长
莫氏 II 型阻滞 二度房室阻滞的一种,间歇出现不能下传的心房激动
2:1 房室阻滞 每两个心房激动只有一个能下传至心室
室上性心动过速 起源于心室以上的快速心律,P 波常与 T 波重叠
室性自主心律 心室自身起搏点主导的缓慢心律,心房与心室活动脱节
交界性逸搏 房室交界区发出的代偿性搏动
Holter 便携式长时程心电监护,患者随身记录
WFDB PhysioNet 使用的波形数据库格式,含头文件、信号、注释
.hea 纯文本头文件,声明采样率、增益、患者信息
.dat 二进制信号文件
.pwave 本库的 P 波峰注释文件,WFDB 标准格式
rdann WFDB 软件包中读取注释文件的函数
SignalPlant 布尔诺理工大学开发的开源信号标注与处理软件
时间容差 判定检测结果与参考标注是否匹配的允许时间偏差
ODC-BY 开放数据共享署名许可
PhysioNet 由 MIT 等机构维护的生物医学信号数据平台

附录 A:核心数字核对表

项 值 出处
记录数 12 段 官方页面;RECORDS 共 12 行
受试者数 12 名 官方记录—受试者对应表
单段采样点数 650000 全部 12 份 .hea 第 1 行第 4 字段
采样率 360 Hz 官方页面;.hea 第 1 行第 3 字段
通道数 2 官方页面;.hea 第 1 行第 2 字段
单段时长 约 30 分钟 官方页面称 approximately half an hour
存储格式 212 .hea 信号行第 2 字段
增益 200 ADC 单位/毫伏 .hea 信号行第 3 字段
位分辨率与量程 11 位,10 mV 母库官方页面;.hea 信号行第 4 字段
ADC 零值 1024 .hea 信号行第 5 字段
注释文件类型码 p .pwave 文件经 rdann 读取后的 symbol
注释器说明 pwave reference P-wave annotations ANNOTATORS 文件
标注者人数 2(一人标注、一人复核) 官方方法节
标注者经验 5 年以上 Holter 分析经验 官方方法节
全库未压缩体积 22.4 MB 官方页面文件区
文件总数 39(含 SHA256SUMS.txt) 官方页面文件清单
校验清单行数 38 SHA256SUMS.txt
版本 1.0.0 官方页面版本区
发布日期 2018-01-09 官方页面
DOI(本版本) 10.13026/C2108F 官方页面
许可 ODC-BY 1.0 官方页面许可区
母库记录数 48 段 / 47 名受试者 MIT-BIH 心律失常库官方页面

附录 B:数字的来源分层

第一层:官方页面与官方文件。 记录数、受试者数、采样点数、采样率、通道数、增益、ADC 零值、许可、版本与日期,均来自项目页面的摘要、数据描述与文件目录,以及直接访问 RECORDS、ANNOTATORS 与十二份 .hea的结果。

第二层:论文公开摘要。 配套研究的方法概述、评测记录编号、灵敏度与正预测率,来自公开摘要与出版信息页,未读全文。摘要可支撑「论文自述了什么」,不能支撑「该方法在其他数据上表现如何」。

第三层:母库官方页面。 关于信号采集背景(1975–1979 年、波士顿贝斯以色列医院、数字化参数)的描述来自 MIT-BIH 心律失常库官方页面,因为本库沿用母库波形而不重新采集。

第四层:未核实。 各 .pwave 文件的标注条数、漏标与错标规模、头文件注释行中母库内部编号字段的含义。这些需要逐文件下载统计或查阅母库文档,本文只做定性表述(§10)。

附录 C:完整参考文献

编号 文献 链接 用途
1 MIT-BIH Arrhythmia Database P-Wave Annotations v1.0.0 https://physionet.org/content/pwave/1.0.0/ 全部规模、结构、边界数据
2 本库文件目录 https://physionet.org/files/pwave/1.0.0/ RECORDS、ANNOTATORS、.hea
3 Maršánová L, et al. Automatic Detection of P Wave in ECG During Ventricular Extrasystoles. IFMBE Proceedings 68/2, Springer, 2018, p. 381–385 https://doi.org/10.1007/978-981-10-9038-7_72 配套研究、评测记录与指标
4 Moody GB, Mark RG. The impact of the MIT-BIH Arrhythmia Database. IEEE EMB Magazine 2001;20(3):45–50 https://doi.org/10.1109/51.932724 母库背景
5 Plesinger F, et al. SignalPlant: an open signal processing software platform. Physiological Measurement 2016;37(7):N38–N48 https://doi.org/10.1088/0967-3334/37/7/N38 标注工具
6 MIT-BIH Arrhythmia Database v1.0.0 https://physionet.org/content/mitdb/1.0.0/ 母库参数与采集背景
7 Brno University of Technology ECG Signal Database with Annotations of P Wave (BUT PDB) https://physionet.org/content/but-pdb/ 后继资源对照
8 Pollard T, et al. PhysioNet as a global platform for biomedical research. Nature Health, 2026 https://doi.org/10.1038/s44360-026-00096-z 托管模式与引用规范

附录 D:任务代码

任务一:批量读取十二条记录并导出基本信息表

import wfdb
import pandas as pd

names = wfdb.get_record_list('pwave')
rows = []
for name in names:
    hdr = wfdb.rdheader(name, pn_dir='pwave')
    ann = wfdb.rdann(name, 'pwave', pn_dir='pwave')
    rows.append({
        'record': name,
        'fs': hdr.fs,
        'sig_len': hdr.sig_len,
        'n_sig': hdr.n_sig,
        'leads': ','.join(hdr.sig_name),
        'n_pwave_ann': len(ann.sample),
        'symbols': ''.join(sorted(set(ann.symbol))),
        'comments': ' | '.join(hdr.comments),
    })
df = pd.DataFrame(rows)
df.to_csv('pwave_index.csv', index=False)
print(df[['record', 'leads', 'n_pwave_ann']].to_string(index=False))

任务二:以固定容差评测一个检测器输出

import numpy as np
import wfdb

TOL_MS = 50          #-- 判定命中允许的时间偏差,单位毫秒
FS = 360

def evaluate(record, det_samples, tol_ms=TOL_MS):
    #-- 参考标注来自 .pwave,检测输出来自你自己的算法
    ref = wfdb.rdann(record, 'pwave', pn_dir='pwave').sample
    tol = int(tol_ms * FS / 1000)
    used = np.zeros(len(ref), dtype=bool)
    hits = 0
    for d in np.sort(det_samples):
        #-- 每个参考标注至多匹配一次,避免重复计数
        idx = np.where((~used) & (np.abs(ref - d) <= tol))[0]
        if len(idx):
            used[idx[0]] = True
            hits += 1
    se = hits / len(ref) * 100 if len(ref) else float('nan')
    pp = hits / len(det_samples) * 100 if len(det_samples) else float('nan')
    return {'record': record, 'ref': len(ref), 'det': len(det_samples),
            'hits': hits, 'Se': round(se, 2), 'PP': round(pp, 2)}

print(evaluate('100', []))

附录 E:如果只记五件事

序号 记住什么 为什么
1 12 段、约 30 分钟、2 导联、360 Hz 这四个数字定义了全部用法与限制
2 它是母库之上的一层 P 波峰标注,不是独立采集的数据集 决定了与母库的重叠与泄漏风险
3 一位专家标注、一位复核、疑难会商 流程可信,但官方不保证完备与正确
4 只有峰位置,没有起止边界 P 波时限类研究不能用它
5 它是尺子不是粮仓 拿它评测最有价值,拿它训练会过拟合

编辑说明

本文的核验时间为 2026 年 10 月 29 日。核对方式为直接访问 PhysioNet 项目页与文件目录,逐一确认 RECORDS、ANNOTATORS、SHA256SUMS.txt 与全部十二份 .hea 的可访问性与内容;信号文件只确认了目录体积,未逐字节读取。配套研究仅依据公开摘要与出版信息,未读全文,其报告的灵敏度与正预测率均为论文自述值。官方页面列出十二条记录,而配套研究摘要自述的评测集为九条,这一差异已在 §10 与 FAQ 第 3 问中说明。未覆盖的内容包括:各 .pwave 文件的标注条数、漏标与错标的具体规模、以及头文件注释行中母库内部编号字段的确切含义。


相关数据集导航

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

  • mit-bih-arrhythmia — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 人工标注
  • but-pdb — 共享标签:生理信号 / 心电信号 / 人工标注
  • qt-database — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 人工标注
  • svdb — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 人工标注
  • mit-bih-afdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • ltafdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • nstdb — 共享标签:生理信号 / 心电信号
  • edb — 共享标签:生理信号 / 心电信号 / 心血管疾病 / 人工标注
  • butqdb — 共享标签:生理信号 / 心电信号 / 人工标注
  • ecg-arrhythmia — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • iafdb — 共享标签:生理信号 / 心电信号 / 心血管疾病
  • aftdb — 共享标签:生理信号 / 心电信号 / 心血管疾病

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

返回 AI-Ready 数据集