信息速览
TPEHG 数据库里没有心跳。它记录的是孕妇腹壁上四枚电极之间那点微弱的电位差,来自子宫平滑肌,频率低到一个心跳的间隔里能装下好几个周期。整库三百条记录,每条半小时,对应三百次妊娠,其中三十八次以早产收场。想找胎儿心电图的人打开它会失望;想找一份「孕期电生理信号到分娩结局」的干净对照表的人,会发现它把能省的变量都省掉了。
这份数据的年代感很强。采集发生在 1997 到 2005 年的卢布尔雅那,公开却要等到 2010 年 11 月,此后十多年它一直是早产预测文献里被反复调用的那个基线。规模放在今天不算大,体积两百多兆,一条命令就能拉完;结构却极其规整——固定时长、固定采样率、固定通道数、固定滤波档位,连文件名都是连号的。规整到这个程度,说明它在设计时就已经想清楚要回答什么问题。
它回答的问题只有一个:给定孕某一周腹壁上的半小时子宫电活动,这一次妊娠会不会在三十七周之前结束。这个问题在临床上很难,在数据上却被压缩成一个二分类。本篇按官方页面、随库附带的头文件与 2008 年那篇方法学论文来写,凡官方未说明处一律标为未说明。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Term-Preterm ElectroHysteroGram Database |
| 缩写 | TPEHG DB,逐字母为 Term-Preterm Electro-Hystero-Gram |
| 数据性质 | 孕期腹壁子宫肌电(uterine EMG),非胎心电、非心电 |
| 采集机构 | 卢布尔雅那大学医学中心 妇产科 |
| 采集年份 | 1997 至 2005 年,常规产检时顺带记录 |
| 贡献者 | Franc Jager,卢布尔雅那大学计算机与信息科学学院 |
| 发布平台 | PhysioNet,v1.0.0 于 2010 年 11 月,v1.0.1 于 2012 年 8 月 21 日 |
| 规模 | 300 次妊娠,每次一条记录,共 300 条 |
| 结局分组 | 足月 262 例,早产 38 例 |
| 孕周分层 | 孕 26 周前 162 条,孕 26 周及以后 138 条 |
| 电极与通道 | 脐周四枚电极,取三路差分 |
| 采样与量化 | 20 赫兹,16 位,量程正负 2.5 毫伏 |
| 单条时长 | 官方称 30 分钟 |
| 滤波 | 原始一路,另加三档四阶巴特沃斯带通,共十二路 |
| 标注 | 仅结局二分标签,无事件级标注 |
| 格式与体积 | WFDB,解压后 245.4 MB |
| 许可与标识 | ODC Attribution 1.0,DOI 10.13026/C2FW2V |
§1 它要解决的具体麻烦
1.1 一句话结论:它把「会不会早产」压缩成一个可以用半小时电信号去猜的二分题
早产预测的困难不在算法,而在信号太弱、太晚、太混杂。宫缩出现时往往已来不及干预,宫颈长度要靠超声,胎儿纤连蛋白要靠取分泌物,而子宫肌电是少数能在症状出现之前就从体表无创拿到的生理量。它的物理基础很朴素:平滑肌细胞兴奋时产生动作电位,众多细胞同步放电形成的电流穿过腹壁,被表面电极拾到。早产倾向的子宫,其电活动的同步性与频谱分布被认为与正常妊娠不同。
TPEHG 把这个假设做成了一份可以反复检验的表格。它不记宫缩的起止,也不标定波形,而是给每次妊娠留半小时原始电位,再附上一个几个月后才揭晓的结局。牺牲时间分辨率,换来格式统一:三百条记录通道编号相同、采样率相同、时长相同,一行代码批量读入。
| 它想回答的 | 它给的材料 | 它没给的 |
|---|---|---|
| 这一次妊娠会不会早产 | 三路差分电位,半小时 | 记录之后到分娩之间的任何随访 |
| 电活动在孕早中期能否预示结局 | 孕 26 周前后的两个采集窗口 | 同一个人的重复测量 |
| 哪种信号处理方式更能分开两类 | 原始信号加三档滤波 | 作者当时试过的全部算法结果 |
包里同时给了未滤波信号与三档滤波结果,等于把预处理的选择权连同参考答案一起交出。想省事就用零点三至三赫兹那一档,想自己搭流程就从原始信号开始。
| 包里给的 | 使用者可以怎么用 | 对应的取舍 |
|---|---|---|
| 原始三路信号 | 自己设计预处理与特征 | 自由度高,复现成本也高 |
| 三档滤波后的九路 | 直接进入频谱类分析 | 省事,但被作者的档位选择限定 |
| 三份特征表 | 跳过信号处理直接跑分类 | 门槛最低,信息也最薄 |
| 组别汇总表 | 快速按记录名取标签 | 只有四个分组列,无其他信息 |
1.2 三条常见的错误期待
| 常见期待 | 实际情况 | 后果 |
|---|---|---|
| 以为这是胎心电或胎心监护数据 | 记录的是子宫肌电,频段在 4 赫兹以下 | 拿去提取胎心率会得到无意义的曲线 |
| 以为三百条来自三百次不同孕周的采样 | 每次妊娠只有一条,孕周集中在两个窗口 | 想画孕周连续曲线时数据会断成两段 |
| 以为有宫缩标注可以训练事件检测 | 官方未提供任何事件级标注 | 监督式宫缩检测无从下手 |
第一条最常发生,因为库名里的 HysteroGram 对不熟悉产科电生理的人并不直观,而 PhysioNet 上另有一批名字相近的胎心电库。判断方法很简单:看采样率。二十赫兹的记录不可能是心电,QRS 主频在十几到几十赫兹。
| 错误期待 | 一分钟自查法 | 判断依据 |
|---|---|---|
| 这是胎心电 | 看采样率是否高于 250 赫兹 | 二十赫兹不足以描出 QRS |
| 有宫缩标注 | 看目录里有无标注类文件 | 只有 hea、dat、smr、fvl |
| 三百人各有多次记录 | 看记录名与妊娠数是否一一对应 | 官方写明每次妊娠一条 |
| 覆盖整个孕期 | 看记录时孕周的取值范围 | 集中在两个产检节点 |
第二条属于设计误解。库的结构是横断面的,每个受试者只出现一次,因此它支持组间比较,不支持个体追踪。两个采集窗口也不是随机随访点,而是产检流程里本来就有的两个节点。
第三条的落差最大。临床意义上的宫缩监测需要压力计或宫内导管,这份数据只有电信号,既无同步压力通道,也无宫缩与静息的标注。以宫缩检测为名的用法,都是使用者在电信号上自行定义阈值。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 直接跑通早产分类流程的真实数据 | 300 条统一格式记录,附四类现成特征 | 够,且最省事 |
| 研究滤波档位对判别力的影响 | 原始加三档滤波并列存放 | 够,这正是它的设计初衷 |
| 做子宫肌电的信号质量与伪迹研究 | 半小时连续记录 | 部分够,缺同步参考通道 |
| 训练一个端到端的深度模型 | 三百条、阳性三十八例 | 不够,容量远小于需求 |
| 做宫缩事件的检测或分割 | 无事件标注、无压力通道 | 不够 |
| 分析胎心或母胎心电分离 | 频段与采样率都不支持 | 完全不够 |
| 研究引产、剖宫产或产程异常 | 这三类被明确排除 | 不够,应改用同域引产库 |
| 报告跨人群、跨种族的泛化性能 | 单一中心、单一地区 | 不够 |
表格前两行是它真正的强项,也最容易被忽视。多数人拿到数据就训练模型,而这份数据最合适的用法是先跑一遍已有特征表,看能否复现论文里那几个显著性水平。
| 想得到的东西 | 它能不能给 | 替代来源 |
|---|---|---|
| 一个有结局标签的公开基线 | 能 | 同域内少见替代 |
| 一份可复现的特征表 | 能 | 需自行重算才能确认口径 |
| 宫缩的机械强度 | 不能 | 需压力计或宫内导管 |
| 胎儿心脏的电活动 | 不能 | 需千赫兹级心电记录 |
| 医源性分娩的样本 | 不能 | 同域引产与剖宫产库 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 刚接触子宫肌电,想先看看信号长什么样 | 三十行代码就能读出三路波形 | 先对比一条足月与一条早产记录 |
| 手上有一个新特征,想找公开基线对比 | 四类经典特征已算好并公开 | 用同批记录同档滤波重算,再比 |
| 要给早产预测模型做预训练 | 三百条记录可做自监督语料 | 预训练后必须换外部队列做下游验证 |
| 在写综述,需要一份有结局标签的公开库 | 结局、孕周、临床字段齐全 | 引用 2008 年论文而非仅引平台页 |
| 做可穿戴腹部电生理的设备验证 | 电极位置与差分方式有明确记载 | 注意时长与采样率要与自研设备对齐 |
| 想研究宫缩的时空传播 | 只有三路差分,无电极阵列 | 改用多电极阵列库 |
| 需要产时监护数据 | 全部为产前门诊记录 | 改用产时胎心监护或胎头电极库 |
第三行需要展开。把它当预训练语料是可行的,因为信号长度够、格式统一、无标签也能用;但它的分布很窄:孕中晚期、单胎、少并发症、自然临产。这样窄的分布上预训练出来的表征,迁移到产时或高危场景时未必成立。
1.5 一句话判断
它是一份把半小时腹壁电与几个月后的分娩结局钉在一起的对照表;当你要问信号里有没有信息时,它是最干脆的答案,当你要问这个信息能不能推广时,它一句话也答不了。
| 这个判断的支撑 | 具体依据 |
|---|---|
| 有信息 | 2008 年论文报告多组组间差异达到 p 小于 0.05 |
| 不能推广 | 单一中心、单一族群、排除两类分娩方式 |
| 干脆 | 格式统一、附特征表、全库两百多兆 |
1.6 不适合谁:四条边界
| 边界 | 说明 |
|---|---|
| 不适合任何胎心相关的任务 | 记录对象是子宫肌电,采样二十赫兹,胎心成分不在可用频段内 |
| 不适合事件级监督学习 | 无宫缩标注、无压力通道、无逐段标签 |
| 不适合引产与剖宫产研究 | 这两类病例在入库时被明确剔除 |
| 不适合小样本之外的统计推断 | 阳性仅三十八例,任何亚组再切都会掉到个位数 |
| 软边界 | 说明 |
|---|---|
| 不适合做算法绝对性能排名 | 各论文的预处理与划分方式不同,横向比较意义有限 |
| 不适合做跨设备可比性研究 | 只有一套采集设备,无设备间对照 |
§2 数据构成与规格
2.1 一次采集的物理布置
采集时在孕妇腹部贴四枚表面电极,位置以脐为原点对称展开:左上、右上、右下、左下各一枚,间距均为三点五厘米。整个电极组跨度不超过七厘米,目的不是覆盖整个子宫,而是取一小块腹壁上的电位梯度。四枚电极两两相减,得到三路差分信号。
| 电极 | 位置 | 参与构成的通道 |
|---|---|---|
| E1 | 脐左上 3.5 厘米 | S1 的负极 |
| E2 | 脐右上 3.5 厘米 | S1 的正极、S2 的正极 |
| E3 | 脐右下 3.5 厘米 | S2 的负极、S3 的负极 |
| E4 | 脐左下 3.5 厘米 | S3 的正极 |
| 通道 | 定义 | 几何含义 |
|---|---|---|
| S1 | E2 减 E1 | 横向,脐上水平 |
| S2 | E2 减 E3 | 纵向,右侧垂直 |
| S3 | E4 减 E3 | 横向,脐下水平 |
三路里两横一纵,这个几何关系决定了它们看到的电活动并不等价。子宫肌电在妊娠中晚期的主活动方向偏纵向,纵向通道往往承载更多与宫缩相关的成分;横向通道更像在同一水平面取梯度,对共模的远处干扰不敏感。差分还压掉了两枚电极共同拾到的远场干扰,比如心电——这也是为什么记录里母体心电常以小幅规则尖峰残留,而不占据主导。
2.2 记录字典
每条记录由一对文件构成,头文件是纯文本,逐行描述通道;数据文件是二进制,按通道顺序紧密排列。头文件末尾的注释段承载全部临床信息。
| 字段 | 位置 | 含义 | 取值示例 |
|---|---|---|---|
| 记录名 | 头文件首行 | 记录编号 | tpehg1021 |
| 信号路数 | 头文件首行 | 固定十二路 | 12 |
| 采样率 | 头文件首行 | 每秒采样点数 | 20.000000 |
| 采样点数 | 头文件首行 | 每路总点数 | 35260 |
| 数据文件名 | 每路一行 | 十二路共用同一文件 | tpehg1021.dat |
| 存储格式 | 每路一行 | 16 表示 16 位整型 | 16 |
| 增益 | 每路一行 | 每毫伏对应数字量 | 13107/mV |
| 基线 | 每路一行 | 零电位对应数字量 | 0 |
| 通道名 | 每路一行 | 通道序号或带滤波标记 | 2_DOCFILT-4-0.3-3 |
| 注释字段 | 含义 | 首版即有 | 取值示例 |
|---|---|---|---|
| RecID | 记录编号 | 是 | 1021 |
| Gestation | 分娩孕周 | 是 | 38.6 |
| Rectime | 记录时孕周 | 是 | 22.3 |
| Age | 母亲年龄 | 是 | 30 |
| Parity | 产次 | 是 | 0 |
| Abortions | 既往流产次数 | 是 | 0 |
| Weight | 记录时体重 | 否,2012 年补 | 63 |
| Hypertension | 妊娠期高血压 | 否,2012 年补 | no |
| Diabetes | 妊娠期糖尿病 | 否,2012 年补 | no |
| Placental_position | 胎盘位置 | 否,2012 年补 | front |
| Bleeding_first_trimester | 孕早期出血 | 否,2012 年补 | yes |
| Bleeding_second_trimester | 孕中期出血 | 否,2012 年补 | no |
| Funneling | 宫颈漏斗状改变 | 否,2012 年补 | negative |
| Smoker | 吸烟 | 否,2012 年补 | no |
两点需要提醒。其一,增益写作 13107 每毫伏,正好是 32767 除以 2.5,反推可确认量程为正负 2.5 毫伏。其二,胎盘位置的取值出现 front 与 end 两种写法,官方没给编码含义,基于该字段的分组要先确认语义。
2.3 一条记录的完整解剖
以 tpehg1021 为例,头文件的十二行通道描述与十四行注释把这份记录的结构交代清楚。
tpehg1021 12 20.000000 35260
tpehg1021.dat 16 13107/mV 16 0 -941 -11760 0 1
tpehg1021.dat 16 13107/mV 16 0 -25 -14543 0 1_DOCFILT-4-0.08-4
tpehg1021.dat 16 13107/mV 16 0 -4 -3034 0 1_DOCFILT-4-0.3-3
tpehg1021.dat 16 13107/mV 16 0 -12 -3188 0 1_DOCFILT-4-0.3-4
#-- 通道 2、3 的同构四行略,共十二行
#-- 以下为原文件注释段,原文每行以单个井号开头
RecID 1021
Gestation 38.6
Rectime 22.3
Age None
Parity None
Abortions None
Weight 63
Hypertension None
Diabetes None
Placental_position end
Bleeding_first_trimester yes
Bleeding_second_trimester no
Funneling negative
Smoker None
| 从文本能读出的 | 具体值 | 依据 |
|---|---|---|
| 记录时孕周 | 22.3 | 注释段 Rectime |
| 分娩孕周 | 38.6 | 注释段 Gestation |
| 分组 | 孕 26 周前足月 | 两字段与界值比较 |
| 记录时体重 | 63 千克 | 注释段 Weight |
| 空值字段 | 六项 | 值为 None 而非 0 |
| 通道与滤波 | 十二路 | 首行与通道名后缀 |
空值写成 None 而不是零,说明它是缺失而不是「无」。同一条记录里一部分字段有值、一部分为空,说明缺失按字段发生;用删整行的策略会连带扔掉可用的体重与出血信息。
| 想问的问题 | 头文件能否直接回答 | 依据 |
|---|---|---|
| 采于孕几周 | 能 | 注释段 Rectime |
| 是足月还是早产 | 能,需与三十七周比较 | 注释段 Gestation |
| 采集时长 | 能,需做除法 | 采样点数除以采样率 |
| 经过哪些滤波 | 能 | 通道名中的 DOCFILT 标记 |
| 四枚电极贴在哪 | 部分能 | 布局由页面给出,非头文件 |
| 之后有无干预 | 不能 | 无此字段 |
第四行需要解释。通道名里的 DOCFILT-4-0.3-3 表示四阶双通滤波、通带零点三到三赫兹,未滤波那一路没有后缀。滤波参数写在通道名里而非另设字段,下游工具按名做正则匹配时要把后缀当可变部分。
2.4 十二条信号的组织方式
每条记录固定十二路,顺序是「先通道、后滤波档位」:S1 的原始与三档滤波排在前四路,S2 的四路居中,S3 的四路在后。这个顺序是硬约定,官方页面逐行列明。
| 序号 | 通道 | 滤波档位 | 通道名后缀 |
|---|---|---|---|
| 1 | S1 | 原始 | 无 |
| 2 | S1 | 0.08 至 4 赫兹 | DOCFILT-4-0.08-4 |
| 3 | S1 | 0.3 至 3 赫兹 | DOCFILT-4-0.3-3 |
| 4 | S1 | 0.3 至 4 赫兹 | DOCFILT-4-0.3-4 |
| 5 至 8 | S2 | 同上四档 | 同上 |
| 9 至 12 | S3 | 同上四档 | 同上 |
官方对滤波给了一句使用提示:用滤波通道时,首尾各一百八十秒应丢弃,因为双通滤波在两端留有暂态。这句话的实际影响不小——三十分钟的记录砍掉六分钟,可用部分只剩二十四分钟,比例八成。
| 项目 | 数值 | 说明 |
|---|---|---|
| 名义时长 | 30 分钟 | 官方表述 |
| 单侧暂态 | 180 秒 | 官方要求丢弃 |
| 每侧采样点 | 3600 点 | 180 秒乘 20 赫兹 |
| 裁剪后可用 | 约 24 分钟 | 占名义时长八成 |
三档滤波的截止频率差异同样要紧:零点零八赫兹那一档保留更多慢漂移,零点三赫兹那两档把基线压得更平,也会削掉一部分极慢的子宫电活动。选哪一档会直接改变频谱类特征的计算结果。
| 若选这一档 | 特征会怎么变 | 适合什么目的 |
|---|---|---|
| 0.08 至 4 赫兹 | 慢漂移保留,谱重心可能偏低 | 研究极慢成分与基线稳定性 |
| 0.3 至 3 赫兹 | 基线最平,谱峰最清晰 | 复现论文、做组间比较 |
| 0.3 至 4 赫兹 | 介于两者之间 | 兼顾快慢成分 |
2.5 与同类资源的字段差异
| 维度 | TPEHG DB | 冰岛多电极库 | 引产与剖宫产库 | 产时胎心电库 |
|---|---|---|---|---|
| 记录对象 | 子宫肌电 | 子宫肌电 | 子宫肌电 | 胎儿心电加宫缩 |
| 电极数 | 4,三路差分 | 16,单极阵列 | 4,三路差分 | 胎头电极加腹部 |
| 采样率 | 20 赫兹 | 200 赫兹 | 20 赫兹 | 数百赫兹以上 |
| 受试规模 | 300 次妊娠 | 数十名孕妇、上百条记录 | 近百次妊娠 | 单条样本 |
| 结局标签 | 足月与早产二分 | 以妊娠与产程为主 | 引产、剖宫产分组 | 产时状态 |
| 现成特征表 | 有,四类特征三档滤波 | 无 | 无 | 无 |
| 共有字段 | 本库 | 多电极库 | 产时库 |
|---|---|---|---|
| 记录时孕周 | 有 | 有 | 有 |
| 分娩孕周 | 有 | 多有 | 少 |
| 临床病史 | 有,十六项 | 有,项数更多 | 少 |
| 事件标注 | 无 | 有 | 部分有 |
这张表里最容易被低估的是最后一列。现成特征表把入门门槛压到极低:不必理解 WFDB、不必写滤波器、不必处理缺失值,一张表读完就能跑分类器。代价是使用者也容易停在这一步,把特征表当成数据的全部。
§3 它记录的是什么:子宫肌电,不是胎心电
3.1 二十赫兹这个数字决定了它能做什么
采样率比样本量更能决定一份电生理数据的用途。二十赫兹意味着奈奎斯特频率只有十赫兹,高于十赫兹的成分在数字化那一刻就被折叠或丢弃,事后拿不回来。子宫肌电的主能量集中在几赫兹以下,二十赫兹足够描述慢波;胎心电的 QRS 宽度在几十毫秒量级,二十赫兹连完整波形都描不出来。
| 采样率 | 能描述的生理过程 | 典型用途 | 相对本库 |
|---|---|---|---|
| 20 赫兹 | 子宫肌电慢波、呼吸、缓慢基线变化 | 宫缩相关的频谱与包络分析 | 本库档位 |
| 250 赫兹 | 心电 QRS 轮廓,形态大致可信 | 心率、节律粗判 | 高一个数量级 |
| 500 至 1000 赫兹 | 心电形态细节 | 母胎心电分离、形态学 | 高一个半到两个数量级 |
| 2000 赫兹以上 | 高频肌电、神经电 | 精细电生理 | 高两个数量级 |
这张表解释了一个常见困惑:同样叫电生理数据,有的库几十兆,有的要几百吉,差别不在时长而在采样率。
| 低采样率带来的 | 具体表现 |
|---|---|
| 好处 | 高频噪声在数字化阶段就被挡在门外,工频与电极噪声难以进入 |
| 好处 | 单条不到一兆,全库可整包下载,实验迭代快 |
| 代价 | 高频干扰的痕迹一并消失,无法用于信号质量评估 |
| 代价 | 任何依赖波形形态的分析都不成立 |
3.2 频段与生理假设
子宫肌电的有效成分大致落在零点一至四赫兹,官方给出的三档带通滤波器正是围绕这个区间设计的。
| 滤波档位 | 通带宽度 | 保留什么 | 丢掉什么 |
|---|---|---|---|
| 0.08 至 4 赫兹 | 最宽 | 极慢基线起伏与完整核心频段 | 几乎不丢,但残留漂移 |
| 0.3 至 3 赫兹 | 最窄 | 核心节律成分 | 极慢漂移与三点五赫兹以上的快成分 |
| 0.3 至 4 赫兹 | 中等 | 核心成分加快成分 | 极慢漂移 |
三档并存本身就是研究设计的痕迹。2008 年那篇论文把滤波档位当作自变量来比较,结论是零点三至三赫兹那一档最敏感。
| 比较 | 指标 | 滤波档位 | 显著性 |
|---|---|---|---|
| 孕 26 周前的足月对早产 | 中值频率 | 0.3 至 3 赫兹 | p 等于 0.03 |
| 孕 26 周前的足月对早产 | 样本熵 | 0.3 至 3 赫兹 | p 等于 0.035 |
| 全部足月对全部早产 | 中值频率 | 0.3 至 3 赫兹 | p 等于 0.012 |
| 全部足月对全部早产 | 样本熵 | 0.3 至 3 赫兹 | p 等于 0.011 |
| 足月组孕 26 周前对之后 | 中值频率与样本熵 | 0.3 至 3 赫兹 | p 小于或等于 0.001 |
这些数字是组间差异的显著性,不是分类器的准确率。三百条、阳性三十八,能跑出 p 小于 0.05 说明信号里有信息,但效应量不大,靠单个特征做临床判别远远不够。
| 特征 | 定义 | 反映什么 | 在本库里的角色 |
|---|---|---|---|
| 均方根 | 信号幅度的有效值 | 整体能量 | 幅度类基线 |
| 中值频率 | 功率谱能量的中分点 | 频谱重心 | 论文报告最敏感的指标 |
| 峰值频率 | 功率谱最大值的位置 | 主节律 | 与中值频率互为补充 |
| 样本熵 | 序列的不可预测程度 | 复杂度与规律性 | 论文报告次敏感的指标 |
3.3 三路差分为什么不是三路独立电极
四枚电极取三路差分,实际只有三个自由度,因为差分把每路的共模成分减掉了。腹壁上最恼人的干扰往往同时出现在相邻电极上:母体心电在腹壁形成的电位场范围很大,四枚电极几乎拾到相同幅度,相减后残留很小;远处工频干扰同理。
| 设计选择 | 好处 | 代价 |
|---|---|---|
| 电极间距仅 3.5 厘米 | 共模抑制好,局部梯度清晰 | 覆盖小,看不到子宫整体传播 |
| 三路差分而非四路单极 | 抑制母体心电与工频 | 失去绝对电位,无法还原单极信号 |
| 两横一纵的取向 | 兼顾两个方向 | 无法做源定位或阵列波束形成 |
代价在需要空间信息时立刻显现。想研究电活动从宫底向宫颈的传播,需要覆盖整个腹部、且最好单极记录的阵列;三路小间距差分给不了。反过来,若目标只是判断信号里有没有与结局相关的统计差异,三路已经够。
| 干扰来源 | 差分能否抑制 | 原因 |
|---|---|---|
| 母体心电 | 能,部分抑制 | 空间分布广,各路幅度接近 |
| 工频 | 能,主要靠共模 | 远处场近似均匀 |
| 电极接触噪声 | 不能 | 逐电极独立,差分后反而放大 |
| 局部肌电串扰 | 不能 | 与目标信号同源同频 |
最后一行是这份数据的隐性边界:腹壁肌电与子宫肌电频段重叠,差分无法区分,官方也没有提供任何区分标记。任何声称能自动剔除腹肌干扰的方法,在这份数据上都没有真值可比。
3.4 组别是怎么划的
官方的分组是二乘二:按记录时孕周分孕二十六周前与孕二十六周及以后,按分娩孕周分足月与早产。
| 组名 | 记录时孕周 | 分娩结局 | 记录数 |
|---|---|---|---|
| 孕 26 周前足月 | 小于 26 周 | 大于 37 周 | 143 |
| 孕 26 周前早产 | 小于 26 周 | 小于或等于 37 周 | 19 |
| 孕 26 周及以后足月 | 26 周及以上 | 大于 37 周 | 119 |
| 孕 26 周及以后早产 | 26 周及以上 | 小于或等于 37 周 | 19 |
四个数字相加正好三百。这里有一个官方内部的口径差:汇总表里的孕周保留两位小数,头文件注释段保留一位,同一条记录会出现两种写法。
| 项目 | 汇总表 | 头文件 | 差异来源 |
|---|---|---|---|
| 分娩孕周 | 38.57 | 38.6 | 四舍五入精度不同 |
| 记录时孕周 | 22.29 | 22.3 | 同上 |
| 影响 | 不影响分组 | 不影响分组 | 精确匹配时需统一口径 |
另一个边界是足月的定义。官方用大于三十七周为足月,与论文摘要一致;临床常用的界值也是三十七周整,两者在恰好三十七周这一点上会给出不同归类,而数据里是否有这样的记录,官方未说明。
3.5 你能从一条记录里读出什么
| 想读出的东西 | 能否读到 | 依据 |
|---|---|---|
| 三路电位的波形 | 能 | 原始或滤波后任选 |
| 记录时孕周 | 能 | 注释段与汇总表 |
| 分娩时孕周 | 能 | 同上 |
| 是否早产 | 能 | 汇总表的二进制字段 |
| 体重、年龄、产次 | 部分能 | 部分记录为空值 |
| 单次宫缩的起止时刻 | 不能 | 无标注、无压力通道 |
| 胎儿心率 | 不能 | 频段与采样率不支持 |
| 用药或干预记录 | 不能 | 无此字段 |
第五行最容易被高估。临床字段看起来很全,但空值分布并不均匀,早年记录缺项更多,这与官方 2012 年才补入八项信息有关。以这些字段为协变量的分析,实际可用样本都会小于三百。
| 字段组 | 是否 2012 年补入 | 使用建议 |
|---|---|---|
| 编号、孕周、记录时孕周 | 否,首版即有 | 可直接使用 |
| 年龄、产次、流产次数 | 否,首版即有 | 空值需按缺失处理 |
| 体重、高血压、糖尿病 | 是 | 早年记录缺失偏多 |
| 胎盘位置、两期出血、漏斗、吸烟 | 是 | 取值编码未说明,慎用 |
§4 它最独特的东西:一个被筛过的自然临产队列
4.1 筛选规则改变了这个库的性质
原始池子里有近一千三百条记录,最终只公开三百条。三条筛选规则叠加,剩下的是一批自然发动、经阴道分娩、信号干净的妊娠。
| 环节 | 数量 | 说明 |
|---|---|---|
| 原始池 | 近 1300 条 | 1997 至 2005 年常规产检累积 |
| 剔除伪迹 | 未公布 | 官方只写「明显伪迹」 |
| 剔除引产 | 未公布 | 无具体条数 |
| 剔除剖宫产 | 未公布 | 无具体条数 |
| 公开池 | 300 条 | 每次妊娠一条 |
逐级剔除的具体条数,官方一个都没给,只给了结果。这意味着无法判断三条规则各自的影响有多大,也无法复现这条筛选漏斗。
| 筛选动作 | 剔除的对象 | 留下的性质 |
|---|---|---|
| 去除伪迹记录 | 电极脱落、运动干扰严重的段 | 信号可用性高 |
| 去除引产 | 药物或机械方式启动的产程 | 产程自然发动 |
| 去除剖宫产 | 择期或急诊手术终止妊娠 | 结局由产程本身决定 |
这个选择让结局标签变干净:早产组是真性早产,不是医源性提前终止。代价是外部效度——真实产科里引产与剖宫产占相当比例,这部分人完全不在库中,模型放到含大量计划分娩的人群里会立刻偏移。
4.2 案例:孕 22 周 3 天的 tpehg1021
tpehg1021 是一条有代表性的记录:采集于孕二十二点三周,落在官方所说的孕二十六周前窗口;分娩发生在孕三十八点六周,属于足月;记录时体重六十三千克,孕早期有出血史,胎盘位置记为 end;年龄、产次、流产次数、高血压、糖尿病、吸烟六项为空。
记录名 tpehg1021
记录时孕周 22.3(汇总表 22.29)
分娩孕周 38.6(汇总表 38.57)
组别 <26-TERM
早产 f
早期记录 t
通道数 12
每路采样点 35260
采样率 20 赫兹
折算时长 1763 秒,约 29 分 23 秒
| 这一条记录能说明的 | 具体表现 |
|---|---|
| 官方时长与实际采样点存在差额 | 页面称 30 分钟,头文件折算约 29 分 23 秒 |
| 孕周有两个精度口径 | 头文件一位小数,汇总表两位 |
| 临床字段可以有条件缺失 | 六项为 None,体重与胎盘位置有值 |
| 早期足月组是论文的重点组 | 判别力最强的正是孕 26 周前这一层 |
第二行与第三行的组合最容易被忽略:缺失是按字段发生的,不是按记录整条丢失。做多变量分析时若删整行,会连带扔掉本来可用的体重与出血信息。
#-- 只取这一条记录,把三档滤波后的 S2 通道并排比较
import wfdb, numpy as np
rec = wfdb.rdrecord("tpehgdb/tpehg1021", pn_dir="tpehgdb")
idx = [i for i, n in enumerate(rec.sig_name) if n.startswith("2")]
for i in idx:
x = rec.p_signal[:, i]
print(rec.sig_name[i], "标准差", round(float(np.std(x)), 4), "峰峰值", round(float(np.ptp(x)), 4))
这段代码不需要任何标注,也不必下载全库,一条记录、四行输出,就能建立对滤波档位差异的直觉。§7.2 会再回到这个观察。
4.3 三条排除项各自排掉了谁
| 排除项 | 被排掉的人群 | 对结论的影响 |
|---|---|---|
| 明显伪迹 | 电极接触不良或运动剧烈的记录 | 提高信号质量,也可能连带排除体型特殊者 |
| 引产 | 因医学原因人工启动产程者 | 早产组只剩自发性早产 |
| 剖宫产 | 择期与急诊手术者 | 结局不再含医源性因素 |
前两条合起来,定义了这份数据的适用边界:它研究产程如何开始,而不是妊娠如何结束。以胎膜早破为例,它可以导致自然临产,也可能因感染风险转为引产,后一种情况在本库中不会出现。第三条还有个少被提及的副作用:排除剖宫产会让样本偏向经阴道分娩成功的人群,队列整体偏顺。
| 被筛掉的情形 | 在真实产科中的占比 | 对模型的影响 |
|---|---|---|
| 计划剖宫产 | 不低 | 模型从未见过这类病例 |
| 引产失败转剖 | 不低 | 极端病例完全缺失 |
| 产程异常 | 中等 | 队列偏顺,风险被低估 |
| 信号伪迹严重 | 未知 | 真实场景下的坏段比例被低估 |
4.4 现成的特征表:最低门槛的入口
库中除原始信号外,还附三份特征表,按滤波档位各一份,每份九百行,对应三百条记录乘三路通道。
| 列名 | 含义 | 单位或范围 | 备注 |
|---|---|---|---|
| Record | 记录名 | 文本 | 与文件名一致 |
| Chann | 通道号 | 1 至 3 | 对应 S1 至 S3 |
| Gestation | 分娩孕周 | 周 | 两位小数 |
| Rec. time | 记录时孕周 | 周 | 两位小数 |
| Group | 组别 | 四种组合 | 与孕周分层一致 |
| RMS | 均方根 | 与信号同量纲 | 反映整体幅度 |
| Fmed | 中值频率 | 赫兹 | 频谱重心位置 |
| Fpeak | 峰值频率 | 赫兹 | 频谱最高点 |
| Samp. en. | 样本熵 | 无量纲 | 反映复杂度 |
| Premature | 是否早产 | t 或 f | 结局标签 |
| Early | 是否早期记录 | t 或 f | 孕周分层标签 |
三份表结构完全相同,只有数值随滤波档位变化。这个设计让滤波档位的影响可以直接用三张表做差来看,不必重跑信号处理。
| 特征表 | 对应通带 | 行数 | 用途 |
|---|---|---|---|
| filter_0.08_Hz-4.0_Hz | 0.08 至 4 赫兹 | 900 | 宽通带,含慢漂移 |
| filter_0.3_Hz-3.0_Hz | 0.3 至 3 赫兹 | 900 | 论文报告判别力最强 |
| filter_0.3_Hz-4.0_Hz | 0.3 至 4 赫兹 | 900 | 折中档 |
特征表里的数值是对整段信号算的,而官方又建议滤波通道丢弃首尾各一百八十秒。这两件事是否一致,官方未说明。做复现时若发现数值对不上,先查这一点。
4.5 反事实:如果它保留了引产与剖宫产
| 选择 | 得到的 | 失去的 |
|---|---|---|
| 保留全部病例 | 规模大四倍,更接近真实产科人群 | 结局混杂,信号质量参差 |
| 只留自然临产(现行) | 标签干净,适合机制研究 | 外部效度窄,样本小 |
| 只留引产与剖宫产 | 可研究医源性分娩 | 完全变成另一个数据集 |
第三种选择后来真的被做出来了,就是同域的引产与剖宫产库,§6.3 会展开。一个数据集排除掉的东西,往往正好是另一个数据集的全部内容。
| 如果当年不排除 | 会多出什么 | 会少掉什么 |
|---|---|---|
| 规模 | 从三百涨到近一千三 | —— |
| 阳性比例 | 上升,医源性早产占比不低 | 早产的定义变模糊 |
| 信号质量 | —— | 急诊术前记录往往仓促 |
| 可比性 | 更贴近真实门诊人群 | 与 2008 年论文的基线不可比 |
§5 怎么拿到:从两百多兆的包里取出你要的那一段
5.1 三条取数路径
| 路径 | 适合谁 | 需要什么 | 拿到什么 |
|---|---|---|---|
| 直接下载全量 ZIP | 想本地反复实验的人 | 两百多兆空间 | 全部记录、特征表与说明文档 |
| 用 WFDB 工具按需拉单条 | 只想看几条记录的人 | Python 与 wfdb 包 | 单条十二路信号 |
| 只读特征表 | 只想跑分类器的人 | 任意表格工具 | 四类特征与标签 |
三条路径的入口都在同一目录下,区别只在于取多少。按需拉取不下载整包,单条不到一兆。
#-- 路径一:整包下载,解压后得到 tpehgdb 目录
wget -r -N -c -np https://physionet.org/files/tpehgdb/1.0.1/
#-- 路径二:用官方给出的对象存储同步方式
aws s3 sync --no-sign-request s3://physionet-open/tpehgdb/1.0.1/ ./tpehgdb-1.0.1
| 方式 | 命令要点 | 体积 | 备注 |
|---|---|---|---|
| 递归下载 | wget 加递归与续传参数 | 约两百多兆 | 会拉下说明文档与校验文件 |
| 对象存储同步 | 匿名访问,不需要密钥 | 同上 | 适合脚本化 |
| 单条远程读 | 只需库名与记录名 | 不到一兆 | 依赖网络,不适合批量 |
5.2 先把文件头读出来
不装任何专用库也能读头文件,它是纯文本,逐行解析即可。这一步的价值在于:临床字段全在这里,而它们不会出现在任何信号数组里。
#-- 只依赖标准库,读一条记录的头文件与临床注释
import urllib.request
URL = "https://physionet.org/files/tpehgdb/1.0.1/tpehgdb/tpehg1021.hea"
lines = urllib.request.urlopen(URL).read().decode("utf-8").splitlines()
head = lines[0].split()
name, n_sig, fs, n_samples = head[0], int(head[1]), float(head[2]), int(head[3])
print(name, n_sig, fs, n_samples, "时长约", round(n_samples / fs), "秒")
meta = {}
for ln in lines:
if not ln.startswith("#"):
continue
body = ln.lstrip("#").strip()
if not body or ":" in body:
continue
key, _, val = body.partition(" ")
meta[key] = val.strip()
for k in ("RecID", "Gestation", "Rectime", "Weight"):
print(k, "=", meta.get(k))
| 解析对象 | 分隔方式 | 容易出错的点 |
|---|---|---|
| 首行 | 空格 | 采样率是浮点写法,勿直接转整型 |
| 通道行 | 空格 | 通道名可能带滤波后缀 |
| 注释行 | 首个空格 | 值本身不含空格,可直接切分 |
| 空值 | 字面 None | 不能当零处理 |
5.3 用 WFDB 读出十二路信号
wfdb 包能直接把远程记录读成数组,通道名、单位、增益都会带出来。读完之后先看形状,再看单位,最后才画图。
#-- 远程读取一条记录的十二路信号
import wfdb
import numpy as np
rec = wfdb.rdrecord("tpehgdb/tpehg1021", pn_dir="tpehgdb")
sig = rec.p_signal # 形状为 采样点 x 12,单位毫伏
print(sig.shape, rec.fs, rec.sig_name)
s1_raw, s1_0084, s1_033, s1_034 = (sig[:, i] for i in range(4))
print("S1 原始幅度范围", np.nanmin(s1_raw).round(3), np.nanmax(s1_raw).round(3))
print("S1 窄带幅度范围", np.nanmin(s1_033).round(3), np.nanmax(s1_033).round(3))
窄带的幅度范围通常明显小于原始,因为慢漂移被压掉了。两者接近时先检查是否读错列顺序——十二路是「通道优先、滤波次序」,不是反过来。
| 属性 | 预期值 | 若不符合 |
|---|---|---|
| 形状 | 采样点乘 12 | 可能是只读到部分通道 |
| 采样率 | 20 | 单位或版本不对 |
| 单位 | 毫伏 | 用了数字量而非物理量 |
| 通道名前缀 | 1、2、3 | 索引与几何对应关系错位 |
5.4 丢掉滤波器暂态
官方明确要求使用滤波通道时丢弃首尾各一百八十秒。二十赫兹下即每侧三千六百点。
#-- 裁剪滤波通道的暂态段,保留中间可用部分
FS = 20
TRIM_S = 180
def usable(x, fs=FS, trim_s=TRIM_S):
n = trim_s * fs
if len(x) <= 2 * n:
raise ValueError("记录过短,裁剪后无剩余")
return x[n:len(x) - n]
s1_clean = usable(s1_033)
print("裁剪前", len(s1_033), "点;裁剪后", len(s1_clean), "点")
print("可用时长", round(len(s1_clean) / FS / 60, 1), "分钟")
| 场景 | 是否需要裁剪 | 理由 |
|---|---|---|
| 用滤波通道算频谱特征 | 需要 | 两端暂态会污染低频估计 |
| 用原始通道算时域统计 | 不需要 | 原始信号没有双通滤波暂态 |
| 复现论文特征表数值 | 未定 | 官方未说明特征是否裁剪后计算 |
裁剪后剩约二十四分钟。对频谱类特征影响不大,但样本熵这类对序列长度敏感的量会因裁剪与否产生可观差异。
5.5 常见报错与处置
| 现象 | 可能原因 | 处置 |
|---|---|---|
| 找不到记录 | 远程路径少了子目录名 | 记录名写成 tpehgdb/tpehg1021 |
| 信号幅度大得离谱 | 把数字量当毫伏 | 用物理量数组而非数字量 |
| 三路信号一模一样 | 索引写成了同一列 | 检查列顺序约定 |
| 特征表全是字符串 | 分隔符与空白混排 | 指定分隔符并跳表头 |
| 分类准确率异常高 | 三路被分到训练与测试 | 按记录名做分组划分 |
| 熵值与论文差很多 | 未裁剪或参数不同 | 统一裁剪并用 m 等于 3、r 等于 0.15 |
最后一行值得强调。样本熵对参数极敏感,容限通常按标准差倍数取值,若按绝对幅度取会系统性偏移。把裁剪规则与两个参数固定下来,比换十种分类器更有意义。
§6 与库内同域资源的关系
6.1 关系图谱
产科电生理这个小领域里,几个公开库常被摆在一起比较,但它们回答的问题几乎不重叠。区分它们只需要三个坐标:测的是什么电、一个人测几次、结局标签是什么。
| 库 | 测什么 | 规模 | 时间结构 | 结局标签 | 与本库的关系 |
|---|---|---|---|---|---|
| TPEHG DB | 子宫肌电,三路差分 | 300 次妊娠各一条 | 横断面,单次 | 足月与早产 | 本篇主体 |
| NIFECGDB | 母胎心电,含胸导 | 1 名孕妇 55 段 | 纵向,逐周 | 无结局标签 | 测的是心脏电,采样率高两个数量级 |
| NInFEA | 母胎心电加多普勒与呼吸带 | 39 名孕妇 60 段 | 横断面 | 无结局标签 | 同为孕中期窗口,但多模态、高频 |
| FECGSYNDB | 合成母胎心电 | 10 例模拟妊娠,上千次模拟 | 可任意设定 | 生成时已知 | 无真实受试者,可作预训练语料 |
| OB-1 | 胎头电极胎心电加宫缩 | 1 条记录 | 单次,产时 | 产时状态 | 产时而非产前,通道完全不同 |
| ICEHG DS | 子宫肌电,三路差分 | 91 次妊娠,126 条 | 横断面,可两次 | 引产与剖宫产分组 | 同一套电极传统,病例互斥 |
| 库 | 能否与本库合并 | 合并前要做什么 |
|---|---|---|
| NIFECGDB | 不能直接合并 | 物理量与采样率都不同,只能做方法链接力 |
| NInFEA | 不能直接合并 | 通道数与模态不同,需重建特征空间 |
| FECGSYNDB | 可以混合训练 | 必须标注来源,且只在预训练阶段使用 |
| OB-1 | 不宜合并 | 产时与产前场景差异过大 |
| ICEHG DS | 可以合并 | 加来源标记,注意许可条款不同 |
6.2 与 NIFECGDB 的差别:一个铺人群,一个铺时间
NIFECGDB 是同一名孕妇从孕二十一周到四十周逐周记录的五十五段腹壁心电,采样一千赫兹,带两路胸导作母体参考,没有分娩结局标签。TPEHG 是三百名孕妇各一次,采样二十赫兹,没有心脏导联,但有明确的足月与早产标签。
| 维度 | TPEHG DB | NIFECGDB |
|---|---|---|
| 记录对象 | 子宫平滑肌电活动 | 胎儿与母体心肌电活动 |
| 受试者数 | 300 | 1 |
| 每人记录数 | 1 | 55 |
| 采样率 | 20 赫兹 | 1000 赫兹 |
| 单条时长 | 30 分钟 | 数分钟 |
| 结局标签 | 有 | 无 |
| 可做的分析 | 组间统计比较 | 个体内时间演化 |
两份数据在方法学上几乎不能互换。在前者上做母胎心电分离不可能,胎心成分不在频带内;在后者上做早产预测也不可能,五十五段来自同一个人,阳性样本数为零。
| 想研究的问题 | 该用哪一份 | 原因 |
|---|---|---|
| 胎儿心电随孕周增强 | NIFECGDB | 逐周记录且采样率高 |
| 子宫电活动与分娩结局 | TPEHG | 有结局标签且样本够 |
| 母体成分如何干扰腹壁信号 | NIFECGDB | 有胸导可作母体参考 |
| 早中期电活动的组间差异 | TPEHG | 有孕 26 周前分层 |
两者也能拼成一条路线:用高频多导数据开发前端处理,把链路固定后,再用有结局的低频数据做下游统计。这条路线不要求受试者重叠,只要求链路可迁移。
6.3 与 ICEHG DS 的差别:同一套电极,互斥的两类分娩
ICEHG DS 同样来自卢布尔雅那的采集传统,电极布局、采样率、时长与 TPEHG 高度相似,规模是九十一次妊娠、一百二十六条记录。它的分组围绕引产与剖宫产,而这三类恰恰是本库入库时明确剔除的。
| 维度 | TPEHG DB | ICEHG DS |
|---|---|---|
| 病例来源 | 自然临产妊娠 | 引产与剖宫产妊娠 |
| 是否含医源性分娩 | 不含,明确排除 | 含,且为核心分组 |
| 规模 | 300 次妊娠 | 91 次妊娠,126 条记录 |
| 每人记录数 | 1 | 可两次 |
| 结局标签 | 足月与早产 | 分娩方式与引产结果 |
| 许可 | ODC Attribution 1.0 | ODC Open Database License 1.0 |
| 使用场景 | 该选哪个 | 说明 |
|---|---|---|
| 自然早产的机制研究 | TPEHG | 队列干净,标签明确 |
| 引产成功率预测 | ICEHG DS | 本库无此类病例 |
| 比较自然与人工产程 | 两个都用 | 同源采集,技术混杂小 |
| 单库快速入门 | TPEHG | 规模大、附特征表 |
这个互补关系很容易被忽略,也很容易出事。两库记录名风格相近,电极描述几乎一样,若混在一个目录里按名排序读取,很可能把引产病例当成自然临产病例。
从研究设计看,组合价值大于各自单独使用:一个提供自然产程如何开始的对照,一个提供人工启动产程时的观察,同源采集让技术混杂小很多。
6.4 与 NInFEA、FECGSYNDB、OB-1 的分工
| 库 | 与本库最像的地方 | 最不像的地方 | 什么时候该选它 |
|---|---|---|---|
| NInFEA | 都覆盖孕二十一周前后的窗口 | 二十七路高频多模态,测母胎心电 | 需要多模态参考或早孕期心电时 |
| FECGSYNDB | 都能产出信号到标签的配对 | 全是模拟,没有真实孕妇 | 需要大样本预训练或极端信噪比时 |
| OB-1 | 都涉及子宫电活动 | 产时、单条、带胎头电极 | 研究产时监护与胎儿窘迫时 |
| 组合 | 可行性 | 主要风险 |
|---|---|---|
| 本库加合成库预训练 | 中 | 合成数据没有子宫慢波,表征迁移效果差 |
| 本库加产时库对照 | 低 | 场景差异太大,结论不可通约 |
| 本库加多模态库 | 低 | 模态与通道数都不同 |
NInFEA 的窗口与本库早期窗口重叠,都在二十一周到二十七周之间,但前者目标是胎儿心脏,后者目标是子宫。FECGSYNDB 的价值在规模与可控性,可以造出上千次五分钟记录;把在合成数据上预训练的模型迁移到本库做结局分类,风险很高,因为合成数据里没有子宫肌电的慢波。OB-1 只有一条产时记录,能提供直观参照,不能提供统计结论。
6.5 组合使用的三条路线
| 路线 | 组合方式 | 适合的目标 | 主要风险 |
|---|---|---|---|
| 同源互补 | 本库加引产剖宫产库 | 比较自然与人工产程的电活动 | 记录名混淆、许可条款不同 |
| 跨频段接力 | 高频心电库做前端,本库做下游 | 验证处理链可迁移性 | 频段差异导致指标不可比 |
| 合成加真实 | 合成库扩样本,本库做真实检验 | 小样本下的数据增强 | 合成分布与真实分布不一致 |
第一条可行性最高,两库采集条件接近,只需处理命名与来源标记。第二条需额外论证:前端处理的输出在本库频段上是否还有意义。第三条要守住合成数据只用于预训练、真实数据只用于评估这条界线。
6.6 检索路径
在站内找同域资源,按标签与关键词两条路走最稳。标签路径利用归一化后的分类词表,关键词路径兜住标签未覆盖的写法。
#-- 关键词兜底:覆盖库名缩写与中文异写,再按物理量人工筛
bash scripts/qf_psql.sh "SELECT record_id, url_name, title FROM ai_ready_dataset \
WHERE del_sign = 0 AND (url_name ILIKE '%ehg%' OR title ILIKE '%子宫肌电%' \
OR title ILIKE '%宫缩%' OR title ILIKE '%胎%') ORDER BY record_id"
| 路径 | 召回 | 精度 | 适合 |
|---|---|---|---|
| 标签检索 | 中 | 高 | 已知标签体系时 |
| 关键词兜底 | 高 | 中 | 首次摸底时 |
| 两者交叉 | 高 | 高 | 建清单时 |
关键词路径会把胎心电、胎心音这类同域不同物的资源一并带出,第二步必须按测的是子宫还是胎儿逐条筛。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评价这份数据时最容易出现的误判,是拿今天的样本量标准去衡量一份 2010 年发布、1997 年采集的库,然后得出太小、不能用的结论。这个判断忽略了它的历史位置:在它之前,公开的子宫肌电数据基本不存在。
第二个要校正的是「二分类太粗糙」。粗标签确实丢掉了病理分型,却换来三百条记录的可用性;若要求逐条带完整分型,规模会掉到几十条。
第三个与显著性有关。论文的 p 值容易被读成信号很强,实际上它只说明组间差异不太可能由偶然产生。在三百条、阳性三十八例的样本上,p 等于 0.01 对应的效应量可能很小。
| 常见误判 | 校正后的看法 |
|---|---|
| 样本太小所以没用 | 稀缺性比规模更能决定长期价值 |
| 二分类太粗所以不可用 | 粗标签换来了可用规模,且与论文基线可比 |
| p 值小说明判别力强 | 显著性不等于效应量 |
| 单中心所以不能研究 | 可以研究机制,不能报告人群泛化 |
7.1 五维评分
按 DAIMS 框架的五个维度打分,满分五分。
| 维度 | 分数 | 一句话理由 |
|---|---|---|
| 可发现性 | 5 | PhysioNet 主站收录,DOI 稳定,领域内引用密集 |
| 可访问性 | 5 | 匿名下载,无需注册,无数据使用协议 |
| 互操作性 | 4 | WFDB 是通用标准,但通道命名依赖字符串约定 |
| 可复用性 | 5 | 许可宽松,附现成特征表,一条命令可全量获取 |
| 可溯源性 | 4 | 有方法学论文与完整头字段,但无独立数据描述论文 |
| 维度 | 扣分点 | 对使用的影响 |
|---|---|---|
| 互操作性 | 通道名混编滤波参数,需正则解析 | 通用加载器容易读错列 |
| 可溯源性 | 无数据描述论文,伦理与采集流程未公开 | 方法学只能引 2008 年论文 |
| 可溯源性 | 部分字段取值编码未说明 | 胎盘位置等字段不可直接使用 |
| 可发现性 | 页面体例较早,字段说明集中在正文 | 新使用者需通读全文 |
可复用性给满分是因为三项条件同时满足:许可是署名型而非传染型,结构自解释,官方已把最常用的四类特征算好放在包里。三点合起来,让一个不熟悉 WFDB 的人也能在半小时内跑出第一张图。
7.2 分数背后的取舍
可访问性与可复用性这两项几乎没有争议,分歧在可溯源性。2008 年那篇是方法学论文,重心在比较信号处理技术,对数据本身的描述只有几段;采集流程、伦理审批、剔除判据都没有系统记录。这不妨碍使用,只妨碍复现细节。
| 你想知道的事 | 官方有没有说 | 能否从文件推出 |
|---|---|---|
| 电极的解剖位置 | 有,脐周三点五厘米 | 不能,只能从页面读 |
| 电极为何这样摆 | 没有 | 不能 |
| 剔除伪迹的具体阈值 | 没有 | 不能 |
| 胎盘位置的取值含义 | 没有 | 不能 |
| 每条记录的实际时长 | 页面称三十分钟 | 可以算,与页面略有出入 |
最后一行可以自行核对,也是 §4.2 的案例的由来。结论不是官方写错了,而是两个口径并存、差额构成未说明,这样写在局限性里最稳妥。
7.3 已知的、可枚举的偏差
| 偏差 | 性质 | 后果 |
|---|---|---|
| 单中心、单地区 | 设计现实 | 人群与设备条件单一 |
| 排除引产与剖宫产 | 设计选择 | 不代表全部分娩人群 |
| 每次妊娠仅一条记录 | 设计选择 | 无法做个体内追踪 |
| 采集窗口只有两个 | 设计现实 | 孕周不连续,无法画连续曲线 |
| 阳性仅三十八例 | 设计现实 | 亚组分析迅速失去统计效力 |
| 无事件级标注 | 设计选择 | 事件检测类任务不可做 |
| 临床字段存在空值 | 采集现实 | 多变量分析样本进一步缩小 |
| 二十赫兹采样率 | 设计选择 | 高频成分与胎心信息不可得 |
前四项是设计与现实,不该读成缺陷;后四项是使用者必须自己承担的后果。区分这两类,比逐条抱怨更有用。
7.4 外部验证矩阵
| 验证方式 | 能否在本库完成 | 说明 |
|---|---|---|
| 与分娩结局对照 | 能 | 结局标签即金标准 |
| 与宫缩压力对照 | 不能 | 无同步压力通道 |
| 与超声宫颈长度对照 | 不能 | 无影像字段 |
| 跨中心外部验证 | 不能 | 只有单一中心 |
| 算法间横向比较 | 能 | 同一批记录可跑多方法 |
| 滤波档位敏感性 | 能 | 三档滤波并列存放 |
| 特征与论文数值复现 | 能 | 四类特征已公开 |
| 想表达的结论 | 可用的措辞 | 不可用的措辞 |
|---|---|---|
| 特征有判别力 | 在该队列上组间差异显著 | 可用于临床筛查 |
| 模型有效 | 交叉验证下的区分度 | 准确率达到临床要求 |
| 滤波有影响 | 不同通带下特征分布不同 | 某档滤波最优 |
| 数据适用 | 适用于方法学对照与基线复现 | 适用于全部产科人群 |
真正能做的验证集中在中后段,且都建立在同一批记录、同一套协议之上。想宣称模型具备临床可用性,必须有独立队列;本库能提供内部一致性与文献可比性,不能提供外部泛化证据。
7.5 它为何能持续:因为它是唯一一份「自然临产、三百人、带结局」的公开子宫肌电
| 支撑因素 | 具体表现 |
|---|---|
| 稀缺性 | 同时具备真实孕妇、结局标签与统一格式的子宫肌电库极少 |
| 干净的人群定义 | 排除引产与剖宫产,标签含义明确 |
| 门槛极低 | 两百多兆,附特征表,半小时可跑通 |
| 格式长寿 | WFDB 是三十余年不过时的标准 |
| 引用惯性 | 早产预测文献长期把它当作公开基线 |
第一条是根。数据集的寿命多由稀缺性决定,而不是由规模或文档质量决定。规模更大的库不断出现,但同时满足真实采集、结局明确、格式统一、许可宽松四项的子宫肌电库并没有变多。第五条是放大器:当成百篇论文把同一份数据当作基线,新手读到的第一篇就会指向它。
§8 生态位与历史
8.1 时间沿革
| 时间 | 事件 | 留下的痕迹 |
|---|---|---|
| 1997 至 2005 | 卢布尔雅那大学医学中心妇产科在常规产检时采集,累计近一千三百条 | 全部记录的原始来源 |
| 2001 | 一篇硕士论文以孕期子宫电活动为主题 | 官方参考文献之一 |
| 2002 | 一篇博士论文构建多层级早产预测模型 | 初步数据库的来源 |
| 2008 | 方法学论文发表,比较线性与非线性技术的判别力 | 官方指定引用文献 |
| 2010 年 11 月 | v1.0.0 在 PhysioNet 发布,公开三百条精选记录 | 首个公开版本 |
| 2012 年 8 月 21 日 | v1.0.1 发布,向头文件补入八项临床信息 | 现行版本 |
| 之后 | 同域另有带外部压力计的小型库与引产剖宫产库公开 | 互补资源 |
| 阶段 | 跨度 | 状态 |
|---|---|---|
| 采集期 | 约八年 | 累积近一千三百条原始记录 |
| 内部使用期 | 2005 至 2010 | 仅以初步数据库形式出现在学位论文与期刊中 |
| 公开期 | 2010 至今 | 单一版本号流通,未见结构性改动 |
最值得注意的是那五年空档:数据 2005 年采完,2010 年才公开,中间只以初步数据库的形式出现在少数论文里。这也解释了临床字段为何到 2012 年才补齐。
8.2 在 PhysioNet 产科电生理谱系里的位置
| 资源 | 物理量 | 时相 | 规模量级 |
|---|---|---|---|
| 本库 | 子宫肌电 | 产前门诊 | 数百条 |
| 冰岛多电极库 | 子宫肌电 | 产前,含产程 | 上百条 |
| 引产与剖宫产库 | 子宫肌电 | 产前至产时 | 上百条 |
| 母胎心电库 | 心肌电 | 产前 | 数十条至单条 |
| 产时胎心电库 | 心肌电 | 产时 | 单条 |
| 胎心监护库 | 压力与超声 | 产时 | 数百例 |
| 坐标格 | 已有资源 | 缺口 |
|---|---|---|
| 子宫肌电,产前 | 相对充足,本库为主 | 缺多中心、缺连续孕周 |
| 子宫肌电,产时 | 稀少 | 缺带宫缩压力的同步记录 |
| 心肌电,产前 | 中等 | 缺带结局标签的高频数据 |
| 心肌电,产时 | 极少 | 缺规模化公开数据 |
横轴是物理量,纵轴是时相。本库占据子宫肌电乘产前这一格,且在这一格里样本量最大、标签最明确。相邻格子里产时的子宫肌电资源要少得多,这也是产时研究长期依赖小样本的原因之一。
8.3 三代技术各自解决什么
| 阶段 | 核心技术 | 解决什么 | 数据形态 |
|---|---|---|---|
| 机械与压力 | 外部压力计、宫内导管 | 宫缩有没有、强不强 | 压力曲线,单通道 |
| 电生理 | 腹壁电极、胎头电极 | 电活动何时出现、频谱如何 | 电位波形,多通道 |
| 多模态与算法 | 电生理加超声加电子病历 | 能否提前预测 | 多源对齐,含标签 |
| 本库处在哪一段 | 有 | 没有 |
|---|---|---|
| 电生理阶段 | 多通道电位、统一格式、结局标签 | 影像、随访、多模态对齐 |
本库属于第二阶段。它的价值在于把电生理数据做成可以批量分析的表格,而不是个案波形;它没有走到第三阶段,因为没有影像、随访与多模态对齐。
8.4 它被怎么用
| 用法 | 典型做法 | 常见问题 |
|---|---|---|
| 特征工程基线 | 在四类特征上跑分类器 | 把九百行当九百个样本 |
| 滤波档位比较 | 三档滤波各算一遍指标 | 忽略暂态裁剪,数值不可比 |
| 非线性分析 | 计算熵、相关维数、李雅普诺夫指数 | 序列长度不足导致估计不稳 |
| 深度模型验证 | 用原始信号做端到端分类 | 小样本上过拟合,报告虚高 |
| 教学演示 | 画出两类记录的波形差异 | 过度解读单条记录 |
| 用法 | 安全边界 |
|---|---|
| 特征工程基线 | 先按记录名聚合再划分 |
| 滤波档位比较 | 从原始信号重算,统一裁剪规则 |
| 非线性分析 | 报告序列长度与参数 |
| 深度模型 | 报告置信区间,不做临床宣称 |
第一行是误用最多的地方。特征表一行一路通道,用表格工具打开看到九百行,很容易直接切训练与测试。正确做法是先按记录名聚合到三百行,否则同一条记录的三路会跨折泄漏。第二行更隐蔽:官方没说特征是在全段还是裁剪后计算,口径不同则横向比较失去意义。
8.5 二十年后它还剩什么
| 会被替代的 | 不会被替代的 |
|---|---|
| 特征计算方法 | 三百次妊娠的结局标签 |
| 分类器结构 | 自然临产的人群定义 |
| 滤波参数选择 | 与 2008 年论文可比的基线数值 |
| 预处理流程 | 低门槛的入门路径 |
| 前提条件 | 如果成立 | 如果不成立 |
|---|---|---|
| 同域无更大规模公开库 | 生态位稳固 | 角色退为历史参照 |
| 结局标签口径不变 | 旧论文仍可比 | 需重新对齐分组 |
| 平台持续托管 | 下载路径稳定 | 需本地镜像 |
这个判断有一个前提:后续没有出现规模更大、标签更细、同人群定义的公开库。到目前为止同域资源在规模上没有数量级突破。
§4.2 的案例里那条记录常被教学材料引用,正因为它同时具备早期、足月、字段有缺三重特征,一条记录就能演示数据结构与口径差。
§9 使用指引
9.1 三种角色的路径
| 角色 | 目标 | 建议路径 | 时间成本 |
|---|---|---|---|
| 算法工程师 | 快速跑通一个早产分类基线 | 只下特征表,按记录聚合,五折交叉验证 | 半天 |
| 信号处理研究者 | 比较不同预处理对判别力的影响 | 下全量包,从原始信号重算特征 | 两三天 |
| 临床研究者 | 了解子宫肌电与结局的关系 | 读官方页面与 2008 年论文,再看头字段 | 一天 |
| 角色 | 最容易踩的坑 | 规避方式 |
|---|---|---|
| 算法工程师 | 九百行当九百样本 | 先按记录名聚合 |
| 信号处理研究者 | 三档滤波口径不一致 | 从原始信号统一重算 |
| 临床研究者 | 把组间差异读成诊断能力 | 同时看效应量与样本量 |
第一条路径的关键是按记录聚合,第二条的关键是统一裁剪规则,第三条的关键是不要跳过论文——只看平台页面会以为这是一份普通信号集,读了论文才知道分组逻辑与判别力边界。
9.2 一条最短的可用流程
从零到一张可解释的图,最短的路径是:读特征表、按记录聚合、做一次分层交叉验证、看混淆矩阵而不是只看准确率。
#-- 最短可用流程:特征表 -> 按记录聚合 -> 分层五折 -> 报告混淆矩阵
import pandas as pd
from sklearn.model_selection import StratifiedKFold, cross_val_predict
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, roc_auc_score
URL = ("https://physionet.org/files/tpehgdb/1.0.1/"
"tpehgdb_features__filter_0.3_Hz-3.0_Hz.fvl")
df = pd.read_csv(URL, sep=r"\s*\|\s*", engine="python", skiprows=1,
names=["record", "chann", "gest", "rectime", "group",
"rms", "fmed", "fpeak", "sampen", "premature", "early"])
df = df[df["record"].str.startswith("tpehg")].copy()
for c in ("rms", "fmed", "fpeak", "sampen", "gest", "rectime"):
df[c] = pd.to_numeric(df[c], errors="coerce")
#-- 一条记录三行,必须先聚合为一行,否则同一条记录会跨折泄漏
X = df.pivot_table(index="record", columns="chann",
values=["rms", "fmed", "fpeak", "sampen"]).fillna(0.0)
y = df.groupby("record")["premature"].first().eq("t").astype(int).reindex(X.index)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
clf = RandomForestClassifier(n_estimators=400, random_state=0, class_weight="balanced")
pred = cross_val_predict(clf, X.values, y.values, cv=cv, method="predict_proba")[:, 1]
print("样本", X.shape[0], "特征", X.shape[1], "阳性", int(y.sum()))
print("AUC", round(roc_auc_score(y, pred), 3))
print("混淆矩阵\n", confusion_matrix(y, (pred >= 0.5).astype(int)))
| 步骤 | 检查点 | 若跳过会怎样 |
|---|---|---|
| 读表并跳表头 | 行数应为九百 | 第一行被当数据 |
| 按记录聚合 | 行数应为三百 | 三路跨折泄漏 |
| 分层五折 | 每折阳性约八例 | 某折可能没有阳性 |
| 报告混淆矩阵 | 同时看灵敏度与特异度 | 单看准确率会被阴性主导 |
跑完通常得到一个不算高但明显高于随机的 AUC。它的用途是建立基线:后续改进都要与它比,且在同一套划分、同一批特征、同一档滤波下比;单条记录的检查方式见 §4.2 的案例。
9.3 引用方式
官方要求引用 2008 年的方法学论文,而不是只引用平台页面。若同时使用了平台的分发服务,还应按平台惯例补一条平台引用。
Fele-Žorž G, Kavšek G, Novak-Antolič Ž, Jager F.
A comparison of various linear and non-linear signal processing techniques
to separate uterine EMG records of term and pre-term delivery groups.
Medical & Biological Engineering & Computing. 2008;46(9):911-922.
doi:10.1007/s11517-008-0350-y
数据来源:Term-Preterm EHG Database (TPEHG DB), version 1.0.1.
PhysioNet. doi:10.13026/C2FW2V. 许可:ODC Attribution 1.0.
| 引用要素 | 是否必写 | 说明 |
|---|---|---|
| 方法学论文 | 是 | 官方指定文献 |
| 版本号 | 建议 | 2012 年补字段改变了头文件内容 |
| DOI | 建议 | 平台与论文各有一个 |
| 许可 | 是 | ODC Attribution 1.0,需署名 |
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 内容生成 | 本篇由 AI 辅助撰写,事实以官方页面、随库文件与论文摘要为准 |
| 数字来源 | 规模、结构、标签类数字均取自官方页面与头文件,未做分布统计 |
| 未核实项 | 胎盘位置取值编码、剔除伪迹的具体判据、特征是否裁剪后计算 |
| 推断边界 | 采样率与用途的对应关系属于信号处理常识,非官方表述 |
| 未做的事 | 未下载全量包做逐条统计,未重跑论文实验,未做模型训练 |
| 已知风险 | 同域资源名称相近,合并使用时存在病例混淆风险 |
| 更新责任 | 官方版本变动后应复核版本号与头文件字段 |
| 适用提示 | 任何基于本库的性能结论都需外部队列复核后方可外推 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 这是胎心电子库 | 记录对象是子宫肌电,二十赫兹采样留不住心电形态 | 官方摘要写明 uterine EMG |
| 三百条记录来自三百次不同孕周的采样 | 每次妊娠只取一条,孕周集中在两个窗口 | 官方写明每次妊娠一条 |
| 库里有宫缩起止标注 | 只有结局二分标签,无事件标注 | 官方未列任何事件标注文件 |
| 可以拿它算胎心率 | 频段与采样率都不支持 | 采样率二十赫兹,奈奎斯特十赫兹 |
| 有九百个样本 | 九百行是三百条记录乘三路通道 | 特征表每条记录三行 |
| 引产与剖宫产病例也在里面 | 这两类在入库时被明确剔除 | 官方筛选说明 |
| 官方写三十分钟就是精确时长 | 头文件采样点折算约二十九分二十三秒 | 采样点数除以采样率 |
| 滤波通道可以整段使用 | 首尾各一百八十秒是暂态,应丢弃 | 官方使用提示 |
| 特征值一定在全段上算 | 官方未说明是否裁剪后计算 | 页面无相关表述 |
| 在它上面 AUC 高就说明能临床用 | 单中心、阳性三十八例,外推无依据 | 分组规模与来源单一 |
FAQ
Q1:TPEHG 是胎心电数据集吗?
不是。它记录子宫平滑肌的电活动,官方摘要写的是 uterine EMG;二十赫兹连胎心 QRS 的形态都留不住。
Q2:三百条记录对应多少名孕妇?
三百名。官方写明每次妊娠只取一条记录,因此记录数、妊娠数、人数三者相等。
Q3:为什么每条记录只有三十分钟?
官方未解释时长选择的理由。可用部分约二十四分钟,因为滤波通道两端各有一百八十秒暂态。
Q4:二十赫兹会不会太低?
对子宫肌电不算低,有效成分在零点一至四赫兹,有十倍余量;对胎心电则远远不够。
Q5:能不能直接训练早产预测模型?
可以跑通流程,但不能据此宣称临床可用。阳性三十八例、单一中心,性能结论都需外部队列复核。
Q6:特征表里的九百行怎么用?
先按记录名聚合到三百行再划分。直接对九百行交叉验证会让同一条记录的三路跨折泄漏。
Q7:三档滤波该选哪一档?
复现论文选零点三至三赫兹,那是论文报告判别力最强的一档;研究极慢基线则用零点零八至四赫兹。选择应写进方法。
Q8:为什么排除引产和剖宫产?
官方只写了排除,未给动机。后果是队列只剩自然临产,研究医源性分娩时完全用不上。
Q9:临床字段为什么有 None?
八项临床信息直到 2012 年才补进头文件,早年记录缺项更多。应作缺失处理,不能当成零。
Q10:能不能与 ICEHG DS 合并使用?
可以,但要显式加来源标记。两库电极与记录名风格接近,混放容易把引产病例当成自然临产。
Q11:这个库还会更新吗?
现行版本 v1.0.1 发布于 2012 年 8 月,此后未见版本变动;原始池是否再扩充,官方未作说明。
Q12:引用时该引哪一篇?
引 2008 年那篇方法学论文,这是官方指定文献;若用了平台分发服务,再补一条平台引用并写全版本号。
术语表
| 术语 | 英文 | 含义 |
|---|---|---|
| 子宫肌电 | electrohysterogram, EHG | 子宫平滑肌电活动的体表记录 |
| 早产 | preterm birth | 妊娠不足三十七周分娩 |
| 足月 | term delivery | 妊娠满三十七周及以上分娩 |
| 孕周 | gestational age | 自末次月经起算的妊娠时长 |
| 记录时孕周 | recording time | 采集当时的妊娠时长 |
| 差分信号 | differential signal | 两枚电极电位相减所得 |
| 共模抑制 | common mode rejection | 差分对共同干扰的抵消能力 |
| 带通滤波 | band-pass filter | 只保留指定频段的滤波 |
| 巴特沃斯滤波器 | Butterworth filter | 通带平坦的经典滤波器类型 |
| 双通滤波 | double-pass filtering | 正反各滤一次以消除相位失真 |
| 四阶 | fourth order | 滤波器阶数,决定滚降陡度 |
| 暂态 | transient | 滤波起始与结束段的非稳态响应 |
| 均方根 | root mean square, RMS | 信号幅度的有效值 |
| 中值频率 | median frequency | 功率谱能量中分点对应频率 |
| 峰值频率 | peak frequency | 功率谱最大值对应频率 |
| 样本熵 | sample entropy | 序列复杂度的度量,值越低越规律 |
| 产次 | parity | 既往分娩次数 |
| 宫颈漏斗状改变 | funneling | 宫颈内口呈漏斗状开放的超声征象 |
| 引产 | induction of labour | 人工方式启动产程 |
| 剖宫产 | cesarean section | 手术娩出胎儿 |
| WFDB | WaveForm DataBase | 生理信号存储与交换的通用格式 |
| ODC Attribution | ODC-By | 要求署名的开放数据许可 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 记录总数 | 300 | 官方页面 | 官方页面 |
| 足月例数 | 262 | 官方页面 | 官方页面 |
| 早产例数 | 38 | 官方页面 | 官方页面 |
| 孕 26 周前例数 | 162 | 官方页面 | 官方页面 |
| 孕 26 周及以后例数 | 138 | 官方页面 | 官方页面 |
| 原始池规模 | 近 1300 条 | 官方页面 | 官方页面 |
| 电极数 | 4 | 官方页面 | 官方页面 |
| 采样率 | 20 赫兹 | 官方页面与头文件 | 官方页面 |
| 量程 | 正负 2.5 毫伏 | 官方页面,头文件可反推 | 官方页面 |
| 单条时长 | 30 分钟 | 官方页面 | 官方页面 |
| 采样点数 | 35260 | 头文件 | 随库文件 |
| 解压体积 | 245.4 MB | 官方页面 | 官方页面 |
| 特征表行数 | 900 每份 | 随库文件 | 随库文件 |
| 暂态裁剪 | 首尾各 180 秒 | 官方页面 | 官方页面 |
| 版本 | 1.0.1 | 官方页面 | 官方页面 |
| DOI | 10.13026/C2FW2V | 官方页面 | 官方页面 |
附录 B:数字的来源分层
| 层级 | 含义 | 本篇涉及的数字 |
|---|---|---|
| 官方页面 | 平台词条正文直接写明 | 记录数、分组数、电极位置、采样率、时长、滤波档位、许可、版本 |
| 随库文件 | 头文件、汇总表、特征表可直接读出 | 采样点数、字段取值、特征行数、孕周精度差异 |
| 论文摘要 | 期刊摘要中报告的结果 | 三档滤波下的 p 值、组间比较结论 |
| 折算与推断 | 由已知量计算得出,非官方公布 | 可用时长约二十四分钟、全库约一百五十小时 |
前三层可以直接引用,第四层必须标注为折算。折算里最容易出问题的是时长:三百条乘三十分钟得一百五十小时,扣掉暂态后约一百二十小时,两个数字都可用,但要说清是哪一个。
| 折算项 | 算式 | 结果 | 备注 |
|---|---|---|---|
| 全库名义总时长 | 300 乘 30 分钟 | 150 小时 | 未扣暂态 |
| 全库可用总时长 | 300 乘 24 分钟 | 120 小时 | 扣掉两端暂态 |
| 单条采样点数 | 20 赫兹乘 1763 秒 | 35260 | 与头文件一致 |
| 单条数据体积 | 12 路乘 35260 点乘 2 字节 | 约 826 千字节 | 未含头文件 |
附录 C:完整参考文献
- Fele-Žorž G, Kavšek G, Novak-Antolič Ž, Jager F. A comparison of various linear and non-linear signal processing techniques to separate uterine EMG records of term and pre-term delivery groups. Medical & Biological Engineering & Computing. 2008;46(9):911-922. doi:10.1007/s11517-008-0350-y
- Verdenik I. Multilayer prediction model for preterm delivery. 博士论文,卢布尔雅那大学医学院,2002.
- Kavšek G. Electromyographic activity of the uterus in threatened preterm delivery. 硕士论文,卢布尔雅那大学医学院,2001.
- Jager F. Term-Preterm EHG Database (TPEHG DB), version 1.0.1. PhysioNet. doi:10.13026/C2FW2V
- Goldberger A, Amaral L, Glass L, et al. PhysioNet: components of a new research resource for complex physiologic signals. Circulation. 2000;101(23):e215-e220.
前三条是官方页面列出的参考文献,第四条是数据的持久标识,第五条是平台层面的通用引用。
附录 D:任务代码
把读信号、裁剪、算四个特征、输出一张表串成一条脚本,可以作为自建特征流程的起点。
#-- 从原始记录重算四类特征,输出与官方特征表同构的 DataFrame
import numpy as np
import pandas as pd
import wfdb
from scipy.signal import welch
FS, TRIM_S = 20, 180
def sample_entropy(x, m=3, r_ratio=0.15):
x = np.asarray(x, dtype=float)
r = r_ratio * np.std(x)
def phi(mm):
n = len(x) - mm + 1
if n <= 0:
return 0.0
emb = np.array([x[i:i + mm] for i in range(n)])
cnt = sum(int(np.sum(np.max(np.abs(emb[i + 1:] - emb[i]), axis=1) <= r))
for i in range(n))
return cnt / (n * (n - 1) / 2) if n > 1 else 0.0
a, b = phi(m + 1), phi(m)
return -np.log(b / a) if a > 0 and b > 0 else np.nan
def features(record):
rec = wfdb.rdrecord(f"tpehgdb/{record}", pn_dir="tpehgdb")
sig, names = rec.p_signal, rec.sig_name
rows = []
for ch in (1, 2, 3):
x = sig[:, names.index(f"{ch}_DOCFILT-4-0.3-3")]
x = x[TRIM_S * FS:len(x) - TRIM_S * FS]
f, pxx = welch(x, fs=FS, nperseg=min(1024, len(x)))
rows.append({"record": record, "chann": ch,
"rms": float(np.sqrt(np.mean(x ** 2))),
"fmed": float(f[np.searchsorted(np.cumsum(pxx) / np.sum(pxx), 0.5)]),
"fpeak": float(f[int(np.argmax(pxx))]),
"sampen": float(sample_entropy(x))})
return pd.DataFrame(rows)
table = pd.concat([features(r) for r in ("tpehg1021", "tpehg1007", "tpehg991")])
print(table.round(4).to_string(index=False))
这段代码与官方特征表的差异在熵的实现细节上,官方未公开具体算法,数值不会逐位一致。它的用途是建立可重复的自算路径,不是替代官方表。
附录 E:如果只记五件事
| 序 | 要点 |
|---|---|
| 1 | 它记的是子宫肌电,不是胎心电,二十赫兹采样决定了这一点 |
| 2 | 三百条记录对应三百次妊娠,每人一条,横断面而非纵向 |
| 3 | 结局只有足月与早产二分,没有任何事件级标注 |
| 4 | 引产与剖宫产被明确排除,同域引产库正好收这两类 |
| 5 | 附三份现成特征表,入门门槛极低,但九百行不是九百个样本 |
编辑说明
本篇依据 2026 年 10 月 28 日访问到的官方页面 v1.0.1、随库附带的记录清单、组别汇总表与一份特征表,以及 2008 年论文的期刊摘要撰写。头文件字段、采样点数与孕周精度差异来自逐文件读取;p 值来自论文摘要。未下载完整数据包,因此未做任何分布统计,也未重跑论文实验。
未能核实的项目已在正文标注,包括胎盘位置的取值编码、剔除伪迹的具体判据、特征是否在暂态裁剪后计算、以及官方称三十分钟与头文件折算时长的差额来源。这些项目需要向数据贡献者确认,或获取采集原始记录后才能定论。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- mghdb — 共享标签:生理信号 / 心电信号 / 电子健康记录
- ob1db — 共享标签:生理信号 / 心电信号 / 电子健康记录
- mimic3wdb — 共享标签:生理信号 / 电子健康记录
- mimic3wdb-matched — 共享标签:生理信号 / 电子健康记录
- mimic4wdb — 共享标签:生理信号 / 电子健康记录
- pulsedb — 共享标签:生理信号 / 心电信号 / 电子健康记录
- argo — 共享标签:生理信号 / 心电信号
- icehg-ds — 共享标签:生理信号 / 心电信号
- symile-mimic — 共享标签:心电信号 / 电子健康记录
- cinc-2015 — 共享标签:生理信号 / 心电信号 / 电子健康记录
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

