双胞胎各录一遍 — 设拉子大学胎心音库

109 名孕妇 / 119 段胎儿 PCG / 90 秒一段

来源 https://physionet.org/content/sufhsdb/1.0.1/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 13
双胞胎各录一遍 — 设拉子大学胎心音库

信息速览

数据集名称双胞胎各录一遍 — 设拉子大学胎心音库
数据类型时序信号,波形,元数据
规模109 名孕妇(含 7 例双胎),胎儿记录 119 段,母体记录 92 段
接入方式https://physionet.org/content/sufhsdb/1.0.1/
AI 就绪度

SUFHSDB 是 PhysioNet 上一份不那么显眼的胎心音库:一百零九名孕妇,一百一十九段胎儿心音图,九十二段母体心音,每段九十秒上下。它诞生于伊朗设拉子的一家医院,录制的目的很具体——给「从一路腹部声音里把胎儿心音抠出来」这件事准备原料。

它和许多同类库的差别不在大,而在「整」。同一名孕妇的母体录音与胎儿录音往往成对存在,双胎病例还按医生建议的胎位各录了一遍,另有一张 Excel 表把孕次、体质指数、孕周、胎儿性别与部分 CTG 心率串起来。这套组合让它更像一份完整的小型病例档案,而不是一堆零散的波形文件。

可惜「整」也就到此为止:它没有逐拍标注,没有病理分组,全部来自一家医院。使用者要拿它做事,得先接受它的形状。一屏速览见下表。

维度 内容
全名 Shiraz University Fetal Heart Sounds Database(SUFHSDB)
数据性质 真实录音,非合成
采集机构 伊朗设拉子医科大学哈菲兹医院(Hafez Hospital)
提交者 Reza Sameni、Maryam Samieinasab
采集时间与地点 2010 年代中期,伊朗设拉子,单一医院
采集设备 韩国 JABES 数字听诊器,宽频模式,频响 20 赫兹至 1 千赫兹
录音软件 Audacity,Windows 电脑
受试者 一百零九名孕妇,年龄 16 至 47 岁,均值 29.3 岁
母体 BMI 19.5 至 38.9,均值 29.2
妊娠类型 单胎与双胎混合,双胎七例
胎儿记录 一百一十九段
母体记录 九十二段,来自 91 名母亲
单段时长 平均约九十秒
采样率与位深 一般 16 千赫兹、16 位;少数 44.1 千赫兹
标注 无逐拍标注;附 Excel 表含临床字段与部分 CTG 均值
体积 解压后 789.3 MB,ZIP 632.6 MB
许可与 DOI ODC-BY 1.0;10.13026/42eg-8e59
上线时间 2017 年 7 月 19 日(1.0.0),2021 年 1 月 8 日(1.0.1)

§1 它要解决的具体麻烦

1.1 一路声音里有两颗心,得先有材料证明分得开

胎心音里最麻烦的不是噪声,而是另一颗心。母体的瓣膜开合声经腹壁传过来,频段与胎儿心音几乎重叠,幅度往往还更大。想从一路录音里把胎儿的成分剥出来,算法上叫单通道盲源分离(SCBSS),工程上叫「在两个人的心跳里找其中一个」。

这条路要有人先把它走通,就得有一批录音,里面同时有胎心、母心、肠鸣、胎动,而且最好母心那份还有单独录的对照。设拉子这份库就是照着这个需求攒出来的:多数母亲在录胎儿心音之前先录一段自己的心音。这个细节在官方描述里只用一句话带过,但它决定了这份数据后来被怎么用。

需求 常规做法 卡在哪 这批录音的位置
验证单通道盲源分离 自采几段 无对照,不知道分出来的是不是母心 多数组有母体对照录音
观察双胎腹部声音 文献示意图 图是画的,看不到真实叠加 七例双胎各录两段
建立胎心率提取基线 合成信号 合成信号没有肠鸣与胎动 真实录音中含这些干扰
找到能公开引用的原料 各实验室自留 不公开、无法复现 2017 年起公开在 PhysioNet

1.2 三条常见的错误期待

第一条,期待它自带逐拍胎心率。 库内的 Excel 表确实有心率一栏,但官方写的是「十秒窗口的平均 CTG 心率」,而且只对有该测量的一部分受试者给出。十秒一个数,九十秒的录音只有九个点左右。拿这个去算逐拍误差,量纲都对不上。真正的逐拍真值要使用者自己从波形里标。

第二条,期待双胎实验是「一次录音两个胎心」。 官方的做法相反:七例双胎按妇科专家建议的胎位分两次采集,每次把听诊器对准一个胎儿,分别存成后缀 -1 与 -2 的两个文件。这么做是为了让每一段里只有一个胎心清晰,代价是失去了「两个胎心在同一路信号里分离」这个更难也更有用的场景。

第三条,期待它是正常人对照库。 库里有临床病史字段,但没有按有无妊娠并发症分层,也没有随访结局。它既不是健康对照组,也不是病理组,而是一份「来了就录」的连续病例集合。做组间比较之前,得先自己把人群说清楚。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
真实胎儿心音的原始波形 一百一十九段,覆盖单胎与双胎 够,这是核心用途
单通道分离的母体对照 九十二段母体心音,多数与胎心同人 大致够,但不保证逐人配对
逐拍胎心率评测 无逐拍标注 不够,须自标
与 CTG 的粗对照 部分受试者的十秒均值 够做量级校验,不够做误差统计
临床变量关联分析 孕次、BMI、孕周、性别、年龄、病史 部分够,部分字段有缺
病理妊娠研究 无分层、无结局 不够
深度学习训练 合计约三小时量级 不够,量级差一到两个数量级
算法论文的可引用实验材料 固定 DOI、固定许可、版本稳定 够,且已经有人在用

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

你的处境 它能帮你什么 下一步该做什么
你在做单通道胎心音分离,需要真实混合信号 一百多段真实腹部录音,多数组配母体对照 先在有母体对照的受试者上验证分离结果能否对上那段母心
你写了一个胎心音包络检测器,只在自采数据上试过 不同孕周、不同 BMI 的真实录音 按 §4.2 的案例先人工标几段 S1,再报检出率
你要说明算法输入是真实临床录音 公开可引用、带 DOI、来自医院 在方法节写明用了哪些编号、如何划分训练与测试
你在评估双胎场景 七例双胎、按胎位分别录制 把它当「双胎腹部录音的样子」,不要当分离评测集
你在做生理信号教学 六百多兆可整包下完,文件平铺好读 用 §9.2 的流程读入并画包络,一节课够用
你要做人群差异研究 单一中心、单一族群 不够,需另找多中心数据

1.5 一句话判断

它像一份做得很认真、但没有写结论的临床笔记:材料齐、来源清楚、格式规整,可是每个判断都得你自己下。

1.6 不适合谁:四条边界

不适合要标注的人。 逐拍 S1/S2 时间戳、逐拍胎心率、胎儿编号全都没有。任何以「标签已就绪」为前提的流水线,第一步就得先做人工标注与工具链。

