七个人的腕上电阻抗 — Graphene Bio-Z 血压库

7 名受试者 / 4 通道腕部生物阻抗 / 逐搏参考血压

来源 https://physionet.org/content/bp-graphene-bioimpedance/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 12
七个人的腕上电阻抗 — Graphene Bio-Z 血压库

信息速览

数据集名称七个人的腕上电阻抗 — Graphene Bio-Z 血压库
数据类型时序信号,波形,元数据
规模7 名受试者 / 8 个采集日
接入方式https://physionet.org/content/bp-graphene-bioimpedance/1.0.0/
AI 就绪度

血压这件事,临床上一直靠一只袖带解决:充气、放气、听声或看压力振荡,得到一个收缩压和一个舒张压,一天量两次。它准确、便宜、人人会用,代价是"点",不是"线"。而真正和心血管事件挂钩的,往往不是某一次门诊读数,是二十四小时里的波动形态——夜间是否下降、清晨是否陡升、情绪与运动时怎么反应。要拿到这条线,就得有别的测量原理。

公开的连续血压数据里,主流有两条路:一条是袖带式的逐搏装置,把袖带留在手指上连续打气,读数是准的,但人不能自由活动;另一条是光学的脉搏波,用 PPG 波形去回归血压,设备轻便,却受肤色、接触压力、环境光影响。石墨烯生物阻抗切的是第三条:不讲光,讲电——把两片原子级厚度的薄膜电极贴在腕部,从桡动脉和尺动脉的电阻抗变化里读出脉搏,再由模型换算成血压。

PhysioNet 上的这个库,是这条路线目前唯一公开的原始波形集合。它很小:七名二十余岁的受试者,八次采集日,累计一百多小时。它也足够具体:四通道阻抗、逐搏参考血压、两路脉搏波,采样率与时间戳都写明,配套算法在 GitHub 上公开。它是一个原理验证的档案,不是一个人群基准。一屏速览见下表。

维度 内容
全名 Continuous Cuffless Monitoring of Arterial Blood Pressure via Graphene Bioimpedance Tattoos
发布方 PhysioNet;采集由 Texas A&M University 与 UT Austin 合作完成
首次发布 2022 年 6 月 4 日,版本 1.0.0
配套论文 Nature Nanotechnology,2022 年,DOI 10.1038/s41565-022-01145-w
受试者 7 名,二十余岁,原理验证性质
采集日 8 次(受试者 1 两次,相隔数日;其余各一次)
单次时长 官方称平均四小时上下,表内单次 40 至 320 分钟
累计血压点 官方称约 18667 个
主通道 四通道腕部生物阻抗,贴于桡动脉与尺动脉各两处
同步参考 Finapres NOVA 连续血压、指端 PPG、XL 板 PPG
采样率 阻抗与 XL 板 PPG 1250 Hz;参考血压 200 Hz;参考 PPG 75 Hz
文件格式 按试次切分的 CSV,首列为秒级时间戳
许可 ODC-BY 1.0,开放获取
配套代码 GitHub 上的 TAMU-ESP/Graphene_BP
典型用途 个体化逐搏血压建模、阻抗特征工程、跨模态对齐研究

§1 它要解决的具体麻烦

1.1 无创血压的三条原理,谁也不是谁的升级版

讨论无袖带血压时,最容易犯的错误是把不同原理当成同一条技术曲线上的先后阶段,好像光学比袖带先进、电学又比光学先进。实际情况是三条互不替代的路,各自有各自的物理量与失效模式。

第一条是压力法,也就是袖带。它测的是外加压力与动脉搏动之间的平衡关系,直接对应毫米汞柱,因此天然带有绝对单位。临床金标准的水银柱、示波法电子血压计,都属于这一类。它的短板是必须阻断血流才能读数,所以天生不连续。

第二条是光学法,即 PPG。发光二极管照进皮肤,光电二极管接收反射或透射光,搏动时血容量变化改变吸收量,于是得到一条与压力波形形状相似、但幅度由光学路径决定的曲线。它轻、便宜、可以贴在耳后、指尖、手腕。难题在于:同一个人在不同肤色、不同接触压力、不同环境光下,同一条曲线对应的血压可能不同。波形与血压之间没有唯一映射,只能靠标定与回归去逼近。

第三条是电学法,也就是这个数据集采用的做法。向身体注入一个频率已知的微弱交流电流,测量电压响应,得到该路径上的复阻抗。动脉搏动时血管扩张、血容量与血液电导率改变,阻抗随之变化,于是得到一条阻抗搏动波。它与 PPG 的根本区别在于:测的是组织电学属性的变化,不依赖光的穿透与散射,因此理论上不受色素沉着的直接影响——官方页面在背景部分明确把"不受肤色影响"列为这条路线相对光学路线的卖点。

路线 物理量 单位是否天然对应 mmHg 主要失效模式
压力法(袖带) 外加压力与振荡幅度 是 必须阻断血流,无法连续;袖带尺寸影响读数
光学法(PPG) 光吸收随血容量的变化 否,需标定回归 肤色、接触压力、环境光、外周灌注
电学法(生物阻抗) 组织电阻抗随搏动的变化 否,需标定回归 电极接触阻抗、运动伪迹、个体组织差异
超声法 血管壁位移或血流速度 否,需换算 探头位置稳定性、成本

这张表的意义在于:后两条路线都不是"直接测得血压",都是"测一个与血压相关的中间量,再用模型换算"。因此它们共用同一类麻烦——标定、个体差异、参考标签的误差。这也解释了为什么这个数据集虽然原理与 PPG 不同,使用它时踩的坑却与 PPG 库高度相似。

1.2 三条常见的错误期待

第一条,期待它是"石墨烯血压数据集"就以为规模可观。名字里的材料是石墨烯,听起来像是某种新材料的大规模评测。实际上它是七个人的原理验证记录,官方自己在正文里用的词是 proof-of-principle。拿它当人群基准,第一步就会落空。

第二条,期待它可以直接训练一个跨人群通用的血压估计器。官方的建模流程是每位受试者单独训练一套模型,训练数据来自同一次采集里的抓握加压与瓦氏动作。这不是工程上的偷懒,而是当前原理的约束:阻抗波的绝对幅度与电极位置、皮下组织厚度、血管深度都有关,跨人必须先归一化。数据集本身不提供这套归一化。

第三条,期待它是一份"干净的、可以直接喂进网络的波形表"。它确实是 CSV,也确实有时间戳,但同一试次被切成多个编号文件,不同信号分文件存放,目录层级承载元信息。直接读一个文件只能拿到一条通道的一小段(§2.3)。把它当成单表数据集,会在没有任何报错的情况下丢掉大半数据。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
验证生物阻抗能否承载逐搏血压信息 四通道阻抗与逐搏参考血压严格同步 够,这正是它被发布的理由
复现已发表的 Grade A 结果 原始波形 + 官方算法仓库 + 明确的窗口平均参数 可做,但需按受试者逐个复现
训练跨人群的通用血压模型 七名年轻健康受试者 不够,人种、年龄、病理覆盖几乎为零
研究肤色对测量稳定性的影响 官方文字声称不受肤色影响,但未公布肤色分层 不够,无法从数据上验证这一说法
研究运动伪迹 部分试次含走动、爬楼、骑车、器械训练 有限,运动段未单独标注起始时刻
做长时程漂移研究 单次最长超过五小时,受试者 1 隔数日复测 可做探索,跨日样本只有一个
做多模态融合 阻抗、参考血压、两路 PPG 同时同轴 够,是它少见的价值点
做穿戴设备的功耗与电路研究 官方描述了 XL 板架构 只能读方法,数据本身无电路层记录

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

你的处境 它能帮你什么 下一步该做什么
你在做腕部阻抗或电阻抗谱传感,想知道这条信号到底有没有血压信息 给出四通道阻抗与逐搏参考血压的严格同步对,且参考设备是医疗级连续血压仪 先在单个受试者内做留出验证,确认信号里确实有可回归的成分,再谈泛化
你手上有 PPG 血压模型,想找一个不同物理量的对照 同一批人、同一时段、同一参考标签,换成阻抗通道即可做模态对照 固定受试者划分与训练窗口,只替换输入通道,控制其他变量
你在评估某款柔性电极,需要公开的对照基线 官方给出了电极的制备方式与阻抗测量链路,可作为方法学参照 注意它不提供电极老化或重复使用数据,不能直接用于寿命评估
你要写综述,需要说清三条原理的差别 提供了电学法最完整的一份公开原始数据与方法描述 引用时同时引论文与 PhysioNet DOI,两者版本不同
你在教可穿戴传感,需要一个"信号链完整"的例子 从注入电流、解调、滤波到特征提取,官方都写了参数 用 §5 的读取流程把一段阻抗画出来,比讲公式直观
你的项目需要大样本,想确认它能否当补充集 它对大样本模型的增量贡献接近于零 把它放在外部验证或消融实验里,而不是训练集里
你在核对某个已发表数字 官方给出的血压点总数与论文中的精度指标可以互相印证 先确认论文与数据库是不是同一批数据,官方页面说明它们是同一次研究

