引产与剖宫产的子宫肌电 — ICEHG DS 妊娠电生理库

91 次妊娠 / 126 条记录 / 20 Hz 三路差分

来源 https://physionet.org/content/icehg-ds/1.0.1/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 14
引产与剖宫产的子宫肌电 — ICEHG DS 妊娠电生理库

信息速览

数据集名称引产与剖宫产的子宫肌电 — ICEHG DS 妊娠电生理库
数据类型时序信号,波形,元数据,文献引用
规模91 次妊娠 / 126 条记录(62 条早期 + 64 条晚期)
接入方式https://physionet.org/content/icehg-ds/1.0.1/
AI 就绪度

引产与剖宫产子宫肌电数据集(Induced Cesarean EHG DataSet,ICEHG DS)是 PhysioNet 上的一份体表子宫肌电记录集,由卢布尔雅那大学计算机与信息科学学院的 Franc Jager 整理发布。它收录 126 条约 30 分钟的记录,来自 91 次妊娠,全部是足月分娩,但结局分成三类:临产始终没有自行发动、最终只能引产的,未经引产直接急诊剖宫产的,以及引产失败后转剖的。

它的价值不在体量,而在于它补的那块空。过去二十年,用子宫肌电做早产预测的研究几乎都只在「自发早产」与「自发足月」之间做二分类,把足月引产与足月剖宫产当作噪声排除在外。可真实产科里这两类合起来占足月分娩的相当一部分,模型一旦上线就会撞上它们。这批记录把这两类单独成组,还给出了孕 23 周与孕 31 周两个可以提前取数的时点。

全库未压缩 115.6 MB,压缩包 89.0 MB,按 ODC-ODbL 1.0 开放,下载不需要注册。下文先说清它能回答什么、不能回答什么,再逐层拆开文件结构、采集场景与取数路径。一屏速览见下表。

维度 内容
全名 Induced Cesarean EHG DataSet (ICEHG DS)
中文名 引产与剖宫产子宫肌电数据集
托管平台 PhysioNet(MIT 主导的生理信号数据平台)
版本与日期 1.0.1,2023 年 10 月 8 日;1.0.0 为同年 9 月 22 日
作者 Franc Jager(卢布尔雅那大学计算机与信息科学学院)
采集机构 卢布尔雅那大学医学中心围产医学临床部
采集年份 1997–2006 年(自一个更大的记录池中选出)
受试者 91 次妊娠
记录数 126 条(孕 23 周前后 62 条,孕 31 周前后 64 条)
结局分组 引产 81 条 / 剖宫产 19 条 / 引产转剖 26 条
通道 每条 6 路:3 路差分原始 + 3 路滤波
采样与量化 20 Hz,16 位,±2.5 mV,13107 单位 = 1 mV
单条时长 官方称约 30 分钟
标注 无波形标注,只有头文件里的临床字段
体积 未压缩 115.6 MB,压缩包 89.0 MB
许可 ODC-ODbL 1.0(署名 + 相同方式共享)
DOI 10.13026/zw34-n382(1.0.1)
官方入口 https://physionet.org/content/icehg-ds/1.0.1/

§1 它要解决的具体麻烦

1.1 早产预测的对照组一直缺一块

用子宫肌电预测早产,标准的做法是把「最终早产」与「最终足月自然分娩」两组记录放在一起分类。这个设置干净、容易解释,也容易做出好看的曲线。问题在于它把「足月」当成了一个同质的类别。

真实的足月分娩至少有三条路。一条是自然发动、经阴道分娩;一条是临产迟迟不发动,用缩宫素或前列腺素引产;还有一条是没有经过引产就直接做了剖宫产,急诊居多。后两条路在孕 23 周与孕 31 周时,从腹部电信号上看不出任何异样——那时的子宫还没有开始为分娩做电学准备,记录本身是「正常孕期」的样子,结局却由几周之后的临床判断决定。

这带来两个后果。一是模型在真实人群里的表现会低于论文里的数字,因为它从未见过这些样本。二是研究结论容易被误读成「子宫肌电预测的是分娩方式」,而实际上它预测的是「会不会在足月之前发动」,两者不是一回事。ICEHG DS 的出现,是把这个缺口显式地摆出来:三类足月结局各有独立的分组,谁想合并谁自己合并,但至少不能再假装它们不存在。

1.2 三条常见的错误期待

期待一:把它当成早产数据集。 库里没有一条早产记录。三条结局的分娩孕周均值都在 39 周以上,官方给出的分组均值是引产 39.8 周、剖宫产 39.7 周、引产转剖 39.4 周。要做早产预测,正样本必须来自 TPEHG DB 或 TPEHGT DS。

期待二:以为记录时刻在分娩之前,就等于标签干净。 记录确实早于结局,孕 23 周采的信号不可能被分娩方式污染,这是它作为前瞻性任务素材的最大优点。但「引产」这个标签本身是临床决策的结果,取决于宫颈评分、胎位、胎心监护、产妇意愿与当班医生的判断,而这些信息一条都没有记录。标签干净,标签的含义却不干净。

期待三:以为 20 Hz 太粗糙,做不了什么。 20 Hz 对应 10 Hz 的奈奎斯特上限,而子宫肌电的有效成分集中在 0.08 至 5 Hz,抗混叠滤波器就切在 5 Hz。采样率是为这个频段量身定的,不是性能妥协。真正的代价在别处:没有高频成分,就看不了母体心电干扰的细节,也做不了肌电尖峰的形态学分析。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
给早产模型补上足月非自然分娩这一类 三类足月结局共 126 条,分组明确 够,作为负类补充
在孕 23 周就预测最终分娩方式 62 条早期记录,结局事后已知 够做可行性,样本偏少
比较同一次妊娠两个孕周的信号变化 35 次妊娠有早晚配对记录 够,是本库最独特的用法
分析子宫肌电的频谱与传播 三路差分、20 Hz、零相位滤波版本 够,频段上限 5 Hz
把电活动与宫缩压力对齐 无压力通道 不够
定位子宫电活动的空间起源 四枚电极、7 厘米见方、无影像配准 不够
训练一个可上线的分娩方式分类器 91 次妊娠、单一中心、1997–2006 年人群 不够
做母胎心电分离或胎心提取 无母体心电参考通道 不够

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

你的处境 它能帮你什么 下一步该做什么
手上有一个早产预测模型,上线前发现足月引产样本被误判 提供三类足月结局的真实波形,可直接当困难负例 按妊娠分组重训,报告加入这三类后的性能下降幅度
想验证「孕期子宫电活动随孕周如何变化」 同一批人有孕 23 周与孕 31 周两条配对记录 取 Pair_RecID 成对分析,避免跨人比较
在做引产成功率预测 引产与引产转剖两组可以对照 只能做机制层面的对照,指征信息缺失,不能做临床决策模型
需要一份小体量的产科电生理素材做教学 全库百兆出头,一次下载即可完整跑通 用 §9.2 的流程取一条配对记录,先看原始再看滤波
在评估不同滤波方案对子宫肌电的影响 原始与 0.08 至 5 Hz 零相位滤波成对存放 以滤波版为参照,比较自己的方案,注意首尾 150 秒的瞬态
要给一篇产科信号论文找可引用的公开数据 有 DOI、固定版本、单作者署名 引用时写清版本与记录名,见 §9.3

1.5 一句话判断

它不是一份能直接训练出产品的数据,而是一份把「足月分娩不止一条路」这件事变成可计算样本的对照集;用它的人多半不是要更多数据,而是要一个此前被系统性排除的类别。

1.6 不适合谁:四条边界

不适合拿它做早产检测。 全库没有早产样本,一条都没有。想验证早产模型,正样本必须另找,本库最多充当足月侧的一部分。

不适合拿它做单条记录的临床推断。 头文件里的临床字段只有八项:年龄、身高、两次记录的体重、记录孕周、分娩孕周、胎盘位置、新生儿体重。没有产次、没有既往剖宫产史、没有引产指征、没有 Bishop 评分、没有妊娠合并症。任何「哪类产妇更容易被引产」的问题,在这份数据上都答不了。

不适合拿它做跨中心泛化。 全部记录来自卢布尔雅那一家的围产医学临床部,采集年份是 1997 至 2006 年。那时的引产指征、缩宫素方案、剖宫产率与今天不同,换一个国家的产科,标签的生成机制就变了。

不适合拿它做波形级的分割或检测。 没有宫缩区间标注,没有肌电爆发标注,没有伪迹标记。滤波版本首尾各 150 秒还有滤波器瞬态,官方建议置零或弃用。要拿它做事件检测,得先自己标一遍。

