音乐从静默里开始 — MICRO 微动捕捉 2012

113 人 / 8 场次 / 3 分钟静默 + 3 分钟音乐

来源 https://physionet.org/content/music-motion-2012/1.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 11
音乐从静默里开始 — MICRO 微动捕捉 2012

信息速览

数据集名称音乐从静默里开始 — MICRO 微动捕捉 2012
数据类型时序信号,元数据,补充材料
规模113 名健康志愿者(8 场次,单场次 5–17 人不等)
接入方式https://physionet.org/content/music-motion-2012/1.0/
AI 就绪度

一个十九岁的年轻人走进奥斯陆大学的开放日现场,被安排站到地面上的胶带标记处,头顶贴一枚反光小点。接下来六分钟,他不能动。前三分钟房间里什么声音都没有,后三分钟,一段利盖蒂的木管五重奏突然响起,接着是罗德里戈、维瓦尔第、D’Angelo、一支古巴萨尔萨乐队和一曲 808 State。

这就是 PhysioNet 上 music-motion-2012 的全部内容——官方名 MICRO Motion capture data from groups of participants standing still to auditory stimuli (2012),奥斯陆大学 RITMO 中心 MICRO 项目 2012 年 3 月 8 日那一批。它不是「听音乐时的身体运动数据库」,而是一次把动作压到最小的实验:受试者被要求站直别动,研究者关心的是那份压不住的微动,以及在静默切到音乐的那一秒里,微动有没有变化。设备是 Qualisys 红外光学捕捉,人群是开放日临时招募的志愿者,不是患者。

MICRO 是「Human Bodily Micromotion in Music Perception and Interaction」的缩写,项目内部把每一次采集称为一届「站立不动锦标赛」(Championship of Standstill)。2012 这一届在内部简写为 NM12,2015 那一届为 NM15,两者是同一个项目、同一套方法论、不同日期的两次独立采集,不是同一批数据的两个版本。本文按数据集百科的方式写:先讲它替谁解决什么麻烦,再拆文件与字段,然后逐层交代它是什么、好在哪、怎么取,最后一整节交代它与 2015 那批的关系。全篇只收规模、结构、边界三类数字,分布类统计交还给拿到数据的人。一屏速览见下表。

维度 内容
官方名称 MICRO Motion capture data from groups of participants standing still to auditory stimuli (2012)
PhysioNet slug music-motion-2012
项目内部代号 NM12
版本与 DOI v1.0,10.13026/4h9d-gf10
采集时间 2012 年 3 月 8 日(单日)
采集地点 挪威奥斯陆大学,开放日现场
采集机构 奥斯陆大学 RITMO 音乐与运动研究中心 MICRO 项目组
设备 Qualisys 红外光学动作捕捉,Oqus 系列相机,每场次台数见文件元信息
采样率与单位 100 赫兹,毫米
测量对象 每人头顶一枚反光标记点的三维瞬时位置,另有一枚静态参照点
参与者规模 113 人,分 8 个场次
单次任务时长 6 分钟,前 3 分钟静默,后 3 分钟音乐
刺激设计 静默 3 分钟后连续播放 7 段音乐,另有 3 段自然声响
文件构成 8 个运动 TSV + 1 个问卷 CSV + 1 份问卷 PDF + 1 段 WAV + 1 个 Max 补丁
体积 运动文件合计约 78 MB,音频约 31 MB
许可 CC BY 4.0(署名即可商用)
情绪或主观评分 无(仅有三项 1–5 体验自评与两个状态项)

§1 它要解决的具体麻烦

1.1 想把「音乐让人动」压到微米级重新问一遍

音乐诱发运动这个题目,公开数据大多拍的是人在跳舞、在跟节拍点头、在跑步机上走。这些数据能回答「人怎么动」,但回答不了「人几乎不动的时候,音乐还剩下多少影响」。后者是个更精确的问题:如果受试者被明确要求「尽可能站直、别动」,那么残余的毫米级晃动就可以被看作不受意志控制的、自下而上的感觉运动响应。这类微动测的是前庭与姿势控制系统的底噪,而不是编舞。

2012 这一批就是为这个问题准备的。任务被压到最简:一个人,一个点,六分钟。设计上的关键是把「无声」当成正式条件而不是休息间隔——前三分钟完全静默,后三分钟音乐不断。这样一来,任何一份记录里都同时含有「无声」与「有声」两种状态,研究者可以在同一场次、同一套相机标定下做比较,不必跨数据集借基线。

但要注意,这个设计里的顺序是固定的:静默在前,音乐在后。这意味着任何观察到的差异都可能混入时间趋势——人站久了本来就会更晃,或者反而更稳。这一点后来直接决定了 2015 那一批为什么要改成六十秒一段交替呈现,也是本文反复要提醒的使用边界。

1.2 三条常见的错误期待

第一条,以为它是「听音乐时的身体运动数据」。这个误会几乎是必然的:slug 里写着 music 和 motion,页面上又反复出现 music stimuli。但任务恰恰是 standing still——受试者被要求尽可能不动。你拿到的不是舞姿,而是被压抑后的残余微动。如果按舞蹈或步态数据集的预期去接,会发现幅度小两三个数量级,做动作识别完全没有可分的类别。

第二条,以为它带情绪标注。音乐数据集常常配愉悦度、唤醒度、效价评分。NM12 的问卷确实问了三个主观问题——「是否觉得累」「是否感到自己在动」「是否感到音乐让自己动得更多」,但它们是 1 至 5 的粗糙自评,不是情绪测量;另外两列「是否睁眼」「是否锁膝」是状态记录。得 0 表示否、1 表示是、0.5 表示中途切换过。想知道萨尔萨让人多开心,这份数据答不了。

第三条,以为它是惯性传感器或可穿戴数据。红外光学捕捉与 IMU 的差别不只是硬件:光学捕捉给出实验室坐标系下的绝对三维位置,没有积分漂移,但受遮挡影响;IMU 给出相对加速度与角速度,便携但需姿态解算。这份数据的每一行都是毫米坐标,直接来自相机三角测量,任何按 IMU 思路写的处理管线(积分、卡尔曼滤波、重力对齐)都用不上。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
音乐有无对站立微动的影响 同一场次的前三分钟静默与后三分钟音乐 够,但段序固定,含时间混杂
不同音乐类型之间的差异 七段风格跨度很大的片段 勉强,每段只有 15 至 40 秒
组内多人的人际同步 每场次 5 至 17 人同场、同一批相机同时记录 够,是官方点名推荐的方向
组间差异(不同场次之间) 8 个场次各一个文件 够,但需处理场地与相机差异
头部运动与音乐声学特征的关联 一段六分钟拼接音频与头部三维轨迹,时间轴对齐 够,可做互相关与频谱分析
全身关节角度或步态 只有头顶一个点 不够,完全拿不到
情绪、愉悦度、唤醒度 无相关标注 不够
临床或病理人群 开放日健康志愿者 不够,无患者、无诊断
跨设备可比性 单实验室、单套相机、单日 不够,无法做跨站点验证
长期或纵向追踪 单次六分钟 不够

这张表值得多看两眼的地方在于:拿到「够」的那几行,恰好都落在「同一个场次内部」的比较上;落在「不够」的那几行,几乎都是跨场次、跨人群、跨模态的需求。这不是巧合,而是设计使然——它是一份为内部对照而生的数据,横向外推从来不在目标里。

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