1.5 一句话判断

它不是一台更好用的血压计,而是一份"电学法确实能测到血压"的原始凭据;价值在于原理的可行性被公开摆出来,不在于样本量。

1.6 不适合谁:四条边界

不适合谁:要建人群级血压基准的人。 七名二十余岁的健康受试者,全部来自同一所学校。任何以人群为单位的结论——不同年龄段的误差、高血压患者的误差、性别差异——在这份数据上都推不出来。库内已有的大样本无袖带血压基准(§6)才是那个用途的工具。

不适合谁:要训练通用模型的人。 官方的建模方式是每人一套模型,训练集与测试集来自同一次采集。把八次采集日混在一起做随机划分,得到的高精度基本是同一段生理状态在训练与测试两侧重复出现的结果。

不适合谁:要做临床验证的人。 数据集没有诊断信息、没有用药记录、没有随访结局。它记录的是健康年轻人在实验室里做抓握、屏气、骑车时的血压反应,不是患者的血压管理。

不适合谁:要拿它评估电极寿命的人。 官方只描述了电极的制备与一次性的贴附使用,没有提供同一电极多日重复使用的对照。想研究柔性电极的老化,这份数据给不出证据。

§2 数据构成与规格

2.1 八次采集日,七个人,四种范式

数据按受试者编号与采集日组织。受试者 1 有两天:第一天是完整流程,第四天是一次短复测,官方说明这次复测是为了检验相隔数日后血压预测的可重复性。其余六人各只有一天。受试者 7 只有骑车范式,没有抓握与瓦氏动作。

数据目录 受试者 采集日 时长(分钟) 包含测量 休息期后复测 休息期活动 备注
subject1_day1 1 第 1 天 180 基线、抓握冷压、瓦氏 有 走动与爬楼 主流程完整
subject1_day4 1 第 4 天 40 抓握冷压、瓦氏 无 无 距首日数日后复测
subject2_day1 2 第 1 天 170 基线、抓握冷压、瓦氏 有 走动与爬楼 —
subject3_day1 3 第 1 天 180 基线、抓握冷压、瓦氏 有 走动与爬楼 —
subject4_day1 4 第 1 天 150 基线、抓握冷压、瓦氏、静息 有 走动与爬楼 含额外静息段
subject5_day1 5 第 1 天 195 基线、抓握冷压、瓦氏 有 高强度训练 休息期运动量大
subject6_day1 6 第 1 天 320 基线、抓握冷压、瓦氏 有 进食、高温出汗步行 单次最长
subject7_day1 7 第 1 天 120 骑车 无 无 仅骑车范式

这张表值得逐行看一遍。表中的时长是各次采集的有效记录长度,官方正文另有一句"平均四小时上下",两个口径并不一致——表内最长一次是三百二十分钟,最短四十分钟,算术上凑不出四小时的平均。官方没有解释这个差额的构成,一种可能是正文的平均四小时指包括准备与间隔在内的在场时间,另一种可能是表内时长只统计了分析用的区间。使用时应以表内时长为规划依据,把四小时当作量级描述而非精确值。

八次采集合计的有效记录,按表内数字累加约一千三百五十五分钟,折合二十三小时略少。若按正文的四小时平均乘以七次完整采集,则接近三十小时。两个口径都远小于"连续监测"在临床语境下的含义——那通常指二十四小时以上不间断,而这里的每次记录只有数小时。

2.2 字段与记录的完整字典

数据集的结构不是"一张表若干列",而是"目录树 + 多个窄表"。理解它的字段,要分三层看:目录名承载了谁、哪天、什么范式、第几次重复;文件名承载了哪种信号、第几段;文件内部才是真正的时间序列。

层级 名称 取值与含义 是否在文件内
目录一级 subject 编号 1 至 7,对应受试者 否,仅在路径中
目录一级 day 编号 采集日序号,目前出现 day1 与 day4 否,仅在路径中
目录二级 setup 名称 baseline、HGCP、Valsalva、Cycling、Rest 等 否,仅在路径中
目录二级 setup 序号 同一范式重复执行时的次序 否,仅在路径中
文件名 data_trial 固定前缀,表示这一试次的数据 是,文件名本身
文件名 数据类型 bioz、finapresBP、finapresPPG、ppg 四类 是,文件名本身
文件名 分段序号 01、02 依次接续,用于控制单文件体积 是,文件名本身
列 1 timestamp 秒为单位的时间戳 是
列 2 信号值 阻抗以毫欧计,血压以毫米汞柱计,PPG 为任意单位 是

数据类型与单位的规定如下:

数据类型 内容 列数 单位 采样率
bioz 四通道腕部生物阻抗,按桡动脉近腕、桡动脉近心、尺动脉近腕、尺动脉近心排列 时间列 + 4 毫欧 1250 Hz
finapresBP Finapres NOVA 连续血压波形 时间列 + 1 毫米汞柱 200 Hz
finapresPPG Finapres 设备的指端 PPG 时间列 + 1 任意单位 75 Hz
ppg XL 板采集的指端 PPG 时间列 + 1 任意单位 1250 Hz

四通道的排列顺序值得单独记一笔。官方原文的四个描述分别是桡动脉靠腕、桡动脉靠心、尺动脉靠腕、尺动脉靠心。也就是说,同一根动脉上有两个电极位置,一根靠近手腕,一根靠近前臂中段。这个设计不是冗余,而是为了算出脉搏沿动脉传播的时间差——相邻两处之间的距离固定,传播时间的变化就反映了脉搏波速度,而波速度与血管壁的弹性、进而与血压相关。这是整条技术路线里最关键的一个物理量。

通道 中文名 解剖位置 在建模中的作用
BioZ1 桡动脉近腕 拇指侧手腕横纹附近 与 BioZ2 配对计算脉搏传播时间
BioZ2 桡动脉近心 沿桡动脉向上游数厘米 同上,作为下游或上游参照
BioZ3 尺动脉近腕 小指侧手腕横纹附近 与 BioZ4 配对,提供第二根动脉的独立观测
BioZ4 尺动脉近心 沿尺动脉向上游数厘米 同上

两根动脉同时测量也是有意的安排。桡动脉与尺动脉在手掌汇合成掌弓,解剖路径不同、深度不同、与心脏的距离也不同。如果一条通路的信号被局部干扰污染,另一条可以交叉验证。在使用时,这意味着四通道不是简单的"四倍数据",而是两组可互为参照的配对测量。

2.3 一条记录的完整解剖

取一次抓握冷压试次为例。它在目录里的位置大致是这样的路径,最后一级下有多个文件:

bp-graphene-bioimpedance/1.0.0/
└── subject3_day1/
    ├── baseline_1/
    │   ├── data_trial_bioz_01.csv
    │   ├── data_trial_bioz_02.csv
    │   └── data_trial_finapresBP_01.csv
    └── HGCP_2/
        ├── data_trial_bioz_01.csv
        ├── data_trial_bioz_02.csv
        ├── data_trial_bioz_03.csv
        └── data_trial_finapresBP_01.csv

同一试次下,不同信号是不同文件;同一信号太大时切成多个分段。分段不是重复,是接续:01 的最后一个时间戳接着 02 的第一个时间戳。这一点没有任何强制的校验机制,文件里没有声明总段数,也没有声明本次试次的起止时间。如果只读了名字匹配 _01 的文件,程序不会报错,只会安静地少算几十分钟。

单个文件内部的形态则简单得多,是标准的宽表:第一列时间,其余列信号。

timestamp,bioz1,bioz2,bioz3,bioz4
0.000,12.417,11.902,9.331,8.874
0.001,12.418,11.903,9.330,8.873
0.002,12.419,11.904,9.332,8.872

上面的数值仅用于展示列结构,不是任何真实文件的内容。实际文件里阻抗列的数值范围取决于标定与个体,官方没有公布典型幅度,只给出了测量系统的精度指标——均方根误差小于一毫欧,并说明这远小于目标阻抗变化的幅度。