§2 数据构成与规格

2.1 一条记录由三个文件、六路信号组成

数据沿用 WFDB 格式。一条记录由同名三个文件构成:.hea 是纯文本头文件,第一行写记录名、信号路数、采样率与样本数,随后每路信号一行;.dat 是二进制信号本体,六路按采样点交错存放;_fltrd.jpg 是一张对照图,把三路原始信号与三路滤波后的信号上下排在一起,给人眼看的。

六路信号的次序是固定的,原始与滤波交替:S1、S1 的滤波版、S2、S2 的滤波版、S3、S3 的滤波版。头文件里的信号名把这层关系直接写了出来,滤波通道叫 S1_DOCFILT-4-0.08-5,四个数字依次表示四极点、低端 0.08 Hz、高端 5 Hz。

文件 扩展名 内容 是否必需
头文件 .hea 记录参数、六路声明、十行临床字段 必需
信号本体 .dat 六路 16 位整数,按采样点交错 必需
波形对照图 _fltrd.jpg 三路原始与三路滤波的并排截图 可选
全局清单 RECORDS 126 行,每行「子目录/记录名」 强烈建议
分组清单 RECORDS_induced 等三份 每行一次妊娠,两列分别为早期与晚期记录 强烈建议
临床表 Table_1.txt 至 Table_3.txt 三种结局各自的逐次妊娠明细表 可选
许可原文 LICENSE.txt ODbL 1.0 全文 备查
校验和 SHA256SUMS.txt 逐文件 SHA256 可选
MATLAB 版 icehgdsmat/ 同一批信号的 .mat 与 .hea 可选

.dat 的体积可以直接算出来:六路各约三万五千个采样点、每点两字节,一条记录约四百多千字节。全库 126 条记录加上 126 张对照图,正好落在 115.6 MB 这个量级。

2.2 字段与记录的完整字典

位置 字段 含义 取值示例
.hea 第 1 行 记录名 icehg 加原始记录池编号 icehg665
.hea 第 1 行 信号路数 固定为 6 6
.hea 第 1 行 采样率 每秒采样点数,全库一致 20
.hea 第 1 行 采样点数 每路信号的样本数,约三万五千 35340
.hea 信号行 存储格式 16 表示每样本两字节整数 16
.hea 信号行 增益 每毫伏对应的整数单位数 13107/mV
.hea 信号行 位宽 量化位数 16
.hea 信号行 基线 零电平对应的整数值 0
.hea 信号行 初始值 第一个样本的整数值 2685
.hea 信号行 校验和 全段样本累加和 11166
.hea 信号行 信号名 S1、S2、S3 或带滤波后缀 S3_DOCFILT-4-0.08-5
.hea 注释行 RecID 原始记录池编号 665
.hea 注释行 RecType 分娩方式三选一 Induced
.hea 注释行 Gestation 分娩时孕周,周为单位,一位小数 37.1
.hea 注释行 Rectime 记录时孕周,周为单位,一位小数 23.1
.hea 注释行 Age 母亲年龄,岁 26
.hea 注释行 Weight 记录时体重,千克 83
.hea 注释行 Height 身高,厘米 165
.hea 注释行 Placental_position 胎盘位置,两值之一 front
.hea 注释行 Newborn_weight 新生儿体重,克 2860
.hea 注释行 Pair_RecID 同一次妊娠另一条记录的编号,无则为 0 664

字段表的长度说明了这份数据的性格:参数六行,临床十行,一篇头文件不到二十行就写完了。它把该交代的交代得很清楚——孕周精确到零点一周、体重精确到千克、新生儿体重精确到克——但没有一个字段能回答「为什么引产」。

2.3 一条记录的完整解剖

以孕 23 周的那条 icehg665 为例,头文件全文如下:

icehg665 6 20 35340
icehg665.dat 16 13107/mV 16 0 2685 11166 0 S1
icehg665.dat 16 13107/mV 16 0 22 -955 0 S1_DOCFILT-4-0.08-5
icehg665.dat 16 13107/mV 16 0 1883 18194 0 S2
icehg665.dat 16 13107/mV 16 0 16 -1492 0 S2_DOCFILT-4-0.08-5
icehg665.dat 16 13107/mV 16 0 2215 -12402 0 S3
icehg665.dat 16 13107/mV 16 0 18 1452 0 S3_DOCFILT-4-0.08-5
 #Comments:
 #    RecID 665
 #    RecType Induced
 #    Gestation 37.1
 #    Rectime 23.1
 #    Age 26
 #    Weight 83
 #    Placental_position front
 #    Height 165
 #    Newborn_weight 2860
 #    Pair_RecID 664

第一行四个数:记录名、六路信号、20 Hz、35340 个采样点。35340 除以 20 得到 1767 秒,即 29 分 27 秒,与官方说的「约 30 分钟」对得上。十六行信号声明里,六路共用同一个 .dat,靠行序区分通道。

再看临床段。分娩孕周 37.1,记录孕周 23.1,两者相差整十四周——这条记录采集时,分娩还有三个多月。新生儿体重 2860 克,胎盘在前壁,母亲 26 岁、身高 165 厘米,两次记录之间体重从 83 千克变成 84 千克。Pair_RecID 664 指向同一次妊娠的另一条记录,那条在孕 30.4 周采集。

读进内存只要三行:

import wfdb

#-- 记录放在子目录里,pn_dir 必须指到子目录,否则会 404
rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
print(rec.fs, rec.sig_len, rec.n_sig)
print(rec.sig_name)
print(rec.comments)

rec.p_signal 已经按增益换算成毫伏,rec.d_signal 是原始整数。两者相差 13107 倍,混用不会报错,只会让所有幅度结论失效。

2.4 六个子目录与三张组内清单

目录结构是两级:根目录下六个子目录,按「孕周 + 结局」命名,记录不重复。命名规则是 early_ 或 later_ 加上结局名,三个结局名分别是 induced、cesarean、induced-cesarean。

子目录 含义 记录数 对应妊娠数
early_induced 孕 23 周前后,引产 38 59 次妊娠的早期部分
later_induced 孕 31 周前后,引产 43 同上,晚期部分
early_cesarean 孕 23 周前后,剖宫产 11 13 次妊娠的早期部分
later_cesarean 孕 31 周前后,剖宫产 8 同上,晚期部分
early_induced-cesarean 孕 23 周前后,引产转剖 13 19 次妊娠的早期部分
later_induced-cesarean 孕 31 周前后,引产转剖 13 同上,晚期部分
icehgdsmat MATLAB 版信号与头文件 与上同 同

六组数字互相对得上:38 加 43 等于 81,11 加 8 等于 19,13 加 13 等于 26,三组相加正好 126;59 加 13 加 19 等于 91,也正好是妊娠数。62 条早期与 64 条晚期相加同样是 126。这套账目在官方页面、RECORDS 清单与头文件三处一致,没有对不上的地方。

核对这两件事不需要下载全库,两条命令就够:

#-- 清单应是 126 行
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | wc -l

#-- 按子目录统计,六个组应当落在 38 / 43 / 11 / 8 / 13 / 13
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | cut -d/ -f1 | sort | uniq -c

三份分组清单是理解配对关系的钥匙。每行一次妊娠,第一列是早期记录,第二列是晚期记录,缺哪一条就在那一列写 0。以引产组为例,59 行里有一部分行只有一列有值,说明那位孕妇只赶上了一个孕周。

early_induced/icehg665   later_induced/icehg664
early_induced/icehg757   later_induced/icehg756
0                        later_induced/icehg1562

清单里有一个细节值得记下来:配对的两条记录编号常常只差一,665 与 664、757 与 756、774 与 775、805 与 806、907 与 908 都是如此。这不是巧合,而是原始记录池按妊娠连续编号的结果——同一次妊娠的两次检查被登记在相邻的号上。写配对逻辑时不能依赖这个规律,但可以用它做一次 sanity check。§4.3 的案例就是这种配对最典型的样子。

2.5 与同类资源的字段差异

字段 ICEHG DS TPEHGT DS ehgdb(冰岛)
电极数 4 枚,3 路差分 6 枚,3 路差分 16 枚,多路
采样率 20 Hz 20 Hz 更高,通道更多
压力通道 无 有,第 8 路 无
孕周窗口 23 周与 31 周 31 周前后单窗口 孕期与产程多窗口
结局标注 引产、剖宫产、引产转剖 早产、足月、未孕 早产与足月
配对记录 有,Pair_RecID 无 视记录而定
许可 ODC-ODbL 1.0 ODC-By 1.0 见该库页面

