信息速览
睡眠医学有一个不太好解决的测量悖论:最准确的睡眠测量方法,恰恰最不像睡觉。多导睡眠图(polysomnography,PSG)是睡眠分期的金标准,它要在头皮上贴脑电电极、在眼周贴眼电电极、在下巴与腿部贴肌电电极,再接上口鼻气流、胸腹呼吸带、血氧指夹与心电导联,受试者带着十几根线在一个陌生房间里躺一整夜。临床上把由此产生的偏差叫作"首夜效应"——第一夜的睡眠结构本身就被这次测量改变了。于是所有想绕开它的人都在问同一个问题:能不能不贴任何东西,就知道这一夜睡到了哪个阶段。
绕开的办法大致有两条。一条是把传感器藏进日常生活物件:腕动计、床垫压电薄膜、枕头下的压电带,代价是它们测到的是运动与压力的代理量,与真正的睡眠分期之间隔了一层不确定的映射。另一条是把传感器拿远一点:用低功率微波雷达对着床照一整夜,从回波里解出胸壁随呼吸与心跳产生的亚毫米级位移。这条路不接触、不发光、不受光照影响,也不需要受试者配合,但公开数据的稀缺程度远超第一条——因为它需要雷达硬件与睡眠实验室同时到位,而这两件事通常不属于同一个团队。
SLEEPBRL 是这两件事被凑到一起的少数公开产物之一。鲍曼莫斯科国立技术大学的遥感实验室提供雷达,Almazov 国家医学研究中心的睡眠组提供实验室与判读,双方在 2018 年 2 月把 32 名受试者的整夜记录交给了 PhysioNet:一边是雷达自己录下的 16 条正交信号,一边是经认证医师依据同步多导睡眠图做出的分期结果。它能支撑的正是那个绕不开的问题——在不接触身体的前提下,睡眠分期的上限在哪里。它的代价同样清楚:三十二个人、单一中心、单一设备、没有原始多导睡眠图波形、受试者被明确筛掉了睡眠呼吸障碍与睡眠相关运动障碍。它不是规模上的大库,是一件稀缺的"对照工具"。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Sleep Bioradiolocation Database |
| 发布方 | PhysioNet(原始数据由鲍曼莫斯科国立技术大学遥感实验室与 Almazov 国家医学研究中心睡眠组贡献) |
| 首次发布 | 2018 年 2 月 7 日,版本 1.0.0 |
| 最近改动 | 数据文件标注 2018-02-02,RECORDS 标注 2018-10-19;仅有一个版本 |
| 记录数 | 32 段 |
| 受试者数 | 32 名,一人一段,一一对应 |
| 单段时长 | 由各记录 EDF 头独立声明,以 1 秒为一个数据记录(sbj01 为 30270 秒) |
| 通道数 | 16 条,命名 S1–S16,对应 8 个频点的同相与正交分量 |
| 采样率与分辨率 | 50 Hz,16 位带符号整数,物理量纲为微伏 |
| 雷达体制 | 连续波、正交接收、步进频率,频率范围 3.6–4.0 GHz,频点数 8 |
| 发射指标 | 最大发射功率 3 mW,能量流密度 1.36 微瓦每平方厘米 |
| 原始来源 | 睡眠实验室内的整夜多导睡眠监测(Embla N7000)同步采集 |
| 标注方式 | 由有经验的认证医师依据多导睡眠图、按美国睡眠医学会规则判读 |
| 分期类别 | W(清醒)、1、2、3、R(快速眼动)五类 |
| 文件格式 | EDF 信号文件 / WFDB .atr 注释文件 / XLSX 受试者特征表 |
| 许可 | Open Data Commons Attribution License v1.0,开放访问,无需注册 |
| 全量体积 | 未压缩 1.5 GB |
| 典型用途 | 非接触睡眠分期、雷达回波信号处理、接触式与非接触式方法的对照评估 |
§1 它要解决的具体麻烦
1.1 最准的那把尺子,量不准自然状态下的睡眠
睡眠分期在技术上并不玄妙:把整夜切成若干个判读窗,逐个窗看脑电里有没有纺锤波与 K 复合波、有没有慢波、眼电里有没有快速眼动、下巴肌电的张力掉到什么程度,然后给这个窗打一个标签。这套规则由美国睡眠医学会(American Academy of Sleep Medicine,AASM)维护,是临床与研究的共同语言。问题从来不在规则,而在采集:规则要求的信号里,脑电、眼电、肌电这三路是决定性的,而它们都必须贴在头上和脸上。
这个约束带来三层后果。第一层是直接的:受试者带着线与胶布入睡,翻身受限,觉醒次数上升,深睡与快速眼动的比例下降,于是第一夜的睡眠结构系统性地偏离本人常态,这就是为什么很多实验室方案里正式记录要排在第二夜。第二层是人群上的:婴幼儿、重度皮肤疾病患者、大面积烧伤患者、失智且不耐受电极的老人,几乎无法完成标准多导睡眠图,而他们恰恰是睡眠问题最多的人。第三层是场景上的:多导睡眠图只在睡眠实验室里成立,做不了连续多夜、做不了居家随访、做不了大规模筛查。
所以"非接触"不是一个锦上添花的工程趣味,它是把睡眠测量从实验室里搬出去的前提条件。但前提归前提,搬出去之后还剩多少信息量,必须拿同步的金标准来量——这正是本库存在的理由。
1.2 雷达测到的不是"低质量的脑电",而是另一类物理量
必须先说清楚一件事:雷达测不到脑电。生物雷达(bioradar)向人体发射低功率连续波,接收被体表反射回来的回波,回波的相位随胸壁位移周期性变化,幅度随反射截面积变化。解出来的量是体表位移的时间序列,其中叠加着呼吸引起的较大起伏(幅度在毫米量级)与心跳引起的较小起伏(幅度在亚毫米量级),再叠加体动造成的大幅突变。
这条链路上,睡眠分期是一个推断问题而不是读取问题。清醒、浅睡、深睡、快速眼动在体表动力学上的表现确实有差别——呼吸频率与规律性、体动密度、心率与心率变异性都随睡眠深度系统性变化——但这些差别是统计性的,不是一对一的。这就决定了三件事:第一,雷达方案的天花板不可能等同多导睡眠图;第二,模型的有效性必须用同步金标准验证,而不是靠"看起来合理";第三,标签必须来自多导睡眠图,也就是说一套高质量的非接触数据集,本质上必然是"雷达信号 + 多导睡眠图标签"的配对数据,而不是单纯的雷达数据。
本库给出的正是这种配对:EDF 里是雷达自己的 16 条信号,注释文件里是医师看多导睡眠图给出的分期。它不提供多导睡眠图的原始波形,这一点在后面会反复成为限制的来源。
1.3 三条常见的错误期待
| 错误期待 | 为什么会这么想 | 实际是什么 |
|---|---|---|
| 期待它有同步的多导睡眠图波形 | "非接触对照数据集"听起来就该是双模态 | 只有雷达信号与分期结论,脑电、眼电、肌电、呼吸带、血氧的原始波形都没有 |
| 期待它能做睡眠呼吸暂停检测 | 雷达能测呼吸,睡眠库又常有呼吸事件标注 | 官方明确说明全部受试者均无睡眠呼吸障碍,也没有呼吸事件标注 |
| 期待它是健康人群的睡眠基线 | 受试者"无睡眠呼吸障碍"听起来就是健康人 | 其中 4 人被诊断失眠,受试者特征表里带失眠标记列,人群并非健康志愿者样本 |
1.4 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 非接触睡眠分期的训练与测试 | 整夜雷达信号配 30 秒窗口的分期标签 | 够,这是它设计出来要支持的事 |
| 跨受试者泛化能力评估 | 32 人一人一段,天然无同人泄漏 | 够做严格留一受试者交叉验证,但人数决定了置信区间宽 |
| 雷达信号处理与频点选择 | 8 个频点各自的正交双通道 | 够,可以比较单频点与多频点融合的收益 |
| 呼吸率与心率提取算法验证 | 胸壁位移里含呼吸与心跳成分 | 无独立参考通道,只能做自洽性检查,不能做准确性验证 |
| 睡眠呼吸暂停或低通气事件检测 | 无 | 不够,人群已排除,也没有事件标注 |
| 睡眠分期规则的重新判读 | 无 | 不够,只有分期结论没有原始多导睡眠图 |
| 昼夜节律或入睡时刻分析 | EDF 起始时间统一填为零点缺省值 | 不够,文件的绝对时钟不可用 |
| 多中心、多设备泛化 | 单一雷达、单一实验室、单一城市 | 不够,只能做"本设备内"的跨人泛化 |
1.5 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做非接触睡眠监测算法,找不到带金标准标签的公开数据 | 提供雷达信号与多导睡眠图分期标签的整夜配对 | 先跑留一受试者交叉验证,把结果按分期类别拆开看,不要只看总体准确率 |
| 你在做雷达信号处理,需要真实的多频点回波 | 8 个频点各有一条同相与一条正交通道,整夜长度 | 用正交对算相位与幅度,比较各频点的信噪表现 |
| 你在评估床垫或腕动计方案,想找一个对照锚点 | 同夜多导睡眠图分期是共同的评价基准 | 把你的方案标签与本库分期口径对齐,注意本库只有五类且无第四期 |
| 你想复现已发表的非接触分期结果 | 论文给出的方法与指标可在同一批数据上重跑 | 先确认分期合并口径,论文用的是清醒—快速眼动—浅睡—深睡四类 |
| 你只有接触式数据,想论证非接触的可行性边界 | 它量化了"不贴电极"能做到什么程度 | 用它给出的上限反推你的场景是否值得投入 |
| 你在教睡眠医学,需要一个"同一夜、两种视角"的例子 | 雷达视角与医师判读视角在同一时间轴上对齐 | 用 §5 的读取流程导出片段,注意注释真值在辅助字段里 |
1.6 一句话判断与四条边界
它不适合当"更大的睡眠训练集",而适合当"非接触方案的天花板标尺":在已知多导睡眠图答案的前提下,量出单靠体表动力学能走多远。
不适合拿来做大规模监督训练。 32 名受试者、一人一段,深度学习模型很容易在几十个人的体型、睡姿与呼吸习惯上过拟合。想用数据量换性能的项目,用它只会得到一个漂亮的留一验证数字和一个很差的外部表现。
不适合拿来做呼吸事件或心血管事件研究。 官方明确说明全部受试者均无睡眠呼吸障碍与睡眠相关运动障碍,也没有呼吸事件、血氧、心律的标注。雷达信号里确实含呼吸与心跳成分,但没有参考通道可比对,任何"准确率"都无从验证。
不适合拿来重新讨论分期规则。 它给的是一位认证医师按 AASM 规则做出的判读结论,不是原始多导睡眠图。你无法检验判读人间一致性,也无法改用 R&K 规则重新分期。
不适合拿来研究入睡时刻、夜间觉醒的时钟分布或昼夜节律。 EDF 头的起始日期与时间被统一写成默认值,各记录的绝对时间不可比,也不可信。
§2 数据构成与规格
2.1 一个受试者对应两个文件,全库共用一份特征表
数据库的组织方式很直白:32 名受试者,每人两个文件,加一份全库共享的受试者特征表。EDF(European Data Format)文件存雷达信号,.atr 文件存 WFDB 格式的分期注释,两者按文件名前缀配对——sbj01.edf 与 sbj01.edf.atr 属于同一夜。
这里有个容易踩的命名细节:注释文件叫 sbj01.edf.atr,也就是说在 WFDB 的语境里,记录名是 sbj01.edf 而不是 sbj01,注释扩展名是 atr。按常规习惯写 rdann('sbj01', 'atr') 会找不到文件,必须把 .edf 带进记录名。这个坑在读 PhysioNet 上其他以 EDF 为主的库时也会遇到,但本库因为文件命名方式而格外明显。
根目录另有三个辅助文件。RECORDS 列出全部 32 条记录名;SHA256SUMS.txt 给出全部文件的校验和,共 66 行,与"32 个 EDF + 32 个注释 + RECORDS + 特征表"的数量吻合;subjects.xlsx 是唯一的临床上下文来源。
2.2 完整字段字典
本库的"字段"分三处存放:EDF 文件的头部、注释文件的每个事件、以及 XLSX 表的列。下表逐条列出。
| 信息项 | 所在位置 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
| 版本标识 | EDF 头第 1 字段 | 0 |
EDF 标准版本 | 说明它是标准 EDF 而非 EDF+ |
| 患者标识 | EDF 头第 2 字段 | X X X X |
去标识化填充 | 无可用身份信息 |
| 记录标识 | EDF 头第 3 字段 | Startdate 01-JAN-2015 X X X |
同样是填充文本 | 不要当元数据解析 |
| 起始日期 | EDF 头第 4 字段 | 01.01.15 |
统一默认值 | 全部记录相同,无时间信息 |
| 起始时间 | EDF 头第 5 字段 | 12.00.00 |
统一默认值 | 绝对时钟不可用 |
| 头字节数 | EDF 头第 6 字段 | 4352 |
头部长度 | 256 + 16 条信号 × 256 |
| 数据记录数 | EDF 头第 8 字段 | 如 30270 |
记录被切成多少个数据块 | 逐记录不同,决定整夜时长 |
| 数据记录时长 | EDF 头第 9 字段 | 1.000000 |
每个数据块的秒数 | 全库统一为 1 秒 |
| 信号条数 | EDF 头第 10 字段 | 16 |
通道数 | 全部记录均为 16 |
| 通道名 | EDF 头标签区 | S1–S16 |
通道标识 | 奇数同相、偶数正交 |
| 物理量纲 | EDF 头量纲区 | uV |
物理单位 | 全部通道均为微伏 |
| 物理量下限/上限 | EDF 头极值区 | 逐记录逐通道不同 | 定标用的物理极值 | 换算物理量时必须读 |
| 数字量下限/上限 | EDF 头极值区 | -32768 / 32767 |
16 位整数范围 | 说明存储为 16 位带符号整数 |
| 每记录采样点数 | EDF 头末区 | 50 |
每秒采样点数 | 与官方声明的 50 Hz 一致 |
| 判读时刻 | .atr |
采样点序号 | 每个判读窗的起始位置 | 除以 50 得秒数 |
| 判读窗长度 | .atr |
相邻事件差 1500 采样点 | 30 秒 | 由注释文件推得,官方页面未明写 |
| 分期真值 | .atr 的辅助字段 |
W / 1 / 2 / 3 / R |
睡眠分期 | 不在标准符号位,见 §2.5 |
| 受试者编号 | subjects.xlsx A 列 |
sbj01–sbj32 |
与文件名对应 | 主键 |
| 性别 | subjects.xlsx B 列 |
M / F |
生理性别 | 官方页面未给构成 |
| 年龄 | subjects.xlsx C 列 |
整数 | 受试者年龄 | 官方页面未给范围 |
| 呼吸暂停低通气指数 | subjects.xlsx D 列 |
数值 | AHI | 官方说明全部无睡眠呼吸障碍 |
| 体重指数 | subjects.xlsx E 列 |
数值 | BMI | 人群偏胖,见 §7.3 |
| 睡眠效率 | subjects.xlsx F 列 |
百分数 | 睡眠效率 | 逐受试者不同 |
| 肢体运动指数 | subjects.xlsx G 列 |
每小时次数 | 肢体运动指数 | 官方说明无睡眠相关运动障碍 |
| 失眠标记 | subjects.xlsx H 列 |
0 / 1 |
是否诊断失眠 | 官方说明共 4 人 |
2.3 一条记录的完整解剖
以 sbj01 为例。EDF 头声明:16 条信号,30270 个数据记录,每个数据记录 1 秒,因此整夜为 30270 秒,约合 8.4 小时。每记录每通道 50 个采样点,全通道合计 800 个 16 位整数,加上 4352 字节的头部,正好对应官方文件目录标注的 46.2 MB 量级。
头部里值得单独说的有三处。第一处是身份字段被写成 X X X X,起始日期与时间被写成统一默认值,说明发布方在数据出库前做了彻底的时间与身份脱敏;这对隐私保护是好事,对想做入睡时刻与昼夜节律分析的人是硬约束。第二处是物理量上下限逐通道不同——sbj01 的 S1 是 -4057 到 4186 微伏,而 S3 是 -10761 到 10995 微伏,差了一倍多。这意味着不同频点通道的幅度尺度并不一致,直接把原始整数喂进模型会让频点之间的相对权重失真,必须先按各自极值换算成物理量,或至少做逐通道归一。第三处是数字量上下限为 -32768 与 32767,确认了 16 位存储。
配套注释文件 sbj01.edf.atr 里共有 1009 个事件,第一个在采样点 0,相邻事件间隔恒为 1500 个采样点,最后一个在采样点 1512000。1500 除以 50 等于 30 秒,1009 乘以 30 等于 30270 秒,与 EDF 头声明的整夜长度严格闭合。这个闭合是个好消息:它说明注释覆盖了整夜的每一个判读窗,首尾无缺口、无重叠。
再对上 subjects.xlsx 的第一行:sbj01 为男性,55 岁,呼吸暂停低通气指数 4.9,体重指数 48,睡眠效率 75.7%,肢体运动指数每小时 8.9 次,非失眠。这一行的 AHI 低于临床常用的 5 次每小时阈值,与官方"全部受试者均无睡眠呼吸障碍"的说明一致。
2.4 十六条通道的物理含义
官方对通道的说明只有一句:EDF 文件包含 16 条信号 S1–S16,奇数信号含同相(I)分量,偶数信号含正交(Q)分量,第一工作频率的 I 与 Q 在 S1–S2,第二频率的在 S3–S4,以此类推。把这句话与"频点数 8"合起来,通道布局就完全确定了。
| 通道 | 分量 | 对应频点序号 | 说明 |
|---|---|---|---|
| S1 / S2 | I / Q | 第 1 个 | 3.6–4.0 GHz 频段内的最低频点 |
| S3 / S4 | I / Q | 第 2 个 | — |
| S5 / S6 | I / Q | 第 3 个 | — |
| S7 / S8 | I / Q | 第 4 个 | — |
| S9 / S10 | I / Q | 第 5 个 | — |
| S11 / S12 | I / Q | 第 6 个 | — |
| S13 / S14 | I / Q | 第 7 个 | — |
| S15 / S16 | I / Q | 第 8 个 | 频段内的最高频点 |
正交接收的意义在于相位可以被完整解出。单通道接收只能看到回波的幅度,无法区分胸壁是向雷达靠近还是远离,位移过零点时会出现方向模糊;有了同相与正交两路,就能算出瞬时相位,进而把相位展开成单向的位移轨迹。这是本库能被用于呼吸与心跳提取的物理前提。
八个频点的作用则是另一回事。步进频率体制下,不同频点对同一位移产生的相位变化量不同,对多径与静态杂波的敏感程度也不同。具体到本库,各频点通道的物理量极值差异明显,S1、S2 与 S16 的量程明显小于中间若干通道,这说明各频点的回波强度并不均匀。做频点选择或频点融合的研究时,这个差异本身就是可分析的对象。
需要提醒的是:官方只给了 3.6–4.0 GHz 这个频段和"8 个频点",没有公布每个频点的具体中心频率与步进间隔。想做严格的距离分辨或频点间相位干涉分析,这一层参数是缺失的。
2.5 分期码藏在辅助字段里,这是本库最大的读取陷阱
官方给出的注释编码方案是五类:W 表示清醒,1、2、3 表示第一、二、三期,R 表示快速眼动期。但直接用 WFDB 工具读出的 symbol 字段并不是这些值——全部事件的标准类型码都是 N,真正的分期字符放在注释的辅助字段(aux_note)里。
| 你以为的位置 | 实际位置 | 后果 |
|---|---|---|
ann.symbol |
恒为 N |
直接按符号统计会得到"全库只有一类"的荒谬结论 |
ann.aux_note |
W / 1 / 2 / 3 / R |
这才是分期真值 |
| 数字量纲 | 采样点序号 | 除以 50 得到秒,除以 1500 得到第几个判读窗 |
造成这个错位的原因是编码选择:WFDB 的标准注释类型表里,N 是"正常心搏"这类通用类型,而 1、2、3 这些字符不是合法的标准类型码,发布方于是把它们放进自由文本的辅助字段,保留 N 作为类型位。这个做法在数据上完全成立,但任何按标准符号做统计的代码都会静默失效——它不会报错,只会给出一个看起来极其整齐的错误结果。
分期体系本身也值得说明。本库只有三期而没有第四期,这与 AASM 规则一致:AASM 把传统的第三期与第四期合并为 N3(慢波睡眠),因此"stage 3"在这里指的就是慢波睡眠整体。如果你要把它与采用 R&K 规则的旧数据合并,需要先处理这个合并口径的差异。
2.6 与常见睡眠库的字段差异
| 维度 | 本库 | 常见的多导睡眠图公开库 | 常见的腕动或床垫库 |
|---|---|---|---|
| 信号来源 | 生物雷达回波 | 脑电、眼电、肌电、呼吸、血氧等多路 | 加速度或压力薄膜 |
| 通道数 | 16(8 频点 × 正交对) | 通常数路到十余路 | 通常 1 到数路 |
| 采样率 | 50 Hz | 脑电通道通常数百赫兹 | 通常数十赫兹或更低 |
| 分期标签 | 有,来自多导睡眠图判读 | 有,本身就是判读对象 | 多数没有,或只有睡眠与清醒二分类 |
| 原始多导睡眠图波形 | 无 | 有 | 无 |
| 呼吸事件标注 | 无 | 通常有 | 通常无 |
| 受试者是否接触设备 | 否 | 是 | 是(躺在传感器上) |
| 单人记录数 | 1 | 常见多夜 | 常见多夜 |
这张表解释了本库的定位:它在"信号模态"这一列上与所有主流睡眠库都不同,在"标签质量"这一列上达到了多导睡眠图库的水平,而在"可重判读性"这一列上退回到腕动库的水平。买它的信号模态与标签质量,就得接受可重判读性的缺失。
§3 它是谁的数据
3.1 贡献者与分工
官方列出的贡献者分属两个机构,分工非常清楚:一边造雷达,一边管睡眠。
| 贡献者 | 机构 | 角色侧 |
|---|---|---|
| Alexander Tataraidze | 鲍曼莫斯科国立技术大学遥感实验室 | 雷达与信号处理,同时是平台上的提交联系人 |
| Lesya Anishchenko | 同上 | 雷达与信号处理,同为联系邮箱 |
| Sergey Ivashov | 同上 | 雷达与信号处理 |
| Lyudmila Korostovtseva | Almazov 国家医学研究中心睡眠组 | 睡眠医学与判读 |
| Michail Bochkarev | 同上 | 睡眠医学与判读 |
| Yuriy Sviryaev | 同上 | 睡眠医学与判读 |
这种"工科院校 + 临床睡眠中心"的组合正是本类数据稀缺的原因。雷达团队通常拿不到睡眠实验室与认证判读,睡眠团队通常没有雷达硬件;凑到一起的项目数量有限,能公开数据的更少。平台上的作者信息只列了 Tataraidze 一人并标注其机构为鲍曼莫斯科国立技术大学,但页面正文的贡献者段完整列出了六人。
3.2 时间线
| 时间 | 事件 | 出处层级 |
|---|---|---|
| 2016 年 8 月 | 原始论文在第 38 届 IEEE 医学与生物工程学会年会上发表,页码 2839–2842 | 论文与官方引用段 |
| 2018 年 2 月 2 日 | 数据文件上传,文件目录标注的时间戳 | 官方文件目录 |
| 2018 年 2 月 7 日 | 在 PhysioNet 上正式发布,版本 1.0.0,同期挂出新库公告 | 官方页面 |
| 2018 年 10 月 19 日 | 补充 RECORDS 文件 | 官方文件目录 |
| 至今 | 仅 1.0.0 一个版本,无修订记录 | 官方页面版本列表 |
这条时间线有个值得注意的地方:论文比数据发布早了一年半。也就是说,论文里报告的结果是在 32 名受试者的数据上做出的,而数据本身直到 2018 年才公开。这使得本库成为少见的"结果先发表、数据后公开、可复现性可被第三方检验"的例子——反过来说,复现时如果得到与论文不同的数字,差异只能来自实现细节,而不是数据不同。
3.3 采集场景
采集发生在睡眠实验室里,受试者接受整夜多导睡眠监测,使用的设备是 Embla N7000。这意味着场景是 standardized 的:固定的房间、固定的床、固定的雷达架设位置、整夜连续记录。这对算法评估是好事(条件可控、噪声源少),对泛化评估是坏事(居家环境的床伴、宠物、翻身、他人走动、墙体多径一概不在数据里)。
雷达的工作参数由官方给出:连续波体制、正交接收、步进频率调制、频率范围 3.6–4.0 GHz、8 个频点、能量流密度 1.36 微瓦每平方厘米、最大发射功率 3 毫瓦、采样率 50 赫兹。发射功率这一项值得一提:3 毫瓦属于极低的量级,比一部手机的发射功率低若干个数量级,这也是非接触雷达方案在安全性论证上常用的论据。
3.4 来源层次
| 层级 | 内容 | 可信度 |
|---|---|---|
| 官方页面 | 记录数、受试者数、雷达参数、判读规则、编码方案、许可、版本历史 | 最高,随库发布 |
| 官方文件 | EDF 头部的时长与定标、注释的窗长与真值、特征表的各列数值 | 最高,可直接读取复核 |
| 论文摘要 | 32 名受试者、无睡眠呼吸障碍、三类 kappa 值 | 高,但只是摘要,方法与实现细节未核 |
| 未核验 | 各频点中心频率、雷达架设位置与距离、判读人间一致性、受试者用药情况 | 低,见 §10 |
分层的实用意义在于:写论文时引用规模与规格可以直接引官方页面与文件;引用性能数字只能引论文,而且写清那是原作者在自己的实现上得到的结果。
§4 它最独特的东西
4.1 稀缺性来自硬件与临床的双重门槛
公开数据集的稀缺有两种成因。一种是不愿意公开,另一种是不容易凑齐。本库属于后者。要做这样一批数据,需要同时具备:一台能连续工作整夜并保持相位稳定的生物雷达、一间能做标准多导睡眠监测的睡眠实验室、一位愿意逐窗判读的认证医师、以及一个愿意把数据交出去的团队。四者缺一不可,而雷达团队与睡眠团队在学术版图上相距甚远。
结果就是:在睡眠这个被研究得极为充分的领域里,"非接触雷达 + 同步多导睡眠图金标准"的公开配对数据依然屈指可数。大量非接触睡眠研究工作要么没有金标准对照,要么用自己采集的私有数据,无法被第三方检验。本库把这条链路上的信号与标签同时交出来,让"非接触能做到什么程度"这个问题第一次有了可公开检验的基准。
4.2 差异化证据
| 对照对象 | 它在信号模态上 | 它在标签上 | 本库的差别 |
|---|---|---|---|
| 多导睡眠图库 | 接触式多路生理信号 | 有分期与事件标注 | 本库信号非接触,但缺原始多导睡眠图波形 |
| 腕动计数据集 | 接触式单路加速度 | 多数无分期或仅二分类 | 本库标签更细,且同样不接触上半身 |
| 床垫压力图库 | 接触式压力分布 | 视数据集而定 | 本库完全不接触,且通道是相位敏感的 |
| 私有雷达数据集 | 非接触雷达 | 视团队而定 | 本库可公开获取,结果可被第三方复现 |
| 心电或呼吸单模态库 | 接触式单模态 | 无睡眠分期 | 本库以睡眠分期为目标,模态完全不同 |
这里最容易被误读的一点是:本库并不"优于"多导睡眠图库,它只是在另一个模态上提供了同样质量的标签。想用雷达替代多导睡眠图的人,要比较的不是"本库的指标能不能超过多导睡眠图",而是"本库的指标能不能支撑我的场景"。
4.3 三个具体的使用场景
场景一:留一受试者交叉验证。 32 人一人一段,没有同人多夜的问题,测试集的污染风险在数据结构上就被排除。这是本库最干净的评估方式,也是论文采用的验证规模。
场景二:频点消融。 8 个频点各有一条正交对,可以系统地比较"只用最低频点"“只用中间频点”"八个频点全用"三种配置。由于各频点的幅度尺度不同,做消融时必须先逐通道归到物理量,否则比较的是量程而不是信息量。
场景三:相位域与幅度域的对照。 有了 I 与 Q,既能走相位展开得到位移轨迹,也能只用幅度包络。把两条路线的分期结果放在一起比,可以直接回答"相位信息到底贡献了多少"——这个问题在只有单通道雷达数据的数据集上是无法提出的。
4.4 标注粒度
标注的粒度是"每 30 秒一个标签",与多导睡眠图判读的常规窗口一致。这带来两个直接后果。
第一个后果是任务被天然定义成了序列标注或逐窗分类,而不是整夜级别的回归。相邻窗之间极强相关——睡眠是连续过程,一个窗是第二期,下一个窗大概率还是第二期——所以逐窗独立评估会因为相邻窗的信息泄漏而虚高。评估时要么用受试者级别的划分,要么在指标上做针对序列结构的修正。
第二个后果是事件级分析做不了。入睡时刻只能定位到 30 秒的粒度;持续短于一个窗的觉醒不会被记录成独立类别;微觉醒、皮质觉醒这类更细的结构完全不在标注里。想做这类研究,本库不是合适的起点。
4.5 边界条件
| 边界 | 取值 | 影响 |
|---|---|---|
| 受试者数 | 32 | 置信区间宽,跨人泛化的结论要保守表述 |
| 单受试者记录数 | 1 | 无法研究个体内跨夜变异 |
| 记录时长 | 逐记录不同,由 EDF 头声明 | 需要逐记录读取,不能假定等长 |
| 中心与设备 | 单一实验室、单一雷达型号 | 无法评估跨设备与跨中心泛化 |
| 人群筛选 | 无睡眠呼吸障碍、无睡眠相关运动障碍,其中 4 人失眠 | 呼吸事件相关任务不可用;人群不代表普通门诊 |
| 绝对时间 | 起始日期与时间为默认值 | 时钟相关分析不可用 |
| 原始多导睡眠图波形 | 未提供 | 无法重新判读、无法评估判读一致性 |
| 频点参数 | 只给频段与频点数 | 距离分辨类分析缺参数 |
§5 怎么拿到
5.1 目录结构
官方文件目录的结构是完全扁平的,全部文件都在根目录下,没有子目录:
sleepbrl/1.0.0/
├── RECORDS #-- 32 条记录名,sbj01.edf 至 sbj32.edf
├── SHA256SUMS.txt #-- 全部 66 个文件的 SHA256 校验和
├── subjects.xlsx #-- 32 行 × 8 列的受试者特征表
├── sbj01.edf #-- 雷达信号,16 通道,50 Hz
├── sbj01.edf.atr #-- 分期注释,WFDB 格式
├── ... #-- sbj02 至 sbj31 同构
├── sbj32.edf
└── sbj32.edf.atr
注意 RECORDS 里写的是带 .edf 后缀的完整记录名,与文件名一致。这一点对写代码很友好:直接按行读这个文件就能拿到全部记录名,不需要再拼后缀。
5.2 批量下载
全量未压缩 1.5 GB,可以一次下完。官方给了四种方式:整包 ZIP、命令行递归、AWS 同步、以及 Python 包下载。
#-- 方式一:整包下载(1.5 GB)
wget https://physionet.org/static/published-projects/sleepbrl/sleepbrl-1.0.0.zip
#-- 方式二:命令行递归,推荐,可断点续传
wget -r -N -c -np https://physionet.org/files/sleepbrl/1.0.0/
#-- 方式三:AWS 开放桶同步,无需凭证
aws s3 sync --no-sign-request s3://physionet-open/sleepbrl/1.0.0/ ./sleepbrl
#-- 方式四:PhysioNet 官方 Python 包
physionet download sleepbrl --version 1.0.0
开放访问意味着不需要注册账号、不需要签署数据使用协议。许可为 ODC-BY 1.0,允许包括商业用途在内的再使用,条件是署名。
5.3 读取信号与注释
核心是记住两件事:记录名带 .edf,分期真值在辅助字段。
import wfdb
import numpy as np
import pandas as pd
#-- 记录名必须是 sbj01.edf,而不是 sbj01
rec = wfdb.rdrecord('sbj01.edf', pn_dir='sleepbrl')
ann = wfdb.rdann('sbj01.edf', 'atr', pn_dir='sleepbrl')
print(rec.fs, rec.sig_len, rec.n_sig, rec.sig_name)
#-- 50 1513500 16 ['S1', ..., 'S16']
print(rec.p_signal.shape, rec.units[:3])
#-- (1513500, 16) ['uV', 'uV', 'uV']
print(len(ann.sample), ann.sample[:4])
#-- 1009 [0 1500 3000 4500]
print(ann.symbol[:4], ann.aux_note[:4])
#-- ['N' 'N' 'N' 'N'] ['W' 'W' 'W' 'W']
p_signal 是已按各通道物理量极值换算过的浮点微伏值,可以直接用;d_signal 是原始 16 位整数。两者别混用:本库各通道量程差异明显,用整数会让频点间的权重失真。
5.4 转成逐窗表格
把整夜信号与分期标签对齐成一张表,是绝大多数建模流程的第一步。
import wfdb
import numpy as np
import pandas as pd
FS = 50
WIN = 1500 #-- 30 秒 × 50 Hz,与注释间隔一致
def load(name, pn_dir='sleepbrl'):
rec = wfdb.rdrecord(name + '.edf', pn_dir=pn_dir)
ann = wfdb.rdann(name + '.edf', 'atr', pn_dir=pn_dir)
stage = np.array(ann.aux_note) #-- 真值在这里
t = ann.sample
rows = []
for k, s in enumerate(t):
seg = rec.p_signal[s:s + WIN, :] #-- (1500, 16)
if seg.shape[0] != WIN:
continue #-- 末尾不足一窗则丢弃
rows.append((k, s, stage[k]))
return rec.p_signal, pd.DataFrame(rows, columns=['win', 'sample', 'stage'])
sig, table = load('sbj01')
print(table.head())
print(sig.shape, len(table))
关键点有三个:窗口长度用 1500 而不是 30 乘采样率的字面量,这样即使某条记录的采样率声明有出入也不会错;末尾不足一窗的部分丢弃而不是补零,避免把不存在的信号当真实观测;分期字符取自辅助字段。
5.5 注释映射与五类标签
官方的五类分期与常见的四分类口径之间需要一个映射,因为原论文报告的是四类结果。
#-- 官方五类
RAW5 = {'W': 0, '1': 1, '2': 2, '3': 3, 'R': 4}
#-- 论文用的四类:清醒 / 快速眼动 / 浅睡 / 深睡
RAW4 = {'W': 0, 'R': 1, '1': 2, '2': 2, '3': 3}
#-- 睡眠与清醒二分类
RAW2 = {'W': 0, '1': 1, '2': 1, '3': 1, 'R': 1}
def map_stage(series, table):
#-- 遇到未定义字符直接报错,不要静默丢弃
bad = set(series) - set(table)
if bad:
raise ValueError(f'未知分期码: {bad}')
return series.map(table)
把 1 与 2 合并为"浅睡"是 AASM 体系下 N1 与 N2 的常规合并方式;把第三期作为"深睡"则对应 AASM 的 N3。做跨数据集比较时,先确认对方用的是哪一套口径。
5.6 五个坑
| 坑 | 表现 | 规避方式 |
|---|---|---|
记录名漏写 .edf |
读注释时提示文件不存在 | 全程用 sbj01.edf 作为记录名 |
把 symbol 当分期 |
所有事件都是 N,标签只有一类 |
读 aux_note |
| 直接用原始整数 | 各频点量程差一倍以上,模型学到的是量程 | 用 p_signal,或逐通道归一 |
| 假定各记录等长 | 数据记录数逐条不同 | 每次从 EDF 头读数据记录数 |
| 按窗随机切分 | 相邻窗强相关,指标虚高 | 按受试者划分,报告受试者级指标 |
§6 与库内条目的关系
6.1 关系图谱
| 相关条目 | 共享的标签 | 与本库的分工 |
|---|---|---|
| CPS 综合睡眠库 | 生理信号 / 睡眠 | 接触式多路睡眠数据,用来做"有电极时的上限" |
| PMD 压力图库 | 生理信号 / 睡眠 | 床垫式压力分布,非接触光谱上离本库最近 |
| PTT-PPG 多传感器库 | 生理信号 / 多通道 | 接触式多传感器,传感器融合方法论可迁移 |
| 智能手表心电库 | 生理信号 / 可穿戴 | 消费级接触式设备的精度评估思路可对照 |
| 通气研究心肺联合库 | 生理信号 / 呼吸 | 呼吸信号处理的参考通道设计可借鉴 |
| NSTDB 噪声压力测试库 | 生理信号 / 噪声 | 噪声叠加与鲁棒性评估的通用做法 |
| fNIRS 与 EEG 运动伪差对照库 | 生理信号 / 伪差 | 体动伪差的建模与剔除思路可直接迁移 |
| OpenOximetry 脉搏血氧库 | 生理信号 / 血氧 | 血氧相关的睡眠呼吸事件分析不在这边,但可作对照 |
6.2 检索路径
在 PhysioNet 上,本库挂了三个主题标签:bioradar、sleep、polysomnography。这三个标签的组合本身就是定位它的最短路径——只按 sleep 检索会被海量多导睡眠图与腕动数据淹没,加上 bioradar 之后几乎只剩它。
如果需要更多非接触睡眠数据,检索策略应当是"按模态找团队"而不是"按主题翻页":能做出这类数据的团队往往同时发表了雷达信号处理与睡眠医学两个方向的论文,从贡献者姓名出发检索通常比从标签出发更高效。
6.3 分工判据
| 你要回答的问题 | 该用哪个 | 不该用哪个 |
|---|---|---|
| 不贴电极能分期到什么程度 | 本库 | 多导睡眠图库,它没有非接触信号 |
| 贴上电极的金标准长什么样 | 多导睡眠图库 | 本库,它没有原始多导睡眠图 |
| 床垫或枕下传感器能做到什么程度 | 压力图类数据集 | 本库,模态不同,结论不能平移 |
| 体动伪差该怎么建模 | 运动伪差对照库 | 本库,它没有参考通道 |
| 呼吸事件能不能被非接触设备抓到 | 目前本库不可用 | 需要带呼吸事件标注的睡眠库 |
最后一行值得强调:本库在官方说明里明确排除了睡眠呼吸障碍受试者,这是设计上的取舍(排除混杂),但也意味着它无法支撑当前非接触监测最热门的方向之一——睡眠呼吸暂停筛查。有这个需求的人必须另找数据,不要试图在本库上"顺手"做这件事。
§7 质量评估与局限性
7.0 前置校正:先问标签是哪一层
评估一个睡眠分期数据集,第一件事不是看信号质量,而是问标签的来源与层级。本库的标签链条是:多导睡眠图采集 → 认证医师按 AASM 规则逐窗判读 → 写入 WFDB 注释。链条上每一层都引入各自的误差,但只有第一层的误差是可讨论的(多导睡眠图本身对"真实睡眠"的效度问题),后两层的误差在本库里无法检验,因为没有提供原始波形与双人判读。
因此,凡是把本库标签当作"绝对真值"的做法,都要在论文里写明:这里的一致性指的是"与一位医师依据多导睡眠图的判读的一致性",而不是"与真实睡眠阶段的一致性"。
7.1 五维评分
| 维度 | 评价 | 依据 |
|---|---|---|
| 模态稀缺性 | 很高 | 公开的非接触雷达配同步多导睡眠图判读的数据极少 |
| 标签质量 | 高 | 认证医师依据多导睡眠图按 AASM 规则判读 |
| 规模 | 低 | 32 名受试者,一人一段 |
| 人群代表性 | 中低 | 单一中心,已排除睡眠呼吸障碍与运动障碍,含 4 名失眠者 |
| 可重判读性 | 低 | 无原始多导睡眠图波形,无判读人间一致性数据 |
这个评分形状很鲜明:一头极高,一头极低。它决定了本库的正确用法是"小规模的高价值验证",而不是"大规模训练"。
7.2 标注的两层结构
| 层 | 内容 | 可否检验 |
|---|---|---|
| 信号层 | 16 条雷达通道,50 Hz,物理量纲微伏 | 可,EDF 头与数据可直接读 |
| 判读层 | 每 30 秒一个 W/1/2/3/R 标签 | 不可,无原始多导睡眠图波形 |
把两层分开看有个实际好处:信号层的任何结论(通道布局、量程差异、窗长闭合)都可以自己复核;判读层的任何结论(某类分期是否偏少、边界窗是否判错)都无法在本库内部检验,只能作为给定的监督信号使用。
7.3 可枚举的偏差
| 偏差类型 | 具体表现 | 影响 |
|---|---|---|
| 选择偏差 | 受试者均无睡眠呼吸障碍与睡眠相关运动障碍 | 呼吸事件相关任务不可用,且人群比门诊更"干净" |
| 疾病偏差 | 其中 4 人被诊断失眠 | 睡眠结构可能偏离无睡眠主诉人群 |
| 体型偏差 | 特征表含体重指数列,取值跨度明显 | 胸壁位移幅度随体型变化,可能影响跨人泛化 |
| 中心偏差 | 单一实验室、单一雷达、单一城市 | 无法评估设备与环境的泛化 |
| 时序偏差 | 起始日期与时间统一为默认值 | 时钟相关分析完全不可用 |
| 窗口偏差 | 只有 30 秒粒度的标签 | 事件级与微结构分析不可用 |
| 判读偏差 | 单人判读,未报告一致性 | 标签的噪声上界未知 |
这些偏差不是缺陷清单,而是适用范围的边界。做非接触分期算法的人在论文里列出前四项,通常就足以说明结论的外推限制。
7.4 外部验证
论文摘要报告了三项指标:清醒—快速眼动—浅睡—深睡四分类的 Cohen’s kappa 为 0.49,清醒—快速眼动—非快速眼动三分类为 0.55,睡眠与清醒二分类为 0.57。这三组数字是本库目前唯一公开的、在同一批数据上做出的性能参考。
读这三个数字要注意两点。第一,它们来自原论文摘要,只说明"原作者的实现在这个数据上达到多少",不构成方法的上限或本库的上限。第二,kappa 值随类别数下降而上升,这是正常现象:把分期从四类压到二类,任务变简单,一致性自然提高。比较不同论文的结果时必须对齐类别口径。
三项指标的绝对值都不算高,这本身就是重要信息:它说明仅凭体表动力学做细粒度分期,在 2016 年的技术条件下距离临床可用还有明显距离。后来者若报告了显著更高的数字,需要特别说明数据来源与划分方式是否与本库一致。
7.5 为什么它至今仍被使用
一个 32 人的小库、只发布过一个版本、八年没有更新,仍然值得单独写一篇介绍,原因有三条。第一,它回答的是一个至今没有被更好回答的问题,而回答这个问题的门槛不随算法进步而降低——硬件与临床的配合始终稀缺。第二,它可以被第三方复现,这在非接触睡眠研究里是稀缺属性。第三,它的标签口径与多导睡眠图一致,因此可以作为不同非接触方案之间的共同标尺:各家不必共享自己的私有数据,只要都在本库上报告结果,就能横向比较。
§8 生态位与历史
8.1 沿革
本库的沿革很短:2016 年论文先发表,2018 年数据后公开,此后只有一个版本,没有修订记录。这种"一次成型"的形态与 PhysioNet 上那些经过多次修订、不断扩充的老牌心电库形成对比。
理解这个形态不需要推测团队的计划,看数据本身的性质就够了。扩充这类数据意味着再次占用睡眠实验室与认证医师的时间,成本结构与扩充一个心电库完全不同——后者可以从既有临床记录里回溯收集,前者必须前瞻性地一夜一夜做。因此,本库更可能长期维持 32 段这个规模。对使用者来说,这意味着"等它变大"不是一个可行的策略。
8.2 与挑战赛
本库没有对应的 PhysioNet/CinC 挑战赛,也不是任何挑战赛的产物或组成部分。它与挑战赛体系的关系是零:没有官方划分的训练集与测试集,没有排行榜,没有统一的评价指标。
这对使用者有实际影响。一方面,你无法把自己的结果提交到一个官方榜单上去比较,只能与论文摘要里的三个数字对照;另一方面,也正因为没有官方划分,每个人都可以自行选择划分方式——这既是自由也是责任,报告结果时必须把划分方式写清楚,否则数字不可比。
8.3 生态位
| 层次 | 内容 |
|---|---|
| 模态层 | 非接触生物雷达,8 频点正交接收 |
| 标签层 | 多导睡眠图判读的五类分期,30 秒粒度 |
| 任务层 | 非接触睡眠分期、睡眠与清醒判别、频点选择、相位与幅度路线对照 |
| 排除项 | 呼吸事件、血氧、心率的准确性验证、昼夜节律、跨设备泛化 |
把这个生态位写出来是有用的:很多人在找"睡眠数据集"时落到本库,是被 sleep 标签吸引的,但真正需要多导睡眠图波形或呼吸事件标注的人在这里会空手而归。先看清生态位再下载,可以省下处理 1.5 GB 数据的时间。
8.4 谁在用
| 使用者 | 用法 | 注意事项 |
|---|---|---|
| 雷达与信号处理研究者 | 多频点正交回波的算法验证 | 需要先逐通道归到物理量 |
| 睡眠医学研究者 | 评估非接触方案相对金标准的差距 | 明确标签是单人判读 |
| 可穿戴与非接触设备工程师 | 做可行性论证与上限估计 | 不要外推到居家环境 |
| 教学方法使用者 | 演示"同一夜、两种视角" | 用 §5 的流程导出片段 |
| 复现性研究者 | 重跑论文报告的三项指标 | 对齐类别合并口径 |
§9 使用指引
9.1 三种角色的路径
| 角色 | 最短路径 | 要避开的岔路 |
|---|---|---|
| 算法工程师 | 下载 → 按 §5.4 转窗表 → 留一受试者交叉验证 → 按类别拆开报指标 | 不要用 symbol 建标签;不要按窗随机切分 |
| 雷达工程师 | 下载 → 取正交对算相位 → 比较各频点贡献 → 做频点消融 | 不要直接用原始整数比较频点 |
| 临床或睡眠医学背景 | 读特征表 → 确认人群筛选口径 → 用特征表做分层描述 | 不要把无睡眠呼吸障碍当成"健康人群" |
9.2 最短流程
- 用
wget -r -N -c -np把 1.5 GB 拉全,或只拉三四个受试者先试流程。 - 读
subjects.xlsx,确认受试者构成与筛选口径是否符合你的研究问题。 - 用 §5.3 的代码读一条记录,先确认
fs、n_sig、注释条数与辅助字段取值。 - 用 §5.4 把信号与标签对齐成窗表,确认窗长闭合。
- 按受试者划分训练与测试,跑留一受试者交叉验证。
- 报告三类口径下的指标,并与论文摘要的三个数字对照。
前三步通常在半小时内能走完,真正的成本在第 5 步的整夜数据处理上。
9.3 引用方式
官方要求引用原始论文,并附上 PhysioNet 平台的标准引用。
@inproceedings{tataraidze2016bioradiolocation,
title = {Bioradiolocation-based sleep stage classification},
author = {Tataraidze, A. and Korostovtseva, L. and Anishchenko, L.
and Bochkarev, M. and Sviryaev, Y. and Ivashov, S.},
booktitle = {Proceedings of the 38th Annual International Conference
of the IEEE Engineering in Medicine and Biology Society},
pages = {2839--2842},
year = {2016},
doi = {10.1109/EMBC.2016.7591321}
}
数据集本身的标识建议同时给出版本号与 DOI:Sleep Bioradiolocation Database v1.0.0,DOI 10.13026/C29H4K。ODC-BY 1.0 要求署名,具体条款以许可全文为准。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与官方文件目录 |
| 文件核验 | RECORDS、SHA256SUMS.txt、sbj01.edf 的 EDF 头部、sbj01.edf.atr 的注释内容、subjects.xlsx 的表头与首行经直接读取确认 |
| 不一致说明 | 注释的标准符号位恒为 N,分期真值在辅助字段;官方页面未明写判读窗长度,30 秒系由注释间隔 1500 采样点与 50 Hz 采样率推得 |
| 论文信息 | 仅依据 PubMed 摘要与官方引用段,未读论文全文,方法细节未核 |
| 未核验内容 | 各频点的中心频率与步进间隔;雷达架设位置与距离;判读人间一致性;受试者用药与合并疾病;受试者年龄范围与性别构成;各记录时长的完整列表 |
| 图像 | 无配图;封面为生成式提示词,不含真实患者影像 |
| 免责 | 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 的署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它有同步的多导睡眠图波形」 | 只有雷达信号与分期结论 | 官方页面写明记录由注释文件与雷达信号的 EDF 组成 |
| 「注释的符号位就是睡眠分期」 | 符号位恒为 N,真值在辅助字段 |
直接读取 sbj01.edf.atr 得到 |
| 「它是 250 Hz 或更高采样率」 | 50 Hz | 官方雷达参数与 EDF 头每记录采样点数均为 50 |
| 「16 条通道是 16 个身体部位」 | 8 个频点的同相与正交分量 | 官方页面对 S1–S16 的说明 |
| 「可以做睡眠呼吸暂停检测」 | 全部受试者无睡眠呼吸障碍,无事件标注 | 官方采集说明 |
| 「32 名受试者是健康志愿者」 | 已排除两类睡眠障碍,其中 4 人诊断失眠 | 官方采集说明与特征表失眠列 |
| 「各条记录一样长」 | 数据记录数逐条不同 | sbj01 为 30270、sbj02 为 43110、sbj09 为 22560 |
| 「可以分析入睡时刻与昼夜节律」 | 起始日期与时间统一为默认值 | EDF 头起始字段 |
| 「它是某个挑战赛的数据集」 | 与挑战赛体系无关,无官方划分 | 官方页面无挑战赛关联信息 |
| 「三分期说明它用的是 R&K 规则」 | 无第四期正是 AASM 合并 N3 的结果 | 官方说明按 AASM 规则判读 |
| 「全库只有一类标签」 | 是读取方式错了,真值在辅助字段 | 直接读取 sbj01.edf.atr 得到五类字符 |
FAQ
Q1:SLEEPBRL 里到底有没有多导睡眠图的原始波形?
没有。每条记录只有一个 EDF 文件和一个注释文件,EDF 里是雷达自己的 16 条信号,注释里是医师看多导睡眠图给出的分期结论。脑电、眼电、肌电、呼吸带、血氧的原始波形一概没有提供。这个设计决定了它的用途边界:可以训练与评估"从雷达信号到分期"的映射,但无法重新判读、无法评估判读人间一致性、也无法改用另一套分期规则重新标注。需要原始多导睡眠图波形的人,应该去找专门的多导睡眠图公开库,而不是在这里找。
Q2:为什么我用 wfdb 读出来的分期标签全是 N?
因为分期码不在标准符号位。WFDB 的注释格式里,标准类型码是一张固定的表,1、2、3 这类字符不是合法的标准类型,发布方于是把它们连同 W、R 一起写进了自由文本的辅助字段,标准类型位统一填了默认的 N。正确的读法是取 ann.aux_note,那里才是 W、1、2、3、R 五类真值。这个坑的危险之处在于它不会报错:按符号位统计的程序会正常跑完,输出一个"全部是同一类"的结果,如果没检查类别数就往下走,后面所有指标都是错的。
Q3:32 名受试者够不够训练一个深度学习模型?
够跑验证,不够做产品化训练。32 人一人一段,规模上连粗调都勉强,深度学习模型很容易在体型、睡姿、呼吸习惯这些个体特征上过拟合。它真正合适的用法是留一受试者交叉验证:32 折,每折测试一个从未见过的人,这个划分在数据结构上是干净的,因为没有同人多夜的泄漏风险。报告结果时建议同时给出五类、四类(与原论文口径一致)和二类三个口径下的指标,并把受试者级别的方差写清楚——32 人的置信区间很宽,一个点估计说明不了太多。
Q4:能不能用它研究睡眠呼吸暂停的非接触筛查?
不能,这是官方在设计阶段就排除掉的方向。采集说明里写得很明确:全部受试者均无睡眠呼吸障碍,也无睡眠相关运动障碍。这既是人群筛选的结果,也意味着数据里不存在呼吸事件样本,更没有事件标注。雷达信号里确实含有呼吸成分,但没有独立的参考呼吸通道,任何"呼吸率准确率"之类的数字都无从验证。做这个方向需要另找带呼吸事件标注且含非接触或接触式呼吸通道的数据集,本库在这里是死路。
Q5:它的判读窗是多长?官方没写,我该按多少秒切?
按 30 秒切,依据来自注释文件本身而不是官方页面:相邻注释事件的采样点间隔恒为 1500,采样率为 50 Hz,两者相除正好 30 秒;再乘注释条数得到的总时长与 EDF 头声明的数据记录数严格闭合,说明整夜被完整覆盖、无缺口无重叠。官方页面只说了分期按美国睡眠医学会规则判读,没有明写窗口长度,因此这个 30 秒属于从官方文件推得的结构性事实,而非官方页面的直接声明——论文里如果要引用,建议注明依据是注释间隔与采样率。
术语表
| 术语 | 解释 |
|---|---|
| 多导睡眠图 | 同步记录脑电、眼电、肌电、呼吸、血氧等信号的睡眠检查,分期的金标准 |
| 睡眠分期 | 按固定判读窗把整夜划分为清醒与各睡眠期的判读结果 |
| 美国睡眠医学会 | 维护睡眠分期与呼吸事件判读规则的学术组织,缩写 AASM |
| 生物雷达 | 向人体发射低功率微波并接收回波以测体表位移的设备 |
| 连续波 | 发射信号在时间上连续的雷达体制,便于测相位与位移 |
| 正交接收 | 同时接收同相与正交两路,从而完整解出回波相位 |
| 步进频率 | 在若干离散频点上依次工作,用频率多样性换取信息量 |
| 同相分量 | 与参考信号同相的回波分量,记为 I |
| 正交分量 | 与参考信号相差九十度的回波分量,记为 Q |
| 相位展开 | 把折叠在区间内的相位恢复成连续位移轨迹的处理 |
| EDF | 欧洲数据格式,生理信号存储的通用文件格式 |
| WFDB | PhysioNet 的波形数据库格式及其工具集 |
| 辅助字段 | WFDB 注释里存放自由文本的字段,本库的分期真值在此 |
| 判读窗 | 分期判读的最小时间单位,本库为 30 秒 |
| 慢波睡眠 | 深睡阶段,AASM 体系下对应 N3 |
| 快速眼动期 | 眼球快速运动、肌电张力降低的睡眠期,记为 R |
| 呼吸暂停低通气指数 | 每小时呼吸事件次数,缩写 AHI,用于评估睡眠呼吸障碍 |
| 睡眠效率 | 实际睡眠时间占卧床时间的比例 |
| 肢体运动指数 | 每小时肢体运动事件次数 |
| Cohen’s kappa | 校正随机一致后的分类一致性指标 |
| 留一受试者交叉验证 | 每次留一个受试者做测试、其余做训练的评估方式 |
| ODC-BY | 开放数据共享署名许可 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 记录数 | 32 | 官方页面;RECORDS 逐行 | 官方页面 |
| 受试者数 | 32 | 官方页面;subjects.xlsx 行数 | 官方页面 |
| 单受试者记录数 | 1 | RECORDS 与特征表一一对应 | 官方文件 |
| 通道数 | 16 | 官方页面;EDF 头信号条数字段 | 官方页面 |
| 频点数 | 8 | 官方页面雷达参数 | 官方页面 |
| 频率范围 | 3.6–4.0 GHz | 官方页面雷达参数 | 官方页面 |
| 采样率 | 50 Hz | 官方页面;EDF 头每记录采样点数 | 官方页面 |
| 存储位宽 | 16 位带符号整数 | EDF 头数字量极值 | 官方文件 |
| 物理量纲 | 微伏 | EDF 头量纲字段 | 官方文件 |
| 数据记录时长 | 1.000000 秒 | EDF 头 | 官方文件 |
| sbj01 数据记录数 | 30270 | sbj01.edf 头部 | 官方文件 |
| sbj02 数据记录数 | 43110 | sbj02.edf 头部 | 官方文件 |
| sbj09 数据记录数 | 22560 | sbj09.edf 头部 | 官方文件 |
| sbj32 数据记录数 | 34500 | sbj32.edf 头部 | 官方文件 |
| 判读窗长度 | 30 秒(1500 采样点) | 注释间隔除以采样率 | 官方文件推得 |
| sbj01 注释条数 | 1009 | sbj01.edf.atr | 官方文件 |
| 分期类别数 | 5(W、1、2、3、R) | 官方页面;注释辅助字段 | 官方页面 |
| 最大发射功率 | 3 毫瓦 | 官方页面雷达参数 | 官方页面 |
| 能量流密度 | 1.36 微瓦每平方厘米 | 官方页面雷达参数 | 官方页面 |
| 失眠受试者数 | 4 | 官方采集说明 | 官方页面 |
| 全量未压缩体积 | 1.5 GB | 官方页面文件段 | 官方页面 |
| 校验和文件行数 | 66 | SHA256SUMS.txt | 官方文件 |
| 许可 | ODC-BY 1.0 | 官方页面许可段 | 官方页面 |
| 发布日期 | 2018-02-07 | 官方页面版本列表 | 官方页面 |
| 版本号 | 1.0.0,仅一版 | 官方页面版本列表 | 官方页面 |
| DOI | 10.13026/C29H4K | 官方页面发现栏 | 官方页面 |
| 论文四分类 kappa | 0.49 | 论文摘要 | 论文摘要 |
| 论文三分类 kappa | 0.55 | 论文摘要 | 论文摘要 |
| 论文二分类 kappa | 0.57 | 论文摘要 | 论文摘要 |
附录 B:数字的来源分层
第一层:官方页面与官方文件。 记录数、受试者数、通道数、频点数、频率范围、采样率、发射功率、判读规则、分期类别、许可、版本与日期,来自项目主页的采集说明与文件段;数据记录时长、各记录的数据记录数、物理量纲与极值、数字量范围、注释间隔与分期真值、特征表的列名与取值,来自直接读取 EDF 头部、注释文件与 XLSX 表。
第二层:论文摘要。 三类口径下的 Cohen’s kappa 值、受试者无睡眠呼吸障碍的描述、方法的总体路线,来自 PubMed 摘要与官方引用段。摘要只能支撑"原作者报告了什么",不能支撑"这个方法能达到什么水平"。
第三层:未核实。 各频点的中心频率与步进间隔、雷达的架设位置与距离、判读人间一致性、受试者的用药与合并疾病、受试者年龄范围与性别构成、全部三十二条记录的时长列表。这些需要读论文全文或联系贡献者才能确认,本文一律不做推断。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | Sleep Bioradiolocation Database v1.0.0 | https://physionet.org/content/sleepbrl/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | 该库的 PhysioNet 文件目录 | https://physionet.org/files/sleepbrl/1.0.0/ | EDF 头部、注释文件、RECORDS、校验和、特征表 |
| 3 | Tataraidze 等,Bioradiolocation-based sleep stage classification,EMBC 2016,2839–2842 | https://doi.org/10.1109/EMBC.2016.7591321 | 官方指定的引用文献与三项 kappa 指标 |
| 4 | 同上,PubMed 摘要 | https://pubmed.ncbi.nlm.nih.gov/28268908/ | 摘要级方法描述 |
| 5 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 6 | ODC-BY 1.0 许可全文 | https://opendatacommons.org/licenses/by/index.html | 许可条款 |
附录 D:任务代码
任务一:留一受试者交叉验证的骨架
import wfdb
import numpy as np
SUBJ = [f'sbj{i:02d}' for i in range(1, 33)]
WIN = 1500
RAW5 = {'W': 0, '1': 1, '2': 2, '3': 3, 'R': 4}
def windows(name, pn_dir='sleepbrl'):
#-- 一次性读入整夜信号与分期标签
rec = wfdb.rdrecord(name + '.edf', pn_dir=pn_dir)
ann = wfdb.rdann(name + '.edf', 'atr', pn_dir=pn_dir)
x, y = [], []
for s, st in zip(ann.sample, ann.aux_note):
seg = rec.p_signal[s:s + WIN, :]
if seg.shape[0] != WIN:
continue
x.append(seg.T) #-- (16, 1500)
y.append(RAW5[st])
return np.array(x, dtype='float32'), np.array(y)
def loocv(fold):
#-- fold 为受试者下标,其余 31 人训练,该人测试
tr_x, tr_y, te_x, te_y = [], [], [], []
for k, s in enumerate(SUBJ):
x, y = windows(s)
if k == fold:
te_x.append(x); te_y.append(y)
else:
tr_x.append(x); tr_y.append(y)
return (np.concatenate(tr_x), np.concatenate(tr_y),
np.concatenate(te_x), np.concatenate(te_y))
tr_x, tr_y, te_x, te_y = loocv(0)
print(tr_x.shape, te_x.shape, np.bincount(te_y))
任务二:正交对的相位提取
import wfdb
import numpy as np
rec = wfdb.rdrecord('sbj01.edf', pn_dir='sleepbrl')
sig = rec.p_signal
#-- S1 为同相、S2 为正交,构成第一频点的正交对
pairs = [(f'S{i}', f'S{i+1}') for i in range(1, 16, 2)]
for i_name, q_name in pairs:
i_ = rec.sig_name.index(i_name)
q_ = rec.sig_name.index(q_name)
i_ch, q_ch = sig[:, i_], sig[:, q_]
amp = np.hypot(i_ch, q_ch) #-- 幅度包络
ph = np.unwrap(np.arctan2(q_ch, i_ch)) #-- 展开后的相位
print(f'{i_name}/{q_name} 幅度均值 {amp.mean():9.2f} 相位行程 {np.ptp(ph):9.2f}')
第二段代码不做任何推断,只把正交对能给出的两个量算出来:幅度包络与展开相位。它是相位路线与幅度路线对照实验的起点——拿这两个序列分别做特征提取,比较分期结果,才能回答相位信息到底贡献了多少。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 32 名受试者,一人一段整夜,16 通道,50 Hz | 这四个数字定义了一切用法与限制 |
| 2 | 没有多导睡眠图原始波形,只有分期结论 | 决定了它只能做标签消费者,不能做判读研究者 |
| 3 | 分期真值在注释的辅助字段,符号位恒为 N |
不检查这一条,后面所有指标都是错的 |
| 4 | 按受试者划分,30 秒一个判读窗 | 受试者间独立,窗间强相关 |
| 5 | 人群已排除睡眠呼吸障碍与运动障碍,含 4 名失眠者 | 呼吸事件方向在此无解 |
编辑说明
本文的核验时间为 2026 年 10 月 29 日。核对方式为直接访问 PhysioNet 项目页与文件目录,并实际读取了 RECORDS、SHA256SUMS.txt、sbj01.edf 的 EDF 头部、sbj01.edf.atr 的注释内容、subjects.xlsx 的表头与首行,以及 sbj02、sbj09、sbj32 三份 EDF 的头部长度字段。判读窗长度 30 秒系由注释间隔 1500 采样点与官方声明的 50 Hz 采样率推得,官方页面未直接写明,已在 §2.5、§10 与 FAQ 第 5 问中分别标注其推导依据。论文侧只核对了 PubMed 摘要与官方引用段,未读全文,三项 kappa 值均标注为摘要来源。未覆盖的内容包括:各频点的中心频率与步进间隔、雷达架设位置与距离、判读人间一致性、受试者用药与合并疾病、受试者年龄范围与性别构成、以及全部三十二条记录的时长列表。这些需要联系贡献者或获取论文全文,本文按要求只写规模、结构、边界三类数字。全名 Sleep Bioradiolocation Database 在中文语境下可译作 SLEEPBRL 睡眠生物雷达定位库,本文统一以 SLEEPBRL 简称之。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cps-dataset-sleep — 共享标签:生理信号 / 睡眠医学
- edb — 共享标签:生理信号 / 波形
- elder-icu-db — 共享标签:生理信号 / 多中心数据
- pmd — 共享标签:生理信号 / 睡眠医学 / 压力传感
- pulse-transit-time-ppg — 共享标签:生理信号 / 多通道 / 传感器融合
- motion-artifact — 共享标签:生理信号 / 伪差对照
- respiratory-dataset — 共享标签:生理信号 / 呼吸
- respiratory-heartrate-dataset — 共享标签:生理信号 / 呼吸 / 心率
- ecg-capable-smartwatches — 共享标签:生理信号 / 可穿戴设备
- electrodermal-activity — 共享标签:生理信号 / 健康志愿者
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