一条试次的生命周期可以从官方对范式的描述里还原出来。抓握冷压的执行方式是:先抓握把手三分钟,让收缩压与舒张压缓慢上升;然后把手伸进冰水中一分钟,让血压再上一个台阶;随后是四分钟静息,血压非常缓慢地回落。整个过程每次约四百五十秒,每位受试者平均做五次左右,上下浮动一次。瓦氏动作则是一组反复的屏气用力,每次二十到三十秒,中间有恢复,产生的是血压的骤升骤降。骑车是四分钟骑行加四分钟休息的循环。

范式 诱发方式 生理反应形态 单次时长
Baseline 静息,无干预 基线波动 官方未给出固定长度
HGCP 三分钟抓握 + 一分钟冰水 + 四分钟静息 缓慢上升后进一步抬升,再缓慢回落 约 450 秒
Valsalva 反复屏气用力 骤升后骤降,再反弹 每次 20 至 30 秒
Cycling 骑行与休息交替 运动期持续抬高,休息期回落 四分钟骑 + 四分钟休
Rest 静息,无干预 与基线类似 官方未给出固定长度

这张表回答的是一个使用层面的问题:这份数据覆盖了血压的哪几段动态范围。抓握冷压带来的是数分钟尺度的缓慢变化,瓦氏动作带来的是秒级的剧烈变化,骑车带来的是持续数分钟的抬升。三者合起来,覆盖了从静息到运动、从缓变到突变的常见场景。缺的是昼夜节律、睡眠、情绪波动这些更长时程的维度。

2.4 四类信号的采样率与配比

四类信号的采样率相差很大,这是设计上的必然,也是读取时最容易出错的地方。

数据类型 采样率 相对阻抗 一小时点数 用途
bioz 1250 Hz 1× 约 450 万 主测量通道
ppg(XL 板) 1250 Hz 1× 同上 与参考设备对齐时间
finapresBP 200 Hz 约 1/6 约 72 万 监督标签
finapresPPG 75 Hz 约 1/17 约 27 万 辅助对齐

阻抗与 XL 板 PPG 同为 1250 Hz,这并非巧合:两者由同一块板卡采集,共用时钟,因此天然同步。参考血压与参考 PPG 由另一台设备采集,采样率各不相同,两台设备之间没有硬件同步线,只能靠两路 PPG 在事后做时间对齐。官方明确说明两路 PPG 的作用就是精确相关两台设备之间的事件时刻。

这段设计说明了一个常被忽略的事实:数据里的"同步"是软同步,不是硬同步。对齐的精度取决于两路 PPG 的形态匹配质量,而 PPG 在运动时容易失真。这意味着在剧烈运动段,阻抗与参考血压之间的时间偏移可能大于一个心搏周期。任何以毫秒级精度为前提的特征——尤其是脉搏传播时间的绝对值——在运动段都会受影响。

2.5 与同类资源的字段差异

把这份数据和常见的无袖带血压库放在一起看,字段层面的差别一目了然。

资源 受试者 主信号 参考血压 记录粒度 是否含阻抗
本数据集 7 四通道腕部生物阻抗 Finapres 连续波形 逐搏回归标签 是
大样本 PPG 基准库 数千 PPG 与 ECG 波形 有创动脉压波形的片段 十秒级片段 否
便携式 ECG+PPG 库 近千 单导联 ECG 与 PPG 袖带单点读数 数十秒片段 否
动物血压记录 十余只动物 有创动脉压 有创测量本身 长时间连续 否

差别不在"谁更多",而在"谁的中间量不同"。绝大多数公开库的输入是光学或电生理信号,参考是袖带单点或有创波形;这一份的输入是组织阻抗,参考是逐搏连续血压。正因为输入不同,它的结果不能与其他库的结果直接横向比较——两个模型在各自库上报告毫米汞柱误差,数值可比,结论不可比,因为标签的获取方式、人群、诱发方式全都不同。

§3 它是什么:一部原理验证的档案

3.1 名字里的三个词,各指一件事

数据集全名有三个关键词:continuous、cuffless、graphene bioimpedance tattoos。三个词分别回答三个不同的问题。

continuous 回答的是测量方式。它不是说设备可以二十四小时不摘,而是说每一次记录内部是连续的波形,不是离散的读数。这个区分很重要:一个连续波形可以切出成千上万个逐搏样本,一个离散读数只能给一个点。数据集里那近两万个血压点,全部来自连续波形的逐搏切分,不是近两万次独立测量。

cuffless 回答的是测量原理。它不是说完全不需要袖带——实验过程中每个受试者身上都同时戴着臂式袖带与指套设备作为参照(§2.2)。它说的是主测量通道不依赖袖带加压。这个区分在使用时同样重要:数据里出现的袖带是校准与对照的工具,不是被测对象。

graphene bioimpedance tattoos 回答的是传感器形态。石墨烯电子纹身是一片原子级厚度的薄膜,贴在皮肤上如同临时纹身,靠范德华力自吸附,不需要胶带或绑带。官方描述其制备是在二百纳米厚的聚甲基丙烯酸甲酯薄膜上转移高质量化学气相沉积石墨烯。这种形态的意义在于贴合度:薄膜随皮肤形变,电极与皮肤的接触阻抗稳定,运动时的相对位移小。

关键词 字面含义 实际边界
Continuous 连续波形而非离散读数 单次数小时,非全天候;跨日样本仅一个
Cuffless 主通道不需袖带加压 实验中仍佩戴袖带与指套作为参照
Graphene tattoo 自吸附薄膜电极 一次性贴附,无重复使用与老化数据

3.2 它与"可穿戴血压手环"差在哪

市面上已经有无袖带血压手表,用的多是 PPG 加袖带标定。这类产品与这份数据的关系,常被误解成"同一件事的不同阶段"。实际上差在三个层面。

第一层是测量位置。手表在腕部背侧,桡动脉在掌侧,两者隔着腕骨与肌腱。腕背的 PPG 信号要穿过更多组织,信号质量对面接触压力更敏感。这份数据的电极直接贴在桡动脉与尺动脉的皮肤投影上,位置是经过解剖定位的。

第二层是参考血压。消费级产品的标定通常用一次或几次袖带读数,误差源包括袖带本身的读数误差与标定点与使用点之间的生理漂移。这份数据用连续的指套设备做参考,每个心搏都有一个参考值,因此模型可以从数万个点里学到血压变化与阻抗波形的关系,而不是从几个点上外推。

第三层是评价方式。消费级产品的验证通常按标准协议在受试者身上做,报告平均误差与标准差。这份数据的官方建模是每位受试者单独训练、同一次采集内留出测试,报告的是个体内误差。这两个数字不可互换:个体内误差通常明显小于跨个体误差,把前者当作后者引用是常见的引用事故(§7.3)。

3.3 论文与数据库是同一批数据吗

官方页面在背景与方法部分多次引用同一项研究,配套论文发表于 Nature Nanotechnology,标题与数据集名称完全一致。论文摘要给出的关键数字是:监测时长超过三百分钟,比此前报道的工作长一个数量级;舒张压误差为零点二加减四点五毫米汞柱,收缩压误差为零点二加减五点八毫米汞柱;按通用标准可评为 A 级。

这些数字与本库的内容一致,但两者不是同一个交付物。论文给出的是方法、结果与结论,数据库给出的是原始波形。用论文数字做比较时,要清楚那个误差是在什么评价协议下得到的——官方的建模章节列出了五种评价设置,从打乱折的交叉验证,到不打乱的连续段测试,到仅用少量数据训练,到训练后隔一段时间测试,再到隔数日复测。不同设置下的误差差别很大,论文摘要里的那个数字对应其中哪一种,官方页面没有逐项对应说明。

评价设置 训练数据 测试数据 回答的问题
打乱十折 抓握冷压,九成 抓握冷压,一成 同一范式内的拟合能力
不打乱十折 抓握与瓦氏,九成 抓握与瓦氏,一成 连续时间段上的估计能力
仅瓦氏训练 瓦氏,九成 瓦氏,一成 少量数据是否够用
训练后延迟测试 抓握与瓦氏 运动后复测段 运动后的泛化
跨日复测 首日抓握与瓦氏 第四天抓握 隔数日的可重复性

3.4 它在 PhysioNet 上属于哪一类

PhysioNet 的开放库大致分几类:大型临床波形库、挑战赛数据、生理信号基准库、以及小型的方法学数据集。这一份属于最后一类,特征是规模小、目的明确、配套论文与方法描述详细。