三者的差别不在质量,而在各自回答的问题。TPEHGT DS 关心宫缩与机械压力的对应,所以有压力通道;ehgdb 关心空间传播,所以用十六枚电极;ICEHG DS 关心分娩方式的早期可预测性,所以要在孕 23 周就取数,并且必须把结局分细。选型时先问自己要哪一层信息,再挑库。

§3 它是谁的子宫肌电:一个人的池子里切出来的一块

3.1 贡献者与机构

数据集只有一个署名作者:Franc Jager,卢布尔雅那大学计算机与信息科学学院。他在同一所大学所属的生物医学计算机系统与成像实验室工作,PhysioNet 上与他名字相连的数据集不止这一份——TPEHG DB 与 TPEHGT DS 都出自同一个实验室、同一位作者之手。数据集页面上的联络网址指向该实验室,而不是医院。

临床一侧由卢布尔雅那大学医学中心围产医学临床部提供。官方致谢写明,该临床部在数据采集上给予了配合。伦理审批由斯洛文尼亚共和国国家医学伦理委员会出具,编号 32/01/97,所有参与者都签署了书面知情同意。

分工可以拆成五层:作者与整理者负责选样、格式化、写文档与发布;临床采集方负责 1997 至 2006 年间的实际记录;伦理审批由斯洛文尼亚共和国国家医学伦理委员会出具,批件编号 32/01/97;资助方是斯洛文尼亚研究署(ARRS),对应项目名为「生殖健康的代谢与先天因素,出生 III」;PhysioNet 负责托管、DOI 与版本管理。技术侧与临床侧分属两个机构,作者本人不在医院编制内,这一点决定了文档的写法——方法段落写的是协议,不是临床流程。

资助信息写在致谢段,作者同时声明无利益冲突,并注明资助方未参与设计、采集、写作与发表决定。这类声明在 PhysioNet 的项目页上并不常见,多数项目页只列机构不列基金号。

3.2 时间线

阶段 时间 状态
采集 1997–2006 在围产医学临床部积累记录池,共一千二百余条
第一次切分 2011 TPEHG DB 上线,取走自发早产与自发足月
第二次切分 2018 TPEHGT DS 上线,取走带宫缩标注的足月与早产
配对研究 2022 Pirnar 等人用三个库合并分析,验证频谱峰值可分开早产组
上线 2023-09-22 ICEHG DS 1.0.0 发布
修订 2023-10-08 1.0.1,十六天后更新,变更内容未在页面说明
现状 2026 仍为 1.0.1,项目页访问量三百余次

这条时间线有一个容易忽略的点:记录采集在 2006 年就结束了,公开却在十七年之后。中间那十七年,这批「结局是引产或剖宫产」的记录一直躺在池子里没被用过,因为 2011 年与 2018 年的两次切分都只关心自发分娩。

3.3 采集场景:一次产科门诊的常规检查

采集过程没有特殊之处,正因为没有特殊之处,它才可复制。四枚 Ag/AgCl 电极贴在腹部表面,以脐为中心上下对称,相邻电极间距 7 厘米。官方给的编号是 E1 到 E4,实际贴法见项目页的 Figure_1;文字部分只交代了间距与对称关系,没有逐枚说明方位。

环节 做法 后果
电极 四枚 Ag/AgCl,脐周对称,间距 7 厘米 覆盖范围约一个手掌,无空间分辨力
导联 三路差分,S1、S2、S3 只能得到三个方向的投影
时长 约 30 分钟 足够覆盖数次宫缩或一段静息
体位与环境 官方未描述 无法判断是否同一体位、同一房间
抗混叠 三极点巴特沃斯低通,截止 5 Hz 5 Hz 以上成分一律丢失
数字化 20 Hz,16 位,±2.5 毫伏 分辨率 0.076 微伏
记录时机 常规产检时,孕 23 周或孕 31 周前后 非临产、非产程

这一步的物理含义值得展开。子宫肌电是平滑肌细胞同步除极产生的电位,幅度在几十到几百微伏量级,频率集中在 0.08 至 5 Hz。记录时电极贴在腹壁上,中间隔着皮肤、脂肪、筋膜与子宫壁,信号被大幅衰减,还要与母体心电、呼吸、肠蠕动、运动伪迹共处一段频谱。7 厘米的电极间距是一个折中:太近则差分信号太弱,太远则两枚电极看到的可能是不同的电活动区域。

3.4 九十一次妊娠与三种分娩结局

官方按结局定义了三组,定义写得很具体,值得原样保留:

分组 官方定义 记录数 / 妊娠数
引产(Induced) 预期自然临产,最终足月但临产未自行发动,需人工引产 81 / 59
剖宫产(Cesarean) 足月,未经引产直接急诊剖宫产 19 / 13
引产转剖(Induced-cesarean) 足月,引产失败后转急诊剖宫产 26 / 19
合计 三种结局均为足月 126 / 91

三组的入选前提是同一个:记录当时,这批妊娠被判断为会自然进展到足月阴道分娩。结局是事后才知道的。这个设计让标签与信号之间不存在因果倒置——信号在先,结局在后,中间隔了七到十六周。

分组 分娩孕周(均值 ± 标准差) 记录孕周窗口
引产 39.8 ± 1.4 周 23 周与 31 周
剖宫产 39.7 ± 1.1 周 23 周与 31 周
引产转剖 39.4 ± 0.9 周 23 周与 31 周

三个均值都落在足月区间,彼此相差不到半周。这意味着单靠分娩孕周无法区分三组,也意味着任何想从信号里读出结局的模型,都不能借用「孕周越短越危险」这条捷径。

3.5 为什么这批记录只能出自 1997–2006 年的那个池子

原始记录池的规模是一千二百余条,官方写作「a total of 1,211」。这些记录来自两个来源:常规产检的普通人群,以及因先兆早产入院观察的患者。采集横跨九年,用同一套设备、同一套协议。

一千二百余条记录,最终被切成三份公开数据:2011 年的 TPEHG DB 取走自发早产与自发足月,2018 年的 TPEHGT DS 取走带宫缩标注的部分,2023 年的 ICEHG DS 取走足月引产与剖宫产。三次切分按结局互斥,同一妊娠不会同时出现在两份公开数据里——这是官方描述的选择标准所决定的。

按今天的标准,这样的池子几乎不可能重建。它需要一家医院连续九年用同一台设备、同一套电极位置做常规检查,需要伦理批件覆盖一个横跨九年的项目,还需要有人在十七年后回头把当年判定为「会自然分娩」的病例一个个找出来、核对结局、重新格式化。三项条件里任何一项断掉,数据就散了。

3.6 与 TPEHG 两条库的血缘

同门三份数据的关系可以这样理解:TPEHG DB 回答「会不会早产」,TPEHGT DS 回答「宫缩什么时候来」,ICEHG DS 回答「足月了,但是怎么生的」。三者共用采集协议与设备,因此可以直接合并成一个更大的池子使用,官方明确推荐这种做法。

合并的价值在一篇 2022 年的研究里被具体化了。Pirnar、Jager 与 Geršak 把三份数据的晚期记录放在一起,比较早产、足月自发、引产、剖宫产、引产转剖五个组,发现归一化功率谱在 0.125 至 0.575 Hz 频段的峰值幅度,能有效把早产组与其他所有足月组分开。这个结果反过来说明:足月各组之间靠这个特征分不开。分不开不是坏消息——它恰恰说明「足月但非自然分娩」在电生理上更接近正常足月,而不是接近早产。模型若把它们误判成早产,错在模型的类别边界,不在信号。

§4 它最独特的东西:把结局拆成三类,还给了两个时间点

4.1 四枚电极、三路差分、一路可以算出来

四枚电极只能构成三路独立差分,这是电路决定的:四个节点的电位差,去掉一个公共参考后只剩三个自由度。官方给的三个式子是 S1 = E2 − E1(上两枚之间)、S2 = E2 − E3(左两枚之间)、S3 = E4 − E3(下两枚之间)。

信号 电极对 方向与来源
S1 E2 − E1 水平方向,直接采集
S2 E2 − E3 垂直方向,直接采集
S3 E4 − E3 水平方向,直接采集
S4 E4 − E1 垂直方向,由前三路合成

第四路 S4 可以用 S1 − S2 + S3 算出来。推导过程只用了一次代换:由 S3 = E4 − E3 得 E4 = S3 + E3,由 S1 = E2 − E1 得 E1 = E2 − S1,两式相减即得 E4 − E1 = S1 − S2 + S3。

