三天,一只传感器 — LTMM 老年运动监测库

71 人 / 连续 3 天 / 腰部六通道惯性记录

来源 https://physionet.org/content/ltmm/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 15
三天,一只传感器 — LTMM 老年运动监测库

信息速览

数据集名称三天,一只传感器 — LTMM 老年运动监测库
数据类型时序信号,元数据,人工标注,补充材料
规模71 位受试者(40 位非跌倒者 + 31 位跌倒者),每人一条三天记录
接入方式https://physionet.org/content/ltmm/1.0.0/
AI 就绪度

跌倒风险这件事,临床上一直用两种办法估:让老人在走廊里走一段、掐个秒表,或者问他过去一年摔过几次。前者只看到十分钟内状态最好的一次行走,后者依赖记忆与定义。两种办法都不看真实的暴露量——一个人一天究竟走了多少步、步态的节律稳不稳、什么时候活动、什么时候静止。

LTMM 把这段空白补上。它让 71 位社区居住的老人把一只惯性传感器别在腰后,连续戴三天,洗澡游泳时取下,取下和戴回的时点自己写进日记。同一批人还在实验室做了一整套跌倒风险量表与一分钟步行测试。三天里的一举一动,配上一份可以对照的临床底稿,这就是它全部的内容。

名字里的 long term 容易被误读。它指的是时间跨度,不是模态:这里没有一秒心电,全部是腰部六个通道的加速度与角速度。把它和 ltdb、ltstdb 放在一起看会更清楚——三者共享的只有 PhysioNet 的命名习惯,研究对象一个在心脏,一个在步态。一屏速览见下表。

维度 内容
全名 Long Term Movement Monitoring Database
常用缩写 LTMM
建设机构 特拉维夫大学 Sackler 医学院与 Sagol 神经科学学院
提交者 Jeffrey M. Hausdorff
上线时间 2016 年 6 月 20 日,版本 1.0.0
DOI 10.13026/C2S59C
受试者 71 位社区居住老人,65–87 岁
分组 40 位非跌倒者(CO)、31 位跌倒者(FL)
主记录 每人一条连续三天记录,共 71 条
附记录 LabWalks 子目录 73 条实验室步行记录
佩戴位置 腰后
通道 三轴加速度 + 三轴角速度,共 6 路
采样率与量化 100 Hz、16 位
文件格式 WFDB:.hea + .dat;临床与日记为 .xlsx
单条体积 约 309 MB(三天满程)
整库体积 未压缩 20.8 GB
许可 ODC-BY 1.0,无需注册
引用论文 Weiss 等,Neurorehabil Neural Repair,2013

§1 它要解决的具体麻烦

1.1 一次十分钟的测试,测不出三天里的衰落

老年医学评估跌倒风险,标准做法是量表加短距离步行。起立行走计时让受试者从椅子上站起来走三米再回来,Berg 平衡量表让人做十几个静态与动态姿势,动态步态指数看人在变速与转头时还能不能稳住。这些工具经过几十年验证,重复性好,二十分钟能做完。

问题在于它们测的是「今天、此刻、在有人在旁边看着的走廊里」的表现。一个人在诊室里的步态,和他早上起床去厨房、下午下楼买菜、晚上在客厅里踱步的步态,不是同一件事。三天的连续记录把观察窗口从十分钟拉到一个完整的活动周期,暴露量、疲劳累积、昼夜节律这些在短测试里看不见的变量,第一次变得可计算。

更深一层的问题是可重复性。量表分数在同一天内重复施测,误差相对可控;但把它当作一整个月的状态代表,误差就没人估过。一个人这周膝盖疼、下周睡眠差,量表只在他状态好的那天记录了一个数字。连续记录不能消除这种波动,但能把它显出来:同样是 75 岁,有人三天里每天走八千步,有人一天走两千步、另外两天几乎不动,两者的量表分数可能一模一样。

1.2 三条常见的错误期待

第一条,把它当成心电长时程库。PhysioNet 上以 long term 开头的库大多和心电有关,ltdb 与 ltstdb 都是。LTMM 跟它们没有任何数据上的交集,名字接近纯属命名习惯。第一次打开头文件、看到 v-acceleration 而不是 ECG1 时,这个误解会自然消失。

第二条,把它当跌倒检测数据集。库名里有 fall risk,分组也按跌倒史划分,很容易让人以为里面有跌倒瞬间的标注。实际上三天记录期内没有任何事件标注,连「这一刻他摔了」的时点都没有。它测的是风险因素,不是事件。

第三条,把它当高精度步态实验室数据。100 Hz 的采样率对日常活动足够,对步态的精细相位划分不够;腰部单点佩戴能反映整体节律,测不到关节角度;没有光学动作捕捉,也没有足底压力。它的分辨率是「日常生活」这一级的,不是「生物力学」这一级的。

这三条期待有一个共同的根源:把库名里的 movement 读成了它想读的东西。做心电的人读到 long term,做事件检测的人读到 fall,做生物力学的人读到 gait。三类人各自把库名补全成自己领域的名词,然后在打开文件时失望。判断一个库适不适合,最省时间的办法是直接看头文件第一行与目录里有没有注释文件,三秒钟就能排除掉大半误会。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
自由生活条件下的活动量与步数 三天连续加速度,可自行切段计数 够,且是它最主要的用途
步态节律的稳定性指标 垂直轴功率谱的主频幅宽,论文即用此口径 够,需要自己实现
与临床量表的对照 29 列量表与人口学字段,逐人可连 够,是最省事的部分
跌倒风险的前瞻验证 论文报告了六个月随访,但数据表未含随访结局 不够,需向作者索取
跌倒事件检测 无事件标注、无时间戳 不够,换数据集
步态相位与关节角度 腰部单点、100 Hz 不够,需要多传感器或光学系统
穿戴依从性与佩戴时长建模 日记表逐日记录取下时点与原因 够,这类数据很少见
跨人群泛化 单一中心、71 人、全部 65 岁以上 不够,只能做域内结论

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

你的处境 它能帮你什么 下一步该做什么
你在做可穿戴步态算法,只有实验室数据,缺真实生活段 71 人×3 天的自由生活信号,含洗澡取下造成的自然断点 先用 §9.2 的流程读通一条,再批量提取特征
你要验证「三天指标优于十分钟测试」这类主张 同一批人身上同时有两种测量,变量天然配对 复现论文的垂直轴一致性指标,再换自己的特征
你想研究佩戴依从性,缺真实的摘戴记录 日记表按天记录取下时点与原因,含游泳洗澡这类场景 把日记的分数时点换算成秒,与信号缺口对齐
你在给老年队列做数字表型,需要公开底座 量表齐全,MMSE、MoCA、TUG、BBS 都在 注意分组是自报,别把 CO/FL 当金标准
你手上有一台新设备,想找公开数据做对照 100 Hz、六通道,与多数消费级 IMU 同档 先做轴向与单位的对齐,再谈精度
你要写综述,需要一个人口学清晰的实例 单中心、纳排标准明确、时间线干净 引用时写清 2016 年版与 71 人

1.5 一句话判断

它不是用来训练跌倒预测模型的语料,而是用来回答「三天和十分钟究竟差在哪」的一组对照实验:同一批人、同一套量表、两种观察窗口。