你的处境 它能帮你什么 下一步该做什么
手上有一批音乐特征提取结果,想找真实人体响应做检验 六分钟音频与逐帧头部轨迹严格对齐,可做互相关求滞后 先把帧号换算成秒,再按音乐起点切段
想研究「一群人同处一室会不会不自觉同步」 8 个场次都是多人同场,天然的多主体同步素材 对齐静态参照点后计算两两相关
在做人因或座椅、地面振动的工程评估 提供了一个「静默基线 + 听觉扰动」的范式 注意它没有力台,不能替代压力中心指标
想做时序异常检测或小样本分类的教学案例 8 个等长文件、结构一致、体积小,下载无门槛 用段级二分类练手,不要指望高准确率
需要健康人的姿势控制参考值 有一百余人、单日、单实验室的静止站立记录 只能当局部参考,不能当人群常模
想找带情绪的音乐运动数据 没有情绪标注,音乐类别也只有七段片段 转而去找带主观评分的音乐运动语料
要训练姿态估计或动作识别模型 只有单点头部坐标,无关节定义 改用全身动作捕捉库
已经用了 2015 那批,想加一条外部复现链 同一项目、同一方法的更早批次 用它当「前身」讲故事,不要当独立验证集

按处境倒推是最省时间的用法。若你的问题里同时出现了「多个人」「同一段时间」「同一种音乐」,这份数据命中率最高;若你的问题里出现了「患者」「全身」「情绪」「跨医院」,那它基本帮不上,早换方向比深挖更划算。

1.5 一句话判断

它是把「人听到音乐时忍不住的那点晃动」单独拎出来称重的一台天平:砝码只有一颗头顶反光点,量程只有几毫米到几厘米,但同场同秒、多人并置,而且附带了当年最原始的问卷与拼接音频。

1.6 不适合谁:四条边界

第一条边界,不适合做全身运动分析的人。每名受试者只有一个标记点,贴在头部。相机虽然有多台,但输出的标记点集合里,除了受试者,只剩场地参照点。没有肩、肘、髋、膝,也没有足部。任何需要关节自由度的任务——步态相位、姿势分类、跌倒检测——都无法在这里找到监督信号。

第二条边界,不适合需要主观体验标签的人。数据集没有情绪、愉悦度、音乐偏好打分。问卷里三个 1–5 的自评项是受试者对自己状态与移动量的相对自陈,不是情绪测量。若你的研究问题里「情绪」是自变量或因变量,这份数据只能提供行为侧,另一端要另找。

第三条边界,不适合要临床或特殊人群的人。一百一十三名参与者全部来自奥斯陆大学开放日当天到场的公众,官方页面写明「在开放日期间招募」。样本的年龄分布、健康状况、对实验的配合度都受当日到场人群约束。没有患者、没有诊断、没有用药记录。做前庭疾病、帕金森、老年跌倒风险的研究,用它做对照组都不稳妥。

第四条边界,不适合做跨数据集或跨设备的合并分析。单日、单实验室、单套相机、单次标定。虽然参照点被记录下来了,理论上可以做刚体对齐,但相机布置、地面材质、房间声学都没有跨场次的标准化说明。把它的毫米数直接与另一套系统测出的毫米数放在一张表里比较,隐含了一个未经检验的假设:两套系统的坐标系、滤波设置与标记点定义完全等价。

再补一条容易被忽略的:不适合把「组内同步」当成社交或情感的度量。同一组的人站在同一个房间里、看着同一块屏幕、听同一段音乐,他们的头部轨迹之所以相关,可能来自共同的外部驱动(音乐本身),也可能来自视觉耦合或地板振动。这份数据的同步是运动学层面的同步,不是心理学层面的「共鸣」。

§2 数据构成与规格

2.1 四层目录:运动、问卷、声音、代码

顶层只有四个目录加三份文件。mocap_data 放 8 个 TSV,一个场次一个;demographics 放一个问卷 CSV;sound_data 放一段六分钟 WAV 与一个 Max/MSP 补丁;code 放一个从 GitHub 静态镜像下来的仓库。顶层另有 LICENSE.txt(约 14.8 KB,即 CC BY 4.0 全文)、SHA256SUMS.txt(约 3.4 KB,用于下载后校验)与 participation.jpg(约 70 KB,大概是现场照片)。

路径 内容 文件数 说明
mocap_data/ nmA.tsv … nmH.tsv 8 每场次一个,头部标记点三维坐标
demographics/ self_reportNM12.csv 1 91 行数据,18 列
sound_data/ nm12stimuli.wav 1 六分钟拼接音频,前段静默后段音乐
sound_data/ nm-lyd.maxpat 1 Max/MSP 播放与同步补丁
code/ MICRO-master/ 1 个仓库 NM12/NM15/NM17 等各届分析脚本
顶层 questionnaire.pdf 1 问卷原件排版稿
顶层 LICENSE.txt 1 CC BY 4.0 全文
顶层 SHA256SUMS.txt 1 各文件校验和
顶层 participation.jpg 1 现场配图

注意文件名里的 nm。它是项目内部对「音乐运动」这一系列采集的简写,nm12 指 2012 那一届,nmA 到 nmH 是这一届的八个场次,编号用大写字母而非数字。这与 2015 那批用 NM0001.tsv 四位数字命名的方式不同,写读取代码时不要照抄另一篇的路径模板。code/ 下的仓库同时包含 NM12、NM15、NM17、NM18、NM19 五届以及一个耳机与扬声器对比实验(HPvSP)的分析脚本,是一次性拿到整个项目方法论的入口。

2.2 字段与记录的完整字典

运动 TSV 的文件头是十余行键值元信息,随后两行分别给出标记点名与列名,再往下才是逐帧数值。下表按文件表头与官方说明整理。

键 示例值 含义
NO_OF_FRAMES 35901 本场次总帧数
NO_OF_CAMERAS 9 参与三角测量的相机台数
NO_OF_MARKERS 7 本场次标记点总数
FREQUENCY 100 采样率,赫兹
NO_OF_ANALOG 0 模拟通道数,本数据集恒为 0
ANALOG_FREQUENCY 0 模拟采样率,恒为 0
DESCRIPTION – 自由描述,本数据集中为空
TIME_STAMP 2012-03-08, 13:40:34 录制开始时刻
DATA_INCLUDED 3D 数据维度
MARKER_NAMES static s1 s5 s8 … 各列对应的标记点名

其中 static 是场地参照点,其余是受试者头顶标记点。受试者编号在该场次内不连续——比如 F 场次是 s1、s5、s8、s9、s11、s12 六人,而不是 s1 到 s6。这说明编号来自整个实验日统一的受试者序列,被切分到各场次后留下空缺。写代码解析时必须以 MARKER_NAMES 行为准,不能假设编号连续。

问卷 CSV 一共 18 列,前两列是键。

列名 含义 取值形态
Group 场次字母 A–H 及一个 P
Subject 组内受试者编号 整数,与 TSV 的 s 编号对应
Age 年龄 整数
Sex 性别 M / F
Height (m) 身高 米,两位小数
Music listening hours/week 每周听音乐小时数 数值
Perform/produce/compose music hours/week 每周演奏或创作小时数 数值
Dance hours/week 每周跳舞小时数 数值,带四位小数
Exercise (no dance) hours/week 每周非舞蹈锻炼小时数 数值
Tiresome experience (1-5) 站立是否觉得累 1–5
Experience of motion (1-5) 是否感到自己在动 1–5
Experience of moving more to music (1-5) 是否感到音乐让自己动得更多 1–5
Eyes open? 实验期间是否睁眼 0 / 0.5 / 1
Locked knees? 是否锁膝 0 / 0.5 / 1
Mean QoM 全程平均运动量 浮点
Mean QoM w/oM 静默段平均运动量 浮点
Mean QoM w M 音乐段平均运动量 浮点
NoMus-Mus Diff 两段运动量之差 浮点

最后四列是汇总统计,不是标注:QoM 指 quantity of movement,即运动量。它们的含义是「按某套官方算法算出的每段平均位移量」,具体算法写在 code/ 里的脚本中。使用这些列等于接受官方那套参数,若你自己重算,数值不会一致——这不是数据错误,而是两套处理口径的差异。