官方还给了一个精度声明:合成出来的 S4 与真正在 E4 与 E1 之间测到的信号相比,逐样本差值的标准差小于相邻两个整数刻度之差 0.076 微伏,接近模数转换器的量化误差 0.038 微伏。换句话说,这个合成几乎是无损的,因为三路差分已经把四个节点的信息完整保留了下来。反过来说,单极信号 E1 到 E4 无法从三路差分里还原——差分会丢掉共模成分,这是不可逆的。

4.2 原始与滤波成对存放

.dat 里同时存了两份信号:一份是数字化之后的原始波形,一份是经四极点 0.08 至 5 Hz 巴特沃斯带通、双向滤波后的版本。双向滤波的作用是抵消相位延迟——正向滤一遍再反向滤一遍,群延迟相互抵消,输出与输入在时间上对齐。子宫肌电的传播时序分析依赖毫秒级对齐,这一步是必要的。

处理 参数 目的 副作用
模拟抗混叠 三极点低通,截止 5 Hz 防止 10 Hz 以上折叠进带内 5 Hz 以上信息永久丢失
带通滤波 四极点,0.08–5 Hz 去掉基线漂移与残余高频 首尾各 150 秒出现瞬态
滤波方向 双向 零相位,波形不移位 无法在线实时使用
首尾处理 官方建议置零或弃用 规避瞬态 每条记录少 300 秒,约六分之一

最后一行是最容易被忽略的边界。一条记录名义上 1767 秒,去掉首尾各 150 秒,剩 1467 秒,约 24 分半。做频谱估计时若把整段都喂进去,两端的瞬态会被当成低频能量,抬高 0.1 Hz 附近的谱峰——正好落在研究者最关心的频段里。

4.3 案例:664 与 665,同一个人相隔七周

配对记录是这份数据最值得单独讲的机制。以引产组里编号相邻的这一对为例:

项目 icehg665 icehg664
子目录 early_induced later_induced
记录孕周 23.1 周 30.4 周
采样点数 35340 35080
折合时长 29 分 27 秒 29 分 14 秒
分娩方式 Induced Induced
分娩孕周 37.1 周 37.1 周
母亲年龄 26 岁 26 岁
体重 83 千克 84 千克
身高 165 厘米 165 厘米
胎盘位置 front front
新生儿体重 2860 克 2860 克
Pair_RecID 664 665

两条记录除了孕周与体重,其余字段完全相同——因为它们本来就是同一次妊娠。这正是配对机制的意义:它把「同一个人的两个时间点」变成了一次可计算的纵向对照,而不是两次互不相干的横断面采样。

这一对还暴露了一个使用上的细节。分娩孕周 37.1 周,比引产组的均值 39.8 周早了近三周,刚好压在足月定义的下沿。也就是说,这个「Induced」标签覆盖的孕周跨度不小,从 37 周出头到 40 周以上都有。做分组统计时,孕周是一个必须控制的变量,不能默认三组孕周分布一致。

§2.4 里提到的编号相邻规律在这一对上体现得最清楚:665 与 664。但规律只是规律,同一个池子里也有相差很远的配对,写代码时仍应以 Pair_RecID 字段为准。

4.4 标注只有临床字段,没有波形标注

这是全库最需要说清的一件事。数据里不存在任何以时间为单位的标注:没有宫缩起点与终点,没有肌电爆发区间,没有伪迹段,没有分娩方式之外的任何事件标记。

标注类型 是否存在 说明
宫缩区间 否 同门的 TPEHGT DS 有,本库没有
肌电爆发起止 否 需自行用算法或人工标
伪迹与丢帧 否 无质量标记
分娩方式 是 三个取值,写在头文件 RecType
分娩孕周 是 写在 Gestation
新生儿体重 是 写在 Newborn_weight
母亲人体测量 是 年龄、身高、记录时体重
胎盘位置 是 两个取值

所以它的监督信号只到「记录级」这一层。整条记录对应一个标签,记录内部没有任何细粒度真值。这与影像分割数据集是完全不同的形态:那边一条记录有很多标注,这边一条记录只有一个标签。

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

频段边界。 5 Hz 的抗混叠截止是硬边界,任何 5 Hz 以上的分析都不成立。有人想从子宫肌电里找高频肌电尖峰、做小波多尺度分解到 8 Hz 以上,这份数据给不了。

空间边界。 四枚电极贴在 7 厘米见方的范围内,测到的是这一小块腹壁下方的整体电活动投影。要说「电活动从哪个角开始传」,只能在这三个方向上说,不能说「从子宫的哪个部位开始」。

时间边界。 只有孕 23 周与孕 31 周两个窗口,没有临产前、产程中、产后。任何关于「临产发动那一刻电活动如何变化」的问题,都不在它的覆盖范围内。

因果边界。 结局是产后回填的,引产指征没有记录。同样的「Induced」标签,可能来自胎膜早破、可能来自过期妊娠、可能来自产妇要求。把这三类混在一起做机制解释,结论会互相抵消。

§5 怎么拿到:一百一十五兆的完整闭环

5.1 目录结构与下载面

整库未压缩 115.6 MB,压缩包 89.0 MB。PhysioNet 提供三种取法:网页下载 ZIP、wget 递归抓取、AWS 开放数据桶同步。三种取到的内容一致,区别只在速度与是否需要断点续传。

四种取法都不需要凭证。网页 ZIP 最省事,点一下拿到 89.0 MB;wget -r -N -c -np 适合脚本化,会保留两级目录结构;aws s3 sync --no-sign-request 在云端环境里最快,桶名是 physionet-open;curl -O 适合只要某几条记录的场景,按 RECORDS 里的整行拼 URL 即可。

按记录挑也实用。六个子目录里,剖宫产组最薄,两次记录加起来只有 19 条;引产组最厚,81 条。若只想验证读取流程,取 early_cesarean 里的几条就够,不到十兆。

5.2 批量下载

#-- 全库递归下载,保留目录结构,支持断点续传
wget -r -N -c -np https://physionet.org/files/icehg-ds/1.0.1/

#-- 或者走 AWS 开放数据桶,无需任何凭证
aws s3 sync --no-sign-request s3://physionet-open/icehg-ds/1.0.1/ ./icehg

#-- 只要剖宫产组:先拿清单,再按前缀过滤
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | grep cesarean > cs.txt
while read r; do
  curl -sO "https://physionet.org/files/icehg-ds/1.0.1/${r}.hea"
  curl -sO "https://physionet.org/files/icehg-ds/1.0.1/${r}.dat"
done < cs.txt

RECORDS 每行是「子目录/记录名」的形式,直接把整行拼进 URL 就能取到文件,不用自己拆。-np 禁止上溯父目录,-c 支持断点续传,两个参数一起用才不会把整个 PhysioNet 拖下来。

5.3 用 wfdb 直接流式读取

不下载也能读。wfdb 的 pn_dir 参数支持直接从 PhysioNet 拉取,但有一个坑:记录存放在子目录里,pn_dir 必须把子目录带上。

import wfdb
import numpy as np

#-- pn_dir 指到具体子目录,只写 'icehg-ds/1.0.1' 会 404
hdr = wfdb.rdheader('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
print(hdr.fs, hdr.n_sig, hdr.sig_len)
print(hdr.sig_name)

#-- 只取第 600 到 900 秒,避免整条载入
rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced',
                    sampfrom=600 * 20, sampto=900 * 20)
x = rec.p_signal
print(x.shape)
print([round(float(np.ptp(x[:, i])), 3) for i in range(x.shape[1])])

p_signal 已按增益换算,单位是毫伏;d_signal 是原始整数。要复现头文件里的初始值、校验和,必须用 d_signal,用 p_signal 会得到浮点近似值。

5.4 解析头文件里的临床字段

十行临床字段藏在注释区,格式是「字段名 空格 值」。它们不在 WFDB 的标准字段里,rdrecord 会整段塞进 comments,需要自己拆。

import re
import wfdb

rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
meta = {}
for line in rec.comments:
    line = line.strip()
    if not line or line.startswith('Comments'):
        continue
    key, _, val = line.partition(' ')
    meta[key] = val.strip()
print(meta)
#-- {'RecID': '665', 'RecType': 'Induced', 'Gestation': '37.1',
#--  'Rectime': '23.1', 'Age': '26', 'Weight': '83',
#--  'Placental_position': 'front', 'Height': '165',
#--  'Newborn_weight': '2860', 'Pair_RecID': '664'}

拆出来的字典里,Gestation 与 Rectime 是浮点字符串,Placental_position 是两个单词之一,Pair_RecID 为 0 时表示没有配对记录。批量处理时建议先跑一遍全库,确认所有键都出现了——缺键与键名拼写差异不会报错,只会静默产生空值。