1.6 不适合谁:四条边界

不适合把它当训练集。 71 人、单一中心、二分类标签,任何一个带隐层的模型都能在几百轮内把训练集背下来。它的规模适合做特征验证与假设检验,不适合做端到端学习。

不适合做跌倒检测。 没有事件标注,没有时间戳,也没有跌倒前后的窗口。哪怕只想做「近似跌倒」的检测,也拿不到真值。

不适合做临床诊断结论。 分组靠自报,量表是筛查工具,佩戴只有三天。任何从这份数据推出的「某人跌倒风险高」的判断,都不构成医学意见。

不适合代表一般老年人群。 纳排条件明确排除了卧床、认知障碍(MMSE 低于 24)与既往步态平衡障碍诊断者。能自己出门、能听懂指令、能连续戴三天设备的老人,本身就是人群中的一个子集。

§2 数据构成与规格

2.1 一个库由四种东西组成

主目录下是 71 组同名文件,每组两个:.hea 是纯文本头文件,.dat 是二进制信号本体。这是 WFDB 的经典两件套,与心电库的差别只在于少了 .atr 注释文件——本库没有逐事件标注,所以也没有注释文件。

LabWalks 子目录里是 73 组同样的两件套,命名规则是小写的受试者编号加 _base 后缀。这些是实验室里那段自选速度步行的记录,长度只有几十秒,用来把「实验室表现」和「三天表现」对齐。

根目录另有两个表格。ClinicalDemogData_COFL.xlsx 装临床与人口学,三个工作表:非跌倒组、跌倒组、以及一张指标释义表。ReportHome75h.xlsx 装佩戴日记,一位受试者一行,横向铺开三天,每天四列。最后一个 RECORDS 是纯文本清单,71 行主记录加 73 行 LabWalks 路径。

1.0.0/
├── RECORDS                      #-- 144 行清单:71 条主记录 + 73 条 LabWalks
├── ClinicalDemogData_COFL.xlsx  #-- 29 列量表,两个分组工作表
├── ReportHome75h.xlsx           #-- 佩戴日记,逐日四列
├── CO001.hea / CO001.dat        #-- 非跌倒者,40 组
├── FL001.hea / FL001.dat        #-- 跌倒者,31 组
└── LabWalks/
    ├── co001_base.hea / .dat    #-- 实验室步行,73 组
    └── fl001_base.hea / .dat

2.2 字段与记录的完整字典

位置 字段 含义 取值示例
文件名 分组前缀 CO 为非跌倒者,FL 为跌倒者 CO / FL
文件名 受试者编号 三位数字,组内独立编号 001
.hea 第 1 行 记录名 与文件名一致 CO001
.hea 第 1 行 信号条数 固定 6 6
.hea 第 1 行 采样率 每秒采样点数 100
.hea 第 1 行 采样点总数 每条信号的采样点数 17141698
.hea 信号行 存储格式 16 表示 16 位整型 16
.hea 信号行 增益与基线 每单位物理量的整数刻度,括号内为基线 5594.5611(120)/g
.hea 信号行 单位 加速度为 g,角速度为度每秒 /g /degrees/s
.hea 信号行 初始值 第一个采样点的整数 10729
.hea 信号行 校验和 全段累加和,可验完整性 0
.hea 信号行 通道名 三轴加速度与三轴角速度 v-acceleration
.hea 注释行 年龄 与 # 开头的注释行同排 #Age:75.17
.hea 注释行 性别 F 或 M #Sex:F
临床表 A 列 受试者编号 带连字符,与文件名对应 CO-001
临床表 E 列 性别编码 1 为女,0 为男 1
临床表 F 列 年龄 带小数的精确年龄 75.167
临床表 G/H 列 跌倒次数 过去一年与过去六个月的自报次数 1 / 0
临床表 K–M 列 量表得分 平衡信心、SF-36、活动量表 88
临床表 N–P 列 认知筛查 MMSE、MoCA、额叶评估 29
临床表 S–V 列 体能测试 起立行走、四格步进、Berg、动态步态指数 8
日记表 佩戴时点 以一天的小数表示,需乘 86400 换秒 0.56319
日记表 摘戴事件 文字描述,常写原因 swimming and shower
日记表 设备序列号 列名写作 hybrid serial 2088

2.3 一条记录的完整解剖

取 CO001,头文件八行,前六行是信号声明,后两行是人口学注释:

CO001 6 100 17141698
CO001.dat 16 5594.5611(120)/g 0 0 -16 10729 0 v-acceleration
CO001.dat 16 5637.2473(136)/g 0 0 96 18803 0 ml-acceleration
CO001.dat 16 5517.1923(192)/g 0 0 -5603 -28221 0 ap-acceleration
CO001.dat 16 145.8539(-1152)/degrees/s 0 0 -1124 3453 0 yaw-velocity
CO001.dat 16 141.7616(-1261)/degrees/s 0 0 -883 -9724 0 pitch-velocity
CO001.dat 16 141.5523(633)/degrees/s 0 0 634 -26911 0 roll-velocity
#Age:75.17
#Sex:F

首行的四个数是记录名、信号条数、采样率、采样点总数。把末位数除以 100,再除以 3600,得到 47.6 小时——这位受试者的记录明显短于协议要求的三天。日记表里她的备注列写的正是 47h,两处对得上。

六行信号里,前三行是加速度,单位 g,增益在五千多到一万多之间不等;后三行是角速度,单位度每秒,增益只有一百四十上下。增益差异说明每台设备出厂时单独标定过,跨记录直接套用同一个换算系数会算错物理量。

读一条记录只需要三行:

import wfdb

#-- 远程直读,不落盘;pn_dir 指向 PhysioNet 上的库名
rec = wfdb.rdrecord('CO001', pn_dir='ltmm')
print(rec.fs, rec.sig_len, rec.sig_name)
#-- 100 17141698 ['v-acceleration', 'ml-acceleration', 'ap-acceleration',
#--               'yaw-velocity', 'pitch-velocity', 'roll-velocity']
print(rec.p_signal.shape, rec.units)

p_signal 已经按增益换算成物理量,加速度列的单位是 g,角速度列是度每秒。想拿原始整数要用 d_signal,两者相差数千倍,混用不会报错,只会得到一条平直的线。

2.4 三个记录族的规模与结构

记录族 条数 命名 时长 单条体积 通道
主记录·非跌倒组 40 CO + 三位编号 约 41–75 小时 约 177–309 MB 6
主记录·跌倒组 31 FL + 三位编号 约 24–75 小时 约 103–309 MB 6
实验室步行 73 小写编号 + _base 38–56 秒 约 1.5–6.7 MB 6

主记录的体积上限卡在 309.0 MB,这个数字对应约 74.8 小时的满程记录:六通道、100 Hz、16 位,每秒 1200 字节,一天 103.7 MB,三天满程正好落在这个量级。体积明显偏小的那些,是佩戴时长不足或中途终止——跌倒组的 FL009 只有 102.8 MB,折合约 24 小时,比协议短了两天。实验室步行的采样点数在三千八到五千六之间,换算成时长是 38 秒到 56 秒,而官方页面写的是「步行一分钟」。两个口径并存,官方未解释差额。

