2. 可穿戴设备与数据源剖析
可穿戴健康数据接入平台的第一道关口,不是服务器,也不是数据库,而是“设备侧”。如果对设备类型、传感器原理和数据输出格式缺乏清晰认识,后续的解析、存储和告警都会建立在错误假设之上。本节从设备分类入手,逐层剖析传感器如何把生理量转成电信号,再转成平台可消费的数据,并归纳接入过程中最常见的挑战。
一、常见设备类型与数据特征
可穿戴设备可按佩戴位置和测量方式分为几大类。腕带式设备(智能手表、手环)以光电容积脉搏波(PPG)为核心,辅以加速度计和陀螺仪,输出心率、血氧、步数、睡眠分期等;胸带式设备(心率带)使用心电电极,输出 RR 间期和瞬时心率,精度高但佩戴约束强;指夹式设备(脉搏血氧仪)通过双波长透射测量 SpO₂,适合短时点测;贴片式设备(动态心电贴、连续血糖监测 CGM)可连续记录数天,输出高频采样波形或组织间液葡萄糖浓度;此外还有耳戴式(耳温、心率)、臂带式(无创血压)和智能服装(呼吸率、体表温度)。
不同设备的数据特征差异极大:心率带采样率可达 1000 Hz,而手环心率通常 1 Hz 或更低;CGM 每 5 分钟一个点,心电贴则可能每秒数百点。平台在设计接入层时,必须按设备类型区分采样率、时间戳精度、数据量级和传输方式,不能一刀切。
二、传感器原理:从生理量到电信号
PPG 是最常见的可穿戴传感原理。LED 发出绿光(约 525 nm)或红外光照射皮肤,光电二极管接收反射光。血液搏动导致吸收光量周期性变化,形成交流分量(AC)叠加在直流分量(DC)上。心率由 AC 的周期推算,SpO₂ 则由红光与红外光的 AC/DC 比值 R 计算:R = (AC_red/DC_red)/(AC_ir/DC_ir),再通过经验曲线映射为血氧饱和度。运动伪影、佩戴松紧和肤色都会影响 PPG 质量。
心电(ECG)传感器使用两个或多个电极测量体表电位差。胸带设备通常输出单导联信号,R 波峰值检测后得到 RR 间期,进而计算心率变异性(HRV)。加速度计基于 MEMS 电容变化测量三轴加速度,用于计步、姿态识别和睡眠体动判断;陀螺仪测量角速度,常与加速度计融合做姿态解算。温度传感器多用热敏电阻或红外热电堆,前者测体表温度,后者测耳温或额温。CGM 则使用酶电极,组织间液葡萄糖与葡萄糖氧化酶反应产生电流,电流大小与葡萄糖浓度相关。
三、数据输出格式与接入方式
设备输出的数据格式大致分四类。第一类是结构化 JSON,常见于消费级手环通过手机 App 或云 API 返回,字段如 heart_rate、steps、sleep_stage,时间戳多为秒级或毫秒级 Unix 时间。第二类是二进制帧,心率带和心电贴通过 BLE 特征值推送,需要按厂商协议解析字节序、量纲和缩放因子。第三类是点测记录,血氧仪和体温计每次测量生成一条记录,包含测量时间和数值。第四类是连续流,CGM 和动态心电以固定间隔持续输出,数据量大且需要流式处理。
接入方式上,BLE GATT 是最普遍的短距协议:设备作为外设,平台侧通过网关或手机作为中心设备订阅特征值通知。部分设备支持 Wi-Fi 直连或厂商云 API 拉取。无论哪种方式,平台都需要一个设备抽象层,把不同协议、不同字段、不同时间基准的数据统一成内部数据模型。例如,把 heart_rate 统一为 metric_type=HR、value、unit=bpm、timestamp_ms、source_device_id、quality_flag 六个核心字段。
四、接入挑战与应对思路
第一个挑战是时间戳对齐。设备本地时钟可能漂移,不同设备之间时间基准不一致。平台应在接入时记录“设备上报时间”和“网关接收时间”两个时间戳,并在数据模型中保留原始时间戳,便于后续做时钟校正。第二个挑战是采样率差异。1 Hz 的心率和 1000 Hz 的心电不能放在同一张原始表里,应按采样率分层存储:高频波形进时序库或对象存储,低频指标进关系库或宽表。
第三个挑战是运动伪影和数据质量。PPG 在运动时 AC 分量被噪声淹没,平台应支持质量标记(如 quality_flag=0/1/2 表示差/中/好),并在告警和统计时过滤低质量数据。第四个挑战是协议碎片化。同一厂商不同型号的 GATT 特征 UUID 可能不同,建议维护设备型号到解析器的映射表,新增型号时只增加解析配置而不改核心代码。第五个挑战是电量与断连。设备电量低时可能降低采样率或停止上报,平台应记录设备状态并在数据缺失时给出明确标记,而不是把缺失当成零值。
五、一个可参考的设备接入配置示例
下面给出一个简化的设备接入配置片段,用于说明平台如何描述一类设备的解析规则。该示例为教学假设,不代表任何真实厂商协议。
{
"device_model": "example_hr_band_v1",
"transport": "ble_gatt",
"service_uuid": "0000180d-0000-1000-8000-00805f9b34fb",
"characteristics": [
{
"name": "heart_rate_measurement",
"uuid": "00002a37-0000-1000-8000-00805f9b34fb",
"parser": "hr_measurement",
"fields": [
{"name": "hr_bpm", "type": "uint8", "offset": 1, "scale": 1.0, "unit": "bpm"},
{"name": "rr_interval_ms", "type": "uint16", "offset": 2, "scale": 1.0, "unit": "ms"}
],
"sample_rate_hz": 1,
"quality_default": 2
}
],
"timestamp_source": "gateway_receive_time",
"clock_drift_compensation": true
}
这段配置表达了几个关键决策:用 service_uuid 和 characteristics.uuid 定位数据来源;用 parser 指定解析器;用 fields 描述字节偏移、类型、缩放和单位;用 sample_rate_hz 标记采样率;用 timestamp_source 说明时间戳来源;用 clock_drift_compensation 决定是否做时钟校正。平台加载该配置后,即可把原始 BLE 通知解析为统一数据模型中的记录。
六、结果如何观察与判断
接入是否成功,不能只看“有没有数据”。建议观察四个指标:一是数据到达率,即设备上报条数与预期条数的比值,正常应在 95% 以上;二是时间戳单调性,同一设备的时间戳应递增,出现回退说明时钟异常;三是质量标记分布,若低质量数据占比过高,需要检查佩戴或运动状态;四是字段完整率,关键字段缺失率应接近零。只有这四项都正常,才能认为该设备类型的接入链路是健康的。
本节的核心结论是:可穿戴数据接入不是简单的“收数据”,而是要在设备类型、传感器原理、输出格式和接入挑战四个层面建立清晰的工程认知。只有把设备侧的差异抽象成平台侧的统一模型,后续的存储、分析和告警才有可靠基础。