5.5 合成第四路 S4

官方给出了 S4 的合成公式,也给出了精度声明。要做三个方向的电活动分析,这一步省不掉。

import numpy as np

#-- 取原始三路(索引 0、2、4),滤波版在 1、3、5
s1, s2, s3 = rec.p_signal[:, 0], rec.p_signal[:, 2], rec.p_signal[:, 4]
s4 = s1 - s2 + s3
print(float(np.std(s4)), float(np.ptp(s4)))

#-- 首尾各 150 秒置零,规避滤波器瞬态
fs, n = rec.fs, rec.sig_len
edge = 150 * fs
for i in range(6):
    rec.p_signal[:edge, i] = 0.0
    rec.p_signal[-edge:, i] = 0.0

注意索引:原始与滤波交替排列,所以原始三路是 0、2、4,滤波三路是 1、3、5。按 0、1、2 取会把滤波版当成原始版,图上看不出差别,频域上差别很大。

5.6 五个最容易出错的地方

易错点 表现 正确做法
把 S1、S2、S3 当成相邻通道 频谱分析结果偏差 三者是两两差分,不是空间相邻采样
取错通道索引 拿滤波版当原始版 原始在 0、2、4,滤波在 1、3、5
忽略首尾 150 秒 低频段出现虚假谱峰 置零或直接裁掉前后各 150 秒
用记录数当样本数 划分后测试集虚高 以妊娠为单位,按 Pair_RecID 分组
pn_dir 不带子目录 404 或拉错记录 写成 icehg-ds/1.0.1/<子目录>

第三条与第四条是实战里最贵的。前者影响每一次频谱估计,后者影响每一次模型评估。第五条只在新手第一次读的时候出现一次,改一次就记住了。

§6 与库内相关资源的关系

6.1 关系图谱

库内与它最近的资源是 TPEHGT,同一位作者、同一家医院、同一套电极与采样率,区别在结局分组与压力通道。再远一层是冰岛的十六电极子宫肌电库,同一种信号、不同的空间分辨率。产时监护一侧,胎心宫缩图的两个公开集回答的是「临产后胎儿状态」,与孕期的子宫电活动不在一个时间窗。

关联资源 信号关系 时间窗 与本文的分工
TPEHGT 同一协议,20 Hz,含压力通道与宫缩标注 孕 31 周前后 它是宫缩时序,本文是分娩方式
ehgdb(冰岛) 同为子宫肌电,16 电极 孕期与产程 它是空间传播,本文是结局分类
CTU-UHB 胎心宫缩图 产时胎心与宫缩压力 产程中 产时监护,不是孕期预测
UCI 胎心宫缩图 特征化后的产时记录 产程中 特征工程素材,非原始波形
NIFEA 胎儿心电 腹部记录,目标是胎心 孕期 同一类腹壁电极,目标信号不同
adfecgdb 腹壁与直接胎心电 分娩前后 胎心提取的金标准对照
PICS 早产儿心肺 NICU 婴儿监护 出生后 早产儿结局侧,不是产前

6.2 检索路径

按信号找:先看「生理信号」大类,再往下找子宫肌电与胎心两个分支,本文与 TPEHGT、ehgdb 同支。按任务找:先看「早产预测」,再看「分娩方式预测」,后者目前只有本文一条。按数据形态找:「时序信号 + 波形 + 元数据」这个组合能把产科电生理的几个库一并捞出来。

具体到几条常用路径:找孕期子宫电活动,走「生理信号 → 子宫肌电」,会同时落到本文、TPEHGT 与 ehgdb;找宫缩标注,同一条路径下只有 TPEHGT 满足;找产时胎儿监护,改走「胎心宫缩」,会落到 CTU-UHB 与 UCI 两个公开集;找胎心电提取,走「胎儿心电」,NIFEA、adfecgdb 与 FECGSYNDB 都在这一支;找早产预测的对照基准,则要先确定自己缺的是正类还是负类。

6.3 与 TPEHG 体系的分工

三份数据常被当成一个整体引用,实际使用时分工很清楚:

问题 用哪份 理由
会不会早产 TPEHG DB / TPEHGT DS 有自发早产记录
宫缩什么时候来、来多强 TPEHGT DS 有压力通道与宫缩区间
足月了但是不是自然临产 ICEHG DS 唯一把三类足月结局分开的
早产模型在真实人群里会掉多少 三份合并 只有合并才能同时含早产与三类足月

官方明确说三份数据的采集协议与设备相同,因此可以并池使用。并池时有一个细节:三份数据的妊娠是按结局互斥切分的,同一次妊娠不会同时出现在两份里,所以并池不会产生重复样本。这一点在写方法学时值得写进去,它决定了并池后不需要额外的去重步骤。

6.4 任务与选型

任务 本库是否适合 更合适的资源
三类足月结局分类 适合,样本偏少 无更合适的公开资源
早产 vs 足月二分类 不适合,无早产样本 TPEHG DB、TPEHGT DS
分娩方式的多类预测(含产程) 部分适合,只有孕期窗 产时胎心宫缩图
子宫肌电传播速度估计 勉强,三方向且无定位 ehgdb(16 电极)
宫缩检测与分割 不适合,无宫缩标注 TPEHGT DS
滤波方案对比 适合,原始与滤波成对 无更合适的公开资源

6.5 什么时候该放弃它

当你要的样本量在千级以上。 126 条记录、91 次妊娠,按妊娠分组后每类只剩十几到五十几次,做深度模型连一次像样的交叉验证都撑不住。

当你要预测的是「会不会早产」。 这不是它的任务。硬用它当负类,得到的模型只学会了区分「自然临产」与「没自然临产」,换个队列就失效。

当你的场景不是足月。 全部记录的分娩孕周都在足月区间,晚期早产、极早产、双胎、臀位、瘢痕子宫,一个都没有。

当你要的是可解释的临床决策依据。 引产指征缺失,三组的临床成因不可分辨。模型即使分对了,也说不清依据是什么。

§7 质量评估与局限性

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

讨论这份数据的质量,得先把三件事摆正,否则很容易把它当成一份做得不够好的大库来评判。

第一,它的样本量小不是因为没做完,而是因为分母就那么大。足月引产与足月剖宫产在 1997 至 2006 年那家医院的记录池里只有这么多条,作者把能用的全拿出来了。用「才九十一次妊娠」去扣分,等于用大库的标准衡量一份全量抽取的小池子,评判的尺子本身就错位。

第二,它的标注薄不是遗漏,而是这个任务只需要记录级标签。分娩方式预测的输出就是一个类别,不需要逐秒真值。拿它跟分割数据集比标注密度,是把两种任务混为一谈。

第三,它没有压力通道不是缺陷,而是与同门数据的分工。宫缩压力在 TPEHGT DS 里,这份数据负责的是电信号与结局的对应。两份数据共用协议,需要的可以并池。

把这三条摆正之后,剩下的问题才是真问题:单中心、旧年代、无指征、无随访。这四条会实打实地限制结论的适用范围,也是下面几节要逐条量化的。

7.1 五维评分

按 DAIMS 的常用维度打分,每项 1 至 5 分。评分的用途是「作为足月分娩方式预测的机制研究素材」,不是「作为可上线的临床模型训练集」:

维度 分数 判断依据
完整性 3 三路信号、原始与滤波成对、临床字段齐全;无压力通道、无波形标注
准确性 4 孕周精确到零点一周,新生儿体重精确到克,配对关系有专门字段
一致性 5 全库 20 Hz、6 通道、同一增益、同一滤波参数、命名规则统一
可追溯性 4 有 DOI、有伦理批号、有配套论文、有版本历史;版本间变更未说明
可获得性 5 无需注册、无需申请、百兆级、三种下载方式

一致性拿到满分是有底气的:126 条记录的采样率、通道数、增益字段、滤波参数完全一致,头文件格式一字不差,连临床字段的行序都固定。这种整齐度在小规模手工整理的数据集里并不常见,它直接降低了批量解析的出错率。

可追溯性扣的那一分在版本上。1.0.0 到 1.0.1 只隔十六天,页面上没有任何变更说明,也没有勘误记录。使用者无法判断这十六天里改了什么,只能默认最新版是修正后的版本。

同一批数据,用途一换,分数就变。若问的是「能不能训一个可上线的分娩方式模型」,完整性会从三分掉到两分,因为缺指征、缺随访、缺外部验证集;准确性会从四分掉到三分,因为标签含义随临床决策而变;一致性与可获得性两项不动,它们衡量的是数据工艺,与用途无关。总分从二十一降到十九。分数变化集中在前两项,这说明它的短板在「临床上下文」而不在「数据工艺」。