这类库的用途与大型库完全不同。大型库回答"在大量人群上,某个方法平均表现如何";方法学库回答"某个新原理在原理层面是否成立"。前者需要统计功效,后者需要测量链完整。用错类别是这类库最常见的误用来源。

一个简单的判别方法:看官方页面有没有给出完整的硬件链路描述。这一份给了——从微控制器产生波形,到十六位数模转换器转成交流电流,到低噪声运放构成负反馈,到串联电容隔直,到高通滤波,到仪表放大器,到抗混叠低通,到二十四位数模转换器以九十三点七五千赫采样。这种详尽程度只在方法学库里出现,因为它的读者是同行,不是数据科学家。

§4 它最特别的地方:把参考标签的来路也写清楚了

4.1 逐搏标签与片段标签的差别

无袖带血压研究里,标签的粒度是个被低估的变量。常见两种:片段标签,一个十秒或三十秒的窗口对应一组收缩压与舒张压;逐搏标签,每个心搏对应一组值。这两者在建模时的含义完全不同。

片段标签意味着模型必须学会在一个窗口内做某种平均,而平均的过程本身抹掉了窗口内的波动。逐搏标签意味着模型要对每个心搏负责,波动被保留下来,误差可以在时间轴上量化。这份数据属于后者:参考设备给出的是连续血压波形,每个心搏都能切出一个收缩压、一个舒张压、一个平均压。

逐搏标签也带来了新的麻烦。心搏切分本身有误差——参考波形在脉搏微弱处可能被误切成两个搏或漏掉一个搏。这种误差不会体现在数值上,只会体现为时间轴上的错位,而被错位后的样本与阻抗波形配对后就成了一对错误的监督信号。官方没有提供心搏位置的标注文件,只提供了连续波形,切分需要使用者自己做。

4.2 特征是被定义好的,不是被学习出来的

官方的建模流程没有走端到端深度学习的路线,而是走"特征工程 + 集成回归"。这与很多现代论文的取向相反,值得单独说清楚。

特征的基础是每搏阻抗波形上的四个特征点:舒张期峰值、最大斜率点、收缩期足点、以及反折点。官方给出了这几个点的几何定义——舒张期峰值对应舒张压,最显著的极小值对应收缩压,收缩期足点由切线交点确定,反折点由二阶导数的零点确定。再由这四个点派生出最多五十个特征,分四组:传播时间、时间位置、幅度、面积。

特征组 来源 生理对应
传播时间 相邻通道之间的时间差 脉搏波速度,与血管弹性及血压相关
时间点 每个通道的特征点时刻 心脏收缩与反射波的时序
幅度 各特征点相对基线的差值 反射波强度,与远端阻力有关
面积 波形在区间内的积分 外周阻力与每搏输出量的综合表现

这个特征体系的优点是可解释:每个特征都能对应一个生理量。缺点是依赖特征点的准确提取,而特征点在信号质量差时(运动、接触不良)容易错位,一个错位的点会污染整个特征组。后续想用深度学习替代这套流程的研究者,可以把这套特征当作对照基线,也可以当作辅助输入。

4.3 案例:受试者 1 的第四天

整个数据集里最有意思的一处,是受试者 1 的第二次采集。官方在目录里给它单独的文件夹,时长四十分钟,只有抓握冷压与瓦氏两种范式,没有休息期后的复测,也没有走动或爬楼。它存在的唯一理由是回答一个具体问题:隔了数日,个体的阻抗波形与血压之间的关系是否还稳定。

这个案例在官方材料里被当作评价设置之一——用首日的抓握与瓦氏数据训练,用第四天的抓握数据测试。它给出的证据强度有限:一个受试者、一次复测、四十分钟。但它的存在本身说明了这条技术路线的核心隐忧:如果个体关系不稳定,那么"一次标定、长期使用"的产品假设就不成立。

§4.3 的案例在后文还会被引用。在讨论跨日泛化(§7.3)、讨论标定策略(§9.1)、以及讨论这份数据能支撑什么结论(附录 E)时,它是唯一可以拿出来的直接证据。

4.4 两路 PPG 的真正用途

很多人看到数据里有 PPG,第一反应是把 PPG 当成第二个输入通道做融合。这在技术上可行,但官方设计的用意不是这个。

官方的说明是:两路 PPG 用来精确相关 XL 板与 Finapres 设备之间的事件时刻。一台设备测手腕阻抗,另一台测手指血压,两者之间没有任何硬件同步,只能靠同一个生理事件——同一个心搏——在两条信号上的出现时刻来对齐。XL 板的 PPG 以一千二百五十赫兹采集,Finapres 的 PPG 以七十五赫兹采集,两者形态一致但时间分辨率差了十几倍,所以对齐的精度受限于低采样率的那一路。

用途 是否官方设计意图 可行性
设备间时间对齐 是 可直接使用,精度受 75 Hz 通道限制
作为额外输入通道 否 可做,但会引入与阻抗高度共线的信息
单独做 PPG 血压模型 否 可做,数据量仅够个体内验证
做阻抗与光学的模态对照 部分 可做,这是它被低估的用法(§1.4)

把 PPG 当作输入通道这件事,需要想清楚一件事:阻抗与 PPG 都反映了同一个脉搏事件,两者的信息高度重叠。融合可能提升鲁棒性(一条路径受扰时另一条还能用),也可能只是把同一信息喂了两遍。想清楚这个区别,比直接拼接两个通道更重要。

4.5 电极形态带来的一个隐性约束

石墨烯纹身的贴附方式决定了它的一次性属性。薄膜电极自吸附在皮肤上,取下后难以可靠复贴,位置也难以复原。这意味着每一次采集的电极位置都是新的。

这个约束在使用数据时有一个直接后果:不同采集日之间的信号差异,无法区分是生理变化还是电极位置的细微变化。受试者 1 的第四天复测(§4.3 的案例)就同时包含了这两种变化,官方也没有试图把它们分开。如果要研究个体内关系的稳定性,这个混杂必须先承认。

同样的问题也存在于同一采集日内的不同试次之间。如果中途重新贴过电极,试次之间的信号基线会跳变。官方没有说明各试次之间是否重新贴附,这一点在材料里查不到,只能当作不确定处理。

§5 怎么把它读进内存

5.1 先确认能不能下载

官方页面在文件区显示了一条限制提示:数据在当前地区因法律或政策限制不可见。直接访问文件目录会返回 403。这不是链接写错,是访问控制。

访问层级 官方声明 实际遇到
项目页面 任何人可访问 可访问
文件目录 受 ODC-BY 1.0 许可约束,任何人可访问 部分地区返回 403
配套代码仓库 公开 可访问,与数据访问无关

遇到 403 时,可行的做法是从允许的地区访问、走机构网络、或者直接联系发布者。不要试图用非官方镜像替代,镜像的来源与完整性都无法验证。

5.2 把目录树走一遍

拿到数据后,第一件事不是读文件,是把目录结构列出来。这一步能避免后面所有的文件遗漏。

#-- 列出所有试次目录与其中的文件,统计每个试次的分段数
import os
from collections import defaultdict

ROOT = "bp-graphene-bioimpedance/1.0.0"

trials = defaultdict(lambda: defaultdict(list))
for dirpath, dirnames, filenames in os.walk(ROOT):
    for fn in filenames:
        if not fn.startswith("data_trial_"):
            continue
        rel = os.path.relpath(dirpath, ROOT)
        parts = fn.replace(".csv", "").split("_")
        #-- 文件名形如 data_trial_bioz_01,倒数第二段是数据类型
        dtype, idx = parts[-2], parts[-1]
        trials[rel][dtype].append(idx)

for trial in sorted(trials):
    seg = {k: len(v) for k, v in trials[trial].items()}
    print(trial, seg)

输出的每一行是一个试次。分段数大于一的信号必须全部读,少读一段就会少一段连续记录。

5.3 按序号拼接一个信号

拼接的关键是验证时间戳是否连续。官方没有提供全局索引,只能靠时间戳自查。

#-- 读取某个试次的单个信号的全部片段,按序号拼接并检查时间连续性
import os
import pandas as pd

def load_signal(trial_dir, dtype):
    files = sorted(
        f for f in os.listdir(trial_dir)
        if f.startswith(f"data_trial_{dtype}_") and f.endswith(".csv")
    )
    frames = [pd.read_csv(os.path.join(trial_dir, f)) for f in files]
    df = pd.concat(frames, ignore_index=True)
    dt = df["timestamp"].diff()
    gaps = df.loc[dt > dt.median() * 2, "timestamp"]
    return df, gaps