三个记录族之外,主目录里还有三个带后缀的重复文件(CO028_n、CO029_n、CO038_2),体积与对应主记录接近,RECORDS 清单未把它们列为独立记录。它们像是同一受试者的重测或补录,官方页面没有说明用途。

2.5 六个通道与它们的物理意义

通道名 物理量 单位 与步态的关系
v-acceleration 垂直方向加速度 g 每步的冲击与推进,节律性最强
ml-acceleration 内外侧加速度 g 重心左右摆动,与平衡相关
ap-acceleration 前后方向加速度 g 加减速,与步速相关
yaw-velocity 绕垂直轴角速度 度每秒 转身动作,与转向稳定性相关
pitch-velocity 绕横轴角速度 度每秒 躯干前后倾
roll-velocity 绕前后轴角速度 度每秒 躯干侧倾

六个通道给的是一个刚体在三维空间里的运动,而不是某一关节的角度。这决定了它的分析范式:能算整体活动量、节律性、姿态变化与转身,算不了步长、支撑相占比、关节屈伸。论文用的四个指标全部落在这个能力范围内——活动总时长、步数、主频幅值、主频宽度。

2.6 三个字段空缺与它们的后果

空缺 官方是否说明 后果
传感器型号与固件 未说明 无法判断量程与噪声底,跨设备对齐缺参照
佩戴朝向与轴向定义 只给通道名 换设备时须先做重力方向校准
跌倒事件时间戳 明确未提供 事件检测类任务无法在本库完成

这三个空缺不是疏漏,而是设计取向:库的目标是提供「自由生活运动量 + 临床底稿」,不是提供一台可复现的测量仪。要复现论文,六通道足够;要把结论搬到另一台设备上,缺的正是型号与朝向这两条。

2.7 LabWalks 与主记录不是一一对应

两个记录族的编号不是同一套。主记录有 CO001 到 CO044 之间的 40 个编号,实验室步行有 co001 到 fl039 之间的 73 个编号,两者交集并不完整。

情形 例子 对分析的意味
两族都有 CO001 与 co001_base 可做实验室与日常的配对
只有实验室步行 fl037、co033 该人没完成三天佩戴
只有主记录 CO012、CO037 该人没做实验室步行或文件缺失
同一人多条 CO028 与 CO028_n 疑似重测,用途未说明

配对之前先取交集,是最省事的做法。按「71 对 71」写循环,会在遇到缺号时抛异常;按「有主记录就一定有 LabWalks」做假设,会在 CO012 这类编号上静默丢数据。稳妥的做法是先把两边编号各自成集合,取交集后再进入分析,并把丢弃的编号记录下来。

这一节与 §4.3 的案例直接相关:CO001 恰好属于「两族都有」的情形,所以它能同时用来说明时长不一致与步行时长偏短这两个问题,是验证管线时最省事的一条记录。

§3 它是谁的三天:一间步态实验室的野外延伸

3.1 贡献者与机构

库由特拉维夫大学的 Jeffrey M. Hausdorff 提交,所属单位是 Sackler 医学院与 Sagol 神经科学学院。Hausdorff 长期研究步态与跌倒,工作重心是把步态从实验室指标变成可穿戴可计算的数字标志物,帕金森病与老年人群是他反复使用的场景。

这个背景解释了库的形状。它不是工程团队顺手放出的传感器日志,而是一个临床研究组把整套评估流程连同原始信号一起公开:量表、纳排标准、分组规则、佩戴日记,全都齐。对使用者来说,好处是上下文完整;代价是数据的组织方式跟着研究流程走,而不是跟着数据工程的习惯走。

3.2 时间线

时间 事件 依据
2013-06-17 引用论文在线发表 期刊 DOI 页
2016-05-19 主记录与 LabWalks 文件生成 目录文件时间戳
2016-06-14 头文件与 RECORDS 最后修改 目录文件时间戳
2016-06-20 1.0.0 版上线 PhysioNet 官方页面版本信息

时间线只有四个点,最后一个是发布。此后十年没有新版本,页面上的版本列表只有 1.0.0 一行。这与很多持续维护的库不同:它是一次性交付,交付之后就不再变动。

3.3 采集场景:腰后的一只盒子,三天

受试者在实验室完成量表与步行测试后,把传感器别在腰后带回家,连续佩戴三天。协议允许在洗澡与游泳时取下,这也是日记表里出现频率最高的一类摘戴原因。三天结束回到实验室交还设备,同时交回手写的日记。

这个流程里有三个值得注意的细节。第一,佩戴位置固定在腰后,靠近重心,测的是全身的平移与转动,不是某一侧肢体。第二,佩戴时长不是硬性锁定的 72 小时,受试者自己决定什么时候取下、什么时候戴回,于是每条记录的实际长度不同,中间还有自然的缺口。第三,日记是纸质的,时点由受试者自己写,精度到分钟级,个别记录只写「傍晚」这类模糊描述。

还有一层不那么显眼的设计选择:实验室评估与三天佩戴发生在同一天。受试者先做完量表与步行测试,再带着设备回家。这个顺序意味着两件事——实验室数据不会被前一天的疲劳污染,但三天记录的第一段一定包含从医院回家的路程。这一段的活动量明显高于日常水平,做日间曲线分析时通常要把它剔掉,或者至少单独标记。

3.4 数据来源的三个层次

层次 内容 完整度 可信度
信号层 六通道 100 Hz 连续记录 71 条,缺口位置由日记间接标出 高,可校验和验证
量表层 29 列临床与人口学字段 71 行,个别单元格写 n/a 中,筛查工具,非诊断
日记层 逐日摘戴时点与原因 71 行,时点精度不一 中低,自报且手写

三层的完整度依次下降,可信度也依次下降。信号是机器记的,量表是研究者测的,日记是人写的。做分析时把三层混在一起当作同等可靠,是这个库最容易犯的错误之一。

3.5 缺失的临床上下文值多少

库里有量表、有年龄性别、有跌倒次数,缺的是诊断、用药、合并症、随访结局。对做步态算法的人,这些缺的不影响;对想做临床预测模型的人,这些缺的每一条都致命。

具体说,三类工作会卡住。第一类是因果推断,想问「哪种药物影响步态稳定性」,没有用药字段。第二类是预后建模,想预测未来十二个月的跌倒,数据表里没有随访结局列,论文里提到的六个月随访结果没有随数据发布。第三类是共病分析,想控制糖尿病、关节炎、帕金森病的影响,一个诊断字段都没有。

所以它的定位应该说得准确一点:这是一个信号完整、量表齐全、结局缺失的库。信号与量表足够支撑方法学研究,结局的缺失把它挡在了临床预测研究之外。

§4 它最独特的东西:三天与十分钟的差值

4.1 为什么窗口长度本身就是一个变量

步态研究里有一个反复出现的现象:同一个人在不同时间尺度上的表现差异,往往比人与人之间的差异还大。十分钟的测试捕捉的是「能力上限」,三天的记录捕捉的是「日常实际」。两者之间的差值,本身就是一个有临床意义的量——它反映的是储备与使用之间的落差。