7.2 信号的三层可信度

同一条记录里,不同属性的可信度差别很大,应该分层看:

层次(可信度) 依据 使用建议
时间轴(高) 采样率固定 20 Hz,样本数与时长自洽 可直接用于秒级时序分析
通道身份(高) 头文件逐路声明,全库一致 按 sig_name 取列即可
幅度(高) 增益 13107 单位每毫伏,量程 ±2.5 毫伏 与同类库相比可做绝对幅度比较
波形形态(中) 真实采集,受电极接触与体位影响 形态学结论需限定在记录内
空间位置(低) 四枚电极 7 厘米见方,无影像配准 只做方向性描述,不做定位
标签含义(中) 结局可靠,成因未知 分类可以,机制解释要留白

幅度这一层与心内电图类数据正好相反。心内双极的绝对幅度取决于电极贴壁压力,跨记录不可比;这里电极贴在腹壁上,接触压力对幅度的影响小得多,增益又是统一标定的,所以不同记录之间的毫伏值是有意义的。这一条常被误判——很多人带着「生理信号幅度不可比」的成见来,反而放弃了这份数据里可用的一个维度。

可信度最低的是空间位置。7 厘米的电极间距,测到的是这一小块区域下方所有电活动的叠加,包括子宫、腹壁肌肉、肠管。说「信号从 S2 传到 S1」,只在这两个方向上有意义,不能翻译成解剖上的传播路径。

7.3 已知的、可枚举的偏差

偏差 具体表现 会污染什么结论
单中心 全部来自卢布尔雅那一家医院 跨机构泛化
年代 采集于 1997–2006 年 引产与剖宫产指征的时代变化
样本量 91 次妊娠,三类分别为 59、13、19 类别间的统计功效
类别不平衡 引产组占三分之二 三分类的多数类偏置
孕周跨度 分娩孕周从 37 周出头到 40 周以上 未控制孕周的分组比较
缺失指征 无引产原因、无 Bishop 评分 标签的临床可解释性
无随访 只有出院时的结局 母婴近远期并发症
无压力通道 只有电信号 电活动与机械宫缩的对应
记录窗口 只有孕 23 周与孕 31 周 其他孕周的预测

第五条容易被忽视。三组的分娩孕周均值相差不到半周,但个体跨度不小,§4.3 的案例就落在 37.1 周,比组均值早了近三周。若把孕周当成无关变量直接分组比较,孕周带来的信号差异会混进结局差异里。

第七条决定了这份数据的解释上限。同样的「引产」,可能因为胎膜早破,可能因为过期妊娠,也可能因为产妇主动要求。三种成因对应的子宫状态完全不同,混在一个标签里,任何「引产组的电活动特征」都是三种机制的加权平均。

7.4 外部验证矩阵

验证维度 本库能否支撑 说明
内部复现(同记录不同时段) 能 30 分钟记录可切前后段互测
跨孕周复现(同一次妊娠两个窗口) 能 35 次妊娠有配对记录
跨妊娠复现 勉强 按妊娠分组后测试集只有十几例
跨库复现(对 TPEHG 体系) 能 协议与设备相同,可直接并池
跨机构复现 不能 全部单中心
与临床决策变量对照 不能 无指征、无 Bishop 评分
与影像或解剖对照 不能 无影像、无配准

这张表说明它的验证能力集中在「同一协议内部」。跨库那一行之所以能,是因为同门三份数据共用采集条件——这是它的独特优势,也是它无法外推的原因:一旦离开这套协议,就没有第二个可比的队列。

7.5 它为何能持续:稀缺性来自结局分类,不来自信号质量

一份九十一次妊娠、二十年前采集、没有波形标注的数据,按常规标准早该被更大的库取代。它没有,原因很具体:公开的子宫肌电库里,把足月引产与足月剖宫产单独成组、还给出同一次妊娠两个孕周配对记录的,就公开目录所见只有这一份。

信号本身并不稀缺。子宫肌电可以用便宜的设备采,可以在家测,近几年可穿戴方向也有进展。稀缺的是「结局分得很细、时间点对得很齐、还能跟同门数据合并」这个组合。它要求采集时不知道结局、随访时能查到结局、整理时愿意按结局重切一次。这三步都不难,但同时做到的人很少。

于是它处在这样一个位置:需求不大,替代品为零。做早产预测的团队迟早会撞上「足月非自然分娩」这个类别,撞上之后回头找数据,能找到的就是这里。这是分类带来的生存逻辑,与信号质量关系不大。

§8 生态位与历史

8.1 历史沿革

子宫肌电进入临床研究视野的时间不算晚。上世纪九十年代,欧洲几个组已经在做体表记录与频谱分析,试图从子宫电活动里读出临产的发动。那时的瓶颈不在算法,在数据:没有公开的、带结局标注的记录,每个组守着自己医院的几十条样本。

年代 事件 对本文的意义
1990 年代 体表子宫肌电的记录与频谱分析成形 确定了 0.08–5 Hz 这个工作频段
1997 卢布尔雅那开始系统采集 本文全部记录的起点
2006 采集结束 池子封存,共一千二百余条
2008 线性与非线性方法区分早产与足月的对比研究 奠定 TPEHG 体系的方法学
2011 TPEHG DB 上线 第一次切分,只取自发分娩
2018 TPEHGT DS 上线 第二次切分,加入宫缩标注
2022 五个足月与早产组的分离研究 首次把三份数据合并使用
2023 ICEHG DS 上线 第三次切分,补上引产与剖宫产

这条线有一个共同点:每一次新数据集上线,都是把同一个池子按新的问题重切一遍。池子没变,问题变了。这也是为什么三份数据能无缝合并——它们本来就是同一批记录的不同切片。

8.2 与早产预测这条研究线的关系

早产预测的文献里,子宫肌电常被当作「比宫颈长度更早、比胎心监护更直接」的一条路。这条路的经典做法是:取孕 20 到 36 周之间的记录,算频谱、算样本熵、算传播速度,然后分类。

ICEHG DS 对这条线的作用是提出一个反问:你分出来的「足月」到底是什么。如果训练集里的足月全是自然临产,模型学到的可能不是「有没有早产风险」,而是「有没有自然临产的迹象」。这两件事在临床上不等价——一个 31 周时被判为「不会自然临产」的孕妇,可能只是后来被引产了,而不是早产。

研究问题 传统做法 加入本库后
早产 vs 足月 足月只含自然临产 足月含三类结局,更接近真实人群
特征是否具有普适性 在自然临产上验证 可在三类足月结局上验证稳健性
模型误差来源 归因于信号质量 可拆分出「类别边界」这一项
临床可用性 报告 AUC 可报告加入困难负例后的性能下降

第三行是这份数据最实用的价值。很多早产模型在论文里表现很好,上线后掉得厉害,掉的那部分里有多少来自「足月但被引产」,此前无从估计。有了这份数据,至少可以量化一个下界。

8.3 生态位:产科电生理里的一个窄格

把产科公开数据摊开看,影像一侧最热闹:胎儿超声、胎心超声、胎盘 MRI,都有成规模的标注集。产时监护一侧有胎心宫缩图的两个公开集,样本上千。孕期电生理一侧则很小:子宫肌电三份,胎儿心电若干,加起来不到十份。

生态位 代表资源 规模量级 主要任务
胎儿影像 胎儿超声与 MRI 系列 千至万级图像 分割、测量、切面分类
产时监护 胎心宫缩图公开集 数百至数千例 胎儿状态分类
孕期子宫电 本文、TPEHGT、ehgdb 三十至一百余条 早产与分娩方式预测
胎儿心电 腹壁与直接记录 数十条 胎心提取
早产儿监护 NICU 心肺记录 十余例 新生儿状态

孕期子宫电这一格之所以窄,原因是采集需要孕妇在诊室静躺半小时,且信号微弱、易受干扰,很难像影像那样批量回顾。这个结构性约束短期内不会改变,所以这一格里的每一份数据都会长期被引用,哪怕体量很小。

8.4 谁在用它,用来做什么

项目页显示的访问量是当前版本三百余次、全部版本三百八十余次。对一个上线三年的数据集来说,这个数字偏低,说明它的用户群很窄。官方列出的用途有三条:研究导致引产或剖宫产的孕期生理机制;早期预测引产与剖宫产的分娩方式;与 TPEHG 体系合并,评估早产分类方法在包含全部结局时的表现。