不适合要病理谱的人。 没有按并发症分层,没有随访结局,没有健康对照组。想研究胎心音与胎儿窘迫的关系,这里连阴性对照都凑不齐。

不适合要规模的人。 一百一十九段、每段九十秒,合计三小时上下。做算法验证够用,做监督训练远远不够,做自监督预训练也只是勉强。

不适合要双胎分离真值的人。 七例双胎是分两次录的,每段里只有一个胎心是目标。真正的双胎同录场景,这份库给不了。

§2 数据构成与规格

2.1 一个平铺目录与文件名里的两层信息

和许多 PhysioNet 的小型波形库一样,这个库没有子目录。所有 .wav 与 .hea 平躺在根目录,另有四份非信号文件:Excel 表、许可文本、RECORDS 清单、SHA256SUMS.txt 校验和。

身份信息压在文件名里,只有两层:首字母区分胎儿与母体,后面的数字是受试者编号,再往后可能跟一个 -1 或 -2 后缀表示重复或双胎的第二次录制。

位置 形态 取值 含义
目录 无分层 根目录 全部信号文件平铺
文件名首字母 f / m 两种 胎儿记录 / 母体记录
文件名数字 NNN 1 至 112 受试者编号
文件名后缀 -1 / -2 可缺省 同一受试者的追加或双胎第二次录制
扩展名 .wav / .hea 两种 音频数据与 WFDB 头文件
根目录其他 FetalPCGSpreadsheet.xlsx 18.7 KB 临床信息表
根目录其他 RECORDS 893 B 记录清单
根目录其他 SHA256SUMS.txt 30.5 KB 校验和

这种命名的好处是「一眼看出这段是谁的、是胎心还是母心」;缺点是编号并不连续,也并非每个编号都有两种记录。使用者若想按受试者建索引,必须自己把 f 与 m 两套编号对齐后再求交集,交集之外就是只有单侧记录的受试者。

2.2 字段与记录的完整字典

信息分三处存放:文件名、.hea 头文件、Excel 表。三处之间没有外键约束,只有编号这个松散的关联。下表把三处的字段逐一摊开。

信息项 所在位置 取值形态 含义
记录名 .hea 首行第 1 列 与文件名相同 记录标识
通道数 .hea 首行第 2 列 1 单通道
采样率 .hea 首行第 3 列 16000 或 44100 赫兹
采样点数 .hea 首行第 4 列 各文件不同 除以采样率得秒数
数据文件 .hea 第二行第 1 列 同名 .wav 指向音频
存储格式 .hea 第二行第 2 列 WAV 格式码 WFDB 存储约定
增益 .hea 第二行第 3 列 各文件不同 显示标度换算
位分辨率 .hea 第二行第 4 列 16 16 位量化
ADC 零点 .hea 第二行第 5 列 各文件不同 16 位量化的中点
信号名 .hea 第二行末列 单通道名 通道命名
受试者编号 Excel 表 整数 与文件名数字对应
怀孕次数 Excel 表 整数 gravid
存活子女数 Excel 表 整数 alive
流产次数 Excel 表 整数 abortions
母体 BMI Excel 表 小数 体质指数
孕周 Excel 表 整数 pregnancy term,单位周
胎儿性别 Excel 表 分类 gender of the fetus
母亲年龄 Excel 表 整数 岁
临床病史 Excel 表 自由文本 如有则填
CTG 平均心率 Excel 表 数值序列 十秒窗口均值,部分受试者有

这张表最该留意的是最后两行。临床病史是自由文本且标注了「如有」,意味着缺值不是错误而是常态;CTG 心率是「部分受试者有」,官方没有说明是哪一部分、覆盖多少个窗口。任何把这两列当完整变量使用的分析,都要先自己数一遍非空行,而这个数字官方没给。

2.3 一段录音的完整解剖

以一条胎儿记录为例,它的 .hea 只有两行。第一行说明记录名、单通道、采样率与采样点数;第二行描述该通道的数据文件、格式、增益、位深、零点与信号名。

f17-1 1 16000 1440000
f17-1.wav 16 1.0 16 32768 0 0 Fetal_PCG

这里 1440000 除以 16000 得 90 秒,与官方「平均约九十秒」吻合。不同记录的采样点数并不一致,短的只相当于几十秒,长的接近百秒有余。

用标准工具读出来是这样:

import wfdb
import numpy as np

rec = wfdb.rdrecord("f17-1", physical=True)
print(rec.fs, rec.sig_len, rec.n_sig, rec.sig_name)
#-- 16000 <采样点数> 1 ['Fetal_PCG']

x = rec.p_signal[:, 0]
print(round(len(x) / rec.fs, 1), float(np.min(x)), float(np.max(x)))
#-- 约 90.0 秒,幅度在正负一个显示单位内

只想听或只想看波形时,其实不必经过 WFDB,直接读 WAV 更简单:

import wave
import numpy as np

with wave.open("f17-1.wav", "rb") as w:
    fs = w.getframerate()
    n = w.getnframes()
    ch = w.getnchannels()
    raw = w.readframes(n)

x = np.frombuffer(raw, dtype=np.int16)
print(fs, ch, n, round(n / fs, 1))
#-- 16000 1 <帧数> 约 90.0
print(int(x.min()), int(x.max()))
#-- 16 位整数范围内的双边取值

两条路径拿到的样本一致,差别只在呈现:WFDB 按增益把整数换成浮点,WAV 直接给 16 位整数。做频谱分析时用前者方便,做听感检查时用后者贴地。

2.4 四种规模口径

同一个库可以有四种数法,各自回答不同的问题。官方给出的是前两种,后两种是按采样点数折算的。

口径 数值 单位是什么 什么时候用它
受试者数 一百零九 人 说人群规模时
记录数 一百一十九段胎儿 + 九十二段母体 段 说样本量时
单段时长 平均约九十秒 秒 与其它库对比录音习惯时
累计时长 三小时上下 小时 判断能否做训练时
体积 789.3 MB 解压 / 632.6 MB 压缩 兆字节 判断下载成本时

四种口径之间可以互相验算:一百一十九段乘九十秒约一万零七百秒,合三小时。按 16 千赫兹、16 位单通道折算,每秒三十二千字节,九十万秒字节约合三吉字节;实际解压体积只有七百多兆,说明相当一部分记录的时长明显短于九十秒,或者采样点被压缩过。官方没有列出逐条时长,这个差额只能在使用时自行核对。

2.5 与同类资源的字段差异

对比项 SUFHSDB IIScFHSDB FPCGDB CirCor
模态 心音(胎+母) 心音(胎) 心音(胎) 心音(儿童与青年)
受试者 一百零九名孕妇 六十名孕妇 二十六名孕妇 九百余名 0 至 21 岁
记录数 一百一十九段胎儿 + 九十二段母体 六十段 二十六段 三千余段
单段时长 约九十秒 数分钟 约二十分钟 数秒至数十秒
采样率 16 千赫兹为主 2 千赫兹 333 赫兹 4 千赫兹
位深 16 位 视设备 8 位 视设备
母体对照 有 无 无 不适用
双胎 七例,分别录 无 无 不适用
附临床表 有 有 无 有
逐拍标注 无 无 无 有周期标注