2.3 一条记录的完整解剖

下面是从 F 场次文件里取出的前若干行,去掉了冗长的键值对,只保留结构与首行数值。字段顺序与真实文件一致。

NO_OF_FRAMES	35901
NO_OF_CAMERAS	9
NO_OF_MARKERS	7
FREQUENCY	100
MARKER_NAMES	static	s1	s5	s8	s9	s11	s12
static X	static Y	static Z	s1 X	s1 Y	s1 Z	s5 X	s5 Y	s5 Z	…

1292.189	1032.031	1785.620	89.991	1922.961	1598.301	80.287	1004.057	1806.753	…

读这一条时有三件事必须同时建立:第一,static 三列是场地参照点,它在整个六分钟里几乎不动(1292 到 1292 之间几个百分位的抖动),用来监控相机是否被碰到、场地是否沉降;第二,受试者三列是绝对坐标,不是相对位移,做任何跨场次比较前都要减去各自的首帧或均值;第三,Z 列在本数据集中不是竖直方向,从数值看 s1 的 Z 是 1598 左右,而 X 只有 89,说明坐标系经过了某种旋转,竖直方向很可能是 Y 列。这一点没有官方说明,只能由数据本身反推,任何按「Z 向上」写的处理管线都会算错。

#-- 读取一个场次,分离元信息与数值
import pandas as pd

path = "mocap_data/nmF.tsv"
meta = {}
with open(path) as f:
    while True:
        pos = f.tell()
        line = f.readline()
        if line.startswith("MARKER_NAMES"):
            f.seek(pos)
            break
        k, _, v = line.rstrip("\n").partition("\t")
        meta[k] = v

names = next(pd.read_csv(path, sep="\t", skiprows=len(meta), nrows=1, header=None).values[0])
df = pd.read_csv(path, sep="\t", skiprows=len(meta) + 1, header=None, names=names)
df = df.loc[:, ~df.columns.duplicated()].dropna(axis=1)

print(meta["NO_OF_FRAMES"], meta["FREQUENCY"], meta["NO_OF_MARKERS"])
print(df.shape)

上面这段代码有两个坑。MARKER_NAMES 行与列名行都在文件前部,直接传 skiprows 需要先数清元信息有几行;而文件末尾的列名有重复与空列,read_csv 会自动补 .1 后缀,必须先去掉重复列再转数值,否则 float 转换会失败。这些细节 2015 那批同样存在,属于 Qualisys 导出格式的通病。

2.4 场次规模与记录时长的对照表

八个场次的帧数并不完全一致。官方说法是「记录刚好六分钟」,实际文件里 36000 帧对应六分钟,多出的一帧来自导出器的端点包含。

场次 帧数 相机台数 标记点总数 受试者数(不含参照点)
A 36001 9 9 8
B 35601 9 11 10
C 35901 9 13 12
D 35901 9 12 11
E 35801 9 9 8
F 35901 9 7 6
G 35901 9 12 11
H 35901 9 11 10

八个场次合计 78 个受试者位置,与官方摘要的 113 人存在差额。这个差额不是错误,而是同一名受试者在不同场次里可能带着同一个 s 编号出现(编号来自全实验日序列),场次间有重叠。实际独立个体数官方给了 113,逐场次名单则需要交叉比对才能还原,本文不做这件事。

2.5 与 2015 那批的字段差异

两批数据的表结构几乎一样,都是 Qualisys 导出的 TSV,都有 NO_OF_FRAMES、MARKER_NAMES、逐帧三列一组的布局。差异集中在三处:命名、元信息完整度、问卷列数。

维度 2012(NM12) 2015(NM15)
文件命名 nmA.tsv … nmH.tsv NM0001.tsv … NM0012.tsv
场次数 8 12
每场受试者 5–17 人(按文件推断 6–12 人) 3–12 人
标记点命名 s1、s5、s8 等,全实验日序列 S1–S12,场次内连续
参照点 static 一个 Corner1–Corner4 四个
问卷列数 18 列 14 列
问卷主观项 三项 1–5 体验自评 无,改为疲劳自评等
音频组织 一段六分钟拼接 WAV 四段各 60 秒 WAV 加顺序表
刺激结构 静默 3 分钟 + 音乐 3 分钟 60 秒一段交替,顺序组间随机

最需要注意的是参照点。NM12 只有一个 static 点,NM15 有四个角点。四个点可以做完整的刚体变换(平移加旋转),一个点只能做平移校正。想比较两批,必须先接受精度损失;想把 NM12 的坐标旋到某个标准朝向,光靠一个参照点做不到。

2.6 音频侧的结构

nm12stimuli.wav 是一段六分钟的拼接音频,前三分钟是纯静默,后三分钟是七段音乐的串联。官方给出的曲目与时长如下。

序 曲目 时长
1 利盖蒂《木管五重奏十首》第 3 首 Lento 20 秒
2 利盖蒂《木管五重奏十首》第 8 首 Allegro con delicatezza 15 秒
3 罗德里戈《阿兰胡埃斯协奏曲》慢板 40 秒
4 维瓦尔第《四季》冬 20 秒
5 D’Angelo《Left & Right》 35 秒
6 Manolito y su trabuco《Marcando la distancia》 20 秒
7 808 State《Cubic》 30 秒

七段合计 180 秒,恰好等于后三分钟。风格跨度极大:两段二十世纪现代主义室内乐、一段西班牙古典吉他协奏曲、一段巴洛克、一段新灵魂乐、一段古巴萨尔萨、一段电子舞曲。这样的编排不是为了让受试者判断偏好,而是为了最大化声学特征的差异——有的没有稳定节拍,有的节拍极强。

2.7 六分钟时间轴:每一秒在发生什么

把官方刺激表、音频结构与文件帧数叠在一起,可以得到一张时间轴。这张表是本文所有分段代码的依据,也是判断「哪一段能拿来比」的第一道关口。

秒区间 帧区间 内容 可作为什么
0–20 0–2000 静默 基线,含入场与适应
20–180 2000–18000 静默 干净基线,建议取这一段的均值做零点
180–200 18000–20000 利盖蒂 Lento 过渡段,切换瞬间,慎用
200–215 20000–21500 利盖蒂 Allegro 无稳定节拍
215–255 21500–25500 罗德里戈慢板 分解和弦,弱律动
255–275 25500–27500 维瓦尔第冬 强拍清晰
275–310 27500–31000 D’Angelo 强律动,切分
310–330 31000–33000 古巴萨尔萨 强律动,多打击乐
330–360 33000–36000 808 State 机械四四拍

这张表有两处需要提醒。第一,180 秒处的切换通常伴随一个短暂的过渡反应,受试者会意识到「开始了」,因此紧接切换的头几秒不宜当作稳定音乐段使用。第二,最后一段只有三十秒,做频谱分析时频域分辨率受限,若要算低至 0.05 赫兹的摆动成分,窗口勉强够一个半周期。

把这张表与 §4.4 的案例对着看,就明白为什么那个案例里说的「切开前后两半」是最粗的做法:真正稳妥的基线应该取 20 秒到 180 秒之间,而不是从第 0 帧开始。

§3 它是什么:一次把动作压到最小的实验

3.1 项目的来路:锦标赛与开放日

MICRO 项目的核心装置被叫作「挪威站立不动锦标赛」。名字带着玩笑成分,但实验逻辑很严肃:把一群人聚在一间屋子里,要求他们站着别动,然后用红外相机记录头顶一个点的运动。之所以要从「比赛」这种形式切入,是因为它把招募问题变成了活动问题——开放日当天有大量公众在校园里走动,登记参赛的成本远低于实验室单独预约。