df, gaps = load_signal(os.path.join(ROOT, "subject3_day1", "HGCP_2"), "bioz")
print(df.shape, "断点数", len(gaps))

如果断点数明显多于零,说明分段之间存在间隔,或者某些分段的顺序不是按时间排列的。这两种情况都会影响后续的特征提取。

5.4 把两条信号对齐

阻抗与参考血压的采集率不同、起点也不同,需要按时间戳重采样到公共时间轴。

#-- 以阻抗为基准,把参考血压重采样到同一时间轴
import numpy as np
import pandas as pd

bioz = df.set_index("timestamp")
bp_df, _ = load_signal(os.path.join(ROOT, "subject3_day1", "HGCP_2"), "finapresBP")
bp = bp_df.set_index("timestamp")["finapresBP"]

t0, t1 = max(bioz.index.min(), bp.index.min()), min(bioz.index.max(), bp.index.max())
grid = np.arange(t0, t1, 1 / 1250)
bp_on_grid = np.interp(grid, bp.index.values, bp.values)
bioz_on_grid = np.stack([np.interp(grid, bioz.index.values, bioz[c].values)
                         for c in bioz.columns], axis=1)
print(bioz_on_grid.shape, bp_on_grid.shape)

这里用的是线性插值,足够做形态学观察。如果需要做脉搏传播时间的精细估计,插值方式会直接影响结果,应该改用保相位的重采样。

5.5 切出逐搏样本

参考血压波形给了逐搏标签的来源。切分需要一个可靠的心搏检测器,简单起见可以用参考血压自身的峰谷。

#-- 用参考血压的峰谷切分心搏,构造逐搏样本表
from scipy.signal import find_peaks

smooth = pd.Series(bp_on_grid).rolling(25, center=True).mean().values
peaks, _ = find_peaks(smooth, distance=int(0.3 * 1250))
troughs, _ = find_peaks(-smooth, distance=int(0.3 * 1250))

beats = []
for a, b in zip(peaks[:-1], peaks[1:]):
    lo = troughs[(troughs > a) & (troughs < b)]
    if len(lo) == 0:
        continue
    beats.append({
        "peak": a,
        "sbp": smooth[a],
        "dbp": smooth[lo[0]],
        "bioz_win": bioz_on_grid[a:b],
    })
print("心搏数", len(beats))

官方没有提供心搏位置标注,所以这一步的结果因实现而异。任何基于这份数据的误差数字,都与心搏切分方式有关,报告时应写明。

5.6 复现官方评价设置的最小划分

官方的五套评价设置里,最容易复现的是打乱十折与不打乱十折。前者在受试者内随机切分,后者按时间顺序切分。

#-- 受试者内十折:打乱与不打乱两种方式
import numpy as np

def fold_split(n, shuffled, seed=0, k=10):
    idx = np.arange(n)
    if shuffled:
        rng = np.random.default_rng(seed)
        rng.shuffle(idx)
    return np.array_split(idx, k)

for shuffled in (True, False):
    folds = fold_split(len(beats), shuffled)
    print("打乱" if shuffled else "按时间", [len(f) for f in folds])

两种划分的差别是实质性的:打乱之后,相邻心搏会分别落在训练与测试两侧,模型可以从中获益,得到更乐观的误差。使用时应同时报告两个数字,就像官方做的那样。

§6 它与库内其他血压资源的区隔

6.1 三条原理,三份数据,三个用途

库内已有的血压类资源可以按原理归类,这一份是电学法的代表。

资源 原理 规模 参考血压 典型用途
本数据集 腕部生物阻抗 7 人 / 8 次采集 Finapres 连续波形 原理验证、逐搏建模
大样本 PPG 基准库 光学 PPG + ECG 数千人 / 数百万片段 有创动脉压或袖带 通用模型训练与基准评测
便携式 ECG+PPG 库 光学 PPG + 心电 近千人 袖带单点读数 设备级验证、跨设备泛化
动物血压记录 有创动脉压 十余只动物 有创测量本身 动物模型、生理机制

这张表的排列顺序不是优劣,是用途分工。要训练一个能在人群中工作的模型,应该用大样本库;要验证一个新原理是否成立,应该用这份数据;要研究跨设备一致性,便携库更合适。

6.2 它和光学路线的确切分界

光学与电学的分界不在"谁更准",而在"误差来自哪里"。

PPG 的误差主要来自光学路径的变化:肤色决定了入射光的衰减,接触压力改变了毛细血管的排空程度,环境光引入直流偏置。这三者在同一受试者身上也会随时间变化,因此 PPG 模型在长期佩戴时会出现漂移。

生物阻抗的误差主要来自电学路径的变化:电极与皮肤的接触阻抗、汗液引起的导电性改变、运动导致的电极相对位移。这三者同样随时间变化,因此阻抗模型也存在漂移。

两条路线的误差来源不重叠,这意味着融合在原理上有价值(§4.4)。但融合的前提是两路信号在同一时间轴上,而这份数据的时间对齐精度受限于七十五赫兹的参考 PPG 通道。

6.3 和袖带法差在哪

袖带法是唯一给出绝对的、可溯源的毫米汞柱读数的方法。它的读数可以直接用于诊断,因为标准是围绕它建立的。

无袖带方法(无论光学还是电学)给出的都是相对值,需要通过标定与回归映射到袖带上。这个映射的性质决定了无袖带方法的可信度:如果映射是线性的且稳定的,那么一次标定就够了;如果映射随生理状态变化,那么就需要频繁重新标定。

这份数据里的映射,是非线性的且个体化的。官方用集成回归模型去拟合,并且明确说需要针对每位受试者单独训练。这等于承认了映射不够稳定,需要个体校准。

维度 袖带法 本数据集所代表的电学路线
读数性质 绝对值,可溯源 相对值,需回归映射
连续性 离散 连续
标定需求 无需 个体标定
主要误差源 袖带尺寸、听诊或示波算法 电极接触、运动、个体差异
标准适用 有成熟标准 标准化仍在演进

6.4 检索路径

在站内找相关资源,可以用以下几组标签与关键词的组合。

想找什么 建议检索词 预期命中
同为无袖带血压的资源 无袖带、cuffless、血压估计 大样本基准库、便携库
同为可穿戴生理信号 可穿戴、生理信号、时序信号 多模态可穿戴数据集
同为生物阻抗 生物阻抗、bioimpedance、阻抗 数量很少,可形成独立簇
同为方法学小样本库 原理验证、小样本、单中心 与大型基准形成对照

站内的内部链接是按标签相关度计算的,因此这份数据最可能与"可穿戴"与"心血管"两个簇相邻,而不是与"影像"或"文本"相邻。做内链规划时,应把它放在生理信号的路径下,而不是放在心血管疾病的临床路径下。

§7 质量评估与局限性

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

在给这份数据打分之前,必须先纠正一个常见的误判:把它的缺陷当成"做得不够好"。

七名受试者、单中心、单次数小时——这些不是疏漏,是原理验证研究的定义特征。一份方法学数据集的合格标准,与一份基准数据集的合格标准不是同一套尺子。方法学数据集要被检验的是测量链是否完整可查、结论是否可复现、边界是否讲清楚;基准数据集要被检验的是规模、代表性、评测协议是否规范。

用基准的尺子去量它,会得出"规模严重不足"的结论,这个结论本身没错,但会遮住真正需要看的东西:它的测量链写得很细,它的评价设置列了五种,它的局限性在正文里被明确承认为个体标定依赖。以方法学数据集的尺子看,它是一份合格的档案。

下面五节的评分,用的是方法学尺子。如果要用它做基准任务,请直接跳到 §7.4 的外部验证矩阵,那里给出了它无法替代大样本库的具体场景。

7.1 五维评分

DAIMS 是数据集的五维评估框架,分别看可发现性、可访问性、互操作性、可复用性与数据质量。

维度 分数 依据
可发现性 4 / 5 PhysioNet 主页有独立项目页,带 DOI 与完整引用格式;标题含关键词清晰
可访问性 3 / 5 声明开放许可,但文件区在部分地区不可见,实际获取受阻
互操作性 2 / 5 数据为 CSV,无标准格式;无数据字典文件;元信息只存在于目录名
可复用性 4 / 5 配套算法开源,方法参数完整,复用路径清晰
数据质量 3 / 5 测量链完整,参考设备医疗级;但样本量小、无标注文件、无质量标记