LTMM 的设计正好把这个差值做成了可比的形式:同一批人、同一天、同一套传感器,先测实验室的一段步行,再录三天的自由生活。这种配对在同族资源里不常见,多数自由生活数据集没有配套的实验室量表,多数量表数据集没有配套的连续信号。

4.2 自由生活的噪声结构与实验室完全不同

实验室步行的信号是干净的:直线、匀速、地面平整、无干扰。三天记录的信号里混着这些东西——起身坐下的冲击、上下楼的高低差、提东西造成的单侧负载、公交车的颠簸、以及大量根本不是步行的片段。

这带来一个工程上的硬约束:任何在三天数据上做的分析,第一步都是「把步行片段找出来」。这一步没有真值可依,只能靠加速度的周期性做启发式判断。不同的切段规则会给出差异很大的步数与活动时长,而论文里的四个指标全部依赖这一步。换句话说,这个库的性能上限,很大程度取决于使用者自己写的切段器。

4.3 案例:CO001 的四十七小时

CO001 是一位 75 岁女性,非跌倒组。她的记录在 47.6 小时处结束,比协议的三天短了一整天;日记表备注列写的就是 47h,两处一致。她的实验室步行记录只有 38 秒,明显短于官方描述的一分钟。

把这三件事放在一起看,能得到一个具体的方法学教训。如果按「三天」的假设去做切片,她的记录会在第 48 小时处被切成两段,第二段全是空的;如果按「一分钟步行」的假设去对齐实验室与日常生活,她的 38 秒会被截断。两个假设都来自官方页面的措辞,都会在这一个人身上失效。

§4.3 的案例还说明了另一件事:她的临床表里有几格写着 n/a,认知量表却有值。这意味着缺失是按单元格发生的,不是按人行发生的。做批量处理时按行删除会误伤,必须逐列判断。

在 §7.3 的偏差表里,这个案例对应「协议时长与实际时长不一致」这一条;在 §9.2 的最短流程里,它被用作第一条验证记录,因为它的记录短、体积小、问题典型。

4.4 三天能测什么,测不到什么

能测 依据 测不到 原因
日间活动总量与分布 三天连续加速度 精确步长 腰部单点,无足部信号
步态的节律一致性 垂直轴功率谱 支撑相与摆动相 采样率与佩戴位置
转身次数与角速度 三轴角速度 关节角度 无多段惯性链
昼夜活动节律 跨三天的活动曲线 睡眠分期 无体动以外的生理信号
佩戴依从性 日记与信号缺口 跌倒事件 无事件标注
与量表的关联 逐人可连 因果效应 观察性设计、无干预

这张表的分界线很清楚:凡是「整体运动」层面的量,它都能给;凡是「局部力学」或「事件」层面的量,它都给不了。判断一个想法能不能落在这个库上,只要问一句「这个量需不需要知道是哪条腿」——需要,就走不通。

§5 怎么把三天搬回本地

5.1 三条获取路径

官方页面给了三种取法:网页逐文件下载、wget 递归镜像、以及 S3 兼容的匿名同步。三者拿到的内容完全一致,差别只在断点续传与并发。

路径 命令形态 适合 注意
网页逐文件 浏览器点击 只要一两条记录 20.8 GB 整包不建议走这条
wget 镜像 wget -r -N -c -np 整库一次拉完 -c 支持断点续传
S3 同步 aws s3 sync --no-sign-request 反复增量更新 无需密钥
#-- 1. 先只取清单与两个表格,几百 KB,看清结构再决定下多少
BASE=https://physionet.org/files/ltmm/1.0.0
curl -sL "$BASE/RECORDS" -o RECORDS
curl -sL "$BASE/ClinicalDemogData_COFL.xlsx" -o ClinicalDemogData_COFL.xlsx
curl -sL "$BASE/ReportHome75h.xlsx" -o ReportHome75h.xlsx
wc -l RECORDS

#-- 2. 取一条记录验证读取链路,两个文件合计约 309 MB
for ext in hea dat; do
  curl -sL "$BASE/CO001.$ext" -O
done

5.2 清单与命名

RECORDS 是一份 144 行的纯文本,前 71 行是主记录,后 73 行是 LabWalks/ 开头的路径。前半段大小写混杂:主记录用大写 CO、FL,实验室步行用小写。按大小写敏感的方式过滤,是最省事的分类办法。

import wfdb
from collections import Counter

names = wfdb.get_record_list('ltmm')
main = [n for n in names if not n.startswith('LabWalks/')]
lab = [n for n in names if n.startswith('LabWalks/')]
print(len(main), len(lab))                     #-- 71 73
print(Counter(n[:2] for n in main))            #-- Counter({'CO': 40, 'FL': 31})

清单与目录的关系不是严格一一对应:LabWalks 里有若干编号在主记录中不存在,主记录里也有若干编号没有对应的实验室步行。做严格配对时,两边都要取交集,不能假设 71 对 71。

5.3 读一条记录并核对时长

import wfdb
import numpy as np

rec = wfdb.rdrecord('CO001', pn_dir='ltmm')
hours = rec.sig_len / rec.fs / 3600
print('%.1f h' % hours)                        #-- 47.6 h

#-- 物理量已按增益换算;加速度列单位 g,角速度列度每秒
x = rec.p_signal
print(x.shape, np.abs(x[:, 0]).max())          #-- (17141698, 6) 约 1.2 g

时长核对这一步值得单独做一次。协议写三天,实际从二十多小时到七十多小时都有,按 72 小时去规划切片会在这批记录上出错。写代码时把 sig_len 当作唯一权威,不要从文件名或页面描述推断。

5.4 读临床表并做列对齐

临床表有两个分组工作表,列结构相同,第三张是释义表。用 pandas 按表名读,再按受试者编号与信号记录连接。

import pandas as pd

f = 'ClinicalDemogData_COFL.xlsx'
co = pd.read_excel(f, sheet_name=0)   #-- 非跌倒组
fl = pd.read_excel(f, sheet_name=1)   #-- 跌倒组
both = pd.concat([co.assign(group='CO'), fl.assign(group='FL')], ignore_index=True)
both['rid'] = both['#'].str.replace('-', '', regex=False)
print(both.shape)                     #-- (71, 31),29 列原字段 + 分组 + 记录名

连接键的格式要注意:表里写成 CO-001,文件名是 CO001,去掉连字符才能对上。这张表里还有 n/a 与 N/A 两种大小写混排的空值写法,直接 astype(float) 会抛异常,需要先统一替换。

5.5 从三天里提取四个指标

论文用的是四个量:活动总时长、步数、垂直轴主频幅值、主频宽度。前两个靠切段,后两个靠功率谱。下面是最小实现,只演示口径,不追求与论文数值一致。

import numpy as np
from scipy.signal import welch

fs = 100
v = rec.p_signal[:, 0] - np.mean(rec.p_signal[:, 0])

#-- 用 5 秒窗的均方根做活动判定,阈值需按设备噪声底标定
win = 5 * fs
rms = np.sqrt(np.convolve(v ** 2, np.ones(win) / win, mode='same'))
active = rms > 0.02
print('active hours: %.1f' % (active.sum() / fs / 3600))