2012 年 3 月 8 日这一天,他们招到了 113 人。实验经挪威数据保护机构(NSD,项目号 NSD2457)批准,用于学术发表。这一批是这个装置第一次大规模运转,也留下了后来被反复引用的「静默对音乐」观察。

3.2 任务的骨架:三分钟无声,三分钟有声

每人只做一次,总时长六分钟。前 180 秒完全静默,后 180 秒音乐不断。受试者事先被告知音乐会在三分钟后开始,因此这六分钟的任务可以理解为「安静地等,然后继续安静」。

受试者的站位由地面胶带标出,八个场次的站位布局相对固定。这样做的目的是让相机视野内每个人的空间关系可复现,也便于事后判断某一列运动是否来自本人而非邻座遮挡。站立姿势自由选择,不要求双脚并拢或双手下垂。

3.3 采集系统:九台相机盯一颗点

每个场次的文件头写着相同的相机台数。相机以 100 赫兹的频率拍摄,软件把每台相机看到的反光点做三角测量,得到三维坐标,单位毫米。因为每人只贴一个点,系统不需要区分身体部位,也不会有左右混淆的问题——这是一个刻意的简化,代价是失去了一切关于姿态的信息。

捕获系统与播放系统联动:播放开始则录制开始,播放结束则录制停止。这样做的结果是每段记录必然覆盖完整刺激,但长度由播放软件决定,多出的或不足的帧就是导出器的端点处理。八个场次里五个是 35901 帧,其余三个分别差了一两百帧,正是这种端点处理的痕迹。

3.4 为什么是这些曲目

音乐心理学里有个反复出现的争论:让人想动的到底是节拍强度、低频能量,还是熟悉度。2012 这批的曲目单显然在押注「节拍强度」与「声学复杂度」两个维度。利盖蒂的两段几乎是反节拍的,罗德里戈的慢板有稳定的分解和弦但没有强拍,维瓦尔第有清晰的小节线,D’Angelo 和古巴萨尔萨提供了强律动与切分,808 State 则是机械化的四四拍。

用一个受试者听完这七段,等于把他放进一条从「无拍」到「强拍」的连续谱上。这也是后来 2015 那批改成四类刺激(静默、冥想、萨尔萨、电子舞曲)的内在逻辑——七段太细,样本量不足以支撑逐段比较,粗成四类才有统计功效。

3.5 与 2015 版的实质差异:一整节交代

这是本文存在的理由,需要把两批数据的关系说清楚,因为它们的 slug 只差一个年份,最容易被人当成同一件事的两种快照。

先说结论:两者是同一个研究组的两次独立采集,不是同一批数据的两个版本。 判定依据有三条,都来自官方页面文本。

第一条,日期与人数不同。2012 批采集于 2012 年 3 月 8 日,113 人;2015 批采集于 2015 年 3 月 12 日,108 人。相隔整整三年,不是同一批人在不同时间被重测。

第二条,官方页面明确写了派生与承继关系。2015 那批的内容页在「父项目」一栏写着「derived from: MICRO … (2012) v1.0」,并在方法节写「本研究是此前一个项目的延续」,同时写明「通过交替呈现刺激、在音乐段之间插入静默段,我们旨在验证 2012 数据集中发现的音乐与静默条件之间的差异」。这是标准的「前一阶段发现、后一阶段验证」结构,不是版本迭代。

第三条,刺激设计与设备规格不同。2012 是「静默三分钟 + 连续音乐三分钟」,音乐内部无静默;2015 是六十秒一段交替,静默与音乐穿插,且各场次顺序不同。相机上,2012 每场次台数见文件头(本批为九台),2015 为十三台 Oqus 300/500。参照点上,2012 一个静态点,2015 四个角点。

把这些差异摊开成一张表更清楚。

维度 music-motion-2012 music-motion-2015
采集日期 2012-03-08 2015-03-12
人数 113 108
场次数 8 12
相机 每场次九台(见文件头) 十三台 Oqus 300/500
刺激顺序 固定:先静默后音乐 组间随机,静默穿插
段长 静默 180 秒 + 音乐 180 秒 每段 60 秒,共六段
音乐材料 七段拼接,20–40 秒 三类各 60 秒,独立 WAV
参照点 一个静态点 四个场地角点
问卷列数 18 14
实验目的 首次观察静默与音乐的差异 复现并排除顺序效应
PhysioNet 发布日期 2020-10-05 2020-12-08

这张表可以直接回答几个高频问题。第一,两批能否合并?技术上可以,用 static 与角点各做一套对齐,但合并后的样本不再是独立观测,因为两批日期、人群、设备、刺激都不同,任何合并分析都要把「批次」作为随机效应或分层变量。第二,能否用 2012 训练、2015 测试?可以,但要注意 2015 的段结构更碎,标签体系得重新定义;反过来用 2015 训练、2012 测试更别扭,因为 2012 没有分段的静默。第三,能否把 2012 当作 2015 的外部验证?不能。官方说的是 2015 验证 2012,方向相反;且两者同组同实验室,对 2015 的方法学结论而言,2012 只是一份前序观察,不是独立复现。

还有一层更隐蔽的关系:2012 这一批的定位在项目内部是「试探」。它的段序固定,意味着任何「音乐段比静默段动得多」的结论,都可能来自「站久了自然会晃」这一时间趋势,而不能完全归给音乐。2015 之所以要把静默拆成多段穿插进去,正是为了切断这个混杂。所以,用 2012 的数据做因果推断要格外谨慎;用它做描述性观察、特征工程练习、或者对 2015 结论的「背景说明」,才是它该在的位置。

3.6 为什么把点贴在头上

站立时身体是绕着踝关节做小幅摆动的倒立摆,理论上越大越高的部位位移越大。头部位于这条摆的顶端,同样的关节角度变化在头顶会放大成更大的线位移,信噪比因此更高。对一台毫米级精度的光学系统而言,把标记点放在头部,等于用最小的设备代价换来最大的可测信号。

代价是信息丢失。头部位置只是整条摆链的末端输出,无法反推出踝、膝、髋各自的贡献。若研究问题是「哪个关节在主导摇摆」,这份数据答不了;若问题是「整条摆在音乐下摆得更厉害吗」,它答得干脆。这种「用可测性换可解释性」的取舍,是 MICRO 系列一以贯之的设计,2015 那批也没有改。

另一个隐性好处是标记点少。每人一个点意味着相机不需要做人体部位识别,遮挡的概率低,后期不需要大量插值。八个场次的文件里几乎看不到长时间空缺,正是这个简化的直接回报。

3.6 这一批在项目史里的坐标

code/ 目录里的仓库同时包含 NM12、NM15、NM17、NM18、NM19 五届的脚本,说明这个系列一直办到 2019 年之后。从命名规律看,NM 加年份是项目内部的版本号,每一届换一批刺激、换一批受试者、换一些采集细节。NM12 是系列里最早的一届,也是唯一一届采用「长静默 + 长音乐」结构的;从 NM15 起,刺激被切成六十秒等长段,这一改动此后一直保留。

理解这层沿革,能帮你判断该拿哪一届。要做「音乐有无」的二分类,NM12 只有每场一次状态切换,正负样本各一段;NM15 有多次切换,段数多得多。要做「不同音乐类型」的对比,NM12 的七段风格跨度最大但太短;NM15 的三类各六十秒,更适合做频域分析。要做「人际同步」,两批都行,NM15 人数更多、组更大。

§4 它好在哪:对齐、同场、可复算

4.1 硬对齐:帧号就是秒

采样率 100 赫兹,播放与录制联动,意味着第 n 帧对应第 n/100 秒,误差不超过一帧。这一点在音乐–运动耦合的研究里价值极高:你可以把音频的节拍包络算出来,与头部轨迹逐帧对齐,求互相关,找滞后。多数公开数据做不到这一点,因为它们要么没有同步触发,要么音频与视频各自计时、后期靠人工对齐。