互操作性得分低是这套数据结构决定的。CSV 本身不是问题,问题在于没有任何机读的元数据文件:受试者信息、范式定义、分段对应关系,全部要靠人读文档再从目录名推断。这对自动化处理管线不友好,也容易在跨团队复用时产生口径分歧。

可访问性的分数低,不完全取决于发布方。开放许可与地区可见性是两件事,后者不受数据集本身控制,但会直接影响第一次使用的体验。

7.2 数据质量的实际边界

数据质量的评价要分三个层面看。

信号层面,质量是好的。阻抗通道由自研板卡采集,二十四位分辨率、九十三点七五千赫采样、解调后截止六赫兹的低通,这些参数说明系统在设计时就考虑到了要保留高频细节。官方给出的精度指标是均方根误差小于一毫欧,这个数字远小于目标信号的幅度,说明噪声不是主要限制。

标签层面,质量受限于参考设备。Finapres 是医疗级连续血压设备,但它测的是手指的血压,而建模的目标是臂部的血压。官方在方法部分明确说了这一点:方法提供的是臂部血压,因为回归训练使用的是臂部血压数据。手指与臂部之间存在压差,压差本身随体位与生理状态变化。这个换算误差不会体现在任何指标里,但会进入每一个标签。

组织层面,质量受限最明显。七个人、八次采集、单中心,任何以这些人为基础统计出来的数字,其置信区间都很宽。官方给出的血压点总数接近两万,看起来不少,但这些点来自七个人,独立的生理状态数远少于点数。

7.3 已知的、可枚举的偏差

偏差 成因 影响
人群偏差 二十余岁健康同校受试者 老年、肥胖、高血压人群的阻抗特性可能完全不同
体位偏差 实验中以坐姿为主,缺少卧姿与站立的长时记录 体位性血压变化无法建模
环境偏差 实验室环境,温度与湿度受控但未记录 无法校正环境对阻抗的影响
电极偏差 每次采集新贴附电极,位置未经影像定位 跨采集日的信号差异混杂了电极位置变化
参考偏差 指套血压换算为臂部血压 标签中含未量化的压差误差
时间偏差 单次数小时,跨日仅一例 昼夜节律与长期漂移无法评估
运动偏差 运动段存在但未标注起止 运动伪迹无法被自动剔除或单独评估
选择偏差 受试者 7 只有骑车范式 该受试者与其余六人的可比性有限

最后一条常被忽略。受试者 7 的数据只包含骑车范式,没有抓握与瓦氏动作。如果在建模时把七个人的数据混在一起训练,受试者 7 的样本会分布得很特殊——运动期的血压形态与抓握冷压差别很大。看似微不足道,实际上会显著影响按受试者做交叉验证时的结果。

跨日泛化是另一个值得单独说的点。§4.3 的案例(受试者 1 的第四天)是这份数据里唯一的跨日证据,样本量为一。用它得出的结论,无论正反,都只能算一个线索。想研究个体关系的长期稳定性,这份数据不够;想找一个设计思路,它提供了一个可以借鉴的协议。

7.4 外部验证矩阵

验证场景 这份数据能否支撑 缺少什么
个体内逐搏建模 能 无,这是它的主用途
跨个体泛化 基本不能 人数太少,无法估计个体间方差
跨设备泛化 不能 只有一种采集设备
跨中心泛化 不能 单一中心
跨人群泛化 不能 人群单一
长期漂移 勉强 只有一个跨日样本
运动鲁棒性 有限 运动段未标注
与光学路线的对照 能 需要研究者自己设计对照协议

这张矩阵的读法很简单:行是"你想验证什么",列是"它能不能"。能支撑的场景集中在个体内,超出个体范围的场景基本都不能。这不是缺点清单,是用途边界清单。

7.5 它为何能持续:稀缺性来自原理而非规模

公开的连续血压数据不少,公开的生物阻抗原始波形很少。这正是它能长期被引用的原因:规模可以被新数据超越,原理的空缺不能。

要复制一份同样的数据,需要石墨烯电极的制备能力、自研的低噪声多通道阻抗采集板、以及一台医疗级连续血压设备。这三样东西的组合门槛,远高于一份 PPG 数据的采集门槛。前者需要材料学与电路设计的交叉能力,后者只需要一台商用心电与脉搏设备。这种门槛决定了它的供给不会快速增长,也决定了它在相当长时间内会是电学法唯一的公开原始档案。

数据集的寿命还与它被引用的方式有关。作为方法学的参照点被引,它不会因为新数据出现而失效;作为训练集被引,它会很快被更大的库取代。前一种引用方式目前占主导,这是它可持续的实际基础。

§8 生态位与历史

8.1 从实验室到公开库

这条技术路线的公开线索可以按时间排一下。

时间 事件 意义
2021 年 石墨烯电子纹身的制备与表征方法发表于 Nature Protocols 确立了电极的可复现制备流程
2022 年 6 月 本数据集在 PhysioNet 发布 首次公开阻抗血压的原始波形
2022 年 配套论文发表于 Nature Nanotechnology 给出方法与性能指标,确立学术引用点
2023 年 出现以软电子界面改进连接的后续工作 说明这条路线仍在演进

这条时间线说明一件事:这份数据集的发布不是孤立的,它前面有一篇方法学论文支撑电极的可复现性,后面有配套论文提供结果。三篇合起来构成一条完整的证据链,缺任何一环,数据的可复用性都会打折。

8.2 它在研究版图上的位置

如果把无袖带血压研究按输入模态排一张图,这份数据占据的是"电学 - 腕部 - 逐搏"这一格。

模态 位置 代表资源类型
光学 指尖、手腕背、耳后 大样本 PPG 库
电生理 胸导联 心电与脉搏波配对库
机械 腕部加压、胸壁 压力传感与超声
电学 腕部、手臂 生物阻抗,本数据集所在格

这一格的资源数量最少,原因不在需求,而在采集门槛。阻抗测量需要向人体注入电流,涉及安全与噪声设计,通用设备没有现成方案;相比之下,PPG 只需要一个发光管和一个光电管,几乎任何团队都能搭。

8.3 后来者可能怎么用它

从公开的引用方式看,后续研究对它的使用大致有三类。

第一类是当作基线。新的阻抗传感器或新的电极材料,需要在一个公认的公开数据上验证,这份数据是最直接的选择。

第二类是当作方法参照。它的信号处理链写得很细,从解调、滤波到特征提取都有参数,后来者可以直接沿用或改进。

第三类是当作对照。做光学路线的团队,可以用它来论证"在同样的人群与协议下,阻抗路线能做到什么程度"。

这三类用法都不需要它规模大,只需要它够透明。这也是它设计时的取向。

8.4 一条容易走偏的类比

常见一种类比:把生物阻抗比作"用电代替光的 PPG"。这个类比在工程上方便,在物理上是错的。

PPG 测的是血容量变化引起的光吸收变化,阻抗测的是血容量与血液电导率变化引起的电阻抗变化。两者都与血容量相关,但阻抗还额外受到血管直径变化的影响——血管扩张时,血液与血管壁的截面积比改变,阻抗的变化方向与幅度都与单纯的血容量变化不同。这意味着阻抗波形与压力波形的关系,与 PPG 波形与压力波形的关系,不是同一个函数。

走偏的后果是:把 PPG 的特征工程直接搬到阻抗上,会得到看似能跑通、实则漏掉了阻抗特有信息的模型。阻抗路线的独特价值恰在于那两个额外维度——血管直径与组织电导率,这也是它能做到不受肤色影响的原因。

§9 使用指引

9.1 三种角色的路径

角色 目标 建议路径
传感研究者 验证新电极或新板卡 先复现官方在单个受试者上的结果,再换成自己的设备,只在同一受试者内比较
算法研究者 探索阻抗特征与血压的关系 从官方四特征点出发,逐步增加特征,用不打乱十折评估
临床或产品评估者 判断这条路线是否够用 直接看边界(§1.6)与外部验证矩阵(§7.4),不必下载全量

三种角色对数据的需求量差别很大。传感研究者只需一两个受试者的数据就能完成设备对照;算法研究者需要尽可能多的受试者来检验个体差异;产品评估者甚至不需要原始数据,读方法部分就够。

9.2 一条最短的可用流程

如果只想在一小时内看到第一张图,按下面的顺序做即可。

#-- 一、编译环境
python3.11 -m venv venv && source venv/bin/activate
pip install pandas numpy scipy matplotlib

#-- 二、确认目录结构,挑一个试次
python3.11 -c "import os; print('\n'.join(sorted(os.listdir('bp-graphene-bioimpedance/1.0.0'))))"