#-- 在活动段内做功率谱,取 0.5-3 Hz 步频带的主峰
seg = v[active][:10 * 60 * fs]
fr, px = welch(seg, fs=fs, nperseg=4 * fs)
band = (fr >= 0.5) & (fr <= 3.0)
i = np.argmax(px[band])
print('peak %.2f Hz, width %.2f' % (fr[band][i], np.std(px[band])))

这段代码有两点必须自己改:活动阈值取决于设备的噪声底,不同记录的增益不同,不能用一个常数;切段规则会直接决定步数与活动时长,写论文时要把规则写全,否则别人复现不出同一组数字。

5.6 体积与本地规划

六通道、100 Hz、16 位,每秒 1200 字节,每小时约 4.3 MB,一条满程记录约 309 MB。整库 20.8 GB,解压后占同样空间。

场景 数据量 建议做法
只跑通流程 0.3 GB 只下一条记录
复现论文四个指标 20.8 GB 整库下完,直接读 .dat 分块处理
提取特征后建模 约 1–2 GB 逐条算特征存 CSV,原始信号不入模型
教学演示 0.3 GB 用 CO001,短且问题典型(§4.3 的案例)

内存是更现实的约束。一条满程记录按 float64 展开是 26.9M×6×8 字节,约 1.3 GB;批量处理时必须分块读,不能一次性 rdrecord 全库。

5.7 日记表的时点怎么换算

日记表的时点用「一天的小数」表示:0.5 就是中午十二点,0.56319 约等于十三点三十一分。要换成秒就乘 86400,要对齐信号就再乘采样率 100。这个格式来自 Excel 的时间序列化方式,不是作者自创,但直接读会得到一串看着像概率的浮点数。

列 内容 换算
start 当天开始的时点 小数 × 86400 = 当天第几秒
events 摘戴的文字说明 无结构,需人工归类
took off 取下的时点 同上
put on 戴回的时点 同上
end time 当天结束的时点 同上

三个坑要提前知道。第一,同一行里既有时点也有文字,pandas 读进来是 object 列,直接算差值会报错。第二,个别单元格写的是「傍晚」「某一刻」这类模糊描述,无法换算。第三,日期列在不同受试者之间不连续,跨受试者做时间轴对齐没有意义,只能按相对时间处理。

把日记的缺口与信号的缺口对上,是这个库独有的一次校验机会:日记说十三点三十分取下,信号在那一刻应该出现一段低方差段。对不上就说明日记记错了,或者设备没按预期工作。这一步做完,才能放心用信号缺口去估算佩戴依从性。

§6 与库内条目的关系

6.1 关系图谱

关系 库 连接点 差异
命名同族 ltdb 同用 long term 前缀,同在 PhysioNet 心电、7 条、128 Hz,与本库无数据交集
命名同族 ltstdb 同用 long term 前缀,同属长时程 心电、86 条、250 Hz,另标 ST 与节律
同为可穿戴 pamap2 都是惯性传感器日常活动记录 本库为老年自由生活三天,无动作类别标注
同为日常活动 uci-har 都是腰部手机或传感器信号 本库时长以天计,uci-har 以秒计
同为跌倒主题 sisfall 都围绕跌倒 本库只有风险分组,sisfall 有模拟跌倒事件
同为步态临床 gaitndd 都把步态与疾病分组绑定 本库分组是跌倒史,不是神经疾病诊断

三者的分工要说得更明确。ltdb 与 ltstdb 是心脏的长时程:一条记录是一次连续的心电监护,标注落在每一次心跳上,问题是「检测器能不能在几十小时里稳定工作」。LTMM 是身体的长时程:一条记录是一个人在家三天的整体运动,没有逐事件标注,问题是「日常活动里的运动特征与跌倒史有没有关系」。前两者的分析单位是心搏,后者的分析单位是人·天。

6.2 检索路径

在站内找同族资源,按名称匹配会漏,因为 long term 有连字符、无连字符、缩写三种写法。按标签与主题词检索更稳。

#-- 站内粗筛:按标签与主题词,而不是按库名
bash scripts/qf_psql.sh "select record_id, url_name, left(title,60)
  from ai_ready_dataset
  where category_tags && array['可穿戴传感','步态与运动']
  order by record_id;"
import wfdb

#-- 确认官方清单的真实内容,避免凭记忆写记录名
names = wfdb.get_record_list('ltmm')
print(names[:3], len(names))
#-- ['CO001', 'CO002', 'CO003'] 144

判断一个库能不能做你的任务,先看它有没有 .atr。有注释文件的库才有逐事件真值;只有 .hea 与 .dat 的库,标签一定在别处——要么在文件名里,要么在附带的表格里。这一条对 PhysioNet 上所有 WFDB 格式的库都成立。

6.3 与其他长时程资源的分工判据

你的任务 首选 次选 判据
长时程心搏检测 ltdb ltstdb 有逐搏标注,本库完全没有
心肌缺血事件 ltstdb 无 只有它标 ST 事件
老年自由生活步态 ltmm 无同规模替代 三天 + 量表 + 日记三件套
日常动作识别 pamap2 uci-har 有动作类别标注,本库没有
跌倒事件检测 sisfall 无 有事件级真值
帕金森步态 gaitndd 无 分组按疾病,本库按跌倒史

6.4 三张库的规模差背后是什么

把 7、86、71 这三个数字并排放,很容易得出「LTMM 是中等规模」的结论。这个结论没有意义,因为三者统计的单位根本不同:ltdb 的 7 是 7 条连续心电,ltstdb 的 86 是 86 条连续心电,LTMM 的 71 是 71 个人各自的 71 条连续运动。

库 统计单位 单条时长 标签落点 由此决定的规模
ltdb 记录 14–24 小时 每次心搏 少而完整,够跑通流程
ltstdb 记录 21–24 小时 心搏 + 缺血事件 多,为了积累稀疏事件
ltmm 人 约 3 天 每个人一个分组 中等,为了做组间对照

第三行的逻辑与前两行不同:前两者靠增加记录数来积累「事件」,LTMM 靠增加人数来积累「人」。一个人只有一条三天记录,所以 71 条记录就是 71 个人,样本量与人数量相等。这一点在统计上很重要——它意味着可以做组间检验,但仍然做不了人群推断。

6.5 什么时候该放弃它

三种情形越早放弃越省时间。任务需要事件级真值,放弃;任务需要精细生物力学量,放弃;任务需要跨人群泛化,放弃。

反过来有三种情形它几乎无可替代:需要一个「三天 vs 十分钟」的配对设计;需要真实摘戴行为的记录;需要一个量表齐全、纳排清晰的老年自由生活样本。这三种都不依赖规模,依赖的是采集设计的完整度。

§7 质量评估与局限性

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

先纠正一个容易发生的误判:把「没有事件标注」直接读成「标注质量差」。这个库的标注不在信号里,而在两张表里——分组写在文件名,量表写在 xlsx,佩戴行为写在日记。用「有没有 .atr」去衡量它,相当于用尺子量重量。

第二个需要校正的误判是「71 人太少所以没用」。71 人做不了深度学习的训练集,但做组间对照的样本量是够的:论文正是用这个规模做出了垂直轴节律一致性的组间差异。评价它的时候,尺度应该是「在它能回答的问题上,证据够不够硬」。