使用者大体分四类。生理机制研究者比较三组在孕 23 周与 31 周的频谱差异,额外要做的是控制孕周与体重;算法研究者把它当困难负例重估早产模型,额外要做的是按妊娠分组重划分;设备开发者拿它验证自家电极位置与滤波链,额外要做的是把协议对齐;教学者用它演示差分导联与零相位滤波,取一对配对记录就够。

设备开发者这一类值得多说一句。四枚电极、三路差分、7 厘米间距,是一套很标准的腹部电生理配置。做母胎监护设备的团队可以用它做参考实现:同样的电极位置采出来的信号应该长什么样,滤波链的哪一步会影响什么,都能在这批记录上看到。

§9 使用指引

9.1 三种角色的路径

想快速判断能不能用,先读 §1.3 与 §1.6,然后下一条记录看波形,最容易犯的错是把「126 条」当成 126 个独立样本。要做分类实验,先读 §2.2 与 §4.4,然后按妊娠分组划分,要盯住类别不平衡与孕周混杂。要做信号处理,先读 §4.1 与 §5.6,然后取原始三路、裁掉首尾,要盯住通道索引与滤波瞬态。要写方法学章节,先读 §3.3 与 §9.3,然后引用数据集与配套论文,版本号必须写具体。

9.2 一条最短的可用流程

从零到一张可用的特征表,最短的路径是四步:取清单、按妊娠分组、逐条读信号、算特征。

import wfdb
import numpy as np
import pandas as pd

BASE = 'icehg-ds/1.0.1'
rows = []
for line in open('RECORDS'):
    path = line.strip()
    if not path:
        continue
    sub, name = path.split('/')
    rec = wfdb.rdrecord(name, pn_dir=f'{BASE}/{sub}')
    meta = {}
    for c in rec.comments:
        k, _, v = c.strip().partition(' ')
        if k and not k.startswith('Comments'):
            meta[k] = v.strip()
    x = rec.p_signal[:, [0, 2, 4]]          #-- 只取原始三路
    x = x[150 * rec.fs : -150 * rec.fs]     #-- 裁掉首尾各 150 秒
    rows.append({
        'record': name, 'dir': sub, 'pair': meta.get('Pair_RecID'),
        'type': meta.get('RecType'), 'gest': float(meta.get('Gestation', 0)),
        'rectime': float(meta.get('Rectime', 0)),
        'ptp_s1': float(np.ptp(x[:, 0])), 'ptp_s2': float(np.ptp(x[:, 2])),
        'std_s1': float(np.std(x[:, 0])), 'std_s2': float(np.std(x[:, 2])),
    })
df = pd.DataFrame(rows)
df.to_csv('icehg_index.csv', index=False)
print(len(df), df['type'].value_counts().to_dict())

跑完得到的是一张 126 行的索引表。后续任何分析都先在这张表上筛,再回读原始信号,不必反复访问网络。划分时用 pair 列做分组键,把同一次妊娠的两条记录绑在一起——按这个键分组,§4.3 的案例那两条记录会落在同一折里,不会一分为二。

9.3 引用方式

官方给出的引用分两层:数据集本身与配套论文。两篇都该引,前者指向具体版本,后者给出方法学背景。

引用对象 建议写法 何时必须引
数据集 Jager, F. (2023). Induced Cesarean EHG DataSet (ICEHG DS), v1.0.1. PhysioNet. doi:10.13026/zw34-n382 任何用到数据的结果
配套论文 Jager, F. (2023). An open dataset with electrohysterogram records of pregnancies ending in induced and cesarean section delivery. Scientific Data 10:669. doi:10.1038/s41597-023-02581-6 描述数据来源与方法
平台 PhysioNet 平台论文 平台层面的引用要求
同门数据 TPEHG DB 与 TPEHGT DS 各自的数据集页 合并使用时逐份引

引用时把版本号写全。10.13026/zw34-n382 对应 1.0.1,10.13026/vrvd-mf28 是「最新版」的浮动 DOI。写死版本号能让别人复现到你用的那一份。

§10 AI 使用声明

项目 说明
本页性质 数据集说明文档,不是原始数据的再分发
事实来源 全部取自 PhysioNet 项目页、目录清单与库内头文件
数字口径 规模、结构、边界三类;分布类统计不在范围内
推导数字 时长、样本量、可用段占比由头文件换算,方法已写明
未核实项 记录时的体位与环境、引产指征、产次、既往剖宫产史
医学建议 本页不含诊断或治疗建议,不构成产科临床指导
许可提示 ODC-ODbL 1.0,衍生数据库须以相同许可发布
更新策略 官方版本不变则事实部分不变,勘误另记于编辑说明

常见误读(避坑清单)

常见说法 实际 证据
这是一份心电数据集 EHG 是子宫肌电,电极贴在腹部 官方标题与采集协议
库里有早产记录 三条结局全部是足月分娩 分娩孕周均值 39.4 至 39.8 周
126 条记录等于 126 个样本 来自 91 次妊娠,35 次有配对记录 RECORDS 126 行,官方给 91 次妊娠
每条记录只有三路信号 六路,原始与滤波交替存放 头文件第一行写 6
有宫缩区间标注 没有任何时间维度的标注 头文件只有十行临床字段
采样率太低,做不了频谱 5 Hz 以上本就被抗混叠滤掉 滤波器截止 5 Hz,20 Hz 留一倍余量
信号幅度不可跨记录比较 腹壁记录,增益统一,毫伏可比 增益 13107 单位每毫伏,全库一致
记录首尾可以直接用 各 150 秒是滤波器瞬态,官方建议置零 官方 Limitations 段
许可与 TPEHG 一样,署名即可 这里是 ODbL,衍生库须同许可 项目页 License 栏
分组清单叫 RECORDS_induced-cesarean 目录里的文件名拼作 RECORDS_induced-ceasarean 文件目录与正文两处写法不一致

最后一条不是文字游戏。按正文写的文件名去取,会拿到 404;按目录里的拼写去取,才拿得到。两种写法并存,官方未说明以哪一处为准。

FAQ

Q1:ICEHG DS 里的 EHG 到底测什么?
测子宫平滑肌的电活动。子宫收缩前,平滑肌细胞的膜电位会同步变化,这些变化叠加起来在腹壁上形成几十到几百微伏的电位差。它跟心电、脑电同属电生理信号,但源器官、频段、电极位置都不同。

Q2:为什么记录孕周是 23 周和 31 周?
这是产检的两个固定节点。23 周前后做一次系统筛查,31 周前后再做一次,孕妇本来就要来医院,顺带记录半小时不影响流程。选这两个点也是为了让预测有提前量——31 周发现风险,还有近两个月可以干预。

Q3:91 次妊娠怎么会产生 126 条记录?
一部分孕妇两个孕周都来了,各留一条。官方用 Pair_RecID 把两条串起来,配对清单里则是同一行的两列。35 次妊娠有配对,剩下 56 次只有一条。

Q4:三类结局的样本为什么差这么多?
因为人群里本来就这样。足月引产比急诊剖宫产常见得多,引产转剖居中。这不是抽样偏差,是产科现实的比例在数据里的投影,但它确实让三分类任务的多数类偏置很明显。

Q5:可以把它和 TPEHG DB 直接拼在一起吗?
可以。协议、设备、采样率、电极位置全相同,官方明确推荐合并。需要注意两点:一是按结局互斥,不会重复;二是合并后类别变成五个(早产、足月自发、引产、剖宫产、引产转剖),分类任务的难度会明显上升。

Q6:20 Hz 的采样率够用吗?
对这个频段够。子宫肌电的有效成分在 5 Hz 以下,抗混叠滤波器切在 5 Hz,20 Hz 采样对应 10 Hz 的奈奎斯特上限,留了一倍余量。不够的是别的东西:看不了肌电尖峰的精细形态,也无法分离母体心电的高频成分。

Q7:为什么要自己合成 S4?
因为原始只有三路差分,而官方指出第四路(E4 与 E1 之间)可以用 S1 − S2 + S3 无损算出。要做两个垂直方向的分析,就得自己算。精度上官方给了保证:合成误差小于一个量化台阶。

Q8:首尾各 150 秒一定要丢掉吗?
官方用的是「建议」二字。做时域形态分析时影响不大,做频谱时影响明显——瞬态会在低频端造出虚假能量。稳妥做法是裁掉,代价是每条记录只剩约 24 分半。

Q9:能不能用它训练分娩方式预测模型?
能训,但别指望泛化。91 次妊娠、单中心、二十年前的临床实践,任何交叉验证数字都只在这个队列内部成立。合理定位是机制验证或方法可行性,不是产品原型。