这张表里最能说明定位的是「母体对照」与「双胎」两行。整个 PhysioNet 的胎心音库里,同时提供母体对照录音和双胎病例的,这一份几乎是唯一的选择。代价是单段短、无标注、采样率不算高也不算低,正好卡在「够用但不宽裕」的位置。

§3 它记录的是什么:下腹部九十秒的声音

3.1 一声心音怎么变成一段 WAV

整条链路很短,也很朴素。数字听诊器的膜片贴在孕妇下腹部,把皮肤表面的微小振动转成电信号;设备内部完成放大与模数转换,以宽频模式输出,频响覆盖二十赫兹到一千赫兹;信号经 USB 或音频接口进 Windows 电脑,由 Audacity 录成 WAV;最后按受试者编号命名落盘。

环节 做了什么 留下的痕迹 对使用者的影响
拾音 膜片把腹壁振动转成电信号 一路波形 无法区分声音来自胎儿还是母体
放大 设备内置前置放大 增益未给出物理标定 绝对声压无从还原
滤波 宽频模式,20 赫兹至 1 千赫兹 通带写进了官方描述 带外成分已被设备滤掉
采样 16 千赫兹或 44.1 千赫兹 头文件第 3 列 奈奎斯特上限 8 千赫兹或 22 千赫兹
量化 16 位 头文件第 4 列 六万五千余个台阶
落盘 Audacity 录为 WAV 文件名 无采集时间戳

这条链路里有两个地方值得停一下。一是「宽频模式」:二十赫兹到一千赫兹这个通带对心音来说偏宽——心音的主要能量在几十到几百赫兹,通带把低频的呼吸起伏与高频的部分环境声都放了进来,好处是不预先替使用者做取舍,坏处是「原始」里混着不少可以事后去掉的成分。

二是 16 千赫兹这个采样率。按奈奎斯特定理上限是 8 千赫兹,远高于设备一千赫兹的通带,属于「过采样」。这么做不浪费:过采样让后续的数字滤波有裕量,也让重采样到 4 千赫兹、2 千赫兹这类常用工作频率时不至于引入明显失真。相比 FPCGDB 的 333 赫兹(上限约 166 赫兹),它给了使用者更多的处理自由度。

3.2 干扰不是一种,是几种能叫出名字的

腹部录音里混进来的东西,官方没有逐条列举,但从信号本身与采集方式可以推断出几类,且它们的性质完全不同:

干扰源 物理来源 时间特征 能否事后去除
母体心音 母体瓣膜开合经腹壁传导 规律双击,节律稳定 难,与胎心同频段
肠鸣 胃肠蠕动与气体移动 不规则低频爆发 部分可,靠短时能量门限
呼吸起伏 膈肌运动改变腹壁张力 缓慢基线漂移 可,高通即可压掉大半
胎动 胎儿肢体运动 突发宽带冲击 部分可,靠瞬态检测
胎盘血流 湍流产生的持续嘶声 宽带、平稳 难,与目标重叠
环境噪声 病房背景 取决于场地 难,已混入无法分离

六类里只有呼吸起伏能靠一个高通滤波器基本解决,肠鸣与胎动能靠瞬态检测识别出一部分,剩下三类都和目标信号抢频谱。这解释了为什么胎心音的分割比胎心电更难:心电里母体 QRS 与胎儿 QRS 在时间上错开,模板减除就能压掉大半;心音里母体的每一次瓣膜开合都可能与胎儿心音撞在一起,压掉母体的同时必然带走胎儿的一部分。

而这份库恰好提供了检验这件事的条件:多数受试者有一段单独的母体录音。把那段母心的节奏与本段里的干扰对上,就能判断某段干扰来自母亲还是来自环境。这是 §4.2 的案例要展开的做法。

3.3 单通道意味着什么

单通道的第一个限制是没有空间信息。多导联可以用空间滤波或盲源分离,把来自不同方向的成分分开;一路信号做不到,分离只能落在时频域。第二个限制是没有交叉校验:临床上探头松动会立刻在另一路显出来,这里只有一个探头,坏了就是整段不可用,也没有旁证。

还有一点容易被忽略:临床听诊会在腹部四个象限分别听,找出胎心音最清楚的位置;这份库对每名孕妇只记录一个听诊位置,且没有把那个位置写进任何字段。官方只说了「置于下腹部」。这意味着使用者无法判断某段录音里胎心清晰是因为胎位好,还是因为探头贴得准。

反过来说,单通道也降低了门槛:不用考虑通道顺序、不用对齐、不用处理缺失通道,一条曲线读进来就能画。做教学时这是优点,做方法研究时这是硬约束。

3.4 编号不连续:一遍能看出来的结构

把 RECORDS 清单摊开,会发现编号不是从 1 连续排到 112。母体记录的编号有明显跳空,胎儿记录在部分区段是连续的。这种跳空不是错误,而是采集过程的痕迹:有些受试者只录了胎儿、没录母体,有些录了母体却没有可用的胎儿段。

观察到的现象 官方解释 实际含义
母体记录少于胎儿记录 多数(91 名)母亲录了母心 约十八名母亲没有母体录音
母体编号有跳空 未说明 缺的那几号可能是只录了胎心
存在 f102 与 f102-1 同一受试者两条记录 重复录制或双胎
存在 f17-1、f17-2 双胎按胎位分别录 同一孕妇的两个胎儿
存在 m19 与 m19-1 同一母亲两条 重复录制

这张表的价值在于提示一件事:受试者数不等于记录数,也不等于配对数。 做「胎心与母心配对」的分析时,可用样本量最多是九十余对,不是一百一十九对;做「每名孕妇一条记录」的分析时,得先决定重复记录怎么合并。

3.5 它记录不了的生理

想知道的量 这个库能给吗 原因
逐拍胎心率 不能 无标注,需自建
S1 与 S2 边界时刻 不能 同上
哪一段属于双胎中的哪一个 不能 官方未标注
探头的具体方位 不能 只写「下腹部」
宫缩活动 不能 未记录
新生儿结局 不能 无随访
孕早期胎心音 极少 孕周分布集中在孕晚期
母体逐拍心电 不能 母体也只录了心音

最后两行常被忽略。第一条决定了它做不了早孕期研究;第二条决定了它的母体对照只能用于「听感比对」,不能用于心电层面的分割验证——想验证「分离出的母体成分是否与真实母心电一致」,这份库没有母心电。

§4 它最独特的东西:带母体对照的配对录音

4.1 为什么「先录母亲、再录胎儿」这个顺序值得记住

多数胎心音库只录胎儿,母亲的干扰是「混在里面要处理掉的东西」。这份库的做法是反过来:先把母亲的心音单独录一遍,再录胎儿。这个顺序带来两个后果。