第三个误判是「三天就是三天」。协议写三天,实际从二十多小时到七十多小时都有,缺口位置也不一样。把它当作等长的三天序列去批处理,会在第一步就引入错位。

7.1 五维评分

按 DAIMS 的常用维度打分,每项 1 至 5 分,针对「作为自由生活步态与跌倒风险研究数据」这个用途:

维度 分数 理由
数据规模 3 71 人 × 约 3 天,做组间对照够,做训练不够
标注质量 3 分组与量表齐全,但分组靠自报,无事件标注
任务适配 4 自由生活步态与活动量高度适配,事件类完全不适配
文档完整 4 页面讲清了流程、纳排与文件结构,字段释义略显简略
可获取性 4 免注册、ODC-BY,但 20.8 GB 对带宽有要求

五项合计 18 分(满分 25)。分布比较均衡:没有一项满分,也没有一项垫底。它不是一个「极端好用」或「极端难用」的库,而是一个各维度都在中上、需要使用者自己补齐最后一公里的库。

7.2 标注质量的两层

第一层是分组正确性。分组依据是自报的过去一年跌倒次数,达到两次及以上算跌倒者。这个定义在老年医学里常用,但自报本身有回忆偏差,且没有说明是否核实。七十一位受试者里如果有一人记错,分组就会翻转。

第二层是量表完整度。29 列里既有金标准的筛查工具(MMSE、Berg、TUG),也有较新的计算机化认知测评(Neurotrax 的 GCS 与 EFI),还有四项静态姿势测试的保持时间。覆盖面在同类资源里算宽的,但表格里有 n/a,且分布不均。

用途 分组层够不够 量表层够不够 建议
组间对照 够 够 直接按 CO/FL 分组
连续风险建模 勉强 够 用跌倒次数而不是二分组
认知与步态关联 够 够 注意 n/a 的单元格
事件检测 不够 不适用 换数据集
纵向随访 不够 不够 数据未含随访结局

7.3 已知的、可枚举的偏差

偏差 表现 影响
选择偏差 排除卧床、认知障碍、既往步态障碍者 样本偏向能自主外出的健康老人
单中心偏差 全部来自特拉维夫 地面材质、鞋履习惯、气候都单一
年龄偏差 65–87 岁,无年轻人 不能用于中青年步态
回忆偏差 跌倒次数为自报 分组可能错分
时长偏差 协议三天,实际 24–75 小时 等长切片会错位
季节性偏差 每人只测一次,跨若干月 无法区分个体差异与季节
设备偏差 型号未公布,增益逐条不同 跨设备复现缺参照
口径不一致 页面称三轴加速度、一分钟步行 头文件为六通道、38–56 秒

关于最后一条,需要说清两个数各自的来处:页面简介写「三轴加速度计」与「步行一分钟」,而每个头文件都列了六路信号(三轴加速度加三轴角速度),LabWalks 的采样点数换算出来是 38 到 56 秒。两个口径的差额构成,官方没有解释。做规划时以头文件为准,因为通道数与采样点数直接决定内存与切片。

7.4 外部验证矩阵

验证角色 做法 讲得通的地方 风险
跨设备验证 用本库训练特征,换自采设备测试 通道与采样率同档 轴向与增益需先对齐
跨人群验证 用本库阈值测中青年 特征定义通用 步频与活动量分布差异大
与量表对照 用三天特征预测 TUG、BBS 同一批人,配对干净 只能做关联,不能做因果
前瞻验证 用三天特征预测未来跌倒 论文报告过六个月随访 随访数据未随库发布
算法基准 用固定切段规则比较两个特征集 数据固定,可复现 切段规则一变,排名就变

跨设备是最常见也最容易出问题的一类。本库没有公布传感器型号,也没有给佩戴朝向的图示,任何「把本库的阈值直接搬到自家设备」的做法,都会在轴向定义与增益换算上翻车。稳妥的做法是先做重力方向对齐,再用静止段的方差估噪声底,最后才谈特征。

还有一类验证常被忽略:时间尺度上的外推。本库是三天,很多应用场景要的是一个月或一个季度。三天的特征能不能代表更长的窗口,本库自己回答不了,只能靠另一个更长的队列去验证。把三天的结论直接写成「长期活动水平」,是一种没有根据的跃迁。

反之,本库特别适合做「同一天内的两种测量」这类验证:实验室一分钟步行与同一天的日常活动,共用一套传感器、同一批人、同一个时间窗。这种配对在其他数据集里很少见,做出来的结论也比跨库比较干净得多。

7.5 它为何能持续:三天加一张量表

它十年没有更新,却仍在被下载,原因是它占着一个别人不容易复制的组合:连续三天的自由生活信号,配同一批人的完整临床量表与手写日记。新库可以更大、采样率更高,但要同时凑齐这三样,需要一次完整的研究设计,而不只是买几台设备。

这个位置不靠规模支撑,靠的是采集成本。三天连续佩戴的依从性、量表施测的人力、日记整理的工作量,三者叠加起来,让同类资源很难快速复制。也正因如此,它的 71 人不会被轻易超越。

§8 生态位与历史

8.1 历史沿革

2013 年论文发表时,可穿戴步态研究的主流还是「实验室里走一条直线,用惯性传感器估步速」。Hausdorff 团队的切入点不同:不问「能不能测准」,而问「测出来的东西和真实发生的跌倒有没有关系」。三天连续记录是回答这个问题的必要条件,因为跌倒本身是低频事件,十分钟的窗口里几乎不可能观察到风险行为的全貌。

2016 年数据上线,把这套设计连同原始信号一起公开。此后再无版本更新,页面浏览量停在两百多次的量级。这个轨迹很典型:一个临床研究组把数据作为论文的附属品发布,发布即完成,不承担长期维护。

8.2 与心电长时程库的命名撞车

PhysioNet 上以 long term 开头的库不少,最容易被混淆的是三个:ltdb、ltstdb、ltmm。三个缩写的字母构成几乎一样,中间的 T 都代表 Term,但最后一个字母决定了完全不同的东西——B 是 beat,D 是 database,M 是 movement。

维度 ltdb ltstdb ltmm
全名 Long-Term ECG Database Long-Term ST Database Long Term Movement Monitoring Database
模态 心电 心电 腰部惯性信号
记录数 7 86 71
单条时长 14–24 小时 21–24 小时 约 3 天
采样率 128 Hz 250 Hz 100 Hz
逐事件标注 心搏 心搏 + ST + 节律 无
机构 MIT 与波士顿贝斯以色列医院 同左 特拉维夫大学
上线 1999 2000 2016

这张表最该记住的是最后三行:机构不同、上线差了十七年、标注体系毫无交集。它们共享的只有命名习惯与发布平台。

8.3 生态位:自由生活层的那一格

层次 代表资源 回答的问题
实验室生物力学 光学动作捕捉类数据 关节怎么动
实验室可穿戴 短程步行 + 量表 走得准不准
自由生活 ltmm 这一类 平时怎么走
事件级 带跌倒标注的数据 什么时候摔

