信息速览
tOLIet 是一份把电极嵌进马桶座圈、从大腿后侧取心电的公开数据集。官方全名 tOLIet: Single-lead Thigh-based Electrocardiography Using Polimeric Dry Electrodes,直译是「用聚合干电极从大腿采集单导联心电」。它由葡萄牙的电信研究所与波尔图大学团队完成,2026 年 2 月以 1.0.1 版挂在 PhysioNet 上,许可为 CC BY 4.0。
它收录的不是常规心电图,而是一个日常物件被改装成传感器之后的原始输出。八十六名志愿者先后坐上同一只智能座圈,座圈内嵌四对干电极,四对电极的表面纹理各不相同,同一次坐姿里四路差分信号同时录下,单次最长五分钟;其中二十三条记录另配一段医院 12 导联心电作为参照。
这份库里最容易被误读的有两处:一是「单导联」不等于某个标准导联,四路信号都没有被映射到 I、II、V 这套体系(§1.2);二是它记录的不是「上厕所时的心电」,受试者是在卫生间或病房里褪去下装、坐上座圈静候几分钟,全程不在真实如厕过程中(§3.4)。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 官方全名 | tOLIet: Single-lead Thigh-based Electrocardiography Using Polimeric Dry Electrodes |
| 名字拆解 | toilet 的中间三字母写作大写 OLI,与卫浴企业 OLI 同名 |
| 中文名 | 马桶座圈单导联大腿心电数据集 |
| 托管平台 | PhysioNet,Open Access 栏目 |
| 版本 | 1.0.1,2026 年 2 月 2 日发布;1.0.0 为 2025 年 6 月 24 日 |
| DOI | 10.13026/411k-1476(v1.0.1);最新版 10.13026/z36n-vk32 |
| 规模 | 86 名葡萄牙籍受试者(女 50 男 36),149 条记录,含重复会话 |
| 每条信号路数 | 4 路差分,另有 6 路未使用的数字与模拟通道 |
| 电极纹理 | 平面、正弦、金字塔、梯形四种 |
| 采样与量化 | 1 kHz,10 位 |
| 前端与滤波 | BITalino,增益一万一千,0.5 至 40 Hz 带通 |
| 单次时长 | 最长五分钟 |
| 参考数据 | 23 条记录配 10 秒 12 导联,GE MAC800 |
| 整包体积 | 未压缩 520.1 MB,ZIP 74.6 MB |
| 许可 | CC BY 4.0(仓库 README 另有更严格表述) |
| 配套论文 | Scientific Data 13(1),2026,DOI 10.1038/s41597-026-06713-6 |
§1 它要解决的具体麻烦
1.1 十二导联只能给你十秒,手环要你天天记得戴
临床心电的困境不在精度,在时长。门诊十二导联只记十秒,间歇性心律失常与阵发性房颤落在十秒之外的概率不低。动态心电补一天,代价是贴电极、连导线、洗澡要拆;手环补数月,代价是用户得记得充电和佩戴。
官方背景段的逻辑是:非传染性疾病已成主要死因,心血管病占其中最大一块,而这类病的早期信号稀疏、间歇。解法不是把设备做得更准,而是把传感器藏进每天必然接触的家具——马桶座圈。人每天会坐上去,不必额外动作,不必充电,也不必在身上贴东西。
这条思路在文献里叫 off-the-person 采集:信号不来自身上的器件,而来自环境中的接触面。手指电极与座椅电极都属这一类;大腿的特殊之处是接触面积大、位置稳定,坐下去就必然贴合。
| 采集方式 | 需要用户做什么 | 单次时长 | 主要代价 |
|---|---|---|---|
| 门诊十二导联 | 到医院、躺下、贴十枚电极 | 十秒 | 覆盖不到间歇事件 |
| 动态心电 | 贴身佩戴一至七天 | 一天以上 | 洗澡与睡眠受影响,依从性下降 |
| 消费级手环 | 记得戴、记得充电 | 数天至数月 | 单导联、位置随手腕变化 |
| 座圈电极 | 坐下 | 数分钟 | 只在特定房间可用 |
四行对比说明:座圈方案的竞争力不在信号质量,在「零动作」。代价是数据形态随之改变——短会话多、人杂、质量参差,现场也无法像诊室那样标准化。
| 概念 | 常被理解成 | 在这份数据里的实际含义 |
|---|---|---|
| 单导联 | 某一路标准导联,如 II 或 V1 | 一对电极之间的电位差,不对应任何标准导联 |
| 干电极 | 不用导电膏的金属片 | 嵌在座圈里的聚合材料电极,靠压力接触皮肤 |
| 不可见心电 | 穿戴式设备的隐形化 | 传感器进入家具,人身上没有任何器件 |
| 参考心电 | 同一时刻的标准记录 | 同一次就诊的 12 导联,十秒,不一定逐点对齐 |
1.2 三条常见的错误期待
第一条,把四路信号当作四导联心电。 A1 到 A4 是座圈上四对电极的输出,差别在表面纹理,不在对应哪个胸导联。当 I、II、III 去算电轴,角度没有生理意义;官方也从未给出导联等效表。
第二条,把它当带诊断标签的病人库。 官方写明部分受试者自述可能有心脏问题,但无一例经专科确认,库里没有一个可当金标准的疾病标签。它的目标是比较四种纹理的信号质量、验证可行性,不是建分类基准。
第三条,以为记录是在真实如厕时完成的。 官方声明数据不在真实使用马桶的过程中采集:座圈装在标准马桶上,受试者褪去下装静坐至多五分钟,有研究人员在场。地点选卫生间或单人病房是为隐私,不是为模拟日常。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 大腿取心的真实信号样本 | 145 条实验信号,四条纹理并行 | 够,这是主用途 |
| 电极纹理对信号质量的影响 | 同一坐姿下四路同时录,纹理已知 | 够,四路互为对照 |
| 与标准十二导联的形态对照 | 23 条记录配十秒参考 | 勉强,只有段级对照 |
| 日常场景心电的可行性论证 | 真实坐姿、真实接触条件 | 够,适合写进可行性章节 |
| 心律失常分类训练 | 无逐搏标签、无确认诊断 | 不够,结构上没有 |
| 心电生物识别的模板研究 | 同一人多次会话,编号可追踪 | 够,重复会话是关键 |
| 长时程心率变异性 | 单次最长五分钟 | 不够,只够短时指标 |
| 消费级产品的算法预研 | 与手环同量级的采样与量化 | 够,条件接近 |
| ST 段或高频成分分析 | 0.5 至 40 Hz 带通切掉两端 | 不够,滤波已经把信息滤掉 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做智能家居健康监测的原型 | 一套真实坐姿下的四路信号,可直接当输入 | 先用四路中质量最好的一路跑通检测,再谈融合 |
| 你在比较干电极的材料或纹理 | 四种纹理同场对照,同一人同一坐姿 | 以同一会话内的四路互比,避免跨人比较 |
| 你在做心电身份识别 | 重复会话可验证模板稳定性 | 只用编号可追踪的多次会话做同人跨会话测试 |
| 你在给可穿戴算法找外部验证集 | 采样与量化水平接近消费级器件 | 明确写出带宽与位深差异,不要与临床库混比 |
| 你在写 off-the-person 的综述 | 一个可引用的公开数据点 | 与手指电极、座椅电极的公开集并列引用 |
| 你在教生理信号处理 | 数据格式简单,噪声真实,适合做第一次实战 | 从读一个文本文件开始,不要先碰 XML |
| 你要一份能训练心律失常模型的数据 | 没有标签 | 换库内带标注的心电词条 |
1.5 一句话判断
它是一份把心电从医院搬到卫生间的可行性证据:四路干电极同场对照,信号粗糙但真实,标签稀薄但现场完整。
1.6 不适合谁:四条边界
四条边界都是硬的。 诊断级分析:10 位量化在 3 毫伏满量程上只有约 2.9 微伏的分辨率,叠加带通,测 ST 偏移的误差可能与信号同量级。导联定位:四路都在大腿与座圈之间,某一路像 II 导联也不能推电轴。疾病分类:无病种、逐搏与随访标签,只能做自监督。人群推断:八十六人、单中心、青年为主,外推超出便利样本容量。
| 边界 | 具体限制 | 越界使用的后果 |
|---|---|---|
| 诊断级分析 | 10 位量化、0.5 至 40 Hz 带通 | 毫伏级形态指标不可靠 |
| 导联定位 | 四路均为大腿差分,无标准导联对应 | 电轴与定位结论无效 |
| 疾病分类 | 无标签、无确认诊断 | 只能做自监督,无法验证 |
| 人群推断 | 86 人便利样本、单中心 | 外推结论不可复现 |
§2 数据构成与规格
2.1 四个目录、三个根文件、两种完全不同的数据格式
解压后是两个数据目录、一个脚本目录,加上元数据表、许可、说明与校验文件。实验信号与参考信号彻底分开,格式也完全不同——前者是 OpenSignals 的制表符文本,后者是 GE 心电机的私有 XML。任何流程都要写两套读取代码。
| 路径 | 类型 | 内容 | 数量 |
|---|---|---|---|
ECG_EXP/ |
目录 | 座圈电极的实验信号文本 | 145 个 txt |
ECG_REF/ |
目录 | 临床 12 导联参考 XML | 23 个 XML |
Script/ |
目录 | 官方读取与特征脚本 | 3 个 py |
DataSet.csv |
文件 | 受试者与记录元数据 | 1 份,含表头 150 行 |
README.md |
文件 | 结构说明与使用提示 | 1 份 |
LICENSE.txt |
文件 | 许可文本 | 1 份 |
SHA256SUMS.txt |
文件 | 逐文件哈希 | 1 份 |
| 格式 | 用于 | 编码 | 单位 | 读取难点 |
|---|---|---|---|---|
| OpenSignals 文本 | 实验四路信号 | 制表符分隔,两行井号头 | 原始整数,需换算 | 头行是 JSON,需跳过 |
| 分号 CSV | 元数据 | 带 BOM,分号分隔 | 岁、千克、厘米 | 表头尾随空格、空列 |
| GE 私有 XML | 12 导联参考 | 单行超长属性 | 微伏 | 波形挤在一个属性里 |
三种格式并列,说明它是各环节工具的原始产物直接归档:保真,但每条流程都得自己写解析,官方那三个脚本只是演示级。
2.2 字段与记录的完整字典
实验文本一共十一列,其中只有一列是序号、四列是信号、六列是空置的辅助通道。列名写在第二行头信息的 JSON 里,而不是表头行,这一点与常见的 CSV 完全不同。
| 列序 | 列名 | 含义 | 实际取值 |
|---|---|---|---|
| 1 | nSeq | 四位循环序号,用于发现丢包 | 0 至 15 反复回绕 |
| 2 | I1 | BITalino 数字输入一 | 恒为 0 |
| 3 | I2 | BITalino 数字输入二 | 恒为 0 |
| 4 | O1 | BITalino 数字输出一 | 恒为 0 |
| 5 | O2 | BITalino 数字输出二 | 恒为 0 |
| 6 | A1 | 平面纹理电极差分信号 | 10 位整数 |
| 7 | A2 | 正弦纹理电极差分信号 | 10 位整数 |
| 8 | A3 | 金字塔纹理电极差分信号 | 10 位整数 |
| 9 | A4 | 梯形纹理电极差分信号 | 10 位整数 |
| 10 | A5 | 未使用的模拟输入 | 恒为 0 |
| 11 | A6 | 未使用的模拟输入 | 恒为 0 |
元数据表只有六列有效信息,后面还挂着十二个完全空置的列,是导出时的残留。文件名里的编号与会话后缀在这一栏里同样出现,构成与文件系统一一对应的键。
| 字段 | 类型 | 说明 | 是否有值 |
|---|---|---|---|
| ID | 文本 | 受试者编号,重复会话带 _1/_2 后缀 | 全部 |
| Age | 整数 | 年龄,岁 | 全部 |
| Weight | 整数 | 体重,千克,表头带尾随空格 | 全部 |
| Height | 整数 | 身高,厘米 | 全部 |
| Gender | 文本 | 取值为 Male 或 Female | 全部 |
| Observations field | 文本 | 自由备注 | 多数留空 |
参考 XML 是 GE 的私有结构,命名空间指向 Sapphire 记录格式,文件语言标记为葡萄牙语。有用信息集中在三类节点:患者信息、设备信息、波形与模板。
| 节点或属性 | 含义 | 备注 |
|---|---|---|
patientInfo/identifier |
受试者标识 | 值为空串,靠文件名对应 |
patientInfo/gender |
性别 | 统一写 U(未知) |
testInfo/acquisitionDateTime |
采集时间 | 字段存在,可为空串 |
device/modelID |
设备型号 | ge:MAC800 |
ecgWaveform[@lead] |
导联名,I 至 V6 | 共 12 个 |
ecgWaveform[@asizeVT] |
波形点数 | 5000 或 600 |
ecgWaveform[@V] |
空格分隔的样本值 | 短整数 |
ecgWaveform[@VT] |
数据类型 | xs:short |
2.3 一条记录的完整解剖
打开任意一个实验文件,前两行是注释(格式声明与一段 JSON 元数据),第三行起是数据:十进制整数,制表符分隔,一行一个采样点。
#-- 第 1 行原文为格式声明:OpenSignals Text File Format. Version 1
#-- 第 2 行原文为单行元数据 JSON,关键字段照录如下
{"sampling rate": 1000, "resolution": [4, 1, 1, 1, 1, 10, 10, 10, 10, 6, 6],
"column": ["nSeq", "I1", "I2", "O1", "O2", "A1", "A2", "A3", "A4", "A5", "A6"]}
9 0 0 0 0 427 511 0 515 0 0
10 0 0 0 0 451 519 0 518 0 0
11 0 0 0 0 487 528 0 519 0 0
12 0 0 0 0 531 537 0 521 0 0
13 0 0 0 0 578 547 0 523 0 0
14 0 0 0 0 625 554 0 524 0 0
15 0 0 0 0 665 560 0 525 0 0
0 0 0 0 0 697 561 0 526 0 0
第一列 nSeq 是这份文件里最容易被误用的字段。它看着像样本序号,实际是一个四位计数器,从 0 走到 15 就回绕,作用只是让接收端发现蓝牙丢包——上面八行里它从 9 数到 15 再回到 0。把它当时间轴,会得到一条每十六个样本跳回零的锯齿。
| 头信息键 | 用途 |
|---|---|
| sampling rate | 每秒样本数 |
| resolution | 各列位深,与列序一一对应 |
| column | 列名与顺序 |
| sensor | 六项 RAW,表示未做片上物理量换算 |
注意 sensor 全部标为 RAW,resolution 里四路信号写的是 10。这两条合起来决定了换算方式:原始值是 0 到 1023 的整数,需要按官方脚本的公式换算成毫伏,而不是任何心电库默认的整数单位。
| 换算步骤 | 表达式 | 结果 |
|---|---|---|
| 取反并抬升 | 1024 减原始值 | 0 至 1024 |
| 归一化 | 除以 1024 | 0 至 1 |
| 去中点 | 减 0.5 | 负 0.5 至 0.5 |
| 定标 | 乘 3 | 负 1.5 至 1.5 毫伏 |
四步之后得到毫伏。官方脚本把常数写作 33 除以 11,等价于 3,来自前端电源电压与增益的比值,不是随手取的整数。
2.4 三种记录形态:有参考、无参考、重复会话
把目录与元数据表对起来看,记录分三种形态:多数只有实验信号,一部分另配同批十二导联,还有一部分是同一受试者的第二或第三次会话。
| 形态 | 判定方式 | 典型记录 | 使用时的注意 |
|---|---|---|---|
| 单次无参考 | 只有一条 txt,XML 目录无同名文件 | 1、2、3 | 最常见,只能做实验路内部比较 |
| 单次带参考 | txt 与 XML 同名 | 69 至 86 | 参考只有十秒,需自行定位对应段 |
| 重复会话 | 文件名带 _1 或 _2 | 67_1、67_2 | 同人跨会话,适合模板稳定性研究 |
三种形态能回答的问题不同:有参考的记录回答「大腿信号与标准导联像不像」,重复会话回答「同一个人再坐一次信号是否稳定」。这两类问题恰好是这份库最有价值的两个角度(§4.4 的案例同时具备两者)。
| 命名形式 | 含义 | 例子 |
|---|---|---|
NN.txt |
第 NN 号受试者的第一次会话 | 67.txt |
NN_1.txt |
第 NN 号受试者的第二次会话 | 67_1.txt |
NN_2.txt |
第 NN 号受试者的第三次会话 | 67_2.txt |
NN.XML |
与同名会话同批的十二导联 | 67_2.XML |
命名简单,但有个坑:第一次会话可能存为 67.txt,也可能直接存为 67_1.txt,取决于当时是否已有同名文件。做同人分组时,必须把下划线前的数字当受试者键。
2.5 与同类资源的规格差异
公开的 off-the-person 心电库不多,能把同一部位四种电极纹理同时录下来的更少。下表只比结构,不比优劣。
| 维度 | tOLIet | 常规临床心电库 | 消费级手环数据 |
|---|---|---|---|
| 采集位置 | 大腿后侧,座圈接触 | 胸导联与肢体导联 | 手腕或指端 |
| 导联数 | 4 路差分,非标准 | 3 至 12 路标准 | 1 路 |
| 采样率 | 1 kHz | 250 至 1000 Hz | 125 至 500 Hz |
| 量化位数 | 10 位 | 16 位上下 | 12 至 16 位 |
| 带宽 | 0.5 至 40 Hz | 0.05 至 150 Hz | 0.5 至 40 Hz 常见 |
| 单次时长 | 最长五分钟 | 十秒至二十四小时 | 数小时至数天 |
| 参考标准 | 部分记录配 12 导联 | 本身就是标准 | 多数无参考 |
| 标签 | 仅人口学 | 心律与诊断 | 多为心率 |
这张表说明一件事:它的规格更接近消费级器件,而不是临床设备。1 kHz 只看时间分辨率,带宽被 0.5 至 40 Hz 的带通锁死。
| 对照对象 | 相同点 | 关键差异 |
|---|---|---|
| 手指电极身份识别库 | 同为 off-the-person,同为干电极 | 本库在大腿,接触压力更大 |
| 座椅式心电监测原型 | 同为家具集成 | 本库公开了原始波形 |
| 智能座圈心衰监测研究 | 同为马桶座圈 | 对方是家用连续监测系统,本库是可行性采集 |
| 床垫式心电 | 同为无感采集 | 位置与耦合方式不同 |
§3 它的身份:把心电搬进卫生间的一次工程试验
3.1 谁做的、在哪做的、为什么做
署名共五人,挂着五个机构:第一作者兼通讯作者属 INESC TEC 与波尔图大学工学院,一位属电信研究所,一位属卫浴企业 OLI-Sistemas Sanitários,临床方属里斯本新大学医学院。
| 机构 | 角色 | 在项目中承担 |
|---|---|---|
| Instituto de Telecomunicações | 信号处理与硬件 | 前端设计、信号分析、论文撰写 |
| INESC TEC | 工程实现 | 系统集成与数据采集 |
| Faculdade de Engenharia da Universidade do Porto | 学术依托 | 研究设计 |
| OLI-Sistemas Sanitários S.A. | 产业方 | 提供座圈与卫生洁具资源 |
| Nova Medical School | 临床方 | 受试者招募与临床判断 |
| 参与方 | 提供什么 | 决定了数据的哪个特征 |
|---|---|---|
| 卫浴企业 | 座圈结构、电极安装位 | 电极位置只能在大腿接触面 |
| 工程团队 | BITalino 前端、蓝牙链路 | 1 kHz、10 位、0.5 至 40 Hz |
| 临床团队 | 受试者、12 导联机 | 有参考段的记录集中在后期 |
| 伦理委员会 | 审批与数据保护评估 | 只保留匿名编号,无病历回溯 |
3.2 时间线:从概念验证到一份带 DOI 的数据集
这条研究线走了四年:2021 年证明聚合电极装在座圈上能取到心电,2022 年把同一套装置用于身份识别,2023 年讨论产业化可行性,2024 年验证模板持久性,2025 年年中数据集上线,2026 年三月数据描述论文见刊。
| 时间 | 事件 | 依据 |
|---|---|---|
| 2021 | 聚合电极座圈取心的设计与评估发表于 Scientific Reports | 官方参考文献第 12 条 |
| 2022 | 卫生间场景下的心电身份识别发表于 Sensors | 官方参考文献第 8 条 |
| 2023 | 面向产业化的可行性研究,IEEE ENBENG | 官方参考文献第 16 条 |
| 2024 | 生物特征模板持久性评估,IEEE MELECON | 官方参考文献第 17 条 |
| 2025-06-24 | PhysioNet 发布 1.0.0 版 | 官方版本列表 |
| 2026-02-02 | 发布 1.0.1 版 | 官方版本列表 |
| 2026-03 | 数据描述论文见 Scientific Data 第 13 卷第 1 期 | 论文摘要 |
两个版本相隔七个多月,官方未给修订说明,但引用时仍需写清用的是哪一版。
| 版本 | 日期 | 页面标注 | 引用建议 |
|---|---|---|---|
| 1.0.0 | 2025-06-24 | 首版 | 老论文可能引用此版 |
| 1.0.1 | 2026-02-02 | 当前版 | 新工作应引此版并附下载日期 |
| 最新版 DOI | 随版本滚动 | 10.13026/z36n-vk32 | 指向最新,不适合精确定位 |
| 固定版 DOI | 指向 1.0.1 | 10.13026/411k-1476 | 可复现引用首选 |
3.3 采集链:一只座圈、一块开发板、一台笔记本
从电极到文件只有三级:座圈上的电极对、BITalino 前端、跑着 OpenSignals 的计算机,蓝牙把采样数据送过去落盘。这条链可以在实验室复现,也没有任何临床级隔离与校准环节。
| 环节 | 器件或参数 | 说明 |
|---|---|---|
| 电极 | 四对聚合干电极,四种表面纹理 | 嵌在座圈内侧,接触大腿后侧 |
| 前端 | BITalino(PLUX,里斯本) | 开源生物电采集套件 |
| 增益 | 一万一千 | 官方给出的模拟前端增益 |
| 滤波 | 0.5 至 40 Hz 带通 | 硬件或固件实现 |
| 采样 | 1 kHz | 四路同步 |
| 量化 | 10 位 | 每路独立 |
| 传输 | 蓝牙 | 送至运行 OpenSignals 的计算机 |
| 落盘 | 制表符文本,两行头信息 | 每行一个采样点 |
带宽上限 40 Hz 是一个关键选择。它把工频干扰与大部分肌电噪声挡在外面,代价是 QRS 的陡峭上升沿被平滑,R 波峰值幅度被低估。做 R 波检测没问题,做形态学测量要谨慎。
3.4 受试者:八十六名志愿者,一次便利抽样
官方给出三项体格指标的均值与标准差:年龄 31.73 ± 13.11 岁,体重 66.89 ± 10.70 千克,身高 166.82 ± 6.07 厘米;女五十、男三十六,全部葡萄牙籍,经研究者直接联系与门诊机会招募。官方称招募时刻意覆盖不同年龄与体型。
| 项目 | 官方表述 | 对使用的含义 |
|---|---|---|
| 人数 | 86 | 便利样本,非抽样调查 |
| 性别 | 女 50、男 36 | 女性略多,性别分层时两组都够用 |
| 年龄 | 均值 31.73,标准差 13.11 | 以青年为主,老年段样本薄 |
| 体重 | 均值 66.89,标准差 10.70 | 体型跨度有限 |
| 身高 | 均值 166.82,标准差 6.07 | 身高分布集中 |
| 国籍 | 全部葡萄牙籍 | 单一人群 |
| 健康状况 | 部分自述心脏问题,未经确认 | 不能当病例对照 |
| 招募途径 | 场景 | 可能的偏倚 |
|---|---|---|
| 研究者直接联系 | 校内与协作机构 | 便利样本,健康志愿者偏多 |
| 门诊机会招募 | 医院门诊 | 就诊人群,可能带轻微症状 |
采集现场有硬约束:需要褪去下装才能保证皮肤与电极直接接触,所以测试安排在卫生间或医院单人病房;座圈装在标准马桶上,受试者静坐至多五分钟,除保证接触外不给姿势指导。
| 采集条件 | 官方设定 | 影响 |
|---|---|---|
| 地点 | 卫生间或医院单人病房 | 隐私优先,环境噪声不可控 |
| 着装 | 褪去下装,皮肤直接接触 | 接触条件比日常更理想 |
| 时长 | 最长五分钟 | 只够短时分析 |
| 姿势 | 不额外指导,自然坐姿 | 坐姿差异成为变异来源 |
| 人员 | 研究人员在场 | 可能存在紧张导致的体位变化 |
官方还列出会影响信号质量却未被记录的变量:体毛、护肤品、个体体格差异。这等于承认同一套硬件在不同人身上表现不同,而记录里没有可校正的协变量。
3.5 名字、缩写与一处拼写分歧
标题里的 Polimeric 不是常见拼法:同页参考文献与更早的论文一律写作 polymeric,即「聚合物的」。两者指向同一件事——电极材料是高分子聚合物,不是金属。官方未做说明,按页面原文照录即可。
| 口径 | 写法 | 出处 |
|---|---|---|
| 数据集标题 | Polimeric Dry Electrodes | PhysioNet 页面与 README |
| 参考文献 | polymeric electrodes | 官方参考文献第 12 条 |
| 中文对应 | 聚合干电极 | 意译,两种拼写同指 |
名字本身也值得拆一下:tOLIet 是 toilet 的变体,中段三字母写成大写 OLI,恰好与提供资源的卫浴企业同名。官方未解释这层关系,但致谢里感谢该公司提供全部资源,作者之一亦隶属该公司。这属于读法,不是官方定义,写论文时不宜当事实陈述。
| 组成 | 字面 | 可能的用意 |
|---|---|---|
| t | 前缀 | 无实义,凑成 toilet |
| OLI | 大写中段 | 与卫浴企业同名 |
| et | 后缀 | 凑成 toilet |
3.6 与十二导联参考的关系:同批,不同步
二十三条记录配了参考心电。参考机是 GE MAC800,十秒十二导联,文件里同时存原始波形与每个导联的中位心搏模板。它的价值是给出「同一个人的标准心电长什么样」,让大腿信号有了一把可比的尺子。
| 参考项 | 规格 | 用途 |
|---|---|---|
| 设备 | GE MAC800 | 临床级十二导联 |
| 时长 | 十秒 | 只够形态对照 |
| 导联 | I 至 V6 共十二路 | 完整标准导联 |
| 波形点数 | 每导联 5000 点 | 按十秒折算为每秒 500 点 |
| 模板 | 每导联 600 点 | 中位心搏,供形态分析 |
| 单位 | 微伏 | 与实验路的毫伏不同 |
| 关系 | 是否成立 | 说明 |
|---|---|---|
| 同一受试者 | 成立 | 文件名与编号对应 |
| 同一批次 | 成立 | 官方称同时记录 |
| 逐点对齐 | 未说明 | 无同步标记,只能按波形自行配准 |
| 同一体位 | 未说明 | 参考机为静卧或坐位,未交代 |
「同批」与「同步」是两件事。实验段最长五分钟、参考段只有十秒,两者之间没有公开的同步标记。用参考段做形态比对,只能靠 R 波位置自行配准,并接受配准误差。
§4 它最独特的东西:一张座圈上的四种电极纹理
4.1 大腿取心为什么比手指更难
手指电极能做身份识别,是因为指端血管密集、皮肤薄、握持压力可控。大腿后侧恰好相反:皮肤厚、脂肪多、体毛密,接触压力由体重与坐姿决定,两腿之间的电位差本来就比胸导联之间弱。
| 难点 | 具体表现 | 官方是否给出对策 |
|---|---|---|
| 接触压力 | 由体重与坐姿决定,不可控 | 不控制,让受试者自然坐 |
| 皮肤阻抗 | 脂肪厚、体毛多,阻抗高 | 靠干电极压力与面积 |
| 电位幅度 | 两腿间差分幅度低 | 高增益前端补偿 |
| 运动伪迹 | 坐姿微调即产生基线跳变 | 0.5 Hz 高通压制 |
| 位置漂移 | 每次坐下的接触点略有差异 | 座圈固定电极位置 |
| 取心部位 | 接触可控性 | 信号幅度 | 场景自然度 |
|---|---|---|---|
| 手指 | 高,靠握持 | 中 | 需要主动触碰 |
| 手腕 | 中,靠表带 | 低 | 需要佩戴 |
| 胸部 | 低,需贴片 | 高 | 需要脱衣或贴电极 |
| 大腿后侧 | 中,靠体重 | 低 | 坐下即可 |
4.2 四种电极纹理:一次把材料变量做成对照实验
座圈上的四对电极不是同样的东西。它们的位置相同、尺寸相近,唯一系统性的差别是表面纹理:平面、正弦、金字塔、梯形。四种纹理对应四种皮肤接触方式,官方在前作里已经讨论过纹理对信号质量的影响,这份数据集把这组对照原样搬进了公开数据。
| 通道 | 纹理 | 形状描述 | 设计意图 |
|---|---|---|---|
| A1 | 平面 | 平整表面 | 基准组,接触面积最大 |
| A2 | 正弦 | 波浪状起伏 | 增加局部压力点 |
| A3 | 金字塔 | 尖锥阵列 | 穿透体毛,接触更集中 |
| A4 | 梯形 | 平顶台状 | 介于平面与尖锥之间 |
这四路并行采集带来一个罕见的性质:同一次会话里,四路差异主要来自纹理,而不是人、体位或时间。跨纹理比较不必担心个体差异混入。
4.3 四路差分信号在文件里长什么样
四路信号占第 6 至第 9 列,取值都是 0 到 1023 的整数。不同纹理的读数并不同步:§2.3 的片段里 A1 从 427 走到 697,A3 几乎停在 511 到 526 之间,这种差异正是纹理与接触状态造成的。
| 通道 | 列位置 | 原始范围 | 换算后范围 |
|---|---|---|---|
| A1 | 第 6 列 | 0 至 1023 | 负 1.5 至 1.5 毫伏 |
| A2 | 第 7 列 | 0 至 1023 | 负 1.5 至 1.5 毫伏 |
| A3 | 第 8 列 | 0 至 1023 | 负 1.5 至 1.5 毫伏 |
| A4 | 第 9 列 | 0 至 1023 | 负 1.5 至 1.5 毫伏 |
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 某路恒定不变 | 电极未接触或通道故障 | 先看方差,再决定是否丢弃 |
| 某路幅度明显偏小 | 纹理与体毛不匹配 | 记录为质量分层依据 |
| 四路基线不同 | 电极极化电位差异 | 各自去均值,不要共用基线 |
| 某路出现方波跳变 | 接触瞬断后恢复 | 按跳变点切段 |
4.4 案例:67 号受试者的两次会话与一份 12 导联参考
§4.4 的案例取第 67 号受试者。她是三十岁女性,体重七十七千克,身高一百六十一厘米,在元数据表里对应两条记录:67_1 与 67_2,说明她坐了两次;ECG_REF 目录里还有一份 67_2.XML,说明第二次会话同时做了十二导联。
| 属性 | 值 | 为什么值得注意 |
|---|---|---|
| 编号 | 67 | 单条记录与参考文件可交叉定位 |
| 会话数 | 2 | 可做同人跨会话比较 |
| 参考 | 仅第二次 | 参考不覆盖全部会话 |
| 四路信号 | 齐全 | 可做纹理内部对照 |
这个案例把重复测量、参考配对、四纹理并行三种结构凑在了一起,因此能回答一个别处不好回答的问题:同一个人两次坐下,四路信号的相对优劣是否稳定。若第一次 A3 最好、第二次变成 A1 最好,纹理结论就只能按会话描述,不能按人推广。
import numpy as np
import matplotlib.pyplot as plt
def load_exp(path):
#-- 头两行是注释,np.loadtxt 默认跳过井号行
x = np.loadtxt(path, delimiter="\t")
return x
def to_mv(raw):
#-- 官方换算:取反、归一、去中点、乘 3
return ((1024 - raw) / 1024 - 0.5) * 3
x1 = load_exp("ECG_EXP/67_1.txt")
x2 = load_exp("ECG_EXP/67_2.txt")
for name, x in (("s1", x1), ("s2", x2)):
sig = {k: to_mv(x[:, i]) for k, i in zip("A1A2A3A4", range(5, 9))}
print(name, x.shape[0] / 1000, "s",
{k: round(float(np.std(v)), 4) for k, v in sig.items()})
这段代码把两次会话的四路信号读进来、换算成毫伏、打印标准差。标准差在这里不是质量指标,只是让人先看清四路之间的量级差异。
| 案例能回答 | 案例不能回答 |
|---|---|
| 同一人两次会话的信号是否同量级 | 纹理优劣能否推广到人群 |
| 四路在两次会话里的相对排序 | 哪一路在临床上更接近标准导联 |
| 参考段能不能配准到实验段 | 该受试者的真实心律诊断 |
4.5 参考系统的价值与陷阱
十二导联参考是最容易被高估的部分。它的价值是给出形态基准:某一路大腿信号若在 QRS 宽度、T 波极性上接近参考的某个导联,论文里只能说「形态上接近」,不能说「等于」。
| 陷阱 | 具体表现 | 应对 |
|---|---|---|
| 时长不匹配 | 参考十秒,实验最长五分钟 | 只取实验段中与参考对应的窗口 |
| 无同步标记 | 两套设备独立启动 | 用 R 波互相关估计时移 |
| 体位不同 | 参考机按临床常规摆位 | 在方法段声明体位差异 |
| 单位不同 | 实验毫伏,参考微伏 | 统一换算后再比较 |
| 模板缺段 | 模板尾部以负三万二千七百六十八填充 | 比较前先剔除哨兵值 |
最后一条尤其隐蔽。每个导联有两组数组:五千点的十秒波形与六百点的中位模板;模板尾部常用负三万二千七百六十八填充,那是短整型最小值,用作「无数据」标记。直接当信号值送进统计,会得到一条断崖式下跌的曲线。
| 数组 | 点数 | 典型内容 |
|---|---|---|
| 十秒原始波形 | 5000 | 连续采样,可含噪声 |
| 中位心搏模板 | 600 | 一个心搏的平均形态,尾部常带哨兵值 |
| 哨兵值 | 负三万二千七百六十八 | 表示该点无数据 |
4.6 边界条件:什么时候它不再适用
四条边界。 要诊断级形态时:带通把 ST 的慢变化与 QRS 切迹一起削弱,指标只能相对比较。要长时程节律时:单次最长五分钟,覆盖不了昼夜与阵发事件。要人群代表性时:八十六人、单中心、青年为主,按年龄或病种分层后样本迅速掉到个位数。要真实场景时:采集条件比日常理想,衣物、湿度与姿势变化都没有覆盖。
| 边界 | 触发条件 | 替代方案 |
|---|---|---|
| 诊断级形态 | 需要测 ST 偏移或 QRS 时限 | 临床十二导联或高采样库 |
| 长时程节律 | 需要数小时以上连续记录 | 动态心电、贴片式监测 |
| 人群代表性 | 需要按年龄或病种分层 | 多中心队列 |
| 真实场景 | 需要评估日常依从性 | 家用部署研究 |
§5 怎么拿到:从一条命令到可训练张量
5.1 三种取法,取决于你要多少
整包、目录递归、对象存储同步,三条路拿到的是同一份内容。整包 74.6 MB,这个体量下直接下 ZIP 最省事。
#-- 方式一:整包下载(ZIP 约 74.6 MB)
wget -c https://physionet.org/content/tollet/get-zip/1.0.1/ -O tollet.zip
#-- 方式二:只抓实验信号目录,不下载参考 XML
wget -r -N -c -np --cut-dirs=3 https://physionet.org/files/tollet/1.0.1/ECG_EXP/
#-- 方式三:从公开桶同步,适合脚本化流水线
aws s3 sync --no-sign-request s3://physionet-open/tollet/1.0.1/ ./tollet
| 方式 | 适合的场景 | 注意 |
|---|---|---|
| 整包 ZIP | 第一次接触、要完整复现 | 需自行解压 |
| 目录递归 | 只要实验信号或只要参考 | 注意 --cut-dirs 的层数 |
| 对象存储同步 | 流水线、断点续传 | 无需账号,但需装 AWS CLI |
| 目录 | 大小量级 | 是否必需 |
|---|---|---|
ECG_EXP/ |
数百兆,单文件约 2.5 MB | 主体,必需 |
ECG_REF/ |
数十兆 | 只有做形态对照时才需要 |
Script/ |
几十 KB | 建议一并取,读法有参考价值 |
DataSet.csv |
5.8 KB | 必需,人群信息全在这里 |
5.2 体积与目录的账
未压缩 520.1 MB,压缩后 74.6 MB,压缩比接近七比一——每个采样点都是十进制整数加制表符,冗余很高。
| 项 | 数值 | 口径 |
|---|---|---|
| 未压缩总量 | 520.1 MB | 官方文件列表 |
| ZIP 包 | 74.6 MB | 官方下载按钮 |
| 实验信号文件数 | 145 | 目录逐项 |
| 参考文件数 | 23 | 目录逐项 |
| 元数据行数 | 149 条记录 | 表体行数 |
| 单个信号文件 | 约 2.5 MB | 抽样核对 |
单文件约 2.5 MB,按每分钟六万个采样点、每点十一列估算,五分钟的会话大致就是这个量级:全量读进内存也不过数百兆,不需要流式处理。
| 估算项 | 数值 | 依据 |
|---|---|---|
| 每秒字节数 | 约 50 字节 | 十一个短整数加制表符 |
| 每分钟点数 | 60000 | 1 kHz 乘 60 |
| 五分钟点数 | 300000 | 上限时长 |
5.3 读一条实验记录
读文本文件只需三行代码,但三处必须显式处理:跳过头注释、按制表符切分、把整数换算成毫伏。通用心电库读不了,因为文件里没有头文件、增益声明与导联名。
| 步骤 | 关键点 | 常见错误 |
|---|---|---|
| 跳过注释 | 前两行以井号开头 | 用固定行号跳过第一行就开读 |
| 切分 | 制表符,不是逗号 | 用默认空白切分导致列错位 |
| 换算 | 取反、归一、去中点、乘 3 | 直接用原始整数当幅度 |
| 通道选择 | 第 6 至第 9 列 | 把 nSeq 当信号 |
import numpy as np
def read_record(path):
#-- 井号开头的两行由 loadtxt 自动跳过
x = np.loadtxt(path, delimiter="\t", dtype=np.int32)
raw = x[:, 5:9]
mv = ((1024 - raw) / 1024 - 0.5) * 3
return {"nseq": x[:, 0], "mv": mv, "fs": 1000}
rec = read_record("ECG_EXP/001.txt")
print(rec["mv"].shape, rec["mv"].min(), rec["mv"].max())
print("nSeq 取值", np.unique(rec["nseq"]))
最后一行打印出来只有十六个 nSeq 值。这不是数据损坏,而是四位计数器的正常回绕。它能做的唯一一件事是查丢包:相邻两行差值不等于 1(按模 16 计),中间就有样本丢失。
| 检查项 | 预期 | 不符时的含义 |
|---|---|---|
| 列数 | 11 | 文件被截断或格式变动 |
| nSeq 取值 | 0 至 15 | 出现其它值说明解析错位 |
| 步长 | 恒为 1(模 16) | 跳变说明丢包 |
| 幅度范围 | 正负 1.5 毫伏内 | 超出说明未换算或数据异常 |
5.4 读一份参考 XML
参考文件是 GE 的私有结构,命名空间指向 Sapphire 记录格式。十二个导联各有两个数组:五千点的十秒原始波形与六百点的中位模板,二者都以空格分隔的短整数塞在属性里。
import xml.etree.ElementTree as ET
import numpy as np
def read_ref(path):
root = ET.parse(path).getroot()
out = {}
for e in root.iter():
#-- 标签带命名空间,按后缀匹配最省事
if not e.tag.endswith("ecgWaveform"):
continue
lead = e.attrib.get("lead")
size = e.attrib.get("asizeVT")
v = np.array(e.attrib.get("V", "").split(), dtype=np.int32)
if size == "5000":
out[lead] = v
return out
ref = read_ref("ECG_REF/69.XML")
print(sorted(ref), {k: v.shape for k, v in list(ref.items())[:2]})
| 属性 | 含义 | 取值示例 |
|---|---|---|
| lead | 导联名 | I、II、AVR、V1 至 V6 |
| asizeVT | 数组长度 | 5000 或 600 |
| V | 样本值,空格分隔 | 短整数序列 |
| VT | 数据类型 | xs:short |
五千点对应十秒,折算每秒五百点,与实验路的 1 kHz 不同,跨模态比较前必须重采样。六百点模板对应一个心搏,官方脚本硬编码「R 波在模板第 200 点」,换机型即失效。
| 数组 | 点数 | 折算 | 用途 |
|---|---|---|---|
| 十秒波形 | 5000 | 每秒 500 点 | 节律与整体形态 |
| 中位模板 | 600 | 约 1.2 秒 | 单搏形态比较 |
5.5 建一张总索引
开始分析前先花十分钟,把元数据、文件清单与参考覆盖拼成一张表。它决定了每行代码能处理哪些记录,也决定了样本量会在哪一步塌陷。
| 索引列 | 来源 | 用途 |
|---|---|---|
| record_id | 文件名 | 主键 |
| subject_id | 文件名下划线前 | 同人分组 |
| session | 文件名后缀 | 重复会话识别 |
| age、sex、weight、height | 元数据表 | 协变量与分层 |
| has_ref | 参考目录是否存在同名文件 | 决定能否做参考对照 |
| n_samples | 读文件行数 | 时长 |
| shape | 数组形状 | 完整性检查 |
import csv, re
from pathlib import Path
def build_index(root="tollet"):
meta = {}
with open(Path(root) / "DataSet.csv", encoding="utf-8-sig") as f:
#-- 分号分隔,表头字段带尾随空格
for row in csv.DictReader(f, delimiter=";"):
meta[row["ID"].strip()] = {
k.strip(): (v or "").strip() for k, v in row.items() if k
}
refs = {p.stem for p in (Path(root) / "ECG_REF").glob("*.XML")}
rows = []
for p in sorted((Path(root) / "ECG_EXP").glob("*.txt")):
rid = p.stem
sid = rid.split("_")[0]
m = meta.get(rid, {})
rows.append({
"record_id": rid,
"subject_id": sid,
"has_ref": rid in refs,
"age": m.get("Age"),
"sex": m.get("Gender"),
"weight": m.get("Weight"),
"height": m.get("Height"),
})
return rows
idx = build_index("tollet")
print(len(idx), sum(r["has_ref"] for r in idx))
| 常见问题 | 表现 | 处理 |
|---|---|---|
| 表头尾随空格 | Weight 取不到值 |
读入时统一 strip |
| BOM | 首列名带不可见字符 | 用 utf-8-sig 打开 |
| 参考缺失 | has_ref 为假 | 做参考对照时过滤 |
| 会话后缀 | 同人出现多行 | 以 subject_id 聚合 |
5.6 切窗与切分:别让同一分钟同时进训练与测试
单条记录最长五分钟,切窗是必然的。问题在于切分单位:如果按窗随机划分,同一条记录相邻的两窗会同时出现在训练与测试里,两者共享绝大部分样本,评测结果会明显虚高。
| 切分单位 | 泄漏风险 | 适用场景 |
|---|---|---|
| 随机按窗 | 高,相邻窗高度重叠 | 不推荐 |
| 按记录 | 低 | 单次会话任务 |
| 按受试者 | 最低 | 跨人泛化评估 |
| 按会话 | 中 | 同人跨会话研究 |
import numpy as np
def windows(sig, fs=1000, win=10.0, step=5.0):
#-- sig 形状为 采样点 乘 4,单位毫伏
L, S = int(win * fs), int(step * fs)
out = []
for i in range(0, sig.shape[0] - L + 1, S):
w = sig[i:i + L].astype("float32")
if np.isnan(w).any():
continue
out.append(w)
return np.stack(out) if out else np.zeros((0, L, sig.shape[1]))
def split_by_subject(rows, frac=0.2, seed=0):
subs = sorted({r["subject_id"] for r in rows})
rng = np.random.default_rng(seed)
rng.shuffle(subs)
cut = int(len(subs) * frac)
test = set(subs[:cut])
return ([r for r in rows if r["subject_id"] not in test],
[r for r in rows if r["subject_id"] in test])
| 参数 | 常见取值 | 影响 |
|---|---|---|
| 窗长 | 5 至 30 秒 | 太短丢节律信息,太长样本少 |
| 步长 | 窗长的一半 | 步长越小样本越多,泄漏风险越高 |
| 标准化 | 按通道各自去均值 | 四路基线不同,不可共用 |
| 切分 | 按受试者 | 结论最保守,也最可信 |
5.7 六个最容易出错的地方
其一,把 nSeq 当时间轴。 它是四位计数器,每十六个样本回绕一次,当横坐标会得到一条周期性归零的锯齿。
其二,用原始整数当幅度。 0 到 1023 是编码,不是微伏也不是毫伏。不换算就做阈值检测,阈值只能按编码定,换批数据即失效。
其三,把四路当四导联。 四路是同一部位的四种纹理,形态高度相关。当独立导联做空间重建,等于假设四个几乎重合的观测点能张成三维空间。另外三条——忽略哨兵值、未配准就逐点比较、把五分钟当固定长度——同下表。
| 错误 | 症状 | 修法 |
|---|---|---|
| nSeq 当时间轴 | 横坐标每十六点归零 | 用行号除以采样率 |
| 原始整数当幅度 | 幅度在数百量级 | 按官方公式换算毫伏 |
| 四路当四导联 | 通道间相关极高 | 按纹理分组,不做空间重建 |
| 忽略哨兵值 | 均值出现巨大负偏 | 先剔除负三万二千七百六十八 |
| 未配准就逐点比较 | 相关系数接近零 | 先用 R 波估计时移 |
| 固定长度切窗 | 末尾残缺 | 丢弃或补齐并标记 |
§6 与库内词条的关系
6.1 关系图谱
这份库在站内处在三个标签的交界:心电信号、可穿戴传感、心血管疾病。它与临床心电库的关系是信号同源,与可穿戴类的关系是场景同源,与生物识别类的关系是方法同源。
| 关系类型 | 相关词条方向 | 具体关系 |
|---|---|---|
| 信号同源 | 各类心电数据库 | 同为体表电位,但导联体系不同 |
| 场景同源 | 可穿戴与家庭监测资源 | 同为非临床环境采集 |
| 方法同源 | 心电生物识别研究 | 同一团队的前作即身份识别 |
| 硬件同源 | 开源生物电前端相关资源 | 同为 BITalino 系采集 |
| 人群对照 | 健康志愿者队列 | 同为便利样本,非病例对照 |
6.2 检索路径
想找「能用大腿或坐姿取心电的数据」,路径是从生理信号进,按可穿戴传感筛;想找「带标准十二导联参考的非常规导联数据」,路径是从心电信号进,按参考配对筛。两条路径都会落到这份库,但关心的字段完全不同。
| 检索意图 | 关键词组合 | 落点 |
|---|---|---|
| 非常规部位取心电 | thigh ECG、off-the-person | 本库 |
| 干电极材料研究 | dry electrode、texture | 本库的四纹理设计 |
| 家庭场景可行性 | home monitoring、toilet seat | 本库与座圈类研究 |
| 心电身份识别 | ECG biometrics | 本库的重复会话 |
| 关键词组 | 单独使用的问题 |
|---|---|
| 只用 toilet | 会混入大量卫浴产品与无障碍设计文献 |
| 只用 ECG dataset | 会淹没在临床心电库里 |
| 只用 dry electrode | 会命中材料学论文,不含公开数据 |
| 组合三组 | 命中率最高 |
6.3 与库内心电词条的分工
库内多数心电词条回答「这一拍是什么」,本库回答「在没有诊室条件的房间里,能不能取到够用的心电」。前者需要标签与导联体系,后者需要现场记录与材料对照。两者叠加,才构成从可行性到诊断的完整链条。
| 你的问题 | 该用哪一类 |
|---|---|
| 这个心律属于哪一类 | 带标注的临床心电库 |
| 这个部位能不能取到信号 | 本库 |
| 干电极纹理怎么选 | 本库 |
| 诊断级形态测量 | 临床十二导联库 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评价之前先把口径摆正:它是可行性证据,不是诊断数据集。用诊断数据集的标准去量,导联不全、标签缺失、量化太浅、人群太窄四条全中,但这四条都不是疏漏,而是设计目标决定的取舍。
| 评价口径 | 关注的指标 | 在本库上的结论 |
|---|---|---|
| 当诊断数据集评 | 导联完整性、标签密度、量化深度 | 全部不合格 |
| 当可行性证据评 | 现场真实性、对照设计、可复现性 | 基本合格 |
| 当工程基线评 | 格式清晰度、读取难度、许可 | 合格,但许可有分歧 |
摆正之后真正该问三件事:它保存的采集条件别处能不能再凑齐,四纹理对照是不是同一次坐姿下完成的,缺陷是设计取向还是执行疏漏。
| 问题 | 答案 | 依据 |
|---|---|---|
| 采集条件可否复现 | 可以,硬件清单完整 | 官方方法与器件型号 |
| 四纹理是否同场 | 是,四路同步采样 | 文件列结构 |
| 缺陷是取向还是疏漏 | 多为取向,少数为疏漏 | 官方说明与目录核对 |
7.1 五维评分
把数据交换领域常用的 DAIMS 框架借来评分——可发现、可访问、可互操作、可复用、可追溯——这份库的长短分布得很清楚:信息恰恰掉在了「语义」这一层。
| 维度 | 评分 | 依据 |
|---|---|---|
| 可发现 | 高 | 有 DOI、有平台收录、有配套论文 |
| 可访问 | 高 | 无需登录,整包可下 |
| 可互操作 | 低 | 无标准心电格式,列语义写在 JSON 头里 |
| 可复用 | 中 | 许可宽松,但需自写解析与清洗 |
| 可追溯 | 中 | 有机构与伦理批号,无采集日期与设备序列号 |
| 维度 | 具体短板 | 缓解办法 |
|---|---|---|
| 可互操作 | 不是 WFDB,也不是 EDF | 自行转成 WFDB 再进工具链 |
| 可互操作 | 参考为厂商私有 XML | 只提取波形数组,丢弃其余节点 |
| 可追溯 | 无逐条采集日期 | 按版本与论文时间窗描述 |
| 可复用 | 无官方基线模型 | 以论文中的质量分析为参照 |
五项里前两项接近满分,因为它挂在了被广泛索引的平台上;后三项是新库的典型特征:数据干净,语义却留在了各环节工具的私有格式里。
7.2 标注与元数据的真实覆盖
严格说,这份库没有「标注」这个层。它有的是每人六个元数据字段,以及参考 XML 里的机器判读结果:没有逐搏标签,没有节律标签,没有质量分级,也没有诊断结论。
| 信息层 | 是否存在 | 粒度 | 可用性 |
|---|---|---|---|
| 人口学元数据 | 存在 | 每人一条 | 直接可用 |
| 体格指标 | 存在 | 每人一条 | 直接可用 |
| 备注 | 存在 | 多数留空 | 有限 |
| 逐搏标签 | 不存在 | 无 | 需自行检测 |
| 节律标签 | 不存在 | 无 | 需自行判读 |
| 质量分级 | 不存在 | 无 | 需自行定义 |
| 机器判读 | 参考文件内 | 每份一次 | 仅 23 条有 |
| 官方说法 | 仓库内说法 | 差异 |
|---|---|---|
| 平台许可为 CC BY 4.0 | README 称仅限研究,禁止再分发 | 是否允许再分发 |
| ID 为受试者标识 | 一条记录一个 ID,含会话后缀 | 是记录键还是人键 |
| 性别取 M 或 F | 表中取值为 Male 或 Female | 取值形式 |
| 参考文件含采集时间戳 | 至少一份文件该字段为空 | 字段存在不等于已填 |
这四行不是要找错,而是提醒文档与数据之间存在口径差。遇到这类差异,把两个口径并列写清并注明以哪个为准未知;就许可而言,在作者书面确认前按更严格的一方行动是风险最低的选择。
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 | 应对 |
|---|---|---|---|
| 人群偏差 | 86 人,青年为主,单国籍 | 老年与肥胖段代表性弱 | 明确写成便利样本 |
| 场景偏差 | 卫生间静坐,非真实如厕 | 高估日常信号质量 | 在方法段声明 |
| 设备偏差 | 单一前端、单一增益 | 结论绑定 BITalino | 不外推到其它器件 |
| 带宽偏差 | 0.5 至 40 Hz | 形态学指标受限 | 只做相对比较 |
| 量化偏差 | 10 位 | 分辨率约 2.9 微伏 | 不做毫伏级精测 |
| 参考偏差 | 仅 23 条,仅十秒 | 配对样本量小 | 按案例报告而非统计 |
| 标签偏差 | 无逐搏与诊断标签 | 无法有监督训练 | 改做自监督任务 |
| 记录数口径 | 元数据 149 行,信号 145 个 | 有 4 条只有元数据 | 以文件为准做索引 |
八条里前三条是设计取向,改不了;中间三条由硬件与协议决定,只能在分析层面规避;后两条是文档与目录的口径差,建索引时处理掉即可。§4.4 的案例在这八条上都有明确落点:同一个人、两次会话、四路齐全、带参考。
7.4 外部验证矩阵
| 验证方式 | 是否可行 | 说明 |
|---|---|---|
| 与 12 导联形态对照 | 可行 | 23 条记录有参考,段级比对 |
| 与其它大腿心电数据对照 | 有限 | 公开同类数据极少 |
| 与消费级手环同期对照 | 不可行 | 无同期佩戴记录 |
| 重复测量一致性 | 可行 | 有重复会话,但仅覆盖部分人 |
| 专家二次判读 | 可行 | 参考段可重新判读 |
| 与病历或诊断对照 | 不可行 | 无病历可回溯 |
第四行是少见的长处:多数公开心电库每人只有一次记录,无法评估同人跨会话的稳定性,而本库有一部分人坐了两到三次。
| 验证需求 | 可用样本 | 结论强度 |
|---|---|---|
| 形态相似性 | 23 条配对 | 中等,可做案例报告 |
| 同人稳定性 | 重复会话记录 | 中等,样本有限 |
| 跨人泛化 | 86 人 | 弱,人群集中 |
| 临床一致性 | 无 | 不成立 |
7.5 它为何能持续:占住了一个没人认真占过的位置
公开心电库里绝大多数是已经标准化的东西:十二导联、动态心电、可穿戴单导联。大腿取心长期停在论文原型阶段,公开数据几乎为零。这份库把「四种纹理、同一坐姿、带部分参考」一次做齐,等于给这个方向立了一个可引用的基线。
它留下来靠三点:格式足够简单,两个文本文件加一份 CSV,半天能读完;平台层面许可允许商用与再分发;上下文足够完整,硬件型号、增益、滤波、伦理批号、招募方式全在页面上,五年后仍能照着复现。至于能不能长成大库,取决于这个方向还有没有人做——这一点数据本身回答不了。
§8 生态位与历史
8.1 历史沿革:从一篇概念验证到一份带 DOI 的数据
这条线可以按「证明什么」分段:先是聚合电极装在座圈上能取到心电,再是取到的信号能用于身份识别,然后是这套东西能产业化,最后才回到数据本身,把采集过程整理成可复用的库。
| 阶段 | 证明什么 | 形态 | 与本库的关系 |
|---|---|---|---|
| 概念验证 | 座圈取心可行 | 会议或期刊论文 | 提供方法学基础 |
| 身份识别 | 信号具备区分度 | 期刊论文 | 提供任务定义 |
| 产业化 | 材料与结构可落地 | 会议论文 | 提供硬件演进 |
| 数据公开 | 采集过程可复用 | 数据集与数据论文 | 本库 |
| 年份 | 产出 | 类型 |
|---|---|---|
| 2021 | 聚合电极座圈取心的设计与评估 | 期刊论文 |
| 2022 | 卫生间场景心电身份识别 | 期刊论文 |
| 2023 | 面向产业化的可行性 | 会议论文 |
| 2024 | 模板持久性评估 | 会议论文 |
| 2024 | 不可见生命体征监测,NATO 系列文集 | 文集章节 |
| 2025 | PhysioNet 首版数据 | 数据集 |
| 2026 | 修订版与数据描述论文 | 数据集与期刊论文 |
这条时间线解释了一个细节:硬件用现成开发板而非自研板卡,是因为研究重心在电极与结构,用成熟前端能把变量压在电极这一层。
8.2 与前作谱系的差别
同一团队此前还发表过一项面向住院患者的研究,纳入三十名带不同心血管疾病的病人,讨论病理人群下的大腿心电特征。那项工作与本库不是同一批数据:本库是志愿者,那项是患者;本库公开原始波形,那项以分析结论为主。
| 维度 | 本库 | 病理人群研究 |
|---|---|---|
| 对象 | 86 名志愿者 | 30 名住院患者 |
| 目的 | 数据公开与可行性 | 病理条件下的信号特征 |
| 标签 | 仅人口学 | 含临床分组 |
| 是否公开原始数据 | 是 | 未见公开 |
| 前作 | 与本库共享的部分 | 不同之处 |
|---|---|---|
| 2021 概念验证 | 电极材料与座圈结构 | 样本极少,无公开数据 |
| 2022 身份识别 | 同一套硬件 | 目标是分类而非数据 |
| 2023 产业化 | 结构与材料工艺 | 关注制造可行性 |
| 2024 模板持久性 | 重复会话的思路 | 关注生物特征稳定性 |
8.3 生态位:一个「日常物件即传感器」的样本
它不是心电库里的大库,而是「传感器进入家具」这条路线上的第一个公开脚印:把此前只存在于论文原型里的采集方式,变成可下载、可复算、可批评的对象。
| 参照系 | 本库的位置 | 差异 |
|---|---|---|
| 临床心电库 | 边缘,非标准导联 | 无诊断价值,有场景价值 |
| 可穿戴数据 | 相邻,同为非临床 | 采集由家具完成,非穿戴 |
| 智能家居健康数据 | 核心,正是该场景 | 目前公开数据极少 |
| 生物识别数据 | 相邻,方法同源 | 可用于模板研究 |
| 对比对象 | 共同点 | 本库的独特性 |
|---|---|---|
| 手指电极识别库 | 干电极、off-the-person | 接触压力由体重提供,更稳定 |
| 智能座圈心衰监测 | 同一载体 | 公开了原始波形与四纹理对照 |
| 座椅式心电 | 坐姿采集 | 座圈位置更固定,重复性更好 |
| 床垫式心电 | 无感、长时 | 本库时长更短,但对照更完整 |
8.4 谁在用它,用来做什么
| 使用者类型 | 典型用途 | 需要额外准备 |
|---|---|---|
| 生理信号算法工程师 | 检测、降噪、质量评估 | 自建标签与清洗流程 |
| 家庭监测产品团队 | 干电极选型与结构验证 | 与自家硬件做对照 |
| 生物识别研究者 | 同人跨会话模板研究 | 选取重复会话子集 |
| 教学人员 | 演示非标准导联与干电极噪声 | 准备与标准心电的对比图 |
| 综述作者 | off-the-person 方向的数据点 | 与其它公开集并列 |
第二类最容易上手,因为电极选型恰好是这份库唯一做成对照实验的部分;第三类最能挖出别人没注意的结构;第一类会失望,没有标签就做不了有监督训练。
§9 使用指引
9.1 三种角色的路径
| 角色 | 起点 | 第一个产出 | 常见卡点 |
|---|---|---|---|
| 算法工程师 | 先读 §2.2 的列字典与 §5.3 的读取代码 | 一份带质量标记的索引表 | 把 nSeq 当时间轴 |
| 产品与硬件团队 | 先看 §4.2 的四纹理对照 | 一张纹理与信号质量的对照表 | 跨人比较,混入个体差异 |
| 教学人员 | 先跑 §9.2 的最短流程 | 一张四路并排的波形图 | 忘了换算,把编码当毫伏 |
9.2 一条最短的可用流程
从零到一张四路并排图,四步足够。
#-- 第一步:取一个实验文件与元数据表
curl -sO https://physionet.org/files/tollet/1.0.1/ECG_EXP/67_1.txt
curl -sO https://physionet.org/files/tollet/1.0.1/DataSet.csv
#-- 第二步:装依赖
pip install numpy matplotlib
import numpy as np
import matplotlib.pyplot as plt
x = np.loadtxt("67_1.txt", delimiter="\t", dtype=np.int32)
mv = ((1024 - x[:, 5:9]) / 1024 - 0.5) * 3
fs = 1000
t = np.arange(mv.shape[0]) / fs
fig, axes = plt.subplots(4, 1, figsize=(10, 7), sharex=True)
for k, ax in enumerate(axes):
ax.plot(t, mv[:, k], lw=0.6)
ax.set_ylabel("A%d" % (k + 1), fontsize=8)
axes[-1].set_xlabel("seconds")
fig.tight_layout()
fig.savefig("67_1_four_leads.png", dpi=150)
图上若看不到规律的尖峰,先确认取的是第 6 至第 9 列,再确认换算没漏掉乘 3;把四路图与 §4.4 的案例并排放,能看出同一坐姿下四路的幅度与噪声差异。
| 步骤 | 检查点 | 出错的表现 |
|---|---|---|
| 下载 | 文件行数大于零 | 拿到的是重定向页面 |
| 读取 | 数组列数为 11 | 分隔符写错,列数变成 1 |
| 换算 | 幅度在正负 1.5 内 | 幅度在数百量级 |
| 绘图 | 能看到周期性尖峰 | 一条平线或纯噪声 |
9.3 引用方式
| 字段 | 内容 | 用途 |
|---|---|---|
| 数据集 | Silva AS, Plácido da Silva H, Correia M, Gonçalves da Costa AC, Laranjo S. tOLIet (version 1.0.1). PhysioNet, 2026 | 官方指定引用 |
| 论文 | Silva AS 等. Single-lead Thigh ECG Dataset (tOLIet) with Analysis of BMI Effects on Cardiac Signal Quality. Sci Data 13(1), 2026 | 方法学引用 |
| 标识 | DOI 10.13026/411k-1476 | 精确定位到版本 |
| 平台 | Pollard T 等. PhysioNet as a global platform for biomedical research. Nature Health, 2026 | 平台引用 |
| 许可 | CC BY 4.0 | 署名要求 |
| 场景 | 建议引用组合 |
|---|---|
| 只用了数据 | 数据集引用加平台引用 |
| 用了方法细节 | 再加数据描述论文 |
| 复现实验 | 三者全引,并写下载日期 |
| 商用产品文档 | 数据集引用加许可说明 |
最容易漏的是版本:两个版本号只差末位,下载日期不同可能拿到不同内容。
9.4 复现一份最小报告的检查
| 检查点 | 预期 | 不符时的常见原因 | 处理 |
|---|---|---|---|
| 记录数 | 145 个实验文件 | 只下了部分目录 | 重新同步目录 |
| 元数据行数 | 149 条 | 用逗号解析 | 改分号并去 BOM |
| 参考覆盖 | 23 个 XML | 目录名大小写写错 | 用大写 XML 匹配 |
| 单文件列数 | 11 | 制表符被替换 | 检查下载是否被转码 |
| 采样率 | 1000 | 从头信息里读 | 不要硬编码 |
第三项值得单独说:参考文件扩展名是大写 XML,而 Python 的 glob 区分大小写,在 Linux 上写 *.xml 一个都匹配不到,脚本不报错,只静默返回空集,后续对照分析全部跳过。
| 静默失败 | 症状 | 排查方式 |
|---|---|---|
| 参考匹配为空 | has_ref 全为假 | 打印匹配到的文件数 |
| 元数据键不匹配 | 年龄全为空 | 对比 ID 首尾空白 |
| 通道取错列 | 波形像台阶 | 打印前五行原始值 |
9.5 三类人群的最短路径
只想要一张图。 装 numpy 与 matplotlib,读一个文件,画四路。不需要元数据,也不需要参考文件。
要一份可训练的张量。 先建索引,按受试者切分,再按十秒窗切片并逐通道标准化。关键不是窗长,而是切分单位。
要做电极纹理比较。 取重复会话子集,在同一会话内比四路的信噪比或检出率,再跨会话看排序是否稳定;§4.4 的案例给出了最小单元。
| 路径 | 最少步骤 | 主要风险 |
|---|---|---|
| 只看图 | 读一个文件并绘图 | 没换算,幅度失真 |
| 建张量 | 索引、切分、切窗、标准化 | 按窗随机切分导致泄漏 |
| 纹理比较 | 选重复会话,四路互比 | 跨人比较混入个体差异 |
9.6 复现性清单:别人能不能照你的描述重建
| 必写项 | 为什么必须写 | 常见缺漏 |
|---|---|---|
| 使用的记录编号 | 文件名本身不表意 | 只写「若干条」 |
| 会话是否重复 | 同人多次会话影响切分 | 未说明 |
| 通道选择 | 四路选哪一路结论不同 | 只说「大腿心电」 |
| 换算公式 | 不换算则幅度不可比 | 只写「已预处理」 |
| 滤波设置 | 数据本身已带通 | 重复滤波 |
| 切分单位 | 按人切与按窗切结论不同 | 只写「随机划分」 |
| 参考配准方法 | 无同步标记 | 未交代 |
| 下载版本与日期 | 两个版本并存 | 只写数据集名 |
八项里第五项最容易被忽略:数据在采集端已过 0.5 至 40 Hz 带通,分析流程再加一次,QRS 幅度会进一步下降,而方法段里往往只用「带通滤波」一句带过。
§10 AI 使用声明
| 项目 | 内容 |
|---|---|
| 写作方式 | 由人工智能辅助撰写,人工校核事实与表述 |
| 事实来源 | 官方项目页、仓库 README、目录清单、元数据表、参考 XML 结构、Europe PMC 摘要 |
| 未使用的手段 | 未做标签频次、空值率或年龄分布等统计,未逐条列举样本 |
| 数字口径 | 官方给出什么就写什么,换算与推算单独标注 |
| 不确定项处理 | 标注「官方未说明」或「读法」,不写成事实 |
| 表格中的对照 | 结构对照为编辑整理,非官方结论 |
| 封面图 | 由生成模型按风格提示词产出,不含真实数据 |
| 更新责任 | 官方页面修订时以官方为准,本页随之更新 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| tOLIet 是拼写错误 | 是 toilet 的变体,中段 OLI 大写 | 官方标题与致谢中的企业名 |
| 四路信号是四个标准导联 | 同一部位四种纹理的差分信号 | 官方数据描述与列名 A1 至 A4 |
| 数据是在真实如厕时采集的 | 静坐至多五分钟,不在使用过程中 | 官方 Usage Notes |
| 这是一份病人数据集 | 志愿者,心脏问题未经专科确认 | 官方 Methods |
| 有逐搏或心律标注 | 只有人口学与基本留空的备注 | 目录与元数据表 |
| 参考数据覆盖全部记录 | 仅 23 条,且只有十秒 | 参考目录文件数 |
| 实验与参考逐点同步 | 同批记录,无同步标记 | 官方未提供对齐信息 |
| 采样 1 kHz 就有 500 Hz 带宽 | 带通上限 40 Hz | 官方滤波设置 |
| 可以直接算 ST 段 | 10 位量化加带通,精度不足 | 换算与滤波参数 |
| 许可是纯研究用途 | 平台写 CC BY 4.0 | 项目页许可栏 |
FAQ
问:tOLIet 到底怎么读,为什么中间三个字母是大写?
答:官方全名是 tOLIet: Single-lead Thigh-based Electrocardiography Using Polimeric Dry Electrodes。名字是把 toilet 的中段换成大写 OLI,与提供资源的卫浴企业同名。官方没有解释这层关系,因此这只是读法,不宜当事实引用(§3.5)。
问:它和普通心电数据库最根本的区别是什么?
答:采集位置与导联体系。常规库记录的是胸导联与肢体导联,本库记录的是大腿后侧与座圈电极之间的四路差分信号,没有任何一路对应标准导联。它回答的是「这个位置能不能取到心电」,不是「这个心电属于哪一类」。
问:四路信号该怎么用?
答:当四组并行的观测,而不是四个导联。它们的差别在电极表面纹理,形态高度相关。可以做纹理间的质量比较、可以做多路融合的检出率提升,但不要做空间重建或电轴计算(§4.2)。
问:为什么同一个人有好几个文件?
答:重复会话。八十六人共产生一百四十九条记录,一部分人坐了两到三次,文件名以 _1、_2 区分。这是它相对同规模心电库的额外价值,可用于同人跨会话的模板稳定性研究(§4.4 的案例)。
问:备注字段能当标签用吗?
答:不能。备注是自由文本,多数记录留空,填了的也只是一句话描述,既非结构化也不构成诊断。要做有监督学习,只能自建标签,或改用带标注的心电库。
问:十二导联参考能直接拿来对齐吗?
答:不能直接对齐。参考只有十秒,实验段最长五分钟,两套设备独立启动,没有同步标记。可行做法是用 R 波互相关估计时移,再在段级别做形态比较(§4.5)。
问:为什么参考 XML 里会出现负三万二千七百六十八?
答:那是短整型的最小值,被用作「无数据」的哨兵。中位模板的尾部常用它填充。把它当信号值参与统计,会得到断崖式的异常值,读取时必须先剔除(§5.4)。
问:1 kHz 采样是不是意味着可以做高频分析?
答:不是。采样率只决定时间分辨率,实际带宽由 0.5 至 40 Hz 的带通决定。40 Hz 以上没有有效成分,做高频 QRS 或晚电位分析没有意义(§3.3)。
问:能商用吗?
答:平台页面写的是 CC BY 4.0,允许商用,条件是署名;仓库 README 却写仅限研究、禁止再分发。两个口径并存,官方未说明以哪个为准。稳妥做法是先取得作者书面确认(§7.2)。
问:为什么元数据有一百四十九条而信号文件只有一百四十五个?
答:两处口径不同。元数据按记录登记,信号目录按实际归档。差额的四条只有元数据、没有对应文本文件。建索引时应以文件为准,并把差异记进日志(§7.3)。
问:能做心电身份识别吗?
答:可以,而且这是它的设计用途之一。前作已经用同一套硬件做过识别实验,本库的重复会话正好支持同人跨会话的模板研究。但样本只有八十六人,做大规模识别基准不够。
问:和消费级手环的数据比,哪个更适合做产品预研?
答:本库更接近可复现的实验条件:同一硬件、同一坐姿、四纹理对照、带部分参考。手环数据的场景更真实,但变量不可控。做电极与结构的选型,用本库;做真实场景的鲁棒性,用手环或自采数据(§2.5)。
术语表
| 术语 | 英文 | 在本库中的含义 |
|---|---|---|
| 大腿心电 | thigh ECG | 电极置于大腿后侧取得的心电信号 |
| 单导联 | single-lead | 一对电极之间的电位差,非标准导联 |
| 不可见心电 | invisible ECG | 传感器嵌入家具,人身上无器件 |
| 干电极 | dry electrode | 不需导电膏的电极,靠压力接触 |
| 聚合电极 | polymeric electrode | 以高分子材料制成的电极 |
| 电极纹理 | electrode texture | 电极表面的几何形状,本库四种 |
| 座圈 | toilet seat | 承载电极的家具部件 |
| 差分信号 | differential signal | 两电极之间的电位差 |
| 参考心电 | reference ECG | 临床十二导联,作为形态基准 |
| 中位模板 | median template | 多个心搏逐点取中位数得到的形态 |
| 哨兵值 | sentinel value | 负三万二千七百六十八,表示无数据 |
| 前端 | analog front end | 放大与滤波的模拟电路 |
| 增益 | gain | 本库为一万一千 |
| 带通 | band-pass | 本库 0.5 至 40 Hz |
| 量化位数 | bit depth | 本库 10 位 |
| 采样率 | sampling rate | 本库 1 kHz |
| 序号 | nSeq | 四位循环计数器,用于发现丢包 |
| 会话 | session | 一次坐上座圈的完整采集 |
| 重复会话 | repeat session | 同一受试者的第二次或第三次采集 |
| 便利样本 | convenience sample | 非随机抽取的志愿者集合 |
| 十二导联 | 12-lead ECG | 标准临床心电导联体系 |
| 私有格式 | proprietary format | 厂商自定义的 XML 结构 |
| 配准 | registration | 把两段信号在时间上对齐 |
| 信号质量 | signal quality | 可检出心搏的比例与噪声水平 |
| 生物识别 | biometrics | 用生理信号做身份判定 |
| 可发现 | findable | DAIMS 维度之一,有无 DOI 与索引 |
| 可互操作 | interoperable | DAIMS 维度之一,格式是否通用 |
| 可追溯 | traceable | DAIMS 维度之一,能否回溯来源 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 受试者数 | 86 | 官方摘要 | 官方 |
| 记录数(声明) | 149 | 官方摘要与元数据表 | 官方 |
| 实验信号文件数 | 145 | 目录逐项 | 官方文件 |
| 参考文件数 | 23 | 目录逐项 | 官方文件 |
| 女性人数 | 50 | 官方摘要 | 官方 |
| 男性人数 | 36 | 官方摘要 | 官方 |
| 年龄均值 | 31.73 | 官方摘要 | 官方 |
| 体重均值 | 66.89 | 官方摘要 | 官方 |
| 身高均值 | 166.82 | 官方摘要 | 官方 |
| 信号路数 | 4 | 官方摘要与列结构 | 官方 |
| 采样率 | 1000 | 官方方法与头信息 | 官方 |
| 量化位数 | 10 | 官方方法与头信息 | 官方 |
| 增益 | 一万一千 | 官方方法 | 官方 |
| 带宽 | 0.5 至 40 Hz | 官方方法 | 官方 |
| 单次最长时长 | 五分钟 | 官方方法 | 官方 |
| 参考段时长 | 十秒 | 官方说明与点数 | 官方 |
| 未压缩体积 | 520.1 MB | 官方文件列表 | 官方 |
| ZIP 体积 | 74.6 MB | 官方下载项 | 官方 |
| 版本 | 1.0.1 | 官方页面 | 官方 |
| 伦理批号 | INV496 | 官方伦理段 | 官方 |
| 每级量化幅度 | 约 2.9 微伏 | 3 毫伏除以 1024 | 推导 |
| 参考采样 | 每秒 500 点 | 5000 点除以 10 秒 | 推导 |
附录 B:数字的来源分层
| 层级 | 含义 | 本页涉及的数字 |
|---|---|---|
| 官方页面 | PhysioNet 项目页直接给出 | 人数、性别构成、均值、许可、版本、体积 |
| 官方文件 | 目录清单、README、元数据表、XML 结构 | 文件数、列结构、字段取值、点数 |
| 论文摘要 | Scientific Data 与 Europe PMC 摘要 | 用途定位与质量分析的题材,不作规模来源 |
| 推导 | 由官方数字换算 | 每级量化幅度、参考采样率、单文件体积估算 |
| 读法 | 依据命名与致谢提出的解释 | tOLIet 与卫浴企业同名的推断 |
前三层可直接引用;第四层可复算,引用时需自行计算;第五层必须写明是推断,不能当官方定义。
附录 C:完整参考文献
| 序号 | 文献 | 用途 |
|---|---|---|
| 1 | Silva AS, Plácido da Silva H, Correia M, Gonçalves da Costa AC, Laranjo S. tOLIet (version 1.0.1). PhysioNet, 2026. DOI 10.13026/411k-1476 | 数据集引用 |
| 2 | Silva AS, Correia MV, Laranjo SM, Fonseca H, Gonçalves da Costa AC, Plácido da Silva H. Single-lead Thigh ECG Dataset (tOLIet) with Analysis of BMI Effects on Cardiac Signal Quality. Sci Data 13(1), 2026. DOI 10.1038/s41597-026-06713-6 | 数据描述论文 |
| 3 | dos Santos Silva A, Almeida H, da Silva H, Oliveira A. Design and evaluation of a novel approach to invisible electrocardiography in sanitary facilities using polymeric electrodes. Sci Rep 11:6222, 2021 | 概念验证 |
| 4 | Silva AS, Correia MV, de Melo F, da Silva HP. Identity recognition in sanitary facilities using invisible electrocardiography. Sensors 22(11):4201, 2022 | 身份识别 |
| 5 | Pollard T 等. PhysioNet as a global platform for biomedical research. Nature Health, 2026 | 平台引用 |
| 6 | Creative Commons. Attribution 4.0 International Public License | 许可文本 |
附录 D:任务代码
一段把全库读成索引、并给出每条记录可用路数的脚本。
import csv
import numpy as np
from pathlib import Path
def scan(root):
root = Path(root)
refs = {p.stem for p in (root / "ECG_REF").glob("*.XML")}
rows = []
for p in sorted((root / "ECG_EXP").glob("*.txt")):
x = np.loadtxt(p, delimiter="\t", dtype=np.int32)
mv = ((1024 - x[:, 5:9]) / 1024 - 0.5) * 3
#-- 用标准差粗判某路是否接触良好
usable = [int(np.std(mv[:, k]) > 0.05) for k in range(4)]
rows.append({
"record": p.stem,
"subject": p.stem.split("_")[0],
"seconds": round(x.shape[0] / 1000, 1),
"usable": sum(usable),
"has_ref": p.stem in refs,
"nseq_ok": bool(np.all(np.diff(x[:, 0]) % 16 == 1)),
})
return rows
rows = scan("tollet")
print(len(rows), sum(r["has_ref"] for r in rows))
print([r for r in rows if r["record"] == "67_2"])
脚本里有两处刻意的写法。第一,标准差阈值 0.05 毫伏只用来粗筛接触良好与否,不作为质量结论;不同纹理的正常幅度不同,阈值应按通道分别设定。第二,丢包检查用模十六的差值,因为 nSeq 是四位计数器,正向递增时差值为 1,回绕时差值为负十五,取模后仍为 1。
| 输出列 | 含义 | 用途 |
|---|---|---|
| record | 记录编号 | 主键 |
| subject | 受试者编号 | 同人分组 |
| seconds | 时长 | 切窗可行性 |
| usable | 标准差超过阈值的路数 | 粗筛 |
| has_ref | 是否有参考 | 对照分析 |
| nseq_ok | 是否无丢包 | 完整性 |
跑完之后,把 usable 与 has_ref 交叉起来,就得到四类记录:四路齐全且有参考、四路齐全但无参考、部分可用、几乎不可用。§9.5 说的三条路径,起点都是这张表。
附录 E:如果只记五件事
| 序号 | 要点 |
|---|---|
| 一 | 这是首个公开的大腿单导联心电数据集,电极嵌在马桶座圈里,人坐下即采集 |
| 二 | 86 名志愿者、149 条记录,四路信号来自四种表面纹理的干电极,非四个标准导联 |
| 三 | 1 kHz 采样、10 位量化、0.5 至 40 Hz 带通,规格接近消费级器件,不是诊断级 |
| 四 | 仅 23 条记录带十秒 12 导联参考,且无同步标记,只能段级比对 |
| 五 | 无逐搏与诊断标签,适合做信号质量、纹理选型、身份识别与可行性论证 |
编辑说明
本页按 v4 编辑纪律撰写:只写规模、结构、边界三类数字,不做分布统计与逐条样本明细;官方自相矛盾处并列两个口径,不下判断。页面中的量化幅度、参考采样率与体积估算均标注为推导,与官方表述分开。若 PhysioNet 页面修订版本号或更新文件列表,以官方为准,本页随之更新。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cebsdb — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- cardiac-accel-canine-porcine — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- cinc-2011 — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- butppg — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- cardiowave-portable — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- butqdb — 共享标签:生理信号 / 心电信号 / 可穿戴传感
- drivedb — 共享标签:生理信号 / 心电信号 / 可穿戴传感
- physionet-cinc-2017 — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- icentia11k — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
- auricle-wearable-cv — 共享标签:生理信号 / 心电信号 / 可穿戴传感 / 心血管疾病
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