#-- 三、读一段阻抗与血压,画在同一张图上
python3.11 - <<'PY'
import pandas as pd, matplotlib.pyplot as plt
z = pd.read_csv("bp-graphene-bioimpedance/1.0.0/subject3_day1/HGCP_2/data_trial_bioz_01.csv")
b = pd.read_csv("bp-graphene-bioimpedance/1.0.0/subject3_day1/HGCP_2/data_trial_finapresBP_01.csv")
fig, ax = plt.subplots(2, 1, sharex=True)
ax[0].plot(z["timestamp"], z.iloc[:, 1], lw=0.6)
ax[1].plot(b["timestamp"], b.iloc[:, 1], lw=0.6)
plt.savefig("first_look.png", dpi=150)
PY

这张图能立刻回答三个问题:阻抗波形里能否看出与血压同步的搏动、两者的时间轴是否对得上、信号的基线是否稳定。三个问题都过关,再往下做特征提取。

9.3 引用方式

引用这份数据时,需要一个数据集引用与一个论文引用。官方在项目页给出了标准的数据集引用格式,包含作者、年份、版本号与 DOI。论文引用应使用 Nature Nanotechnology 的 DOI。

引用对象 标识 使用场景
数据集 10.13026/ce62-pc98(版本 1.0.0) 提到原始波形、文件结构、数据规模时
数据集最新版 10.13026/qcc8-n557 指向最新版本而非固定版本时
配套论文 10.1038/s41565-022-01145-w 提到方法、精度指标、临床结论时

另外,PhysioNet 要求在使用任何数据时附上其平台的标准引用。这一点常被忽略,但在学术规范上是明确要求的。

9.4 许可与二次分发

ODC-BY 1.0 允许商业使用、允许修改、允许再分发,条件是署名。署名的方式包括标注来源、保留原许可声明、以及说明是否做了修改。

行为 是否允许 附加条件
用于商业产品训练 允许 需署名
修改后发布 允许 需注明修改内容
与其他数据合并 允许 合并后的数据仍需对原始部分署名
不署名直接使用 不允许 —

这里的"署名"具体要求到什么粒度,许可条文有明确规定:需要指明创作者、标明许可、提供许可链接、说明是否修改。做不到这四条,就不算合规使用。

§10 AI 使用声明

项目 说明
本页信息来源 PhysioNet 官方项目页全文、Europe PMC 收录的配套论文摘要
未使用的方法 未下载数据、未做任何分布统计、未生成图表
数字口径 规模、结构、边界三类数字全部来自官方页面的文字表述
未核实项 文件清单、总体积、各通道的实际数值范围
版本对应 内容对应 1.0.0 版,发布日期 2022 年 6 月 4 日
适用声明 本页不构成任何医疗器械或临床使用建议
利益相关披露 数据集作者在官方页声明持有相关专利并已许可给一家公司
更新机制 官方若发布新版本,规模与结构章节需重新核对

常见误读(避坑清单)

常见说法 实际 证据
这是一个石墨烯材料的数据集 材料只是传感器形态,数据主体是生理信号 官方摘要描述的是血压测量,材料出现在方法部分
它测的是光 主通道是电学阻抗,PPG 仅用于设备对齐 数据类型表列出四类信号及其用途
七个人各测了四小时,所以有二十八小时数据 八次采集,含一次四十分钟的复测,总时长远少于简单相乘 数据目录表逐行给出时长
数据里有两万个独立血压测量 这些是从连续波形切出的逐搏点,独立生理状态远少于点数 官方说明按心搏切分
可以像其他大库一样做随机划分 官方建模是每人一套模型,随机混合会造成泄漏 方法部分列出五种受试者内评价设置
CSV 一个文件就是一个试次的全部数据 同一试次按信号分文件,按序号再切分 数据描述明确说明分段
它不受肤色影响,所以肤色问题不存在 官方这样陈述,但未公布肤色分层数据,无法从数据验证 背景部分只有一句陈述
四通道阻抗是四份独立数据 两根动脉各两处,配对使用才有脉搏传播时间 通道表给出配对关系
参考血压就是真实血压 指套设备的读数换算为臂部血压,存在压差误差 方法部分说明训练用臂部血压数据
平均四小时与表内时长一致 两者口径不一致,表内最短四十分钟 正文平均与数据目录表并列可见

FAQ

Q1:生物阻抗测血压与 PPG 测血压,最本质的差别在哪?
测的物理量不同。PPG 测光吸收随血容量的变化,阻抗测组织电阻随血容量与血管直径的变化。前者受光学路径影响大,后者受电极接触影响大。两者都需要回归映射到毫米汞柱,都不是直接读数。

Q2:为什么只有七个人,还能发表在很好的期刊上?
因为论文回答的是"这个原理成不成立",不是"这个原理在人群上有多准"。原理验证的样本量要求与基准评测不同。官方自己也把研究定性为原理验证。

Q3:数据里为什么有两路 PPG?
一路来自 XL 板,一路来自 Finapres。两台设备没有硬件同步,只能靠同一个心搏在两条信号上的时刻对齐。两路采样率不同,对齐精度受限于低的那一路。

Q4:四通道阻抗是怎么排布的?
桡动脉与尺动脉各取两处:一处靠近手腕,一处靠近前臂中段。同一根动脉的两处配对,可以算出脉搏沿动脉的传播时间,这是建模的关键特征。

Q5:能不能用它训练一个跨人群的模型?
不建议。七名受试者且都是二十余岁健康人,个体差异的信息量不足以支撑泛化。跨人群建模应使用大样本库,把它当作外部验证会更合适。

Q6:为什么文件被切成很多小 CSV?
官方说明是为了避免单个文件过大。同一试次同一信号切成编号依次接续的多个文件,读取时必须全部拼接,否则会静默丢掉后半段。

Q7:参考血压用的是袖带吗?
主要参考是 Finapres NOVA,一款指套式连续血压设备,同时佩戴了臂式袖带作为辅助参照。训练标签主要来自指套设备的连续波形。

Q8:有没有心搏位置的标注文件?
没有。官方只提供连续波形,逐搏切分需要使用者自行完成。不同的切分方式会产生不同的样本集合,报告误差时应说明方法。

Q9:为什么说它不适合做长期漂移研究?
只有受试者 1 有跨日复测,样本量为一(见 §4.3 的案例)。一次复测不足以估计漂移的分布,只能提供一个设计思路。

Q10:它在某些地区打不开怎么办?
官方文件区在部分地区返回 403,属于访问控制。可行路径是从允许的地区访问、走机构网络,或联系发布者。不要使用来源不明的镜像。

Q11:许可允许商用吗?
ODC-BY 1.0 允许商业使用,条件是署名、标明许可、提供许可链接、说明是否修改。四条都满足才算合规。

Q12:如果只想引用结论不想用数据,怎么引?
引配套论文的 DOI,同时按 PhysioNet 要求附上平台引用。若只引数据集本身的规模或结构,用数据集 DOI 并注明版本。

术语表

术语 含义
生物阻抗(Bio-Z) 组织对交流电流的阻碍程度,随血容量与血管直径变化
石墨烯电子纹身(GET) 原子级厚度石墨烯薄膜构成的电极,自吸附于皮肤
无袖带血压 不依赖袖带加压的无创血压测量方式
脉搏传播时间(PTT) 脉搏沿动脉两个位置传播所需的时间
脉搏波速度(PWV) 脉搏沿动脉传播的速度,与血管弹性相关
抓握冷压(HGCP) 抓握运动叠加冰水浸泡,用于诱发血压上升
瓦氏动作(Valsalva) 屏气用力,造成胸腔内压骤升与血压波动
逐搏血压 每个心搏对应一组收缩压、舒张压与平均压
平均动脉压(MAP) 一个心动周期内的平均血压
解调 把调制信号与载波相乘再低通,恢复包络的过程
载波频率 注入人体的交流电流的频率
抗混叠滤波 采样前滤除高于奈奎斯特频率的成分
仪表放大器 高共模抑制比、高输入阻抗的差分放大器
特征点 波形上用于定义血压关系的几何位置
反折点 反射波与主波叠加处形成的拐点
窗口平均 用相邻多个心搏的平均值平滑逐搏变化
集成回归 多个弱学习器加权组合的回归模型
十折交叉验证 把数据切十份,轮流以一份测试
个体标定 针对每个受试者单独训练模型参数
臂部血压 上臂测量的血压,临床标准参考
指套血压 手指连续测量的血压,与臂部存在压差
交叉验证泄漏 同一来源的数据同时出现在训练与测试两侧
原理验证 以少量样本证明技术可行的研究阶段
开放数据许可 规定数据使用条件的法律条款,本数据为 ODC-BY 1.0
数据字典 描述字段含义的机读文件,本数据未提供