其一,母亲那段录音证明了干扰的来源。如果某段胎儿录音里有一段节律性的双击,而同一名母亲的单独录音里恰好在相近频率上有同样的双击,那么这段干扰几乎可以确定是母心而非环境噪声。这种溯源能力,是所有自带母体对照的库才有的。

其二,它让「分离得好不好」有了一个粗糙但可用的判据。分离算法输出两路——一路是胎心、一路是母心。母心那一路如果和单独录的母体录音在节律上对得上,说明算法确实抓到了母体成分,而不是把胎儿成分一分为二。这个判据不精确,但比「看起来像心跳」强得多。

用途 没有母体对照时 有母体对照时
判断干扰来源 只能靠频谱猜测 可与同人母心录音比对
验证分离结果 看输出像不像心跳 看母心输出是否对上母心录音
估计母体心率 从混合信号中估计 可从母心录音直接算
评估探头位置影响 无法判断 仍无法判断,位置未记录

4.2 案例:f17 这名孕妇与她的两次录音

用 f17 作例子,因为它是库里少数同时具备几个特征的受试者:有 f17-1 与 f17-2 两段胎儿记录、有母体对照,且编号靠前、文件短小、便于快速验证流程。

f17-1 与 f17-2 是双胎按胎位分两次录的。拿到这两段,第一件事是把它们并排画出来:两段的包络节律往往不同,这正是「两个胎儿心率不一样」的直接体现。第二件事是把同人的母体录音叠上去,找出三者共有的节律成分——那些在三段里都出现的双击,基本就是母心。

import wave
import numpy as np

def load(p):
    with wave.open(p, "rb") as w:
        fs = w.getframerate()
        x = np.frombuffer(w.readframes(w.getnframes()), dtype=np.int16)
    return fs, x.astype(np.float64)

fs, a = load("f17-1.wav")
_,  b = load("f17-2.wav")
_,  m = load("m17.wav")

print(fs, round(len(a) / fs, 1), round(len(b) / fs, 1), round(len(m) / fs, 1))
#-- 16000 三段各自秒数,母体段通常明显更短