NM12 的对齐还多一层保障:static 参照点提供了一条独立的时间轴。如果某场次录制中间相机被碰了一下,static 的坐标会出现阶跃,可以据此定位并剔除受影响的帧。这个用法在 2015 那批里同样可行,只是角点更多。

4.2 同场多人:一个人与一个系统

下面先从数据里取出一个具体的人,再把他放回组里。这个顺序在 §4.4 的案例里完整走一遍,因为它是这份数据最容易被忽略的两种用法之间的分界线。

八个场次都是多人同场。这带来两种互相独立的用法。第一种是把每个人看成独立样本,做「静默段 vs 音乐段」的组内比较;第二种是把同一场次的所有人看成一个系统,计算两两之间的同步相关性,研究群体层面的耦合。

第一种用法简单,但要注意同场受试者并非独立——他们共享房间声学、地板振动与视觉信息。第二种用法是官方推荐的方向,也是这份数据最稀缺的地方:公开的动作捕捉库里,多人同时、同场、同任务、六分钟,几乎找不到第二个。

4.3 可复算:代码、音频、问卷三件套

官方给了处理代码、原始音频、问卷原件。这意味着你不需要猜任何一步预处理:运动量怎么算、去均值怎么去、段怎么切,都能在 code/MICRO-master/NM12/ 里找到对应脚本。凡是官方算过的量(问卷后四列),你都可以自己重算一遍,看看差异在哪。

这一点比数据本身还重要。很多公开数据集只给数值不给算法,导致「报告里的运动量」这个数字无法复现。NM12 把算法一起放出来,等于把口径也一并公开了。

4.4 案例:F 场次的第一个静默段

挑一个具体的场次来讲。F 场次是全批最小的,六名受试者,录制于 2012 年 3 月 8 日 13 点 40 分。文件头写着 35901 帧、九台相机、七个标记点,意味着除 static 外有六人。

把 static 与六人的坐标画成六分钟曲线,会立刻看到两件事。第一,static 几乎是一条水平线,只在两千至两千五百的范围内微抖,说明相机稳定、场地没有沉降。第二,六名受试者的曲线在前半段与后半段呈现不同的波动,但差异不大,需要放大才能看出。

这个案例说明的是:六分钟、一百赫兹的原始数据,肉眼看不出什么。要看出东西,必须做两件事——减去各列均值,让波动围绕零展开;再把前三分钟与后三分钟分别切开,算每个窗口内的位移量。这两步做完,「音乐段是否更晃」才变成一个可比较的数字。

这个案例还暴露了一个常见错误:有人直接拿绝对坐标算方差,结果被个体的起始位置主导,每个人的数都不同、无法比较。正确的做法是先转成相对位移。§4.4 的案例值得完整跑一遍,因为它同时覆盖了数据读取、去均值、分段三件事。

4.5 F 场次的延展:把一个人放进组里

这一小节是 §4.4 的案例的延伸,不再另起一个人,仍然看 F 场次那六个人。

同一个人在不同场次里可能以同一个编号出现,这给逐人追踪留下了可能。但在 F 场次里,六个人的编号是 s1、s5、s8、s9、s11、s12,说明这一组是从整个实验日的编号序列中抽出来的。如果你要研究「同一个人在不同群体里的表现」,需要先建立一张编号到场次的对照,这在问卷里可以做到,但问卷只有 91 行,覆盖不全。

把一个人放进组里看,还有另一层意义:同一个体的同步倾向,可能与群体规模有关。F 场次六人,C 场次十二人,若同一个编号在两场都出现,就能直接比较他在小群体与大群体中的耦合强度。这是 2012 这批相对 2015 的一个隐性优势——2015 的组内编号是连续的 S1 到 S12,跨组追踪需要额外对照,而 2012 的编号天然带全实验日序列的信息。

§5 怎么拿到:目录、下载与读取

5.1 三条取数路径

第一条是网页点选。项目主页有文件列表,每个文件可单独下载,不必整包。适合只想看一两个文件的场景。

第二条是 wget 整目录。PhysioNet 的文件路径支持目录遍历,一条命令可以把整个版本拖下来,约一百多 MB。

第三条是程序化读取。wfdb 包可以列文件,但 NM12 不是 WFDB 格式,最终还是要用 pandas 读 TSV。所以第三条实际上是「用 Python 封装前两条」。

5.2 命令行取整包

#-- 整版下载,保留目录结构
wget -r -N -c -np -nH --cut-dirs=2 \
  https://physionet.org/files/music-motion-2012/1.0/

#-- 只要运动数据
wget -r -N -c -np -nH --cut-dirs=4 \
  https://physionet.org/files/music-motion-2012/1.0/mocap_data/

#-- 校验完整性
cd music-motion-2012/1.0 && sha256sum -c SHA256SUMS.txt

--cut-dirs 的层级要对齐。完整 URL 是 …/files/music-motion-2012/1.0/,files 算一级,slug 算一级,版本号算一级,所以取整版用 2,取子目录用 4。写错不会报错,只会把目录结构多套几层。

5.3 只取问卷与一个 TSV

#-- 问卷很小,先拿它看规模
wget -q -O self_reportNM12.csv \
  https://physionet.org/files/music-motion-2012/1.0/demographics/self_reportNM12.csv

#-- 单个场次运动文件
wget -q -O nmF.tsv \
  https://physionet.org/files/music-motion-2012/1.0/mocap_data/nmF.tsv

先拿问卷是个好习惯。CSV 只有十 KB,读一眼就能知道有多少场次、多少受试者、哪些列可用,再决定要不要下那八十兆的运动文件。

5.4 用 Python 把元信息与数据分离

#-- 批量读取八个场次,只取受试者列
import glob
import pandas as pd

def load_session(path):
    meta = {}
    with open(path) as f:
        for line in f:
            if line.startswith("MARKER_NAMES"):
                names = [n for n in line.rstrip("\n").split("\t") if n]
                break
            k, _, v = line.rstrip("\n").partition("\t")
            meta[k] = v
    df = pd.read_csv(path, sep="\t", skiprows=lines_seen(meta, path),
                     header=None, names=names, dtype=float)
    df = df.dropna(axis=1, how="all")
    subj = [c for c in df.columns if c != "static" and not c.endswith(("X", "Y", "Z"))]
    return meta, df

def lines_seen(meta, path):
    #-- 元信息行数 = 键值对数 + 列名行 1 行
    with open(path) as f:
        n = 0
        for line in f:
            n += 1
            if line.startswith("MARKER_NAMES"):
                return n + 1
    return n

for p in sorted(glob.glob("mocap_data/nm*.tsv")):
    meta, df = load_session(p)
    print(p, meta["NO_OF_FRAMES"], df.shape)

注意 MARKER_NAMES 行本身是空值分隔的单行,列名在它下一行才出现,所以 skiprows 要再加一。这段代码把两个容易出错的点都封在函数里,批量跑八个文件不会中途停下来。

5.5 场地对齐:跨场次比较的前置步骤

#-- 用 static 参照点做平移校正,再比较
def align(df):
    cols = [c for c in df.columns if c.endswith(("X", "Y", "Z"))]
    ref = [c for c in cols if c.startswith("static")]
    out = df.copy()
    for axis in "XYZ":
        base = out[f"static {axis}"].iloc[:100].mean()
        for c in [c for c in cols if c.endswith(f" {axis}") and not c.startswith("static")]:
            out[c] = out[c] - out[f"static {axis}"].iloc[0] + base
    return out

只有一个参照点时,只能做平移。这段代码的意图是把每场次的参照点对齐到同一位置,让跨场次的坐标可比。若要比较姿态或朝向,一个点不够,得接受误差。