附录 A:核心数字核对表

项 值 来源 来源层级
受试者人数 7 官方摘要 官方页面
采集日数 8 数据目录表 官方页面
单次最长时长 320 分钟 数据目录表 官方页面
单次最短时长 40 分钟 数据目录表 官方页面
平均监测时长 4 加减 1 小时 官方摘要 官方页面
血压点总数 约 18667 官方摘要 官方页面
单人血压点数 约 2500 加减 600 官方摘要 官方页面
测试用血压点数 约 250 加减 60 方法部分 官方页面
阻抗通道数 4 数据描述 官方页面
阻抗采样率 1250 Hz 数据描述 官方页面
参考血压采样率 200 Hz 数据描述 官方页面
参考 PPG 采样率 75 Hz 数据描述 官方页面
采集卡位数 24 位 方法部分 官方页面
采集卡采样率 93.75 kHz 方法部分 官方页面
单次抓握冷压时长 约 450 秒 方法部分 官方页面
舒张压误差 0.2 加减 4.5 mmHg 论文摘要 论文摘要
收缩压误差 0.2 加减 5.8 mmHg 论文摘要 论文摘要
监测时长比较 超 300 分钟,长一个数量级 论文摘要 论文摘要
数据集 DOI 10.13026/ce62-pc98 项目页 官方页面
论文 DOI 10.1038/s41565-022-01145-w Europe PMC 论文摘要
许可 ODC-BY 1.0 项目页 官方页面
文件总体积 官方未公布 — 未核实

附录 B:数字的来源分层

层级 定义 本页涉及的数字
官方页面 PhysioNet 项目页的正文、表格、方法描述 受试者数、采集日、时长、通道、采样率、血压点总数、许可、DOI
论文摘要 Europe PMC 收录的配套论文摘要 舒张压与收缩压误差、监测时长的数量级比较
未核实 官方与论文均未给出,或本页无法访问 文件总体积、各通道数值范围、肤色分层、运动段起止标注、试次间是否重贴电极

三层之间不交叉升级。论文摘要里的误差数字,不能反过来当作数据集的字段说明;官方页面里的规模数字,也不能用论文的性能结论去补足。使用时若需要跨层引用,应显式说明。

附录 C:完整参考文献

编号 条目 标识
1 Ibrahim B, Kireev D, Sel K, Kumar N, Akbari A, Jafari R, Akinwande D. Continuous Cuffless Monitoring of Arterial Blood Pressure via Graphene Bioimpedance Tattoos. PhysioNet, v1.0.0, 2022 DOI 10.13026/ce62-pc98
2 同题论文,Nature Nanotechnology, 2022 DOI 10.1038/s41565-022-01145-w
3 Kireev D 等,石墨烯电子纹身的制备、表征与应用,Nature Protocols, 2021 官方引用第 13 条
4 Finapres NOVA 产品资料 官方引用第 14 条
5 配套算法仓库 TAMU-ESP/Graphene_BP 官方引用第 15 条
6 Stergiou GS 等,血压测量设备验证的通用标准,Hypertension, 2018 官方引用第 4 条
7 PhysioNet 平台引用(平台要求) 项目页引用区
8 Texas A&M 伦理批件 IRB2017-0335D 官方伦理声明
9 UT Austin 伦理批件 2018-06-0058 官方伦理声明

附录 D:任务代码

下面这段代码把 §5 的几步串起来,输入一个试次目录,输出逐搏样本表与一份质量摘要。它假设已按 §5.3 完成拼接。

#-- 端到端:单试次 -> 逐搏样本表 + 质量摘要
import os
import numpy as np
import pandas as pd
from scipy.signal import find_peaks, butter, sosfiltfilt

def bandpass(x, fs, lo, hi, order=2):
    sos = butter(order, [lo, hi], btype="band", fs=fs, output="sos")
    return sosfiltfilt(sos, x)

def build_beats(trial_dir, fs=1250):
    bioz, _ = load_signal(trial_dir, "bioz")
    bp, _ = load_signal(trial_dir, "finapresBP")
    bioz = bioz.set_index("timestamp")
    bp = bp.set_index("timestamp").iloc[:, 0]

    t0 = max(bioz.index.min(), bp.index.min())
    t1 = min(bioz.index.max(), bp.index.max())
    grid = np.arange(t0, t1, 1 / fs)
    z = np.stack([np.interp(grid, bioz.index.values, bioz[c].values)
                  for c in bioz.columns], axis=1)
    p = np.interp(grid, bp.index.values, bp.values)

    zf = np.stack([bandpass(z[:, i], fs, 0.5, 8) for i in range(z.shape[1])], axis=1)
    smooth = pd.Series(p).rolling(25, center=True, min_periods=1).mean().values
    peaks, _ = find_peaks(smooth, distance=int(0.3 * fs))
    troughs, _ = find_peaks(-smooth, distance=int(0.3 * fs))

    rows = []
    for a, b in zip(peaks[:-1], peaks[1:]):
        lo = troughs[(troughs > a) & (troughs < b)]
        if len(lo) == 0:
            continue
        win = zf[a:b]
        ptt = [np.argmax(np.diff(win[:, i])) - np.argmax(np.diff(win[:, j]))
               for i, j in [(1, 0), (3, 2)]]
        rows.append({
            "t_start": grid[a],
            "sbp": smooth[a],
            "dbp": smooth[lo[0]],
            "ptt_radial": ptt[0] / fs,
            "ptt_ulnar": ptt[1] / fs,
            "beat_len": len(win) / fs,
        })
    df = pd.DataFrame(rows)
    over = (df["sbp"] - df["dbp"]).between(5, 120).mean()
    print(f"心搏 {len(df)},脉压合理占比 {over:.3f},时长 {t1 - t0:.1f} 秒")
    return df

beats_df = build_beats("bp-graphene-bioimpedance/1.0.0/subject3_day1/HGCP_2")
print(beats_df.describe().loc[["mean", "std", "min", "max"]])

输出的脉压合理占比是一个粗筛指标。如果这个比例明显偏低,通常说明心搏切分出了问题,而不是受试者血压异常。在正式分析前,这一步的质量筛可以过滤掉大部分切分错误。

附录 E:如果只记五件事

  1. 它是电学原理,不是光学。四通道腕部阻抗是主通道,PPG 只用于设备间对齐。
  2. 它很小:七名二十余岁健康受试者,八次采集,单次数小时。总时长依赖正文平均与目录表两个口径,两者不一致。
  3. 它需要个体标定。官方建模是每人一套模型,同一次采集内留出测试。跨人泛化未经官方验证。
  4. 它的参考血压是指套设备给的连续波形,换算到臂部后存在未量化的压差误差。标签本身不是真值。
  5. 它与 PPG 库、袖带库不是替代关系,而是三条原理中唯一公开原始波形的那一条。用它的场景是原理验证与个体内建模,不是人群基准。

编辑说明

核验时间:2026 年 10 月 28 日。核验方式:逐段读取 PhysioNet 项目页正文(摘要、背景、方法、数据描述、使用说明、伦理、利益声明、文件区与许可区),并用 Europe PMC 检索配套论文摘要。未覆盖内容:文件清单与总体积(文件区在本环境返回 403,官方亦未在正文公布体积)、各通道的实际数值范围、肤色与年龄分层、运动段起止标注、试次之间是否重新贴附电极。两个时长口径(正文平均四小时与目录表内四十分钟至三百二十分钟)并存,本页如实并列,不作裁定。论文摘要中的误差指标与本库数据对应同一次研究,但评价协议细节以官方方法章节为准。文中出现的数值样例仅用于展示文件列结构,不取自任何真实文件。


相关数据集导航

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

  • bpssrat — 共享标签:生理信号 / 心血管疾病 / 时序数据
  • in-gauge-and-en-gage — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • noneeg — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • sleep-accel — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • daphnet-fog — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • big-ideas-glycemic-wearable — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • mhealth — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • uci-har — 共享标签:生理信号 / 可穿戴传感 / 时序数据
  • cebsdb — 共享标签:生理信号 / 可穿戴传感 / 心血管疾病
  • cardiac-accel-canine-porcine — 共享标签:生理信号 / 可穿戴传感 / 心血管疾病

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

返回 AI-Ready 数据集