信息速览
从平躺到站立的那几秒钟,人体要完成一次没有预案的血压调度。重力把数百毫升血液拽向腹腔与下肢,回心血量骤减,主动脉弓与颈动脉窦上的压力感受器察觉到管壁牵张下降,交感神经在几个心搏之内上调心率与外周阻力,把平均动脉压拉回原来的水平。这条反射链平时不露面,只在体位改变的那几秒里显形,所以要研究它,采集设备必须同时满足三个条件:血压是逐搏连续的(袖带一分钟只给一个点,抓不住秒级的瞬态)、心电与血压严格同步、体位的角度本身被量化记录下来。三者缺一,就只能看到结果而看不到过程。
PRCP 体位生理库是公开数据里少有的同时满足这三条的库。麻省理工学院的 Thomas Heldt 与 Roger G. Mark 把 10 名健康志愿者放上电动倾斜床,用指端连续血压与单导联心电同步记录,第三路通道专门记下倾斜床的角度;试验由若干段三分钟的应激期组成,慢速倾斜、快速倾斜与主动起身各出现若干次,动作顺序随机化。它没有大样本,却给了别人给不了的那条时间线:血压什么时候开始掉、心率什么时候开始追、两者之间差几个心搏,这些都要靠同步波形才答得出来。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Physiologic Response to Changes in Posture |
| 缩写与 slug | PRCP |
| 发布平台 | PhysioNet(开放访问,无需注册或签署协议) |
| 数据贡献者 | Thomas Heldt、Roger G. Mark |
| 贡献机构 | 麻省理工学院;MIT 计算生理学实验室 |
| 平台维护方 | MIT Laboratory for Computational Physiology |
| 首次发布 | 2016 年 2 月 18 日 |
| 版本情况 | 1.0.0,目前唯一版本 |
| 记录数 | 10 条 |
| 受试者数 | 10 名健康志愿者,性别字段为 M 的 5 人、为 F 的 5 人 |
| 年龄范围 | 22–34 岁 |
| 身高与体重范围 | 155–192 cm;55–100 kg |
| 单条时长 | 55 分 00 秒至 74 分 00 秒,全库合计约 10.3 小时 |
| 通道数 | 3,顺序为 ABP、ECG、Angle |
| 采样率 | 250 Hz,头文件同时给出计数频率 24000 |
| 存储与格式 | WFDB:.hea 头文件(文本)+ .dat 信号(16 位带符号整数交错存放) |
| 标注规模 | 每记录 20–29 条人工事件标注,全库合计 224 条 |
| 标注方式 | 事件级人工听记;心搏与脉搏级由自动算法生成 |
| 应激动作 | 慢速倾斜、快速倾斜、主动起身,各两次,每段约三分钟,段间平卧休息 |
| 文件与体量 | 目录内 53 个文件,解压后 54.1 MB |
| 许可 | Open Data Commons Attribution License v1.0,须署名 |
| DOI | 10.13026/C2PC7R |
| 典型用途 | 压力反射敏感性估计、体位性低血压与晕厥机制、连续血压算法评测、心率与血压耦合分析 |
§1 它要解决的具体麻烦
1.1 血压与心率之间的那几次拉扯
血压和心率在临床上常被当成两个独立的数字,但在体位改变这件事上,它们是一根因果链的两端。上位是血压:重力让血液淤积在下肢,回心血量与每搏输出量下降,平均动脉压出现一个瞬态的下陷。下位是心率与外周阻力:颈动脉窦与主动脉弓的压力感受器感知到压力下降后,通过减压神经把信号送到延髓,抑制迷走、兴奋交感,心率上升、血管收缩,把血压推回去。
这条链路的关键信息是时序。血压先掉,心率后追,两者之间隔着几个心搏的神经传导与效应器延迟;在快速倾斜和主动起身时,这个瞬态很明显,而在缓慢倾斜时几乎看不到。要量出这个差别,采集端必须同时满足三件事,缺一件都不行:
| 必要条件 | 为什么 | 缺了会怎样 |
|---|---|---|
| 血压逐搏连续 | 瞬态下陷只持续数秒到十几秒 | 只能看到稳态,看不到瞬态 |
| 心电与血压同步 | 要比较两者的相对时刻 | 无法做时序与因果方向的判断 |
| 体位角度被记录 | 需要知道应激何时开始、持续多久 | 只能靠人工笔记,无法复现 |
绝大多数公开生理库只满足其中一到两条:心电库通常没有血压,重症波形库虽有动脉导管波形但受试者是卧床患者、没有体位变化,可穿戴库有光电容积脉搏波但没有连续血压定标。PRCP 的独特之处不在于它做得多精细,而在于它恰好三条都齐了。
1.2 三条常见的错误期待
第一条,期待它是临床倾斜试验的诊断库。 它的受试者是健康志愿者,官方页面写明是健康受试者在三种动作下的生理记录。它不包含晕厥患者的结局标签,也不包含临床判读结论。想做"倾斜试验阳性/阴性"的分类研究,这个库给不了标签。
第二条,期待它有现成的"血压下降事件"标签。 .anI 里存的是采集者在现场敲下的事件标记,包括动作起止与信号质量注记,不是为建模准备的事件标签表。是否需要从事件序列里构造"应激段"与"血压下陷幅度",完全取决于使用者自己的口径。
第三条,期待它覆盖多天或多小时。 每名受试者只有一段记录,长度在 55 到 74 分钟之间。这是一次试验的完整记录,不是长期监测。做昼夜节律或日级负荷统计,它用不上。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 压力反射敏感性的序列法估计 | 逐搏收缩压与 RR 间期双序列,同源同步 | 够,这是它的设计目标场景 |
| 体位应激下的瞬态动力学 | 三分钟应激段配平卧基线,角度可定位 | 够,且慢速与快速两种速率可对比 |
| 主动与被动体位的对照 | 起身属主动,倾斜属被动,同一受试者内对照 | 够,这是它与其他体位库最大的区别 |
| 连续血压算法的评测 | 指端连续血压波形作参考,配同步心电 | 够作参考,但需留意伪迹注记 |
| 心搏分类的跨库测试 | 有自动心搏标注 | 不够,样本量只有 10 人 |
| 体位性低血压的临床诊断 | 无患者人群与结局标签 | 不够 |
| 长期血压负荷统计 | 单段不足 75 分钟 | 不够 |
| 多中心泛化验证 | 单中心采集 | 不够 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做压力反射估计,想换一个带真体位应激的库 | 慢速与快速两种倾斜速率,瞬态幅度差异明显 | 按 §5.4 读出六段应激的起止,分段估计再比较 |
| 你在做无袖带连续血压算法,需要一段有角度变化的数据 | 血压参考 250 Hz,角度通道可定位应激时刻 | 把应激段单独切出评测,别用平卧段充数 |
| 你想验证心率与血压之间信息分解的方向性 | 同源同步双序列,且应激是外源扰动 | 用文献同款口径,注意伪迹段要剔除 |
| 你在教自主神经 physiology,需要一个可复现的演示 | 六段应激在同一条记录里,图像直观 | 用 §2.3 的读取流程导出,注明伪迹段 |
| 你在做跨库外部测试集,想加一个体位维度 | 规模小、下载快,可一次下完 | 只当外部测试,不要当训练主粮仓 |
| 你在找晕厥前兆的预测数据 | 无患者与结局标签 | 换专门的人群库 |
1.5 一句话判断
它不适合当「更大的训练集」,而适合当「更完整的时间线」:同一个人的心电、连续血压与体位角度在同一根时间轴上对齐,这才让「谁先动、谁后动」这类问题第一次有了可解的原始材料。
1.6 不适合谁:四条边界
不适合做统计意义上的大样本研究。 10 名受试者、每人一段,任何按人计的统计量在这个量级上都没有稳定性。
不适合做临床预测模型。 没有患者、没有结局、没有用药与随访信息,头文件里只有年龄、性别、身高、体重四项。
不适合做长时程节律或负荷分析。 全库合计约 10.3 小时,且来自 10 个互不连续的时间段。
不适合把自动标注当金标准。 .wqrs 与 .wabp 由算法生成,.anI 才是人工产物;前两者的错标会直接进入任何依赖它们的指标。
§2 数据构成与规格
2.1 一条记录由五个文件组成
本库沿用 WFDB(Waveform Database)格式,这是 PhysioNet 自 1980 年代沿用至今的生理信号存储规范。每一条记录对应同名的五个文件:
| 扩展名 | 性质 | 内容 |
|---|---|---|
.hea |
纯文本 | 头文件:记录行、三行信号声明、若干注释行 |
.dat |
二进制 | 信号本体,三路通道按采样点交错存放 16 位整数 |
.anI |
二进制 | 人工标注的主要事件(major event annotations) |
.wqrs |
二进制 | 自动生成的心搏标注(automatically generated beat annotations) |
.wabp |
二进制 | 自动生成的脉搏标注(automatically generated pulse annotations) |
和同平台的许多心电库不同,本库没有 .atr 文件;三类标注各占一个扩展名,职责写在根目录的 ANNOTATORS 文件里,只有三行。这一点在写读取代码时要特别留意——照抄其他库的 rdann(rec, 'atr') 会直接报文件不存在。
根目录另有三个附属文件:RECORDS 列出 10 条记录名;ANNOTATORS 说明三类标注的角色;SHA256SUMS.txt 给出 52 个受校验文件的散列值,可用于下载后完整性核验。
2.2 头文件字段的完整字典
本库的"字段"不是表格列,而是 WFDB 头文件的记录行与信号行的各个位置。以 12726 为例,逐项列出:
| 信息项 | 所在位置 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
| 记录名 | 记录行第 1 字段 | 12726 |
记录标识,也是文件名前缀 | 纯数字串,不含受试者编号信息 |
| 信号条数 | 记录行第 2 字段 | 3 |
同步通道数 | 全部 10 条记录均为 3 |
| 采样率与计数频率 | 记录行第 3 字段 | 250/24000 |
每秒 250 个采样点;计数频率 24000 | 斜杠后是计数频率,不是第二采样率 |
| 采样点数 | 记录行第 4 字段 | 825000 |
单条记录总长度 | 除以 250 得秒数 |
| 基准时间 | 记录行第 5 字段 | 15:08:24 |
记录起始时刻 | 只有时刻,没有日期 |
| 信号文件名 | 信号行第 1 字段 | 12726.dat |
三路通道共用同一个文件 | 不是每通道一个文件 |
| 存储格式 | 信号行第 2 字段 | 16 |
16 位带符号整数 | 不是浮点 |
| 增益与单位 | 信号行第 3 字段 | 64.02(4)/mmHg |
每物理单位对应的整数值 | 逐记录略有差异,括号内为精度标注 |
| ADC 位分辨率 | 信号行第 4 字段 | 16 |
模数转换位数 | 有效分辨率受增益影响 |
| ADC 零值 | 信号行第 5 字段 | 0 |
零电平对应的整数值 | 换算时先减去零值 |
| 初始值 | 信号行第 6 字段 | 4004 |
首个采样点的整数值 | 可用于快速校验文件是否错位 |
| 校验和 | 信号行第 7 字段 | -26056 |
采样点累加和 | 用于检测 .dat 是否完整 |
| 块大小 | 信号行第 8 字段 | 0 |
每帧字节数 | 0 表示由读取工具自动计算 |
| 通道名 | 信号行第 9 字段 | ABP / ECG / Angle |
通道的物理含义 | 顺序固定:血压、心电、角度 |
| 年龄 | 注释行 | 28 |
受试者年龄 | 以 # <age>: 开头 |
| 性别 | 注释行 | M 或 F |
受试者性别 | 以 # <sex>: 开头 |
| 身高 | 注释行 | 170 |
厘米 | 以 # <Height>: 开头 |
| 体重 | 注释行 | 64 |
千克 | 以 # <Weight>: 开头 |
| 生成说明 | 注释行 | Produced by xform from record 12726_orig |
由原始记录经 xform 转换 | 原始记录本身未随库公开 |
这里最值得记的一条是头文件里没有患者编号,也没有诊断字段。同平台的部分心电库会在注释行里给患者编号与临床诊断,本库只给四项人口学与体格信息。因此本库的数据集划分不需要考虑"同一患者多段"的泄漏问题——一人一段,按记录划分与按受试者划分等价。这在生理信号库里反而是少见的干净结构。
2.3 一条记录的完整解剖
取 12726。头文件第一行是:
12726 3 250/24000 825000 15:08:24
从左到右:记录名 12726;3 条信号;采样率 250 Hz,计数频率 24000;共 825000 个采样点;记录开始于 15 点 08 分 24 秒。825000 ÷ 250 = 3300 秒,正好 55 分钟整。
接下来三行是信号声明:
12726.dat 16 64.02(4)/mmHg 16 0 4004 -26056 0 ABP
12726.dat 16 6554/mV 16 0 -12996 -24904 0 ECG
12726.dat 16 174.83(11204)/degrees 16 0 11196 11564 0 Angle
从右往左读:通道名;块大小 0;校验和;初始值;ADC 零值 0;位分辨率 16;增益;格式 16;文件名。三路通道共用同一个 .dat,靠交错排列区分,这一点从三行都指向 12726.dat 就能看出。
增益这一项在十份头文件里有规律:心电通道的增益全部是 6554 adu/mV,十条记录一致;血压通道在 64.00 到 64.05 adu/mmHg 之间小幅浮动;角度通道在 173.12 到 175.63 adu/degree 之间浮动。心电增益一致意味着跨记录比较心电幅度是安全的,而血压与角度通道必须在换算到物理单位之后再比较。
文件末尾两行注释给出受试者上下文与生成信息:
\# <age>: 28 <sex>: M <Height>: 170 <Weight>: 64
\#Produced by xform from record 12726_orig, beginning at 0:0
第二行说明发布出来的这一段是由名为 12726_orig 的原始记录经 xform 转换、从零点开始截取得到的。原始记录不在库里,所以任何"完整试验全程"的推断都无法用公开数据验证。
读取信号与标注的标准写法:
import wfdb
#-- 远程直读,无需先下载;pn_dir 指向 PhysioNet 上的库名
rec = wfdb.rdrecord('12726', pn_dir='prcp')
hdr = wfdb.rdheader('12726', pn_dir='prcp')
ann = wfdb.rdann('12726', 'anI', pn_dir='prcp')
print(rec.fs, rec.sig_len, rec.sig_name) #-- 250 825000 ['ABP', 'ECG', 'Angle']
print(rec.units) #-- ['mmHg', 'mV', 'degrees']
print(rec.p_signal.shape) #-- (825000, 3) 已换算成物理单位
print(hdr.comments) #-- 年龄性别身高体重与生成说明
print(ann.sample[:3], ann.aux_note[:3])
p_signal 是按增益与零值换算过的浮点物理值;需要原始整数时用 d_signal。ann.sample 是采样点序号,除以 250 即得秒数;ann.aux_note 是随事件存下的文本。
2.4 三类标注的分工
ANNOTATORS 文件只有三行,把三类标注的角色定义得很清楚:
| 扩展名 | 官方角色说明 | 生成方式 | 典型内容 | 使用建议 |
|---|---|---|---|---|
anI |
major event annotations | 人工 | 动作起止与信号质量注记,带文本 | 做分段与对齐的锚点 |
wqrs |
automatically generated beat annotations | 自动 | 逐心搏的位置与类型 | 需要 RR 序列时可先用它,但应交叉验证 |
wabp |
automatically generated pulse annotations | 自动 | 逐脉搏的位置与类型 | 用于从血压波形提取收缩压与舒张压序列 |
事件文本是自由文本,同一语义存在多种写法,还有截断与拼写问题。下面是把 12726 里出现过的事件文本按语义归拢后的对照:
| 归一化事件 | 标注里出现过的原始文本 | 含义 |
|---|---|---|
| 慢速倾斜 抬起开始 | Initiate slow tilt up、Initiation of slow tilt up |
倾斜床开始缓慢抬起 |
| 慢速倾斜 抬起结束 | Conclude slow tilt up、Conclusion of slow tilt up |
到达目标角度 |
| 慢速倾斜 放下开始 | Initiate slow tilt down、Initiation of slow tilt down |
开始缓慢放回平卧 |
| 慢速倾斜 放下结束 | Conclude slow tilt down、Conclusion of slow tilt down、End slow tilt back down |
回到平卧 |
| 快速倾斜 抬起开始 | Initiate rapid tilt up、Initiation of rapid tilt up、Start fast tilt up |
倾斜床快速抬起 |
| 快速倾斜 抬起结束 | Conclude rapid tilt up、Conclusion of rapid tilt up、End rapid tilt up |
到达目标角度 |
| 快速倾斜 放下开始 | Initiate rapid tilt down、Initiation of rapid tilt down、Start rapid tilt down |
开始快速放回平卧 |
| 快速倾斜 放下结束 | Conclude rapid tilt down、Conclusion of rapid tilt down |
回到平卧 |
| 起身 | Stand up、Stand-up、Stand-up from supine |
受试者主动从平卧站起 |
| 回到平卧 | Transition back to supine、Back to supine |
这一段应激结束 |
| 信号质量注记 | Movement artifacts、Loss of ECG signal、ECG signal is back、Blood pressure signal fades、Blood pressure artifacts、Switched off Finapres、Switched Finapres on |
采集过程的现场注记,不是动作 |
注意最后一行:这些注记里出现了 Finapres 这个设备名,与"连续无创指端血压"的采集方式相互印证;也出现了拼写与截断,例如 contacL、supin、Conslusion。做归一化时必须保留原文本作为溯源字段,不要覆盖。
2.5 与同类资源的字段差异
| 对比项 | PRCP | Orthostatic Challenge 心肺脑库 | MIT-BIH 心律失常库 | INCART 心律失常库 |
|---|---|---|---|---|
| 通道数 | 3 | 4 | 2 | 12 |
| 采样率 | 250 Hz | 约 3 Hz | 360 Hz | 257 Hz |
| 单条时长 | 55–74 分钟 | 33 分钟 | 约 30 分钟 | 30 分钟 |
| 记录数 | 10 | 9 | 48 | 75 |
| 是否含连续血压 | 是 | 是 | 否 | 否 |
| 是否含体位角度 | 是 | 否 | 否 | 否 |
| 是否含脑血流 | 否 | 是 | 否 | 否 |
| 人工标注层级 | 事件级 | 无逐搏标注 | 心搏级 | 心搏级 |
| 自动标注 | 心搏与脉搏 | 无 | 无 | 无 |
| 人群 | 健康志愿者 | 健康年轻人 | 心律失常门诊与住院 | 冠心病检查 |
这张表要说明的只有一件事:PRCP 在"原始波形 + 连续血压 + 体位角度"这个三元组上是唯一的。想要更高采样率的波形,别处有;想要更多模态,Orthostatic Challenge 有;想要心电加血压还带角度的 250 Hz 波形,只有这里。
2.6 三路通道各自的物理含义
| 通道 | 单位 | 头文件增益 | 测的是什么 | 常见失真来源 |
|---|---|---|---|---|
| ABP | mmHg | 约 64.0 adu/mmHg | 指端连续动脉血压波形 | 指套移位、信号衰减、换手指导致的中断 |
| ECG | mV | 6554 adu/mV | 单导联心电 | 运动伪迹、电极与皮肤接触不良 |
| Angle | degrees | 约 173–176 adu/degree | 倾斜床与水平面的夹角 | 传感器零点漂移、标记信号误触发 |
三路通道的物理含义决定了它们能回答的问题各不相同。血压通道给的是循环系统的被驱动量,心电通道给的是心脏的效应器反应,角度通道给的是外部扰动的时刻与幅度。三者合成一条时间轴之后,"扰动—被驱动量—效应器反应"这条链才是完整的;缺了任何一路,剩下的两路都无法确定因果方向。
§3 它是谁的数据
3.1 贡献者与机构
官方页面把署名给到两个人:Thomas Heldt,机构为麻省理工学院(剑桥,美国);Roger Mark,机构为 MIT 计算生理学实验室。页面提示联系通讯作者需登录后查看,这一点与其他 PhysioNet 项目一致。
原始论文的第一作者同样是 Heldt,合著者还有 M. B. Oefinger、M. Hoshiyama 与 R. G. Mark。也就是说,2016 年上线 PhysioNet 的这份数据,是 2003 年那篇会议论文的采集产物;中间隔着十余年才整理公开。
机构背景值得留意:MIT 计算生理学实验室是 PhysioNet 本身的维护方。这意味着本库不是外部机构捐赠后再由平台整理的产物,而是平台自己的研究组把自家实验数据按规范发布。好处是格式规整、标注角色清晰;代价是缺少独立第三方采集带来的多样性。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2003 年 9 月 | 论文在 Computers in Cardiology 发表(30 卷 263–266 页) | 原始实验与主要结论成型 |
| 2004 年 | Heldt 完成博士论文,主题为体位应激下的心血管计算模型 | 数据的建模用途被明确 |
| 2016 年 2 月 8 日 | .dat、.anI、.wqrs、.wabp 文件时间戳 |
信号与标注文件生成 |
| 2016 年 2 月 17 日 | .hea、RECORDS、ANNOTATORS 文件时间戳 |
头文件与清单补齐 |
| 2016 年 2 月 18 日 | PRCP 1.0.0 在 PhysioNet 上线 | 首次公开,至今唯一版本 |
| 2019 年 2 月 20 日 | SHA256SUMS.txt 文件时间戳 |
补上完整性核验清单 |
从时间线能读出一个判断:这份数据从采集到公开,中间主要被用在计算模型的构建与验证上,而不是作为评测基准被设计出来。它后来被算法研究者当作外部测试集使用,是使用侧发展出来的身份,不是原始设计目标。
3.3 采集场景:倾斜床上的三种动作
按原始论文摘要,研究目的是弄清主动(起身)与被动(头高位倾斜,HUT)两种体位改变各自引发的血流动力学事件序列。受试者为 10 名健康志愿者,记录了三种动作下的心率与动脉血压:
| 动作 | 英文 | 参数 | 性质 |
|---|---|---|---|
| 快速倾斜 | rapid tilt | 75 度头高位,约 2 秒内完成 | 被动 |
| 慢速倾斜 | slow tilt | 75 度头高位,约 50 秒内完成 | 被动 |
| 起身 | stand-up | 受试者主动从平卧站起 | 主动 |
后续研究引用这份数据时描述了更细的方案:完整流程由六段组成,慢速倾斜、快速倾斜与起身各两次,每段持续约三分钟,段与段之间以约五分钟的平卧休息隔开,各段顺序随机化。
这个设计里最关键的一处是速率对照。快速倾斜与慢速倾斜的终点完全一样,都是 75 度头高位,唯一的差别是到达终点的快慢。原论文的核心观察正来自这里:快速倾斜与起身时出现的平均动脉压瞬态下陷与心率瞬态上升,在慢速倾斜时并不出现;而快速倾斜与起身两者的瞬态幅度虽然不同,相对时序却保持得很好。
换句话说,慢速倾斜之所以"没有瞬态",不是因为压力反射没工作,而是因为扰动足够慢,反射有充足时间跟上。这个结论只有在两路信号同步且角度被记录的情况下才推得出来——如果只有心率,就无法区分"反射没启动"和"反射启动了但扰动太慢看不出来"。
3.4 数据来源的三个层次
理解这份数据要先分清三层:
| 层次 | 是否公开 | 内容 | 对使用者的含义 |
|---|---|---|---|
| 原始采集记录 | 未公开 | 名为 xxxxx_orig 的记录 |
无法核对发布段之外是否还有内容 |
| 发布记录 | 公开 | 10 条 .hea + .dat,经 xform 转换 |
这是唯一的信号来源 |
| 标注层 | 公开 | .anI 人工事件;.wqrs、.wabp 自动标注 |
分段与标签都要从这里构造 |
第一层不可得,说明为什么"发布段是否覆盖了完整试验流程"这个问题无法用公开数据自证;第二层决定了所有分析的时间基准都是 xform 之后的采样点序号;第三层决定了监督信号的时间粒度——事件级是秒级人工标记,心搏与脉搏级是自动算法输出。
§4 它最独特的东西
4.1 连续血压加角度通道这个组合为什么稀缺
公开的生理信号库在"血压"这件事上大致分成三类:袖带式血压库给的是每次测量一个数值,时间分辨率在分钟到小时级;重症波形库给的是动脉导管的连续波形,但受试者全程卧床,体位不变;可穿戴与光电容积脉搏波库给的是连续脉搏波,但没有经过定标的绝对血压值。
PRCP 落在第二类的技术形态里,却带着第三类才有的体位变化。它用指端无创连续血压(头文件与事件注记中都出现了 Finapres 这一设备名)拿到了逐搏的绝对血压,同时用倾斜床制造了可控、可记时、可重复的体位扰动。这两件事单独都不算稀奇,合在一起却很少见,因为做倾斜试验的临床科室通常不配连续血压设备,而配了连续血压设备的研究组通常不做体位试验。
4.2 主动与被动的对照:这是设计,不是巧合
三种动作里,慢速倾斜与快速倾斜是被动的——受试者躺在倾斜床上,床动,人不动。起身是主动的——床不动,人靠自己的肌肉完成体位改变。这个对照是原论文标题里就写明的:passive and active changes in posture。
被动体位改变时,下肢与腹腔的血液淤积是纯物理过程,肌肉泵基本不参与,静脉回流完全靠压力反射来救。主动起身时,下肢肌肉收缩产生的肌肉泵会挤压静脉、推动回流,同时中枢指令会提前改变自主神经张力。两者叠加的结果,是起身的血压下陷幅度与快速倾斜不同,但两者下陷与恢复的相对时序却很接近。原论文据此推断,时序主要由稳态反射机制决定,幅度才反映扰动的具体方式。
对算法研究者来说,这个对照意味着一个具体的用法:用被动段做"纯反射"基线,用主动段做"反射加肌肉泵"对照,两者的差就是肌肉泵与中枢指令的贡献。这是对照片,不是噪声。
4.3 案例:一条记录里的六段应激
取 12726。它的 .anI 里有 22 条事件标注,按时间排下来,六段应激的顺序与速率一目了然:
| 序号 | 采样点 | 时刻 | 原始事件文本 | 归一化语义 |
|---|---|---|---|---|
| 1 | 87240 | 05:49 | Initiate slow tilt up |
慢速倾斜 抬起开始 |
| 2 | 100107 | 06:40 | Conclude slow tilt up |
慢速倾斜 抬起结束 |
| 3 | 147069 | 09:48 | Initiate slow tilt down |
慢速倾斜 放下开始 |
| 4 | 159603 | 10:38 | Conclude slow tilt down |
慢速倾斜 放下结束 |
| 5 | 250298 | 16:41 | Initiate rapid tilt up |
快速倾斜 抬起开始 |
| 6 | 250876 | 16:44 | Conclude rapid tilt up |
快速倾斜 抬起结束 |
| 7 | 263047 | 17:32 | Movement artifacts |
信号质量注记 |
| 8 | 300583 | 20:02 | Initiate rapid tilt down |
快速倾斜 放下开始 |
| 9 | 301208 | 20:05 | Conclude rapid tilt down |
快速倾斜 放下结束 |
| 10 | 389279 | 25:57 | Stand up |
起身 |
| 11 | 390083 | 26:00 | Lost ECG signal due to poor electrode-skin contacL |
信号质量注记 |
| 12 | 437959 | 29:12 | Transition back to supine |
回到平卧 |
| 13 | 503071 | 33:32 | Stand up |
起身 |
| 14 | 548207 | 36:33 | Transition back to supine |
回到平卧 |
| 15 | 611960 | 40:48 | Initiate slow tilt up |
慢速倾斜 抬起开始 |
| 16 | 624810 | 41:39 | Conclude slow tilt up |
慢速倾斜 抬起结束 |
| 17 | 668177 | 44:33 | Initiate slow tilt down |
慢速倾斜 放下开始 |
| 18 | 680717 | 45:23 | Conclude slow tilt down |
慢速倾斜 放下结束 |
| 19 | 731981 | 48:48 | Initiate rapid tilt up |
快速倾斜 抬起开始 |
| 20 | 732477 | 48:50 | Conclude rapid tilt up |
快速倾斜 抬起结束 |
| 21 | 769438 | 51:18 | Initiate rapid tilt down |
快速倾斜 放下开始 |
| 22 | 769963 | 51:20 | Conclude rapid tilt down |
快速倾斜 放下结束 |
把相邻事件相减,能直接量出两种倾斜的速率差别:第一段慢速倾斜从第 87240 点抬到第 100107 点,历时 12867 个采样点,按 250 Hz 折算约 51.5 秒;第一段快速倾斜从第 250298 点抬到第 250876 点,只用了 578 个采样点,约 2.3 秒。两个数字与论文摘要里写的"75 度头高位,慢速 50 秒、快速 2 秒"完全对上——这说明事件标注的时间戳是可信的,可以拿来当分段锚点用。
六段的顺序也印证了随机化:12726 的排列是慢速、快速、起身、起身、慢速、快速,而不是按类型分组。段与段之间的间隔在三到六分钟不等,与文献描述的五分钟平卧休息大体相符。
4.4 标注的粒度:事件级人工,心搏与脉搏级自动
| 层级 | 文件 | 粒度 | 是否人工 | 可直接用作标签吗 |
|---|---|---|---|---|
| 事件 | .anI |
秒级时刻加文本 | 是 | 归一化后可以 |
| 心搏 | .wqrs |
逐心搏 | 否,算法生成 | 需要交叉验证 |
| 脉搏 | .wabp |
逐脉搏 | 否,算法生成 | 需要交叉验证 |
事件级标注的价值在于它给了外部扰动的准确时刻——这是从信号本身很难反推出来的信息。倾斜床什么时候开始动,只有现场的人知道。有了这个锚点,所有后续的时序分析才有共同的零点。
自动标注则提供了逐搏序列的便利。从心电通道到 RR 间期序列、从血压通道到逐搏收缩压与舒张压序列,都可以从 .wqrs 与 .wabp 直接取位置。但要注意两者的可靠性并不相同:自动心搏标注在健康人平稳记录上通常够用,而自动脉搏标注在血压信号衰减或换指套中断的段落上更容易出错——事件文本里那些 Blood pressure signal fades、Switched off Finapres 的注记,正是这类中断的现场记录。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 你要研究压力反射的时序与幅度 | 适用,这是它的设计目标 | 原论文的核心结论即由此得出 |
| 你要做主动与被动体位的对照 | 适用,且是少数可选库之一 | 三种动作里包含主动起身 |
| 你要评测连续血压算法的瞬态响应 | 适用 | 250 Hz 连续血压配角度通道 |
| 你要评测算法的长期漂移 | 不适用 | 单段最长 74 分钟 |
| 你要做体位性低血压的临床预测 | 不适用 | 受试者全为健康志愿者 |
| 你要做人群流行病学统计 | 不适用 | 10 人,单中心 |
| 你要做多导联心电形态学研究 | 不适用 | 只有单导联 |
| 你要做儿童或老年人生理建模 | 不适用 | 年龄范围 22–34 岁 |
§5 怎么拿到
5.1 目录结构与下载面
PhysioNet 的文件目录是扁平的:根目录下直接放 10 组五个文件,加三个附属文件,没有按受试者或日期分的子目录。
| 路径 | 内容 | 大小量级 |
|---|---|---|
/files/prcp/1.0.0/RECORDS |
10 行记录名 | 60 字节 |
/files/prcp/1.0.0/ANNOTATORS |
三类标注的角色说明 | 121 字节 |
/files/prcp/1.0.0/SHA256SUMS.txt |
52 个文件的散列值 | 3.8 KB |
/files/prcp/1.0.0/xxxxx.hea |
头文件 | 约 300 字节 |
/files/prcp/1.0.0/xxxxx.dat |
三路通道信号 | 4.7–6.4 MB/条 |
/files/prcp/1.0.0/xxxxx.anI |
人工事件标注 | 554–990 字节 |
/files/prcp/1.0.0/xxxxx.wqrs |
自动心搏标注 | 8.3–88.2 KB |
/files/prcp/1.0.0/xxxxx.wabp |
自动脉搏标注 | 44.5–75.4 KB |
全库解压后 54.1 MB,官方提供整库 ZIP 包,也可以逐文件目录下载或用命令行工具同步。这个体量意味着全量下载与全量跑通都不需要特殊资源——这是它相对大多重症波形库的一个实用优点。
5.2 批量下载
#-- 整库递归下载,只取需要的扩展名
wget -r -N -c -np --accept=hea,dat,anI,wqrs,wabp,txt \
https://physionet.org/files/prcp/1.0.0/
#-- 或用官方推荐的 Python 包
physionet download prcp --version 1.0.0
#-- 下载后核对散列值
cd prcp/1.0.0 && sha256sum -c SHA256SUMS.txt
三步里最容易漏的是第三步。.dat 文件接近 5 MB,网络中断后 wget 的 -c 续传有可能产生静默损坏;用 SHA256SUMS.txt 核一遍只要几秒钟。
另外注意 ANNOTATORS 与 RECORDS 这两个文件名没有扩展名,按扩展名过滤的下载命令会把它们挡在外面,需要单独取。
5.3 用 wfdb 直接流式读取
import wfdb
names = wfdb.get_record_list('prcp')
print(len(names), names[0], names[-1]) #-- 10 12726 13960
#-- 逐条流式读取,不落盘
for name in names:
hdr = wfdb.rdheader(name, pn_dir='prcp')
ann = wfdb.rdann(name, 'anI', pn_dir='prcp')
print(name, hdr.fs, hdr.sig_len, len(ann.sample))
get_record_list 从 RECORDS 解析,能正确处理末行无换行的情况。不落盘的好处是省磁盘,代价是每条都要重新走网络。
5.4 事件标注的读取与归一化
事件文本是自由文本,同一语义有多种写法,使用时必须做一层归一化映射:
import re
import wfdb
def normalize(text):
#-- 统一小写并去掉首尾空白,再按关键词判语义
t = (text or '').strip().lower()
if 'stand' in t:
return 'stand_up'
if 'supine' in t or 'back to' in t:
return 'back_to_supine'
if 'rapid' in t or 'fast' in t:
return ('rapid_tilt_up' if 'up' in t else 'rapid_tilt_down')
if 'slow' in t:
return ('slow_tilt_up' if 'up' in t else 'slow_tilt_down')
return 'note'
rec = wfdb.rdheader('12726', pn_dir='prcp')
ann = wfdb.rdann('12726', 'anI', pn_dir='prcp')
events = [(s / rec.fs, normalize(a), a) for s, a in zip(ann.sample, ann.aux_note)]
for t, lab, raw in events[:6]:
print(round(t, 2), lab, '|', raw)
归一化时保留 raw 原文本是必要的。库里存在拼写与截断(例如 contacL、supin、Conslusion),原文本是溯源与纠错的唯一依据。
把事件配成起止对之后,可以得到每段应激的区间,这就是后续所有时序分析的骨架:
| 应激类型 | 起点事件 | 终点事件 | 单次时长量级 |
|---|---|---|---|
| 慢速倾斜 | 慢速倾斜 抬起开始 | 慢速倾斜 放下结束 | 从约 50 秒抬起到停留再放回,共约三分钟 |
| 快速倾斜 | 快速倾斜 抬起开始 | 快速倾斜 放下结束 | 约 2 秒抬起到停留再放回,共约三分钟 |
| 起身 | 起身 | 回到平卧 | 站立维持约三分钟 |
5.5 转成定长窗口
下游是常规深度学习管线时,通常需要切成定长片段:
import wfdb
import numpy as np
FS = 250
WIN = 10 * FS #-- 十秒一窗
rec = wfdb.rdrecord('12726', pn_dir='prcp')
ann = wfdb.rdann('12726', 'anI', pn_dir='prcp')
x = rec.p_signal #-- (825000, 3) 物理单位
#-- 以事件时刻为锚,切出应激前后的窗口
for s in ann.sample[:4]:
a, b = int(s) - 30 * FS, int(s) + 30 * FS
if a < 0 or b > rec.sig_len:
continue
print(ann.aux_note[0], x[a:b].shape)
这段只演示切窗口径,正式实验时有三处必须改:一是窗标签口径要写进方法节,否则复现不了;二是要按应激段而不是按整条记录切,否则平卧基线会把应激信号稀释掉;三是三路通道要一起留着,丢掉角度通道就等于放弃了定位应激时刻的能力。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 读标注 | rdann(rec, 'atr') |
文件不存在,本库无 .atr |
分别读 anI、wqrs、wabp |
| 事件文本 | 拿原文当标签直接编码 | 多种写法被当成不同类别 | 先归一化,保留原文溯源 |
| 幅度比较 | 直接用 d_signal 跨记录比 |
血压与角度增益逐记录浮动 | 用 p_signal 换算到物理单位 |
| 切窗 | 按整条记录均匀切 | 平卧段稀释应激信号 | 以事件时刻为锚切段 |
| 采样率 | 当成 24000 Hz | 时间轴完全错乱 | 250 Hz 是采样率,24000 是计数频率 |
§6 与库内条目的关系
6.1 关系图谱
PRCP 在生理信号类内容里的位置,可以用"是否含连续血压 × 是否有体位变化"两个轴摆出来:
| 条目 | 连续血压 | 体位变化 | 采样率 | 与 PRCP 的关系 |
|---|---|---|---|---|
| cardioresp-response-orthostat | 有 | 有(一次起立) | 约 3 Hz | 最近邻:同为体位应激,但它是重采样后的多模态序列 |
| mit-bih-arrhythmia | 无 | 无 | 360 Hz | 互补:心电标注基准,无血压 |
| barcelona-sicu-signals | 有 | 无 | 高采样 | 互补:重症连续波形,但患者全程卧床 |
| pulse-transit-time-ppg | 有(推算) | 无 | 多传感器 | 互补:脉搏波与传导时间,无体位扰动 |
| bp-graphene-bioimpedance | 有 | 无 | 可穿戴 | 互补:腕上阻抗估计血压,缺少体位维度 |
| autonomic-aging-cardiovascular | 无 | 无(静息) | 生理信号 | 互补:自主神经衰老,静息二十分钟 |
| bpssrat | 有 | 无 | 动物逐搏 | 方法学参考:动物模型的逐搏血压 |
| multi-gait-posture | 无 | 有(行走) | 多相机 | 对照:同含 posture 主题,但测的是运动学 |
| motion-artifact | 无 | 有 | 多模态 | 方法学参考:运动伪差的对照设计 |
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 体位应激的另一个库 | orthostat、orthostatic challenge |
§6.1 第一行 |
| 连续血压的参考信号 | ABP、arterial blood pressure、Finapres |
§2.6 与 §6.1 |
| 压力反射与心率变异 | baroreflex、autonomic、heart rate variability |
§1.1 与 §7.4 |
| 心电标注的标准码表 | PhysioBank annotation、wqrs |
§2.4 |
| 运动伪差的处理 | motion artifact、movement artifacts |
§5.4 的注记字段 |
| 动物逐搏血压 | bp、beat-by-beat |
§6.1 第七行 |
| 自主神经与衰老 | autonomic、aging |
§6.1 第六行 |
6.3 与其他库的分工判据
| 任务 | 主粮仓该用什么 | PRCP 的位置 | 原因 |
|---|---|---|---|
| 压力反射敏感性估计 | 无可替代 | 主力 | 逐搏血压与 RR 同源同步 |
| 主动与被动体位对照 | 无可替代 | 主力 | 三种动作里含主动起身 |
| 连续血压算法的瞬态评测 | 大型重症波形库 | 主力之一 | 有外源扰动,可测瞬态 |
| 心搏分类的跨库测试 | MIT-BIH 心律失常库 | 辅助 | 只有 10 人,样本量不足 |
| 系统间耦合与网络生理 | Orthostatic Challenge | 辅助 | 它只有三路,不含脑血流 |
| 长期血压负荷 | 长程监护库 | 不适用 | 单段不足 75 分钟 |
| 多中心泛化 | 多中心队列 | 不适用 | 单中心采集 |
| 可穿戴日常活动心率 | PPG 日常活动库 | 不适用 | 无自由活动场景 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个常见误判:把 10 人小样本当成"质量差"。PRCP 的规模不是采集能力不足的结果,而是这类实验本身的现实约束——倾斜床加连续血压采集需要受试者到现场、逐人进行,不可能像回顾性提取住院记录那样把样本量堆上去。
这个校正会改变五维评分的读法。规模一项它拿不到高分,但在"任务唯一性"上它几乎没有替代品。把这两件事混在一起看,就会得出"不值得用"的错误结论。
7.1 五维评分
按 DAIMS 的常用维度打分,每项 1–5 分,分数针对"作为体位应激生理研究数据"这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 2 | 10 条记录、10 名受试者,训练不足,验证够用 |
| 标注质量 | 4 | 事件级人工标注,但文本自由、存在拼写与截断 |
| 任务适配 | 5 | 心电加连续血压加角度,该组合在公开数据里唯一 |
| 文档完整 | 3 | 官方页面只有摘要与一句数据描述,细节需读头文件 |
| 可获取性 | 5 | 免注册、ODC-BY、54.1 MB,一次下完 |
五项合计 19 分(满分 25)。分数结构说明它是"偏科型"选手:规模与文档是短板,适配性拉满。
7.2 标注质量的两层
第一层是事件时刻准不准。人工事件标注的价值在于给出外部扰动的准确时刻,这一点它做到了——由事件时刻反算出的倾斜速率与论文描述完全吻合(§4.3)。
第二层是事件文本能不能直接用。自由文本带来三类问题:同一语义多种写法(Initiate、Initiation、Start)、拼写问题(Conslusion、contacL)、截断(supin、supin)。这些问题使文本不能直接当标签,必须先归一化。
| 用途 | 自由文本的影响 | 建议 |
|---|---|---|
| 分段与对齐 | 小,时刻本身是可靠的 | 直接用时刻 |
| 动作类型标签 | 大,需归一化 | 建映射表,保留原文 |
| 信号质量筛选 | 中,注记措辞不统一 | 按关键词匹配后人工复核 |
| 跨记录统计 | 大,措辞差异会污染统计 | 统计前先归一化 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 人群单一 | 全部为健康志愿者,年龄 22–34 岁 | 不能外推到患者、儿童或老年人 |
| 单中心 | 一处实验室采集 | 设备与操作规范单一 |
| 样本量 | 10 名受试者 | 按人计的统计量不稳定 |
| 文本不规范 | 拼写、截断、多写法并存 | 标签需二次加工 |
| 自动标注误差 | .wqrs、.wabp 为算法产物 |
时间敏感指标会带上误差 |
| 血压通道中断 | 事件注记中出现信号衰减与换设备 | 段落连续性受损 |
| 原始记录未公开 | 发布段经 xform 截取 | 无法核对完整试验流程 |
| 无日期字段 | 头文件只有基准时刻 | 无法做跨天分析 |
最后一条容易被忽略。头文件记录行的最后一个字段是时刻而非日期,所以任何按日期分组、按昼夜切分的分析在这份数据上都做不了。
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 压力反射估计方法对照 | 在同一批应激段上比较不同估计器 | 扰动可定位,序列同源 | 不同论文的事件口径可能不同 |
| 心率血压耦合分析 | 用信息分解等方法判断方向性 | 外源扰动使因果方向可判 | 伪迹段若不剔除会污染结果 |
| 连续血压算法外测 | 把指端连续血压当参考,评测推算值 | 覆盖体位变化这一难例 | 参考本身有衰减与中断 |
| 建模数据集 | 用六段应激拟合心血管模型参数 | 扰动幅度与速率已知 | 10 人不足以支撑复杂模型 |
公开文献里能看到这几类用法。原论文(2003 年)用它比较了快速倾斜、慢速倾斜与起身三种扰动下的瞬态差异;后续有研究组用它做心率与血压序列间的信息分解,明确以第一次快速倾斜前后的片段作为分析对象;也有国内期刊论文用它分析直立倾斜引起的心率与血压耦合变化。
这些引用说明它作为"带外源扰动的同步双序列"已有稳定身份,但它从来不是一个评测基准库。把它的数字直接和别的库横向比较,通常不成立——因为不同论文切段的起点、长度与伪迹处理方式都不一样。
7.5 它为何能持续
它没有版本更新、没有扩版,却一直被引用,原因是它占着一个别人不愿再占的坑:连续血压加量化体位角度加同步心电。新增这样的库需要一组研究人员既愿意做倾斜试验、又愿意逐人采集连续血压、还愿意把原始波形整理公开。这个前提比"再导出一批住院波形"难得多。只要这个组合仍然稀缺,它作为方法学验证材料的价值就不会被新库替代。
§8 生态位与历史
8.1 历史沿革
PRCP 的时间跨度很长。实验与论文在 2003 年完成,数据直到 2016 年才在 PhysioNet 上线。中间这段时间里,PhysioNet 完成了从 PhysioBank 时代到现代内容平台的迁移,格式规范与标注体系也经历了整理。
这种"先有论文、后有数据发布"的路径在生理信号库里并不少见,但它带来一个具体后果:数据发布的详细程度往往取决于整理时还剩多少原始文档。PRCP 的官方页面只有一段摘要与一句数据描述,没有逐条记录的说明文档,也没有逐通道的采集参数表——所有细节都得从头文件和标注文件里读出来。
8.2 与挑战赛的关系
它和挑战赛的关系要说得保守一些。PhysioNet 的挑战赛体系从 2000 年代延续至今,房颤分类、心率变异、信号处理等方向都办过赛事。就 PRCP 而言,官方页面没有把它列为任何挑战赛的官方数据源,它也没有像某些库那样被切片打包进赛事训练集。
把这一点说清楚是有意义的:有些人以为"在 PhysioNet 上就是挑战赛数据",其实不然。平台上有大量与挑战赛无关的独立捐赠数据,PRCP 属于这一类。它的用户来自文献引用和方法学研究,不是来自赛事排行榜。
8.3 生态位:方法学验证材料而不是评测基准
| 角色 | 评测基准 | 方法学验证材料 |
|---|---|---|
| 典型用法 | 训练与排名 | 验证估计器、比较方法、展示机制 |
| 需要的前提 | 大样本、统一标签、公开榜单 | 外源扰动已知、信号同步、物理单位可换算 |
| 代表库 | MIT-BIH 心律失常库、各届挑战赛库 | 本库、部分小体量机制研究库 |
| 失败模式 | 过拟合榜单、标签噪声累积 | 口径不统一导致结果不可比 |
PRCP 坐在右边这一列。把它当评测基准用,会立刻遇到样本量瓶颈;把它当方法学验证材料用,它的设计优势才发挥出来。
8.4 谁在用它,用来做什么
从公开文献看,使用者大致分三类:做自主神经与压力反射的机制研究组(用它看瞬态时序)、做心率血压耦合与信息分解的信号处理组(用它做双序列分析)、做连续血压与无袖带估计的工程组(把它当难例)。三类都不追求规模,追求的是那份"扰动时刻已知、两路信号同源同步"的确定性。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 机制研究者 | 读官方页与头文件,跑通 §2.3 的读取 | 读出六段应激的起止,分段做时序分析 | 先剔除伪迹段再统计(§5.4) |
| 算法工程师 | 抽一路心电与一路血压跑基线 | 在应激段上评测瞬态响应 | 报告要分段,不要只报整条平均 |
| 教学人员 | 截取 §4.3 的六段应激画图 | 做扰动—反射对照的教学图 | 图上要标出伪迹注记的位置 |
9.2 一条最短的可用流程
#-- 1. 取记录清单
curl -sL https://physionet.org/files/prcp/1.0.0/RECORDS -o RECORDS
#-- 2. 下载一条记录的五个文件
for ext in hea dat anI wqrs wabp; do
curl -sL -o "12726.$ext" "https://physionet.org/files/prcp/1.0.0/12726.$ext"
done
#-- 3. 核对完整性
sha256sum -c <(grep 12726 SHA256SUMS.txt)
import wfdb
#-- 4. 读出事件时刻,定位六段应激
hdr = wfdb.rdheader('12726')
ann = wfdb.rdann('12726', 'anI')
for s, txt in zip(ann.sample, ann.aux_note):
print(f'{s / hdr.fs:8.2f} s {txt}')
#-- 5. 读出三路通道的物理值
rec = wfdb.rdrecord('12726', physical=True)
print(rec.sig_name, rec.units, rec.p_signal.shape)
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Physiologic Response to Changes in Posture, version 1.0.0. PhysioNet. 2016. |
| DOI | 10.13026/C2PC7R |
| 原始论文 | Heldt T, Oefinger MB, Hoshiyama M, Mark RG. Circulatory response to passive and active changes in posture. Comput Cardiol, 30:263–266, Sept. 2003. |
| 相关学位论文 | Heldt T. Computational models of cardiovascular response to orthostatic stress. Thesis (Ph.D.)—Harvard-MIT Division of Health Sciences and Technology, 2004. |
| 平台 | PhysioNet 平台综述论文(2026 年发表于 Nature Health),按官方页面的 Cite 按钮生成 |
写论文时建议同时注明:使用的版本号(1.0.0)、应激段的切分口径、以及是否剔除了事件注记中标记为伪迹的段落。这三项决定了结果能否被复现。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与官方文件目录中的头文件、记录清单与标注清单 |
| 文件核验 | 10 份 .hea、10 份 .anI、RECORDS、ANNOTATORS、SHA256SUMS.txt 经直接访问确认;.wqrs 与 .wabp 经抽样读取确认符号类型 |
| 不一致说明 | 官方摘要称三种动作为 slow tilt、fast tilt、standing-up,而标注文件内的事件文本使用 rapid tilt,两种叫法并存;头文件不含患者编号与诊断字段,与同平台部分心电库不同 |
| 论文信息 | 2003 年会议论文与 2004 年学位论文的题录经检索确认,正文结论引自摘要,未读全文;引用次数为检索时快照 |
| 未核验内容 | 各记录 .wqrs 与 .wabp 的标注条数;每条记录内六段应激与受试者的逐一对应关系;12821 的 .wqrs 体积明显偏小的成因;角度通道的零点校准方式 |
| 图像 | 无配图;封面为生成式提示词,不含真实生理波形 |
| 免责 | 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 的署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
「它有 .atr 注释文件」 |
没有;三类标注分别为 .anI、.wqrs、.wabp |
ANNOTATORS 只有三行 |
| 「它有一百多条记录」 | 只有 10 条,一人一段 | RECORDS 十行 |
| 「它是患者数据」 | 受试者全部为健康志愿者 | 官方页面摘要 |
| 「它有晕厥或阳性结局标签」 | 没有结局标签,只有事件时刻与文本 | 官方页面与标注内容 |
| 「事件文本可以直接当标签」 | 自由文本,多写法、有拼写与截断 | .anI 的 aux_note 内容 |
| 「三路通道增益都一样」 | 心电一致为 6554,血压与角度逐记录浮动 | 十份头文件的增益字段 |
| 「采样率是 24000 Hz」 | 250 Hz;24000 是计数频率 | 头文件记录行第 3 字段 |
| 「角度通道是卧位/立位二值」 | 是以度为单位的连续量 | 头文件单位字段 degrees |
| 「它可以做长时程负荷统计」 | 单段最长 74 分钟,全库约 10.3 小时 | 头文件采样点数字段 |
| 「它和 Orthostatic Challenge 是同一份数据」 | 不同:一个 250 Hz 三路波形,一个约 3 Hz 四模态序列 | 两份官方页面的数据描述 |
FAQ
Q1:PRCP 有多少条记录?一条记录对应一次动作还是一个人?
10 条记录,一条记录对应一名受试者的整段体位试验。每人一段,段内包含多次应激动作,由 .anI 事件标注给出每次动作的起止时刻。因此按记录划分与按受试者划分是等价的,不存在同一人跨段的泄漏问题。
Q2:为什么这个库必须同时给心电和连续血压?
因为它要回答的问题是"血压先掉还是心率先升"。这是一条有时间顺序的因果链:重力造成血压下陷,压力感受器察觉后经自主神经上调心率。要量出这个顺序,两路信号必须在同一时间轴上严格同步,而且血压必须逐搏连续——袖带一分钟一个点,抓不住只有几秒的瞬态。
Q3:事件标注里的文本为什么不能直接当标签用?
它是采集者在现场敲下的自由文本,不是为建模准备的编码表。同一个"慢速倾斜抬起开始",库里就有 Initiate slow tilt up、Initiation of slow tilt up、Start slow tilt up 等写法;还存在拼写与截断问题。正确做法是先建立归一化映射,再把原文保留为溯源字段。
Q4:慢速倾斜和快速倾斜的终点一样,为什么反应不一样?
终点确实一样,都是 75 度头高位,差别只在到达的快慢。原论文的观察是:快速倾斜与起身时出现的平均动脉压瞬态下陷与心率瞬态上升,在慢速倾斜时不出现。解释是慢速倾斜的扰动足够慢,压力反射有充足时间跟上,瞬态被"摊平"了;而两者反应幅度虽有差别,相对时序却保持得很好,说明时序由稳态反射机制决定。
Q5:十个人够用吗?
看用途。做方法学验证、机制展示、难例评测,10 人足够——因为关注点在于扰动与响应的对应关系,不在于人群分布。做统计推断、模型训练、人群外推,10 人远远不够。把这两类用途混在一起,是它最常被误用的地方。
Q6:许可允许商用吗?需要注意什么?
ODC-BY 1.0 允许商业使用,条件是署名。引用时建议同时给出数据集全名、版本号与 DOI,并保留 PhysioNet 的平台引用;若论文里使用了特定应激段,还应写明切段口径与伪迹处理方式,否则结果无法复现。
术语表
| 术语 | 解释 |
|---|---|
| PRCP | Physiologic Response to Changes in Posture,体位改变生理反应数据库 |
| 倾斜床试验 | 受试者平卧于可倾斜床,通过抬起床面模拟体位改变的检查方法 |
| 头高位倾斜 | head-up tilt,HUT,把床面头端抬高的体位应激方式 |
| 被动体位改变 | 由外力(倾斜床)造成的体位变化,受试者肌肉不主动参与 |
| 主动体位改变 | 受试者靠自身肌肉完成的体位变化,如起身 |
| 压力反射 | baroreflex,压力感受器感知血压变化后经自主神经调节心率与血管张力的反射 |
| 压力反射敏感性 | baroreflex sensitivity,单位血压变化引起的心率或间期变化量 |
| 平均动脉压 | mean arterial pressure,MAP,一个心动周期内动脉压的平均值 |
| 动脉血压 | arterial blood pressure,ABP,本库中指指端连续血压波形 |
| Finapres | 一种指端无创连续血压测量设备,事件注记中出现其开关记录 |
| RR 间期 | 相邻两个心搏 R 峰之间的时间间隔 |
| WFDB | PhysioNet 使用的波形数据库格式,含头文件、信号与注释 |
.hea |
纯文本头文件,声明采样率、增益、单位与受试者信息 |
.dat |
二进制信号文件,多路通道交错存放 |
.anI |
人工标注的主要事件文件,含时刻与文本 |
.wqrs |
由 wqrs 算法自动生成的心搏标注 |
.wabp |
由 wabp 算法自动生成的脉搏标注 |
| 增益 | 每物理单位对应的 ADC 整数值,换算物理量时使用 |
| ADC 零值 | 零电平对应的整数值,换算时先减去 |
| 校验和 | 采样点累加和,用于检测文件是否完整 |
| 计数频率 | WFDB 头文件里与采样率并列的时间基准参数 |
| xform | WFDB 工具集中的记录转换与截取工具 |
| ODC-BY | 开放数据共享署名许可 |
附录 A:核心数字核对表
| 项 | 值 | 出处 |
|---|---|---|
| 记录数 | 10 | 官方页面;RECORDS 十行 |
| 受试者数 | 10 名健康志愿者 | 官方页面摘要 |
| 性别构成 | 性别字段 M 的 5 人、F 的 5 人 | 十份 .hea 注释行的 <sex> 字段 |
| 年龄范围 | 22–34 岁 | 十份 .hea 注释行的 <age> 字段 |
| 身高范围 | 155–192 cm | 十份 .hea 注释行的 <Height> 字段 |
| 体重范围 | 55–100 kg | 十份 .hea 注释行的 <Weight> 字段 |
| 通道数 | 3 | 官方文件目录;十份 .hea 记录行第 2 字段 |
| 采样率 | 250 Hz | 十份 .hea 记录行第 3 字段 |
| 计数频率 | 24000 | 十份 .hea 记录行第 3 字段斜杠后 |
| 单条采样点数 | 825000–1110000 | 十份 .hea 记录行第 4 字段 |
| 单条时长 | 55 分 00 秒至 74 分 00 秒 | 采样点数 ÷ 250 Hz |
| 全库时长 | 约 10.3 小时 | 十条记录时长求和 |
| 心电增益 | 6554 adu/mV | 十份 .hea 信号行增益字段 |
| 血压增益 | 64.00–64.05 adu/mmHg | 十份 .hea 信号行增益字段 |
| 角度增益 | 173.12–175.63 adu/degree | 十份 .hea 信号行增益字段 |
| 每记录事件标注数 | 20–29 条 | 十份 .anI 文件逐条计数 |
| 全库事件标注数 | 224 条 | 十份 .anI 文件逐条计数求和 |
| 标注种类 | 3 类 | ANNOTATORS 三行 |
| 目录内文件数 | 53 | 官方文件目录列表 |
| 受校验文件数 | 52 | SHA256SUMS.txt 行数 |
| 解压后体量 | 54.1 MB | 官方页面 Files 段 |
| 版本号 | 1.0.0 | 官方页面 Versions 段 |
| 发布日期 | 2016 年 2 月 18 日 | 官方页面 Published 段 |
| DOI | 10.13026/C2PC7R | 官方页面 Discovery 段 |
| 许可 | Open Data Commons Attribution License v1.0 | 官方页面 License 段 |
| 倾斜目标角度 | 75 度头高位 | 2003 年会议论文摘要 |
| 慢速倾斜耗时 | 约 50 秒 | 2003 年会议论文摘要 |
| 快速倾斜耗时 | 约 2 秒 | 2003 年会议论文摘要 |
| 单次应激时长 | 约 3 分钟,各两次,顺序随机 | 后续研究对该方案的复述 |
附录 B:数字的来源分层
第一层:官方页面与官方文件。 记录数、受试者数、通道数、采样率、采样点数、增益、许可、版本、发布日期、DOI、体量。这些数字来自项目主页的摘要与文件目录,以及 10 份头文件、RECORDS、ANNOTATORS、SHA256SUMS.txt 的逐字内容。
第二层:文献摘要。 倾斜目标角度 75 度、慢速约 50 秒、快速约 2 秒、瞬态差异的有无、以及六段三分钟加五分钟平卧休息的方案描述。这些来自 2003 年会议论文摘要与后续研究的方法节,只能支撑"文献这样描述"与"文献这样使用",不能支撑"这样用效果如何"。
第三层:写手核验。 单条时长由采样点数除以采样率得到;全库时长由十条记录时长求和得到;事件标注条数由十份 .anI 逐条计数得到。这些是换算与清点,不是推断,已在附录 A 注明。
第四层:未核实。 各记录 .wqrs 与 .wabp 的标注条数、六段应激与受试者的逐一对应关系、12821 的 .wqrs 体积明显偏小的成因、角度通道的零点校准方式。正文中凡是涉及这些的地方都只做定性表述。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | Physiologic Response to Changes in Posture v1.0.0 | https://physionet.org/content/prcp/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | 该库的 PhysioNet 文件目录 | https://physionet.org/files/prcp/1.0.0/ | 头文件、记录清单、标注清单、散列清单 |
| 3 | Heldt T, Oefinger MB, Hoshiyama M, Mark RG. Circulatory response to passive and active changes in posture. Comput Cardiol, 30:263–266, Sept. 2003 | http://www.cinc.org/Proceedings/2003/pdf/263.pdf | 采集方案与核心结论 |
| 4 | Heldt T. Computational models of cardiovascular response to orthostatic stress. Thesis (Ph.D.)—Harvard-MIT Division of Health Sciences and Technology, 2004 | 官方页面 References 段 | 数据的建模用途 |
| 5 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 6 | Rivolta MW, Sassi R. CinC 2020 论文(引用本库做压力反射估计方法对照) | https://www.cinc.org/archives/2020/pdf/CinC2020-444.pdf | 六段三分钟方案与外测角色 |
| 7 | 直立倾斜引起的心率和血压的耦合性变化分析,中国生物医学工程学报 | http://cjbme.csbme.org/CN/Y2017/V36/I3/284 | 中文文献对本库的用法 |
附录 D:任务代码
任务一:读出六段应激的起止时刻
import wfdb
def events(name):
#-- 事件时刻存在 .anI 里,文本存 aux_note
hdr = wfdb.rdheader(name, pn_dir='prcp')
ann = wfdb.rdann(name, 'anI', pn_dir='prcp')
return [(s / hdr.fs, txt) for s, txt in zip(ann.sample, ann.aux_note)]
for name in wfdb.get_record_list('prcp'):
ev = events(name)
print(name, 'events =', len(ev), '| first =', ev[0][1])
任务二:按应激段切出同步的双序列
import wfdb
import numpy as np
FS = 250
def segments(name, pad_before=30, pad_after=180):
#-- 以每次"抬起开始"为锚,向前取基线、向后取应激期
rec = wfdb.rdrecord(name, pn_dir='prcp', physical=True)
hdr = wfdb.rdheader(name, pn_dir='prcp')
ann = wfdb.rdann(name, 'anI', pn_dir='prcp')
out = []
for s, txt in zip(ann.sample, ann.aux_note):
low = t = None
t = (txt or '').strip().lower()
if 'tilt' in t and 'up' in t and ('initiate' in t or 'start' in t):
a = max(0, int(s) - pad_before * FS)
b = min(hdr.sig_len, int(s) + pad_after * FS)
out.append((t, rec.p_signal[a:b, :]))
return out
for tag, seg in segments('12726'):
print(tag, seg.shape) #-- (帧数, 3) 三路通道同步
第二段给的是"以事件为锚切段"的最小骨架。上正式实验时有两处必须改:一是伪迹段要先剔除,事件注记里标了 Movement artifacts、Loss of ECG signal、Blood pressure signal fades 的位置都不该进统计;二是基线长度与应激期长度要写进方法节,否则复现不了。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 10 条记录、10 名健康志愿者、3 路通道、250 Hz、全库约 10.3 小时 | 这五个数字定义了一切用法与限制 |
| 2 | 它是"带外源扰动的同步双序列"而不是评测基准 | 追求规模和榜单的人用错地方了 |
| 3 | 慢速与快速倾斜终点相同,差别只在速率 | 这是原论文核心结论的来源 |
| 4 | .anI 事件文本是自由文本,必须先归一化 |
多写法、拼写与截断都会污染标签 |
| 5 | 没有 .atr,三类标注各占一个扩展名 |
照抄其他库的读取代码会直接失败 |
编辑说明
本文的核验时间为 2026 年 10 月 29 日。核对方式为直接访问 PhysioNet 项目页与文件目录,逐一确认 10 份 .hea 头文件、10 份 .anI 事件标注、RECORDS、ANNOTATORS、SHA256SUMS.txt 的可访问性与内容,并抽样读取 .wqrs 与 .wabp 以确认标注符号类型。方案细节(75 度、慢速约 50 秒、快速约 2 秒、六段三分钟加五分钟平卧休息)来自 2003 年会议论文摘要与后续研究的方法节,未读全文。
需要说明的三处差异:其一,官方摘要把三种动作写作 slow tilt、fast tilt、standing-up,而标注文件里的事件文本用 rapid tilt,本文在归一化时统一为"快速倾斜"并保留原文;其二,头文件不含患者编号与诊断字段,只有年龄、性别、身高、体重四项,因此不存在"同一人跨段"的划分陷阱;其三,12821 的 .wqrs 文件体积明显小于其余记录,成因未在官方页面说明,本文已列入未核验内容。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cardioresp-response-orthostat — 共享标签:生理信号 / 体位应激 / 多模态同步
- multi-gait-posture — 共享标签:生理信号 / 姿势与动作
- autonomic-aging-cardiovascular — 共享标签:生理信号 / 自主神经 / 心血管
- bp-graphene-bioimpedance — 共享标签:生理信号 / 血压信号
- pulse-transit-time-ppg — 共享标签:生理信号 / 血压信号 / 多通道同步
- barcelona-sicu-signals — 共享标签:生理信号 / 波形 / 连续血压
- bpssrat — 共享标签:生理信号 / 血压信号 / 逐搏
- cardiowave-portable — 共享标签:心电信号 / 血压信号 / 便携采集
- motion-artifact — 共享标签:生理信号 / 运动伪差
- ppg-dalia — 共享标签:生理信号 / 日常活动采集
- mit-bih-arrhythmia — 共享标签:生理信号 / 心电信号
- physiozoo — 共享标签:生理信号 / 心电信号 / 窦性心律
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