5.6 声音侧:把刺激特征与轨迹放到同一根时间轴上

#-- 读六分钟拼接音频,按秒切段
import librosa
import numpy as np

y, sr = librosa.load("sound_data/nm12stimuli.wav", sr=1000, mono=True)
#-- 采样率降到 1000 赫兹,够算包络,且与 100 赫兹运动数据好对齐
env = np.abs(librosa.stft(y, n_fft=256)).mean(axis=0)
qom = np.linalg.norm(df[["s1 X", "s1 Y", "s1 Z"]].values - df[["s1 X", "s1 Y", "s1 Z"]].values.mean(0), axis=1)

#-- 前 180 秒静默,后 180 秒音乐
silence = qom[:17900].std()
music = qom[18000:].std()
print("静默段波动", silence, "音乐段波动", music)

降到 1000 赫兹是为了让音频包络与运动序列的时间轴一致,省掉重采样步骤。前 180 秒对应 18000 帧,留出两端各一百帧的余量,避免切在帧边界上。

5.7 官方代码仓库的用法

code/MICRO-master/ 下有 NM12、NM15、NM17、NM18、NM19 五个子目录,每个里面有 MATLAB 与 Python 两种实现。NM12 目录里主要是读取、去均值、算运动量的脚本,与问卷后四列的口径对应。想复现官方数字,直接跑这些脚本;想换算法,就从它们改起。

子目录 对应数据 说明
NM12/ 本文 2012 届,长静默 + 长音乐
NM15/ music-motion-2015 60 秒交替设计
NM17/ 至 NM19/ 未在 PhysioNet 单独发布 后续各届,仅代码
HPvSP/ 耳机与扬声器对比实验 另一套设计
LICENSE 全仓库 与数据同许可

LICENSE 文件单独放在仓库根目录,说明代码与数据用同一许可。这一点对工程复现很重要:你可以把脚本直接嵌进产品流程,只要署名。

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

6.1 关系图谱

库内与本文最接近的有三份资源。关系不是并列,而是有层级的。

资源 与本文的关系 一句话区分
music-motion-2015 同项目、后一批、下一代设计 六十秒交替 vs 三分钟长段,108 人 12 组 vs 113 人 8 场次
body-sway-music-vr 同主题、不同测量面 足底压力中心 vs 头顶光学标记点
rehab-motion-capture 同类设备、不同人群 康复患者的功能性动作 vs 健康人的静止微动

2015 那批是「子项目」,2012 是「父项目」,这一层关系官方写过。body-sway-music-vr 则是不同实验室、不同设备、不同任务:它测的是压力中心,关注摇摆的力学来源;本文测的是头部位置,关注运动学响应。两者都在音乐下量「站不稳」,但一个在脚下、一个在头上,不可互相替代。

6.2 检索路径

想找齐同一主题的库内资源,可以从三个词出发。「音乐」能捞到本文与 2015 那批;「摇摆」「姿势」能捞到 body-sway-music-vr 与其他平衡类数据;「动作捕捉」能捞到康复类与运动类数据。第三类与本文的差别在于任务复杂度——那些数据要求受试者做动作,本文恰好相反。

§7 质量评估与局限性

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

评分之前先纠正一个可能的误判:不要把 NM12 当成「2015 那批的早期草稿」。它有自己的论文、自己的实验目的、自己的刺激设计,是一个独立立项的采集,只是发表时间晚于 2015 那批的发布。若按「不成熟版本」的思路去读,会低估它在方法学上的独立价值——固定段序虽然在因果推断上不理想,却把「同一段音乐内的时间演化」完整保留了下来,这是分段交替设计反而丢失的信息。

7.1 五维评分

维度 分数 理由
规模 3/5 113 人、8 场次,单日单实验室,够做内部对照,不够做人群推断
结构 4/5 TSV 加问卷加音频,格式标准,元信息完整,读取成本低
标注 2/5 无情绪、无偏好、无临床标签,只有人口学与三项体验自评
可复现 5/5 官方给代码、给原始音频、给问卷原件,口径全公开
生态 3/5 同项目有后续届次,但同主题公开数据仍稀少

上表是本篇采用的 DAIMS 五维评分。DAIMS 指数据充足性(Data adequacy)、可获取性(Accessibility)、可解释性(Interpretability)、可维护性(Maintainability)、可复用性(Substitutability),五维各自独立给分,不做加权平均。看到总分低不必慌,要看低在哪一维;看到总分高也不必放心,要看高的是不是你真正需要的那一维。对 NM12 而言,可获取性接近满分(无需登录、许可宽松、附代码),充足性中等(单日单批、人数过百但缺纵向),可解释性偏低(只有三个粗糙自评,无情绪量表),可维护性高(封闭的静态档案,不会因外部系统变更而失效),可复用性中等(换个研究问题仍能用,但换不了测量面)。

把 DAIMS 与 §7.1 的五维表并排看,会发现两条评价轴的关注点不同:五维表看数据本身的工艺,DAIMS 看「拿来用」的顺滑度。工艺好但可获取性差的数据在现实里同样难用,反之亦然。NM12 的特点恰好是工艺一般、顺滑度很高——这也解释了为什么它被引用得多、被深度挖掘得少。

7.2 分数的边界条件

结构分给到 4 而不是 5,是因为那一个静态参照点。四个角点能做的事,一个点做不了,跨场次旋转对齐这一项被直接砍掉。可复现分之所以给满,是因为 NM12 在公开数据里少见地把「算法」和「数据」一起交付;这也意味着任何人按官方脚本跑出的数字,应该与问卷后四列完全一致,不给一致性就说明跑错了。

7.3 已知的、可枚举的偏差

第一,段序固定带来的时间混杂。静默永远在前,音乐永远在后,任何「音乐段更晃」的结论都无法与「站久了更晃」分离。这是设计层面的偏差,不是数据质量问题,但用的时候必须声明。

第二,招募偏差。开放日到场人群偏向年轻、受教育程度较高、对科学活动有兴趣者。年龄下限与上限都出现过极端值,但主体集中在青年段。

第三,样本量口径不一。官方摘要称 113 人,问卷 91 行,八个运动文件的受试者位置合计 78 个。三个口径都存在,差额构成官方未说明。做分析时建议以「有运动数据的人」为分母。

第四,短片段带来的频域限制。最短的音乐片段只有十五秒,做低频分析(比如 0.1 赫兹以下的姿势摆动周期)窗口不够。这也是 §4.4 的案例里那段静默只有三分钟、却已经比最短音乐段长十几倍的原因。

第五,缺少曲目切换的自陈。受试者事前知道音乐会在三分钟后开始,但不知道具体曲目顺序,也没有被问「哪一段让你觉得想动」。这限制了逐段的主观对照。

7.4 外部验证矩阵

验证对象 本文能否承担 说明
2015 批的方法学结论 部分 可作为前序观察,不是独立复现
音乐诱发运动的通用规律 弱 单实验室、单日、单批曲目
姿势控制的临床常模 否 健康志愿者,无筛选记录
人际同步的计算方法 强 多人同场、同一时间轴
音频–运动耦合算法 较强 硬对齐,可做互相关

7.5 它为何能持续:一份无需维护的原始记录

这份数据不会因为没人用而失效。它是单日采集的封闭集合,内容不随外部系统变化;许可证允许商用,下载不需登录;官方代码冻结在仓库里,不依赖任何在线服务。这类资源的价值曲线是平的——不会突然变得更有用,也几乎不会失效,适合作为长期项目的固定参照点。

§8 生态位与历史

8.1 历史沿革:从 2012 到 2020