env = np.abs(a)
win = fs // 10
pk = env[: len(env) // win * win].reshape(-1, win).max(axis=1)
print(round(float(pk.mean()), 1), round(float(pk.std()), 1))
#-- 十秒窗峰值序列的均值与离散度,用于粗看节律稳定度

这个过程在本篇里被反复引用:§1.4 里「先在有母体对照的受试者上验证分离结果」指的是同一条路径;§7.3 讨论缺值偏差时,也要回到这一类「有母体对照但未必配对成功」的受试者;§9.2 的最短流程同样以 f17 为起手样本。它不代表整个库的统计学特征,只代表「一份完整材料长什么样」。

4.3 双胎为什么只录了七例

七例双胎相对一百零九名孕妇是个小数,原因不难理解:双胎本身在人群里就是少数,而每一次双胎录制都要按妇科专家建议的胎位调整两次探头位置,工作量是单胎的两倍。

官方对这七例的处理方式说得很明确:依专家建议的胎位,分两次采集,分别存为后缀 -1 与 -2。这个设计有它的道理——两段里各有一个胎心清晰,便于分别建立基线;但也有代价:它没有记录「同一次录音里两个胎心同时到达探头」的情形,而这恰恰是双胎监护中最难的部分。

双胎研究的子问题 这七例能不能支撑
两个胎儿的胎心音形态是否不同 能,两段可分别分析
两个胎儿的基线心率差异 能,但要自己从波形估
同一次录音中的双胎分离 不能,设计上就避开了
双胎与单胎的录音差异 勉强能,样本量太小
双胎的临床结局关联 不能,无随访

4.4 Excel 表在整份库里的角色

那张十八千字节的 Excel 表,是整个库里唯一把「波形」与「人」连起来的东西。没有它,f17-1 只是一个文件名;有了它,f17-1 才可能对应到一个有孕周、有 BMI、有临床病史的具体病例。

字段类别 字段 用途 缺值风险
身份 受试者编号 与文件名关联 低
产科史 怀孕次数、存活子女数、流产次数 反映生育史 低
体型 母体 BMI 与腹部组织厚度相关,影响信号强度 低
孕期 孕周 分层分析的主变量 低
胎儿 胎儿性别 次要协变量 中
母体 母亲年龄 协变量 低
病史 临床病史(自由文本) 已知合并症 高,官方注明「如有」
参考心率 十秒窗口 CTG 均值 量级校验 高,仅部分受试者

做关联分析时,最后两行是陷阱:它们看起来是变量,实际上是有选择的变量。病史「如有则填」意味着填空与否本身可能与病例严重程度相关;CTG 只对一部分人做了,做与没做可能也与临床关注度相关。

§5 怎么拿到它,以及拿到之后先做什么

5.1 三条下载路径

这个库不大,七百多兆,三条路都可行。

路径 命令形态 适合谁 注意事项
网页逐文件 浏览器点 fX.wav 只想看一两段 文件很多,逐个点效率低
整包 ZIP get-zip/1.0.1/ 想一次拿全 632.6 MB,需断点续传能力
递归 wget wget -r -N -c -np 想边下边用 注意 -np 不上溯父目录
S3 匿名同步 aws s3 sync --no-sign-request 想自动化或增量 桶为公开只读
#-- 方式一:整包下载并解压
wget -c https://physionet.org/content/sufhsdb/get-zip/1.0.1/sufhsdb.zip
unzip -q sufhsdb.zip -d ./sufhsdb

#-- 方式二:匿名 S3 同步(不需要账号与密钥)
aws s3 sync --no-sign-request \
  s3://physionet-open/sufhsdb/1.0.1/ ./sufhsdb
ls ./sufhsdb | wc -l

5.2 先读清单,再读波形

清单 RECORDS 一行一个记录名,这是建立索引最快的一步。它能告诉你有多少段、编号长什么样、哪些编号带后缀。

from pathlib import Path

lines = Path("sufhsdb/RECORDS").read_text(encoding="utf-8").split()
fetal = [r for r in lines if r.startswith("f")]
maternal = [r for r in lines if r.startswith("m")]
print(len(fetal), len(maternal))
#-- 119 92

with_suffix = [r for r in lines if "-" in r]
print(with_suffix)
#-- 带 -1 / -2 后缀的记录名清单

两行输出就能把官方说的「一百一十九段胎儿、九十二段母体」对上。如果数字不符,先怀疑下载不完整,再看版本号是不是 1.0.1。

5.3 校验和:先验完整性再谈分析

SHA256SUMS.txt 有三十千字节,覆盖全部文件。下载中断留下的半截文件在播放时往往也能出声,但分析结果会莫名其妙地偏移,所以这一步不要跳。

#-- 在数据目录内校验全部文件
sha256sum -c SHA256SUMS.txt | grep -v ': OK$'
#-- 无输出即全部通过;有输出就是缺文件或文件损坏

5.4 读一段并画包络

拿到数据的第一件事通常不是训练,而是「看一眼」。胎心音的可视化与心电不同:不能看单周期,要看包络与节律。

import wfdb
import numpy as np
import matplotlib.pyplot as plt

rec = wfdb.rdrecord("sufhsdb/f100", physical=True)
fs, x = rec.fs, rec.p_signal[:, 0]

#-- 用绝对值加滑动平均做包络,窗长取 20 毫秒
w = int(0.02 * fs)
env = np.convolve(np.abs(x), np.ones(w) / w, mode="same")

plt.figure(figsize=(12, 3))
plt.plot(np.arange(len(env)) / fs, env, lw=0.6)
plt.xlabel("time (s)")
plt.ylabel("envelope")
plt.tight_layout()
plt.savefig("f100_envelope.png", dpi=150)
print(fs, len(x), round(len(x) / fs, 1))
#-- 16000 <采样点数> 约 90 的秒数

5.5 把 Excel 表接上

pandas 直接读即可,但要注意它是一张「人与人一行」的表,而波形是「段与段一个文件」。接法是以受试者编号为键做左连接,连接的失败率本身就是一条重要信息。

import pandas as pd
from pathlib import Path

meta = pd.read_excel("sufhsdb/FetalPCGSpreadsheet.xlsx")
meta.columns = [str(c).strip().lower() for c in meta.columns]

wavs = sorted(p.stem for p in Path("sufhsdb").glob("f*.wav"))
ids = {int(s.split("-")[0][1:]) for s in wavs}
have = set(meta.iloc[:, 0].astype(int))
print(len(wavs), len(have), len(ids - have), len(have - ids))
#-- 胎儿段数 / 表内人数 / 有波形无元数据 / 有元数据无波形

最后两个数字很关键。前者说明有没有「孤儿波形」,后者说明有没有「空头病例」。两者都不为 0 时,任何按行合并后的统计都要重新确认分母。

5.6 版本固定

1.0.0 与 1.0.1 的差别在于后者往 Excel 表里加了 CTG 参考心率。如果你的流程用到这一列,URL 必须写死 1.0.1,不能指向 latest——否则某天上游再发一版,你的分母就变了。

§6 与库内条目的关系

6.1 关系图谱

库内与胎心相关的共有若干份,分散在心音、心电、多模态三条线上。这份库站在心音那条线的「配对录音」位置。

库内条目 模态 与本篇的关系 差异要点
fetalheartsounddata 胎心音 同模态、同期、同平台 印度、六十人、单段数分钟、2 千赫兹
fpcgdb 胎心音 同模态、更早 意大利、二十六人、单段二十分钟、333 赫兹、8 位
circor-heart-sound 心音 邻域但人群不同 儿童与青年、含周期标注、非孕期
nifecgdb 胎心电 同任务、不同物理量 同一孕妇逐周五十五次、心电而非心音
adfecgdb 胎心电 同任务、含直接真值 产程中、头皮直接心电作真值
ninfea 多模态 早孕期、含多普勒 二十七路、2048 赫兹、多模态同步

这张表要说清的是:本篇与上述任何一篇都不是同一份数据的改写。 采集国家、机构、设备、受试者规模、采样率、记录时长、是否带母体对照、是否带临床表,逐项都不同。它与 fetalheartsounddata 最接近——同为胎心音、同为孕晚期、同在 PhysioNet——但那一份没有母体对照录音,也没有双胎病例,单段时长是分钟级而非秒级。

6.2 检索路径

如果使用者的需求是「找胎心音数据」,正确的检索顺序不是从某个库名出发,而是从需求出发:

你的关键词 会先命中 该不该继续 理由
胎心音 本库、IIScFHSDB、FPCGDB 三者都看 三者互补而非替代
母体对照 本库 停在这里 其余胎心音库基本没有
双胎 本库 停在这里,但注意设计 七例,分开录
逐拍标注 CirCor 转过去 本库无标注
早孕期 NInFEA 转过去 本库集中在孕晚期
直接真值 adfecgdb 转过去 本库无任何真值
多导联分离 nifecgdb 转过去 本库单通道

6.3 与 ephnogram 的边界

库内另有一篇写设拉子大学同一位作者 Reza Sameni 参与的心电与心音同步采集库(ephnogram)。两者同源、同城、有共同作者,容易被混为一谈,但用途分工很清楚。

维度 本篇(SUFHSDB) ephnogram
受试者 孕妇 一般受试者
是否孕期 是 否
模态 心音单模态 心电与心音同步
胎儿成分 是 无
用途 胎心音分离与提取 心电心音联合分析
共同点 同一课题组、同一座城市 —

一句话:ephnogram 研究的是「一颗心同时发出的电与声」,本篇研究的是「两颗心的声叠在一起怎么分」。

§7 质量评估与局限性

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

评这份库之前,要先校正一个容易发生的误判:把「没有标注」读成「质量差」。 这两件事在数据集评价里经常被混为一谈,但它们是两个正交的维度。标注是产品属性——有没有人替你把答案写下来;质量是原料属性——信号本身干不干净、采集条件稳不稳、元数据全不全。

一份没有标注但信号干净、元数据齐、来源单一的库,作为原料是合格的;一份标注齐全但采集混乱的库,作为原料反而不可信。对 SUFHSDB 的评价必须落在原料这一侧:它有没有给出足够稳定的录音条件、足够清楚的来源、足够完整的身份信息。逐拍标签的缺席是设计选择,不是质量缺陷——2015 年前后这一领域的通行做法就是只发波形,让算法研究者自己建标注。

7.1 五维评分

维度 评分 依据
规模 中下 一百一十九段、约三小时,够验证不够训练
信号质量 中上 16 位、过采样、设备专业,但探位未记录
元数据完整度 中 身份与产科字段齐,病史与 CTG 有选择性缺失
覆盖广度 中 单中心、单一族群、孕晚期为主
可用性 中上 平铺目录、WAV 通用、许可宽松、体量小

五项里最难判断的是「信号质量」。它不是没有依据——十六位量化、十六千赫兹过采样、专业听诊器、贴在下腹部——但它也不是可以打高分的依据:探头方位没有记录,录音环境的噪声水平没有描述,也没有任何质量分级。所以只能给中上,而不是高。

7.1b DAIMS 就绪度逐项核对

DAIMS 是一套把数据集的「可被机器正确理解」拆成若干条目的自评框架。用它逐项过一遍,能看出这份库在哪些环节已经就绪、哪些只是「有但没写清」。

DAIMS 条目 就绪状态 依据
数据集有稳定标识 就绪 DOI 与 RRID 均已分配
许可明确 就绪 ODC-BY 1.0,文件内附许可文本
文件可批量获取 就绪 ZIP、递归 wget、S3 匿名三条路
记录清单可解析 就绪 RECORDS 一行一名,可机械解析
完整性可校验 就绪 SHA256SUMS.txt 覆盖全部文件
字段有字典 部分 Excel 列名为自然语言,无单位与类型说明
缺失值有标注 缺 病史与 CTG 的缺值既无标记也无说明
单位与标度有定义 部分 采样率与位深明确,幅度无物理单位
标注可机器读取 缺 无任何标注文件
版本可追溯 就绪 1.0.0 与 1.0.1 均可单独访问

十项里六项就绪、两项部分、两项缺。缺的两项恰好是最影响自动化流水线的:没有标注文件,标注相关的训练任务无法启动;缺失值没有标记,读表时用的是「猜」而不是「读」。

补上这两项的成本其实不高——给 Excel 加一列缺失枚举、给每段配一份占位的标注文件即可,但官方没有做,而这属于 2017 年那代数据的普遍状态,不必苛责。

7.2 三条真正影响使用的问题

问题一,配对不完整。 一百一十九段胎儿录音,只有九十二段母体录音,来自九十一名母亲。也就是说至少有一部分胎儿录音没有同人的母体对照。想做「逐人配对验证」的分析,分母要按配对后的数量算。

问题二,时长短且不一致。 平均九十秒是官方口径,但逐条时长并不相同。短的可能只有几十秒,做需要长时稳定的算法(例如基于长窗频谱的估计)时会不够用。

问题三,编号与人群关系不透明。 双胎的两个胎儿对应哪两个后缀,官方没说;重复录制的两条记录是不是同一次检查,官方也没说。这在使用 -1、-2 后缀时会造成歧义。

7.3 已知的、可枚举的偏差

偏差 表现 影响
单中心偏差 全部来自哈菲兹医院 设备与操作习惯单一,不能代表其他医院
族群偏差 全部伊朗设拉子人群 BMI 均值 29.2,高于许多欧美队列
孕期偏差 集中在孕晚期 早孕期胎心音形态无法覆盖
设备偏差 单一型号数字听诊器 换设备后频响与噪声特性都会变
探位偏差 只记「下腹部」 无法复现最优听诊位置
选择偏差 病史与 CTG「如有」 有与没有本身可能与病情相关
双胎偏差 仅七例、分开录 双胎同录场景缺失

第七行是这个库最结构性的缺口。双胎监护的临床难点恰恰在于两个胎心同时到达探头;而这里的设计是把它们分开,让每一段只面对一个胎儿。这提高了单段的可用性,却让「双胎分离」这个真正的难题在库内没有对应样本。

7.4 外部验证矩阵

外部证据 说了什么 对本库的意义
原始会议论文(2015) 提出单通道盲源分离做胎心音提取 库是为验证该方法而攒的
PhysioNet 项目页 规模、设备、格式、许可 一手口径
1.0.1 版发行说明 补入 CTG 十秒均值 唯一的「参考真值」来源
下游论文的引用方式 多作为真实录音对照集 定位已在实践中固化
与 ephnogram 的共同作者 同组、同城、同期 采集能力一致,可互为背景

矩阵里最值得记住的是第一行与第四行。原始论文决定了这批录音的用途——它不是为「通用胎心音库」而录,而是为一个具体方法而录;下游的引用方式则说明这个用途在十年里没有被改写。

7.5 它为何能持续:一个具体方法所需的原料,长期不会过期

很多小数据集会因为「被更大的库取代」而失去存在意义,这份库不会,原因是它的价值锚在一个具体方法上:单通道盲源分离需要「混合信号 + 母体对照」这一对材料,而这一对材料在整个 PhysioNet 的胎心音库里几乎只有它有。库再大、标注再全,只要没录过同一名母亲的单独心音,就替代不了它。

加上许可宽松、体量小、格式通用这三点,它的维护成本几乎为零,被引用的路径也很短——想找胎心音对照材料的人,搜索几个关键词就会落到这里。

§8 生态位与历史

8.1 从一篇会议论文到一份公开数据

这条线的时间顺序很清楚。2015 年,Sameni 与 Samieinasab 在伊朗电气工程会议上提出用单通道盲源分离做胎心音提取,论文里需要一个能验证方法的真实材料。2017 年 7 月,这批录音以 1.0.0 版上线 PhysioNet。2021 年 1 月,1.0.1 版补入了部分受试者的 CTG 参考心率。

时间 事件 版本 影响
2015 方法论文发表 — 确定了数据的用途
2017-07-19 首次上线 1.0.0 九十二段母体、一百一十九段胎儿定型
2021-01-07 许可文件更新 — 与 1.0.1 同步提交
2021-01-08 补入 CTG 均值 1.0.1 有了唯一的外部参考心率

8.2 在 PhysioNet 胎心类资源里的位置

PhysioNet 上的胎心类资源可以按「物理量」分成三支:心电(如 nifecgdb、adfecgdb)、心音(本库、IIScFHSDB、FPCGDB)、多模态(NInFEA)。心音这一支里,按采集年代排,本库处在中间偏后的位置;按是否带母体对照排,它是唯一的第一名。

分支 代表 强项 弱项
胎心电 nifecgdb、adfecgdb 有直接真值(后者) 电极要求高、孕妇依从性差
胎心音 本库、IIScFHSDB、FPCGDB 无创、设备便宜 干扰复杂、无真值
多模态 NInFEA 电声同步 早孕期、样本少

这个分法解释了为什么心音路线值得投人:它的临床优势在于可以做成便携、低成本的家庭监护设备;而它的技术难点恰恰是这份库要面对的——母体干扰无法靠电极规避,只能靠算法。

8.3 它在方法学上的位置

盲源分离用在胎心音上,核心假设是「胎心、母心、噪声在某种变换域里是可分的稀疏成分」。这份库的价值在于让这个假设可以被检验:有母体对照,就能看分离出的母心成分是否与真实母心一致;有双胎,就能看两段录音的节律是否真的不同。

方法类别 对数据的要求 本库能否满足
单通道盲源分离 真实混合 + 可比对的成分 多数对可满足
自适应滤波 参考通道 母体录音可作参考
经验模态分解 长段稳定信号 九十秒够用
非负矩阵分解 大量同类样本 一百多段偏少
深度学习分割 逐拍标注 不满足

8.4 它常被谁引用

按下游用法归类,这份库主要出现在三类工作里:胎心音分离与提取的方法论文、便携胎心监护设备的可行性研究、以及生理信号课程的教学材料。三类用法对它的要求完全不同——第一类要的是对照,第二类要的是真实场景,第三类要的是易读。

使用者类型 主要取用 关注点
方法研究者 全部胎儿段 + 母体对照 分母是否够、是否可分训练测试
设备工程师 若干段代表性录音 噪声水平与真实场景接近度
教学者 少量短段 文件能否整包拷走

8.5 与另两份胎心音库的分工该怎么摆

同一个需求「我要研究胎心音」,库内有三份可供选择。它们不是版本关系,而是三种不同的采集哲学,选错一份,后面所有努力都要返工。

IIScFHSDB 走的是「长、清、少」的路线。 六十名孕妇,每人一段数分钟的录音,采样率两千赫兹,设备是电子听诊器,记录的是医院条件下最干净的那一类信号。它适合做「胎心音到底长什么样」的形态学研究,也适合做需要长时间稳定观察的节律分析;不适合做「在复杂干扰下能不能提取」的鲁棒性测试,因为干扰本身就少。

FPCGDB 走的是「短、粗、老」的路线。 二十六段,八位量化,三百三十三赫兹,采样率低到只够看心音的主体频段。它的定位是给模拟器做校准用的原料,不是给算法做训练用的样本。拿它测现代算法,分数会被量化噪声压住,测出来的差距不代表算法之间的差距。

本篇走的是「中人、配对、双胎」的路线。 一百零九名孕妇、一百一十九段、九十秒一段、十六位、十六千赫兹,再加上母体对照与七例双胎。它的强项不在信号本身有多干净,而在于「同一名孕妇的两种心音都在」这个结构。

你的研究问题 该选哪一份 为什么
胎心音的形态学描述 IIScFHSDB 单段长、干扰少
校准合成信号 FPCGDB 就是为此而录
单通道分离与母体抑制 本篇 唯一带母体对照
双胎场景的初步观察 本篇 唯一有双胎
需要逐拍真值的评测 都不选 三份都没有标注

这张表的最后一行是重点。三份胎心音库在「有无标注」上是一致的,都只有波形。所以真正的选择不在于「谁有标注」,而在于「谁的结构更贴合你的问题」。如果你的问题恰好是分离,本篇是唯一解;如果问题在别处,本篇只是三选一里最普通的那一个。

8.6 采集年代留下的印记

2015 年前后的生理信号采集有一个共同特征:设备正在从模拟走向数字,但软件工具链还停留在「能录下来就行」的阶段。这份库的痕迹很清楚:Audacity 录音、WAV 落盘、Excel 手工整理、事后补一份 WFDB 头文件。

印记 表现 今天的做法
录音软件 Audacity 直接录 专用采集软件带元数据
时间戳 无 每段带精确起止时刻
探头位置 只写「下腹部」 四点象限或图像定位
设备参数 只给频响范围 完整设备型号与固件版本
临床变量 手工 Excel 结构化 CRF 或 FHIR
标注 无 至少给事件级时间戳

这些印记不是缺点,而是时代坐标。理解了这一点,就不会用今天的数据治理标准去要求它——它已经把那个年代能做到的事情做全了:给每段配头文件、给全库配校验和、给临床变量配表格、给许可配文本文件。这些做法在 2017 年的小体量数据库里并不是标配。

§9 使用指引

9.1 三种角色的路径

角色 第一步 第二步 常见错误
算法研究者 读 RECORDS 建立索引 按受试者划分训练测试 按记录划分导致同人跨集
设备工程师 挑五到十段画包络 与自采数据对比噪声 忽略探位未记录这一事实
教学者 整包下载 用 §9.2 的脚本读入 忘了 WAV 无需 WFDB 也能读

第二行里「按受试者划分」这条最容易被跳过,后果也最直接:同一名孕妇的两段录音若一段进了训练集、一段进了测试集,报告的指标会明显偏高,而偏差来源在结果里看不出来。

9.2 一条最短的可用流程

从下载到画出第一张包络图,大约只需要下面几步。

#-- 1. 取数据
aws s3 sync --no-sign-request \
  s3://physionet-open/sufhsdb/1.0.1/ ./sufhsdb

#-- 2. 校验
cd sufhsdb && sha256sum -c SHA256SUMS.txt | grep -v ': OK$' ; cd ..

#-- 3. 看清单
head -5 sufhsdb/RECORDS
import wfdb
import numpy as np
import matplotlib.pyplot as plt

#-- 4. 读一段(以 §4.2 的案例 f17 起手)
rec = wfdb.rdrecord("sufhsdb/f17-1", physical=True)
fs, x = rec.fs, rec.p_signal[:, 0]

#-- 5. 五十毫秒滑动平均包络
w = int(0.05 * fs)
env = np.convolve(np.abs(x), np.ones(w) / w, mode="same")
t = np.arange(len(env)) / fs

#-- 6. 画图
plt.figure(figsize=(12, 3))
plt.plot(t, env, lw=0.6, color="#2d6a8f")
plt.xlabel("time (s)")
plt.tight_layout()
plt.savefig("f17-1_env.png", dpi=150)
print(round(len(x) / fs, 1), round(float(env.max()), 3))

跑通之后,把 f17-1 换成 f17-2 与 m17,三段并排看,就能直观体会 §4.2 的案例里说的「三者共有的节律成分」。

9.3 引用方式

PhysioNet 页面要求引用三处:数据集本身、2015 年的会议论文、以及平台论文。

Sameni, R., & Samieinasab, M. (2021).
Shiraz University Fetal Heart Sounds Database (version 1.0.1).
PhysioNet. RRID:SCR_007345.
https://doi.org/10.13026/42eg-8e59

Samieinasab, M., & Sameni, R. (2015).
Fetal phonocardiogram extraction using single channel
blind source separation. 23rd Iranian Conference on
Electrical Engineering, Tehran, 78-83.
https://doi.org/10.1109/IranianCEE.2015.7146186

第三处是 PhysioNet 平台的通用引用,写法参见官方页面的 Citation 区块。

§10 AI 使用声明

项目 说明
内容来源 官方项目页、数据说明页、发行说明、会议论文
数字口径 一律以官方页面为准,不另做统计
未核实项 逐条时长分布、病史与 CTG 的非空比例
合成内容 无,示例编号取自真实清单
代码样例 依据公开 API 写法,可运行
医学判断 不涉及诊断建议
更新时点 2026 年 10 月
纠错渠道 千方医数集编辑部

常见误读(避坑清单)

说法 实际 证据
这是胎心电数据库 是心音,PCG 不是 ECG 全名 Fetal Heart Sounds
一百一十九名孕妇 一百零九名孕妇,一百一十九段记录 官方摘要
双胎是同时录的 按胎位分两次录 官方 Data Description
带逐拍胎心率 只有十秒窗口均值 1.0.1 发行说明
母体录音人人都有 九十二段,覆盖九十一名母亲 官方摘要
采样率都是 16 千赫兹 少数为 44.1 千赫兹 官方摘要
每段都是九十秒整 平均九十秒,逐条不等 官方用「平均」二字
孕周覆盖全孕期 集中在孕晚期 摘要未给早孕样本
糖尿病等病史齐全 自由文本,「如有」才填 官方字段说明
就是 ephnogram 的孕期版 两者模态与用途都不同 见 §6.3

FAQ

问:SUFHSDB 是心电还是心音? 答:心音。全称是 Shiraz University Fetal Heart Sounds Database,记录的是数字听诊器拾取的声音波形。库内没有 QRS 波群,拿它验证胎心电提取算法会无从下手。

问:里面的 CTG 心率能当胎心率真值吗? 答:只能当粗对照。官方写的是「十秒窗口的平均心率」,供参考用。十秒平均抹平了逐拍变化,评分逐拍误差时会严重失真。

问:双胎那七例能用来做双胎分离吗? 答:能看「双胎录音长什么样」,不能当分离评测集。七例都是按胎位分别采两次,不是同一次录音收进两路胎心。

问:为什么会有 f102 和 f102-1? 答:后缀表示同一受试者的追加或重复录制,官方按两条独立记录计。因此一百零九人对应一百一十九段。

问:许可允许商用吗? 答:ODC-BY 1.0 只要求署名,不限用途。商用与再分发都可以,但必须保留归属并指向原始出处。

问:能直接读成 WFDB 记录吗? 答:可以,每段 WAV 配了一份 .hea。但 WAV 本身就能用标准音频库读,两条路径样本一致。

问:母体录音和胎儿录音能一一配对吗? 答:不能保证。九十二段母体对一百一十九段胎儿,至少有一部分胎儿段没有同人母体对照。

问:为什么不给逐拍标注? 答:这是那个年代的通行做法。逐拍标注成本高、一致性难保证,多数胎心音库选择只发波形,让算法侧自建真值。

问:孕周是整数还是区间? 答:表内为整数周。官方只给了总体年龄与 BMI 的均值与范围,孕周的范围未在摘要中给出。

问:数据量能撑深度学习吗? 答:按今天的标准不够。约三小时单通道,做验证够用,做训练偏少,做预训练勉强。

问:1.0.0 和 1.0.1 差什么? 答:1.0.1 往 Excel 表里补了部分受试者的 CTG 十秒均值,信号文件本身没有变化。

问:为什么叫 SU? 答:SU 指 Shiraz University,即设拉子大学;FHS 指 Fetal Heart Sounds。合起来是设拉子大学胎心音库。

术语表

术语 英文 含义
胎心音图 phonocardiogram, PCG 记录心音的波形
S1 first heart sound 房室瓣关闭产生的第一心音
S2 second heart sound 半月瓣关闭产生的第二心音
胎心率 fetal heart rate, FHR 单位时间的胎心搏动次数
单通道盲源分离 single channel blind source separation 从一路混合信号中分离多个源
经验模态分解 empirical mode decomposition 把信号分解为若干本征模态函数
非负矩阵分解 non-negative matrix factorization 用非负矩阵乘积近似原矩阵
胎心监护 cardiotocography, CTG 同步记录胎心率与宫缩
数字听诊器 digital stethoscope 可录制的电子听诊设备
宽频模式 wide-band mode 设备保留较宽通带的采集模式
孕周 gestational week 从末次月经起算的周数
体质指数 body mass index, BMI 体重除以身高平方
孕次 gravidity 怀孕次数
产次 parity 分娩次数
双胎 twin pregnancy 一次妊娠两个胎儿
头文件 header, .hea WFDB 格式的描述文件
采样率 sampling rate 每秒采样点数
量化位深 bit depth 每个样本的比特数
包络 envelope 信号的幅度轮廓
奈奎斯特频率 Nyquist frequency 可表示的最高频率,为采样率之半
探头 transducer 拾取振动的部件
谱减 spectral subtraction 用噪声谱估计减去噪声
胎位 fetal presentation 胎儿在子宫内的朝向
归属署名 attribution 许可要求的来源标注
开放数据共享许可 Open Data Commons 面向数据的开放许可族

附录 A:核心数字核对表

项 值 来源 来源层级
受试者数 一百零九名孕妇 官方摘要 一手
胎儿记录数 一百一十九段 官方摘要 一手
母体记录数 九十二段 官方摘要 一手
录母体的母亲数 九十一名 官方摘要 一手
双胎例数 七例 官方摘要 一手
平均单段时长 约九十秒 官方摘要 一手
采样率 16 千赫兹为主 官方摘要 一手
位深 16 位 官方摘要 一手
频响 20 赫兹至 1 千赫兹 官方摘要 一手
年龄范围 16 至 47 岁 官方摘要 一手
年龄均值 29.3 岁 官方摘要 一手
BMI 范围 19.5 至 38.9 官方摘要 一手
BMI 均值 29.2 官方摘要 一手
解压体积 789.3 MB 文件列表 一手
压缩体积 632.6 MB 官方页面 一手
Excel 表体积 18.7 KB 文件列表 一手
DOI 10.13026/42eg-8e59 官方页面 一手
首次上线 2017-07-19 版本历史 一手
当前版本日期 2021-01-08 版本历史 一手
累计时长(折算) 约三小时 记录数乘均长 推算

附录 B:数字的来源分层

层级 含义 本库中的例子
官方页面 项目页、数据说明、发行说明 记录数、采样率、受试者统计、体积、DOI
论文摘要 会议论文与平台论文 方法动机、单通道分离的定位
推算 由一手数字换算 累计时长、预估字节数
未核实 官方未给、本篇未统计 逐条时长分布、病史非空比例、CTG 覆盖人数

最后一行的三项是使用者接手后第一件该自己数的事。它们不难数,但数出来的结果只对当前版本成立,不适合写进对外的说明书。

附录 C:完整参考文献

编号 文献 链接
R1 Sameni & Samieinasab, PhysioNet 数据集 1.0.1 doi:10.13026/42eg-8e59
R2 Samieinasab & Sameni, 伊朗电气工程会议 2015 doi:10.1109/IranianCEE.2015.7146186
R3 PhysioNet 平台论文 doi:10.1038/s44360-026-00096-z
R4 许可条款 ODC-BY 1.0 opendatacommons.org/licenses/by/1-0/
R5 数据集项目页 physionet.org/content/sufhsdb/
R6 1.0.0 版页面 physionet.org/content/sufhsdb/1.0.0/

附录 D:任务代码

你要做的事 用哪一节 关键函数
下载全量 §5.1 aws s3 sync
校验完整性 §5.3 sha256sum -c
建立索引 §5.2 RECORDS 解析
读一段波形 §5.4 wfdb.rdrecord
画包络 §5.4、§9.2 np.convolve
接临床表 §5.5 pandas.read_excel
母体对照比对 §4.2 三段并排包络

附录 E:如果只记五件事

序 一句话
一 它是伊朗设拉子大学的胎心音库,一百零九名孕妇、一百一十九段胎儿录音、九十二段母体录音
二 独特之处是有母体对照和双胎病例,这在 PhysioNet 的胎心音库里几乎独一份
三 没有逐拍标注,CTG 心率只是十秒均值,不能当真值
四 双胎是分两次录的,不是同时录的,做不了双胎分离评测
五 许可宽松、体量小、格式通用,做算法验证与教学都合适

编辑说明

本篇依据 PhysioNet 项目页、数据说明页、1.0.1 版发行说明与 2015 年会议论文写成。所有规模与结构数字均出自官方页面,不做二次统计。逐条时长、病史非空比例、CTG 覆盖人数三项官方未给,本篇也未统计,列为未核实项。若后续版本新增字段,以官方页面为准。


相关数据集导航

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

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

返回 AI-Ready 数据集