四层里,自由生活这一层最薄。实验室数据多,因为采集可控;事件级数据少,因为跌倒不可预期;自由生活数据介于两者之间,采集不难但依从性难,整理更麻烦。LTMM 站在这一层的偏上方:它有量表、有日记、有纳排标准,缺的是事件与随访。

这一格的位置也解释了它的替代品为什么少。要做自由生活,得有连续佩戴的依从性,三天是多数老人能接受的上限;要配量表,得有一次实验室访视,成本直接翻倍;要日记,得有一个人逐份整理手写记录,这件事没有自动化办法。三样东西叠在一起,产出的周期以年计,愿意做第二次的团队不多。

8.4 谁在用它,用来做什么

从引用它的工作看,使用者集中在三类。第一类是步态与跌倒研究组,用它验证「日常步态指标能否区分跌倒者」,常与自采队列做对照。第二类是可穿戴算法组,用它测试活动识别与步数估计在真实长时程上的稳定性。第三类是数字生物标志物方向,把三天的活动曲线当作老年功能状态的表征。

三类用法都不指望它提供事件真值,只指望它提供真实的自由生活段。这个定位一旦清楚,它的所有局限就都变得可以接受。

§9 使用指引

9.1 三种角色的路径

角色 第一天 第一周 注意事项
步态算法研究者 读页面与 CO001 头文件,跑通 §5.3 实现切段与四个指标,复现组间差异 切段规则必须写全
可穿戴工程师 抽一条记录做端到端推理 做轴向对齐与噪声底标定 增益逐条不同,不可硬编码
老年医学研究者 读临床表与纳排标准 做量表与三天特征的关联分析 分组是自报,别当金标准

9.2 一条最短的可用流程

#-- 1. 取清单、两个表格与一条最短的记录
BASE=https://physionet.org/files/ltmm/1.0.0
curl -sL "$BASE/RECORDS" -o RECORDS
curl -sL "$BASE/ClinicalDemogData_COFL.xlsx" -O
curl -sL "$BASE/ReportHome75h.xlsx" -O
for ext in hea dat; do curl -sL "$BASE/CO001.$ext" -O; done

#-- 2. 用首行核对通道数、采样率与时长
awk 'NR==1{printf "%s  ch=%d  fs=%d  %.1f h\n", $1, $2, $3, $4/$3/3600}' CO001.hea
import wfdb
import numpy as np

rec = wfdb.rdrecord('CO001')
print(rec.sig_name)
print('%.1f h' % (rec.sig_len / rec.fs / 3600))

#-- 先看灰度的量级,确认没有饱和或全零通道
print(np.percentile(np.abs(rec.p_signal[:, :3]), [50, 99], axis=0))

跑完这两段,就走完了下载、读取、核对三步。剩下的工作是把同一套代码套到其余七十条上,并在 LabWalks 目录里找出与主记录能配对的那些编号。

9.3 引用方式

引用对象 内容 说明
数据集 Long Term Movement Monitoring Database, v1.0.0. PhysioNet. 2016. 必须带版本号
标识符 DOI 10.13026/C2S59C 指向 1.0.0 版
原始论文 Weiss A, 等. Neurorehabil Neural Repair. 2013 DOI 10.1177/1545968313491004
平台 PhysioNet 平台综述论文,按页面 Cite 按钮生成 官方页面同时给出
许可 ODC-BY 1.0,署名即可,含商业用途 以许可全文为准

官方页面给出的引用顺序值得注意:它先列原始论文,再列平台论文。这意味着写论文时应该引用 2013 年那篇方法学文章,而不是只引数据集本身。这一点与 ltdb 不同——后者没有专属论文,只能引平台。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,结构与事实由编辑把关
数字来源 规模、结构、边界三类数字来自 PhysioNet 官方页面与库内文件
文件核验 RECORDS、两个 xlsx 与若干 .hea 经直接访问确认
统计口径 时长由采样点数除以 100 换算;人数由文件名前缀计数
未采用 未做标签频次排序、未做活动量分布直方图、未做逐条样本明细
论文信息 仅检索 Europe PMC 摘要,未读全文
未核验内容 传感器型号与佩戴朝向、跌倒分组的核实方式、随访结局数据
免责 本文不构成临床建议;使用须遵守 ODC-BY 1.0 署名要求

常见误读(避坑清单)

说法 实际 证据
「LTMM 是心电长时程库」 是腰部惯性信号,六通道加速度与角速度 头文件通道名 v-acceleration 等
「它和 ltdb 是同一系列」 只共享命名前缀,机构、模态、年份都不同 两个官方页面的机构与 DOI 不同
「里面有跌倒事件的标注」 只有自报跌倒次数用于分组,无事件时间戳 目录内无 .atr,表格无事件列
「传感器是三轴加速度计」 头文件列了六路,含三轴角速度 CO001.hea 六行信号
「每条记录都是 72 小时」 实际 24–75 小时,长度不一 采样点数除以 100
「实验室步行正好一分钟」 头文件换算 38–56 秒 co001_base.hea 为 3801 点
「71 条记录等于 71 个三天」 是人,每人一条,样本量等于人数量 文件名前缀计数 40 + 31
「可以直接拿它训练分类器」 71 人二分类,几轮即过拟合 分组只有两类,人数七十一
「增益是常数,可以直接乘」 每条、每通道增益都不同 各 .hea 的 gain 字段
「量表列就是诊断」 是筛查工具,非诊断结论 表格释义表写明来源文献

FAQ

Q1:LTMM 和 ltdb、ltstdb 是什么关系?
只有命名关系。三者都以 long term 开头,都在 PhysioNet 发布,但 ltdb 与 ltstdb 是心电,LTMM 是腰部运动信号;前两者的记录单位是心搏,后者的单位是人。机构、年份、许可时间线都不同。

Q2:它能做跌倒检测吗?
不能。跌倒信息只有一列自报次数,用于把人分成两组,三天记录期内没有任何事件标注。要做检测,需要带事件时间戳的数据。

Q3:为什么记录长度不一致?
协议要求连续戴三天,但洗澡游泳时可以取下,也有人提前结束。日记表备注列写有 47h、75h 等不同时长,与头文件换算结果一致。

Q4:71 个人够做什么?
够做组间对照与关联分析,不够训练端到端模型。论文用这个规模做出了节律一致性的组间差异,说明它在假设检验上的样本量是够的。

Q5:传感器是什么型号?
官方未公布。头文件只给通道名与增益,没给厂商与量程。跨设备复现时需要自己做轴向对齐与噪声底标定。

Q6:采样率 100 Hz 够吗?
对活动量、步数与节律够,对步态相位与关节角度不够。步频通常在 1 到 2 Hz,100 Hz 有五十倍以上的余量;但支撑相划分需要更高分辨率。

Q7:怎么区分步行段和非步行段?
没有真值,只能靠启发式。常用做法是滑动窗算均方根,超过阈值判为活动,再在其中找周期性。阈值要按设备噪声底标定,不能跨记录套用。

Q8:临床表里的 n/a 怎么处理?
按列判断,不要按行删除。缺失是按单元格发生的,有的受试者认知量表有值但其他列为空。整行删除会损失有效样本。