Q10:ODbL 会不会影响我发论文?
不影响。分析结果、图表、模型参数都不受 ODbL 约束。受约束的是数据库本身:如果你整理出一份修改过的数据集对外发布,那份衍生库必须以 ODbL 共享。内部使用与论文发表都不触发这一条。

Q11:为什么有两个版本,改了什么都查不到?
1.0.1 在 1.0.0 之后十六天发布,页面上没有变更说明,也没有勘误段落。从目录看,LICENSE.txt 与 SHA256SUMS.txt 的时间戳是 10 月 8 日,信号文件是 7 月与 10 月初,推测涉及许可与校验文件的补齐,但官方未确认。

Q12:记录里的胎盘位置只有两个取值,够用吗?
官方只给了 front 与 end 两个值。临床上胎盘位置通常分前壁、后壁、侧壁、宫底,这份数据把它压成了二分。做与胎盘位置相关的分析时,只能按二分处理,不能还原更细的类别。

术语表

术语 英文 含义
子宫肌电 electrohysterogram, EHG 子宫平滑肌电活动的体表记录
子宫肌电图 uterine EMG 同上的另一种叫法,强调肌电属性
引产 induction of labor 用药物或机械方法启动临产
剖宫产 cesarean section 经腹切开子宫取出胎儿
引产转剖 induced-cesarean 引产失败后改行剖宫产
足月 term 孕 37 周至 42 周之间分娩
晚期早产 late preterm 孕 34 至 36 周分娩
宫颈评分 Bishop score 评估宫颈成熟度与引产成功率的评分
胎膜早破 premature rupture of membranes 临产前胎膜破裂,常见引产指征
差分导联 bipolar derivation 两个电极之间的电位差
单极导联 unipolar 相对公共参考的电位,本库未存
抗混叠滤波 anti-aliasing filter 采样前去掉高于奈奎斯特频率的成分
巴特沃斯滤波器 Butterworth filter 通带平坦的经典滤波器类型
零相位滤波 zero-phase filtering 双向滤波抵消相位延迟
瞬态 transient 滤波器启停时产生的虚假响应
量化误差 quantization error 模数转换的最小刻度带来的误差
增益 gain 每物理单位对应的整数刻度数
基线 baseline 零电平对应的整数值
采样率 sampling rate 每秒采样点数,本库 20 Hz
配对记录 pair record 同一次妊娠在不同孕周的两条记录
功率谱 power spectrum 信号能量随频率的分布
归一化功率谱 normalized power spectrum 除以总能量后的谱,便于跨记录比较
快速波 fast wave 子宫肌电中频率较高的成分,与宫缩相关
妊娠结局 pregnancy outcome 分娩方式与母婴状态的总称
WFDB Waveform Database PhysioNet 的生理信号存储规范

附录 A:核心数字核对表

项 值 来源 来源层级
妊娠数 91 官方页面正文 官方
记录数 126 官方页面与 RECORDS 官方
早期记录数 62 官方页面正文 官方
晚期记录数 64 官方页面正文 官方
引产组记录数 81 官方页面与分组清单 官方
剖宫产组记录数 19 同上 官方
引产转剖组记录数 26 同上 官方
每记录通道数 6 头文件第一行 官方文件
采样率 20 Hz 头文件第一行 官方文件
量化位宽 16 位 头文件信号行 官方文件
增益 13107 单位每毫伏 头文件信号行 官方文件
电极数 4 枚,间距 7 厘米 官方页面方法段 官方
单条采样点数 约三万五千 头文件第一行 官方文件
全库体积 未压缩 115.6 MB 官方页面文件栏 官方
压缩包体积 89.0 MB 官方页面 官方
记录池总量 一千二百余条 官方页面方法段 官方
许可 ODC-ODbL 1.0 官方页面许可栏 官方
DOI 10.13026/zw34-n382 官方页面 官方

附录 B:数字的来源分层

层级 含义 本篇中的例子 可信度
官方直述 项目页正文直接写出 91 次妊娠、126 条记录、20 Hz、115.6 MB 高
官方文件 头文件与清单可读出 六路通道名、临床十字段、配对编号、样本数 高
推导 由官方文件换算 单条时长 29 分半、可用段约六分之五、单条体积四百余千字节 中,方法已写明

三层的差别在于是否需要中间计算。官方直述没有计算,官方文件是一次读取,推导要经过换算。凡是推导值,本篇都写明了换算方式,方便核对。

未列入三层的数字一律不写。这包括:三组的母亲年龄均值、体重均值、新生儿体重均值、各孕周的记录条数——这些都需要把 126 份头文件全部读一遍才能得到,属于数据使用者的工作,不是说明文档该做的事。

附录 C:完整参考文献

编号 文献 用途
1 Jager, F. Induced Cesarean EHG DataSet (ICEHG DS), v1.0.1. PhysioNet, 2023. doi:10.13026/zw34-n382 数据本体与全部事实
2 Jager, F. An open dataset with electrohysterogram records of pregnancies ending in induced and cesarean section delivery. Scientific Data 10:669, 2023. doi:10.1038/s41597-023-02581-6 方法学背景与摘要口径
3 Pirnar, Ž., Jager, F., Geršak, K. Characterization and separation of preterm and term spontaneous, induced, and cesarean EHG records. Comput Biol Med 151:106238, 2022 三库合并分析的实证结果
4 Jager, F., Libenšek, S., Geršak, K. Characterization and automatic classification of preterm and term uterine records. PLoS ONE 13(8):e0202125, 2018 TPEHGT DS 的来源
5 Fele-Žorž, G. 等. 线性与非线性信号处理技术区分足月与早产子宫肌电的比较. Med Biol Eng Comput 46:911–922, 2008 TPEHG DB 的方法学基础
6 PhysioNet 项目页 https://physionet.org/content/icehg-ds/1.0.1/ 描述、许可、版本与文件清单

附录 D:任务代码

把 126 条记录按妊娠分组,做一次不泄露的三分类基线。特征只用最朴素的时域与频域量,目的是验证管线而不是刷分:

import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedGroupKFold, cross_val_score
from sklearn.ensemble import RandomForestClassifier

df = pd.read_csv('icehg_index.csv')
df['grp'] = df['pair'].where(df['pair'].astype(str) != '0', df['record'])
X = df[['ptp_s1', 'ptp_s2', 'std_s1', 'std_s2', 'rectime', 'gest']].values
y = df['type'].map({'Induced': 0, 'Cesarean': 1, 'Induced-cesarean': 2}).values

cv = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=0)
clf = RandomForestClassifier(n_estimators=300, random_state=0)
scores = cross_val_score(clf, X, y, cv=cv, groups=df['grp'], scoring='balanced_accuracy')
print('balanced acc %.3f +- %.3f' % (scores.mean(), scores.std()))

groups 这一参数是整个脚本的关键。去掉它,同一个人的两条记录会分别落进训练集与测试集,分数会虚高;留着它,每次划分都以妊娠为单位,数字才有意义。balanced_accuracy 也是为了对冲三类的样本量差异。

附录 E:如果只记五件事

序 记住这一条
1 91 次妊娠、126 条记录,全部是足月,分引产、剖宫产、引产转剖三类
2 每条约 30 分钟,四枚腹部电极、三路差分、20 Hz、原始与滤波成对
3 没有早产样本,也没有任何波形标注,标签只到记录级
4 35 次妊娠有孕 23 周与孕 31 周的配对记录,划分必须以妊娠为单位
5 ODbL 许可,衍生数据库须同许可共享;署名与版本号要写全

编辑说明

本篇事实部分依据 PhysioNet 项目页、目录清单、RECORDS 与若干头文件核对,核对于 2026 年 10 月。时长、可用段占比、单条体积为换算值,换算方式已在正文标明。官方未提供的项目(引产指征、产次、记录时体位与环境、版本变更内容)一律标为未提供,不作推测。原始数据版权归作者与采集机构,按 ODC-ODbL 1.0 使用;本篇为说明文档,不包含数据本体。


相关数据集导航

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

  • edb — 共享标签:生理信号 / 心电信号
  • aami-ec13 — 共享标签:生理信号 / 心电信号
  • kiel-cardio — 共享标签:生理信号 / 心电信号
  • meditation — 共享标签:生理信号 / 心电信号
  • eye-tracking-ecg — 共享标签:生理信号 / 心电信号
  • nifecgdb — 共享标签:生理信号 / 心电信号
  • tpehgdb — 共享标签:生理信号 / 心电信号
  • ecg-capable-smartwatches — 共享标签:生理信号 / 心电信号
  • szdb — 共享标签:生理信号 / 心电信号
  • wctecgdb — 共享标签:生理信号 / 心电信号

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

返回 AI-Ready 数据集