2012 年 3 月采集,2017 年论文发表在国际声音与音乐计算会议(SMC),2020 年 10 月上传 PhysioNet。这个时间线说明了为什么数据里还留着当年的 Max/MSP 补丁——那是 2012 年现场实际使用的播放软件,一并归档了。

8.2 在音乐认知研究里的位置

音乐诱发运动研究有两个传统。一个研究自愿动作,比如舞蹈、跟拍;一个研究非自愿动作,比如姿势摆动、微动。NM12 属于后者,且是后者里极少数用光学捕捉而非压力板测量头部运动的。这个组合让它同时具备两边的特征:精度接近实验室级,对象却接近自然站立。

8.3 与姿势控制数据集的错位

姿势控制研究的主力设备是测力板,输出压力中心。NM12 输出的是头部位置。两者测的是同一件事的不同环节——身体摇摆时,头部与重心是耦合的,但耦合有延迟、有衰减、有相位差。用头部数据推断重心,需要一套生物力学模型,不能直接等价。

8.4 与库内同主题资源的分工

music-motion-2015 是本文的后继,设计更严谨,样本略有减少,刺激更规整。body-sway-music-vr 换了个测量面,加了虚拟现实。三者在库里并不互相覆盖:要讲「项目起源」用本文,要做「规范对照实验」用 2015,要研究「视觉环境」用 VR 那篇。

§9 使用指引

9.1 三种角色的路径

角色 最短路径 注意
想验证结论的研究者 下问卷 CSV,用官方脚本复算后四列 先确认口径一致,再改算法
想做建模的工程师 下 8 个 TSV,切成静默/音乐两段做二分类 别用绝对坐标,先转相对位移
想研究人际同步的心理学者 下同一场次全部列,算两两相关 区分音乐驱动与视觉耦合

9.1b 三种数据的分工:什么时候该换用别的

同一个研究问题,库里可能有三种资源都能碰到,选错会浪费大量时间。下表按「你手上要算的量」倒推。

你要算的量 首选资源 为什么不是本文
头部线位移与音乐的耦合 本文 —
足底压力中心轨迹 body-sway-music-vr 本文没有测力板,脚下力学信息为零
分段的静默对照 music-motion-2015 本文只有一次状态切换,静默与音乐各一段
全身关节角度 康复类动作捕捉数据 本文只有单点,无骨骼模型
情绪与唤醒度 带主观量表的音乐数据集 本文只有三项体验自评
长时程的姿势漂移 长时间平衡测试数据 本文只有六分钟,且含音乐干预

这张表的价值在于避免「拿着一把锤子找钉子」。很多研究者在找到 NM12 之后,会下意识地把问题改造成这份数据能回答的形状,结果结论对原始问题无效。先确定要算的量,再选资源,顺序不能反。

9.2 一条最短的可用流程

#-- 从原始 TSV 到一个可比较的段级特征
import numpy as np, pandas as pd