Q9:要不要下整库?
先下一条跑通流程,再决定。整库 20.8 GB,解压后同量。若只做特征层面的研究,可以逐条算完特征存 CSV,原始信号不必长期保留。

Q10:引用哪篇论文?
引 2013 年 Weiss 等的 Neurorehabil Neural Repair 文章,同时著录数据集与版本号。官方页面把论文排在平台引用之前。

Q11:它有没有随访数据?
论文提到收集了六个月后的跌倒自报,但随库发布的表格里没有随访结局列。需要随访数据只能联系作者。

术语表

术语 含义
LTMM Long Term Movement Monitoring,长时程运动监测
WFDB PhysioNet 使用的生理信号存储规范
.hea 纯文本头文件,声明通道、采样率、增益与注释
.dat 二进制信号本体,多通道交错存放
增益 每个物理量对应的整数刻度,写在头文件括号前
基线 零物理量对应的整数值,写在头文件括号内
CO 非跌倒组前缀,来自 control 或 non-faller 的编号习惯
FL 跌倒组前缀,来自 faller
LabWalks 实验室一分钟步行记录子目录
动态步态指数 DGI,评估行走中变速与转头时的稳定性
Berg 平衡量表 BBS,十四项静态与动态平衡任务
起立行走计时 TUG,从椅子起身走三米返回的用时
四格步进测试 FSST,跨格前后左右移动的计时
平衡信心量表 ABC,自评在日常活动中不跌倒的信心
MMSE 简易精神状态检查,本库准入要求高于 24 分
MoCA 蒙特利尔认知评估,较 MMSE 更敏感
PASE 老年人活动量表,自报的体力活动水平
主频幅值 功率谱在步频带的峰值高度,反映节律强度
主频宽度 峰周围的展宽,反映步与步之间的变异
自由生活 受试者在自家环境中不受指令约束的日常活动
佩戴依从性 实际佩戴时长与协议时长的比值
ODC-BY 1.0 开放数据共享署名许可,允许商用需署名
DAIMS 数据与信息管理评估框架,本库按五维打分

附录 A:核心数字核对表

项 值 来源 来源层级
受试者数 71 官方页面 Subjects 段 官方
非跌倒组 40 RECORDS 计数 文件
跌倒组 31 RECORDS 计数 文件
年龄范围 65–87 岁 官方页面 Subjects 段 官方
平均年龄 78.36 ± 4.71 岁 官方页面 Subjects 段 官方
主记录数 71 RECORDS 前 71 行 文件
实验室步行数 73 RECORDS 后 73 行 文件
采样率 100 Hz .hea 首行 文件
通道数 6 .hea 首行 文件
量化位宽 16 位 .hea 信号行 文件
单条最大体积 309.0 MB 目录列表 文件
整库体积 20.8 GB 官方页面 Files 段 官方
临床表列数 29 xlsx 首行 文件
满程记录(CO040) 约 74.8 小时 采样点数换算 换算
短记录(FL009) 约 23.8 小时 由文件体积估算 换算
实验室步行时长 38–56 秒 采样点数换算 换算

附录 B:数字的来源分层

层级 含义 本库对应内容
官方 官方页面明文写出 71 人、年龄范围、20.8 GB、许可、DOI
文件 从库内文件读出 通道数、采样率、分组计数、列数、体积
换算 由文件数字计算得出 时长、实验室步行秒数、每小时体积
未核实 官方未说明且无法从文件推出 传感器型号、跌倒核实方式、随访结局

四层的可信度依次下降。写作与建模时,前两层可以直接引用,第三层要写明换算方式,第四层只能标注为未知。

附录 C:完整参考文献

编号 文献 说明
1 Weiss A, Brozgol M, Dorfman M, Herman T, Shema S, Giladi N, Hausdorff JM. Does the evaluation of gait quality during daily life provide insight into fall risk? A novel approach using 3-day accelerometer recordings. Neurorehabil Neural Repair. 2013. DOI 10.1177/1545968313491004 官方指定的方法学论文,71 人,六个月随访
2 PhysioNet. Long Term Movement Monitoring Database, v1.0.0. 2016-06-20. DOI 10.13026/C2S59C 数据本体
3 Pollard T, 等. PhysioNet as a global platform for biomedical research. Nature Health. 2026. DOI 10.1038/s44360-026-00096-z 平台引用
4 Hausdorff JM 团队. BioMed Research International, 2015, 文章号 402596 官方页面另附的链接,内容未核实

第 4 条只以链接形式出现在官方页面上,标题与作者未能确认,引用前应自行核对。

附录 D:选库判决代码

#-- 用几个问题快速判断该不该用 LTMM
need = {
    '需要事件级真值': False,
    '需要关节角度': False,
    '需要跨人群泛化': False,
    '需要自由生活三天': True,
    '需要配对的临床量表': True,
    '需要佩戴依从性记录': True,
}

blockers = [k for k, v in need.items() if k.startswith('需要') and v and
            k in ('需要事件级真值', '需要关节角度', '需要跨人群泛化')]
if blockers:
    print('放弃 LTMM,硬约束:', blockers)
else:
    print('可用,先跑 §9.2 的最短流程')

这段判断没有技术含量,但能省掉一次白跑。三个硬约束里任意一个成立,这个库都不适合作为主数据源。

附录 E:如果只记五件事

  1. LTMM 是运动的长时程库,不是心电的;与 ltdb、ltstdb 只共享命名前缀。
  2. 71 位老人、每人一条约三天的腰部六通道记录,40 位非跌倒者配 31 位跌倒者。
  3. 没有事件标注,跌倒只是分组依据,做不了跌倒检测。
  4. 三天加量表加日记的组合稀缺,这三点凑齐的成本决定了它不会被轻易替代。
  5. 用之前先按采样点数核对时长,按头文件读增益,别按页面措辞做假设。

编辑说明

本篇的核验路径为:官方项目页(physionet.org/content/ltmm/1.0.0/,HTTP 200)、RECORDS 清单、两个 xlsx 表、以及若干 .hea 头文件;论文信息取自 Europe PMC 的摘要字段。写作时对官方措辞与文件内容不一致之处(通道数、步行时长)采取并列呈现,不做对错判定。

未覆盖的内容包括:传感器型号与佩戴朝向的确认、跌倒分组的核实流程、六个月随访结局的具体数值、以及 2015 年那篇 BioMed Research International 文章的内容。这些都需要向作者索取或读全文,超出本次核验范围。

统计口径统一为:时长 = 采样点数 ÷ 采样率 ÷ 3600;人数 = 文件名前缀计数;体积取目录列表的显示值。所有分布类统计(活动量直方图、标签频次、字段空值率交叉表)均未做,交由使用者在拿到数据后自行处理。


相关数据集导航

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

  • taichidb — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 队列研究
  • minute-level-step-count-nhanes — 共享标签:生理信号 / 步态与运动 / 队列研究
  • ppg-dalia — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • culm — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • nesfdb — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • plantar — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • wearable-device-dataset — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • semg-gait-31subjects — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
  • cgmacros — 共享标签:生理信号 / 可穿戴传感 / 队列研究
  • big-ideas-glycemic-wearable — 共享标签:生理信号 / 可穿戴传感 / 队列研究

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

返回 AI-Ready 数据集