path = "mocap_data/nmA.tsv"
raw = pd.read_csv(path, sep="\t", skiprows=12, header=None)
raw = raw.dropna(axis=1, how="all")
cols = raw.columns[: len(raw.columns) // 3 * 3]

head = raw.iloc[:, 3:6].to_numpy(dtype=float)          #-- 第一个受试者 s1
rel = head - head.mean(axis=0)                          #-- 去均值
qom = np.linalg.norm(rel, axis=1)                       #-- 每秒位移量

silence = qom[: 18000]                                  #-- 前 180 秒
music = qom[18000: 36000]                               #-- 后 180 秒

print("静默", silence.mean(), "音乐", music.mean())
print("差", music.mean() - silence.mean())

这段代码省略了元信息解析,直接用固定行数。真实使用时应按 §5.4 的方式读出 MARKER_NAMES 再切片,因为八个文件的行数并不完全一致。qom 的算法也与官方不同——官方用的是平滑后的速度量,这里用的是原始位移模长,两者趋势一致但尺度不同。

9.3 引用方式

要素 内容
作者 Gonzalez, V., Zelechowska, A., & Jensenius, A. R.
年份 2020
标题 MICRO Motion capture data from groups of participants standing still to auditory stimuli (2012)
版本 1.0
平台 PhysioNet
DOI 10.13026/4h9d-gf10
配套论文 Jensenius, A. R., Zelechowska, A., & Gonzalez Sanchez, V. E. (2017). The musical influence on people’s micromotion when standing still in groups. SMC 2017, 195–200.
许可 CC BY 4.0

引用时建议同时给出数据 DOI 与论文,因为论文交代了采集细节,数据页交代了文件结构,两份加起来才是完整的方法学依据。

§10 AI 使用声明

项 说明
撰写方式 基于官方页面、官方文件表头与代码仓库整理,AI 辅助成稿
数据访问 未下载完整数据集,仅读取文件表与文件头部
数字来源 官方页面、官方文件、论文摘要三级,见附录 B
未做之事 未做全量统计、未复现论文结论、未做人口学推断
主观判断 评分与生态位判断属编辑意见,非官方立场
更新责任 官方页面若改版,以官方为准
适用边界 供选型与接入参考,不替代原始方法学文献
联系方式 通过站点反馈渠道

常见误读(避坑清单)

说法 实际 证据
「这是 2015 版的旧版本」 是两次独立采集 官方页面日期、人数、刺激设计均不同,2015 页标注 derived from 2012
「它测的是全身动作」 只有头顶一个点 文件头 NO_OF_MARKERS 与 MARKER_NAMES
「它带情绪评分」 只有三项 1–5 体验自评 问卷表头
「它有四个场地角点」 只有一个 static 点 文件头 MARKER_NAMES
「静默与音乐是交替播放的」 静默三分钟在前,音乐三分钟在后 官方方法节与音频结构
「音乐有三类」 七段曲目,风格跨度大 官方刺激列表
「有 113 份问卷」 问卷仅 91 行 问卷 CSV 行数
「Z 列是竖直方向」 从数值看竖直方向更可能是 Y 首行坐标对比
「它是惯性传感器数据」 Qualisys 红外光学 官方摘要
「可以直接做姿态估计」 无关节定义 只有单点坐标

FAQ

这是不是同一个研究组做的? 是。三份作者完全相同:Victor Gonzalez、Agata Zelechowska、Alexander Refsum Jensenius,都隶属奥斯陆大学 RITMO 中心 MICRO 项目。

和 2015 版是同一批数据吗? 不是。日期、人数、场次数、相机数、刺激结构全部不同,官方在 2015 页面把 2012 列为父项目,并说明 2015 是为了验证 2012 的观察。

多少人? 官方摘要称 113 人,分 8 个场次。问卷 CSV 只有 91 行,且多出一个不存在的 P 组,两个口径并存。

用什么设备? Qualisys 红外光学系统,每场次相机台数见文件头,本批为九台;采样 100 赫兹,单位毫米。

有没有主观评分? 有三个 1–5 的体验自评(是否累、是否感到自己在动、是否感到音乐让自己动得更多),以及睁眼与锁膝两个状态项。没有情绪量表。

音乐是什么? 七段拼接:利盖蒂两段、罗德里戈一段、维瓦尔第一段、D’Angelo 一段、古巴萨尔萨一段、808 State 一段,合计 180 秒。

为什么没有分段静默? 这一届的设计是「长静默后接长音乐」,只在音乐开始处有一次状态切换。2015 那届才改成六十秒交替。

能用来做因果推断吗? 要谨慎。段序固定,时间趋势与音乐效应混杂,需要额外的对照设计才能分离。

能训练姿态估计吗? 不能。每人只有头顶一个点,没有关节监督目标。

许可能用吗? CC BY 4.0,署名即可,包括商用。音频曲目涉及第三方版权,复用前需另行核对。

代码在哪? 数据集内 code/MICRO-master/ 有静态副本,GitHub 上同名仓库有最新版。

术语表

术语 解释
MICRO 项目名,全称 Human Bodily Micromotion in Music Perception and Interaction
NM12 项目内部对 2012 届的简写
NM15 项目内部对 2015 届的简写
Championship of Standstill 项目内部对站立任务的戏称,即「站立不动锦标赛」
微动 micromotion,指站立时刻意压抑后残余的毫米级晃动
QoM quantity of movement,运动量,官方定义的一种位移汇总
静态参照点 static,场地固定标记点,用于监控相机与场地稳定
光学动作捕捉 用多台红外相机三角测量反光点三维坐标
三角测量 多视角重建空间点位置的计算方法
站台标记 地面上标出受试者近似站位位置的胶带
去均值 减去序列均值,使波动围绕零展开
段级特征 对一段记录汇总出的一个数,如平均运动量
人际同步 interpersonal synchrony,多人运动的耦合程度
互相关 两条时间序列在不同滞后下的相关
包络 信号的幅度随时间变化的低频轮廓
段序效应 因刺激呈现顺序固定而产生的时间趋势混杂
开放日 大学面向公众的参观活动,本批受试者的招募场景
NSD 挪威数据保护机构,本实验伦理批准方
Oqus Qualisys 相机型号系列
锁膝 站立时膝关节完全伸直锁定的姿态
压力中心 足底压力合力的作用点,测力板的主要输出
CC BY 4.0 知识共享署名许可,允许商用与改编
刚体对齐 用至少三个点求平移加旋转的坐标变换
父项目 PhysioNet 用于标注派生关系的前序数据记录
DAIMS 本文采用的五维评估框架:充足性、可获取性、可解释性、可维护性、可复用性
NM 系列 项目内部按年份编号的各届采集,NM12、NM15 等
开放获取 无需注册或签署协议即可下载
元信息行 TSV 文件开头以键值对形式给出设备与录制参数的若干行

附录 A:核心数字核对表

项 值 来源 来源层级
参与者人数 113 官方摘要 官方页面
场次数 8 运动文件个数 官方文件
采集日期 2012-03-08 官方摘要 官方页面
相机台数 9 文件元信息 官方文件
采样率 100 赫兹 官方摘要 官方页面
单位 毫米 官方摘要 官方页面
单次时长 6 分钟 官方方法节 官方页面
静默段长 180 秒 官方刺激说明 官方页面
音乐段长 180 秒 官方刺激说明 官方页面
音乐片段数 7 官方刺激列表 官方页面
问卷行数 91 问卷 CSV 官方文件
问卷列数 18 问卷 CSV 表头 官方文件
运动文件合计 78 文件头求和分析 官方文件
音频时长 6 分钟 声音目录 官方文件
发布版本 v1.0 内容页 官方页面
发布日期 2020-10-05 内容页 官方页面
DOI 10.13026/4h9d-gf10 引用节 官方页面
许可 CC BY 4.0 许可节 官方页面
伦理批准号 NSD2457 方法节 官方页面

附录 B:数字的来源分层

层级 数字 说明
官方页面 113 人、8 场次、100 赫兹、毫米、6 分钟、180 秒、7 段音乐、NSD2457 从内容页原样抄录,未做推算
官方文件 9 台相机、91 行、18 列、8 个 TSV、35901 帧等 由文件本身读出,可由他人复核
论文摘要 论文标题、会议与页码、核心观察 来自 SMC 2017 论文集
未核实 逐场次人数、113 与 91 的差额构成、Z 轴朝向 页面未列,本文未逐项核实

附录 C:完整参考文献

  1. Gonzalez, V., Zelechowska, A., & Jensenius, A. R. (2020). MICRO Motion capture data from groups of participants standing still to auditory stimuli (2012) (version 1.0). PhysioNet. https://doi.org/10.13026/4h9d-gf10
  2. Jensenius, A. R., Zelechowska, A., & Gonzalez Sanchez, V. E. (2017). The musical influence on people’s micromotion when standing still in groups. In Proceedings of the 14th Sound and Music Computing Conference (pp. 195–200). Aalto University.
  3. Gonzalez, V., Zelechowska, A., & Jensenius, A. R. (2020). MICRO Motion capture data from groups of participants standing still to auditory stimuli (2015) (version 1.0). PhysioNet. https://doi.org/10.13026/dfv0-sb95
  4. MICRO project, University of Oslo RITMO Centre for Interdisciplinary Studies in Rhythm, Time and Motion. https://www.uio.no/ritmo/english/projects/micro/
  5. MICRO code repository. https://github.com/fourMs/MICRO

附录 D:常用任务代码

#-- 任务 1:静默段 vs 音乐段的组内比较
import numpy as np, pandas as pd

def segment_stats(path, skip=12):
    df = pd.read_csv(path, sep="\t", skiprows=skip, header=None)
    df = df.dropna(axis=1, how="all")
    n = df.shape[1] // 3
    out = {}
    for i in range(1, n):                        #-- 0 是 static
        xyz = df.iloc[:, i * 3: i * 3 + 3].to_numpy(dtype=float)
        rel = xyz - np.nanmean(xyz, axis=0)
        q = np.linalg.norm(rel, axis=1)
        out[i] = (np.nanmean(q[:18000]), np.nanmean(q[18000:36000]))
    return out
#-- 任务 2:组内两两同步相关
def pairwise_sync(df):
    n = df.shape[1] // 3
    series = []
    for i in range(1, n):
        xyz = df.iloc[:, i * 3: i * 3 + 3].to_numpy(dtype=float)
        series.append(np.linalg.norm(xyz - np.nanmean(xyz, 0), axis=1))
    mat = np.corrcoef(np.vstack(series))
    return mat[~np.eye(mat.shape[0], dtype=bool)]
#-- 任务 3:与音频包络的滞后相关
import librosa
y, sr = librosa.load("sound_data/nm12stimuli.wav", sr=100, mono=True)
env = np.abs(y)
lag = np.argmax([np.corrcoef(env[18000:], np.roll(motion[18000:], k))[0, 1]
                 for k in range(-200, 200)])
print("最佳滞后帧", lag - 200)

附录 E:如果只记五件事

  1. 它是 2012 年 3 月 8 日一次性的采集,113 人、8 场次、单日、单实验室,不是持续更新的库。
  2. 设计是「三分钟静默接三分钟音乐」,段序固定,所以「音乐段更晃」的结论含时间混杂。
  3. 每人只有头顶一个反光点,测的是微动,不是动作;不能做姿态估计。
  4. 与 2015 那批是同一项目的两次独立采集,不是同一批数据的两个版本,2015 的设计是为了修复 2012 的顺序问题。
  5. 官方给了代码、音频与原卷问卷,口径全部公开,可完整复算。

编辑说明

本文以 PhysioNet 官方内容页、文件目录与文件头为准,辅以 SMC 2017 论文摘要。凡官方未给出的数字,一律标注「未核实」,不以推断填补。评分与生态位判断为编辑意见,与作者团队无关。若官方页面更新,以官方数据为准。


相关数据集导航

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

  • umwdb — 共享标签:生理信号 / 步态与运动
  • torgo — 共享标签:生理信号 / 步态与运动
  • hbedb — 共享标签:生理信号 / 步态与运动
  • mouse-stroke-cylinder-rearing — 共享标签:生理信号 / 步态与运动
  • music-motion-2015 — 共享标签:生理信号 / 步态与运动
  • ua-speech — 共享标签:生理信号 / 步态与运动
  • gaitndd — 共享标签:生理信号 / 步态与运动
  • minute-level-step-count-nhanes — 共享标签:生理信号 / 步态与运动
  • ppg-dalia — 共享标签:生理信号 / 步态与运动
  • culm — 共享标签:生理信号 / 步态与运动

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

返回 AI-Ready 数据集