穿戴裝置給的生理數據是怎麼來的?為何智慧手錶/手環/戒指用綠光閃爍就能算出心率,換成紅光與紅外光就能推算血氧?加速度計明明只量手腕晃動,怎麼能算出步數甚至睡眠分期?手錶測到的皮膚溫度,又跟我們平常量的核心體溫有何不同?
最重要的是:把這些數值直接交給 LLM 或 AI 系統時,若我們把「推估出來的數字」當成「精確測量到的物理量」,會帶來多大的偏誤與幻覺?
要回答這些問題,必須先把穿戴數據拆解為三個截然不同的層級。
穿戴裝置儀表板上看似平級的數值——心率、步數、睡眠時間、血氧——其背後的資料生成路徑完全不同。即使是同一種感測器(如 PPG 光學感測器),其原始訊號與最終呈現的數字之間,也隔著多層處理與假設。
為了在工程與資料管線上建立清晰的契約,本系列將穿戴裝置的數據路徑拆解為三個層級:
[層級 1:量測 (Measurement)] ──> 感測器直接感應的物理量(光電訊號、三軸加速度、熱敏電阻)
│ (固定數學公式、確定性信號處理)
▼
[層級 2:計算/指標 (Metric)] ──> 依定義計算,不依賴特定族群參數(脈動週期、RMSSD、加速度峰值)
│ (族群校正、經驗模型、黑盒/機器學習推論)
▼
[層級 3:推估 (Estimation)] ──> 需要外部資料校正或多訊號融合(SpO₂、睡眠狀態、壓力指數)
帶著這三個層級,我們來看穿戴裝置最核心的三大感測器到底感應到什麼:
智慧手環或手錶底部的 PPG(photoplethysmography,光電容積圖)模組,直接感應的是組織微血管床的血容積變化所造成的光吸收量。
三軸加速度計直接感應的是裝置本體的加速度與重力分量(量測)。
步數(Steps):
腕戴裝置計步利用走路時加速度的週期性。由於手腕容易因推車或手勢造成漏計與誤判(Bassett 2017),表現較好的方法採「兩階段處理」:先透過頻率規則(例如主頻率落在人體步行的 0.6–2.0 Hz)或機器學習模型確認使用者「正在走路」(Marcotte 2025;Small 2024),接著才在走路時段內用波峰偵測、門檻穿越或頻率分析計算步數,藉此降低誤判(Marcotte 2025)。前者照判準接近計算,後者屬於推估。
睡眠狀態(Sleep / Wake):
加速度計無法直接測量大腦睡眠。醫學上的黃金標準是多導睡眠圖(Polysomnography, PSG),需同時監測腦電圖(EEG)、眼動圖(EOG)與肌電圖(EMG)。消費型穿戴更進一步結合心率、HRV 與體溫多訊號,透過專利演算法(Proprietary Algorithms)推估用戶睡眠狀態的淺眠、深眠與 REM期(de Zambotti 2019)。這完全屬於推估。
穿戴裝置上的溫度感測器,直接量測到的是手腕皮膚表面溫度(量測),而非臨床常用的口溫、耳溫或肛溫(核心體溫)。
本篇不執行複雜運算,依據皆來自公開醫學與感測工程文獻。範例欄位取自 Day 1 的合成資料 day01_week_daily.csv。
挑選穿戴裝置 6 個常見輸出,往回追溯感測器、直接感應的物理量、中間處理步驟與黃金參考標準,並根據定義給予層級判定:
| 輸出 | 感測器 | 直接感應 | 中間步驟 | 參考標準 | 層級 |
|---|---|---|---|---|---|
| 皮膚溫度 | 溫度計 | 腕部皮膚溫度 | — | 有線熱電偶,但無公認金標準(Bach 2026;Bandiera 2026) | 量測 |
| 心率 | PPG | 微血管床血容積變化 | 脈動波形提取週期(Allen 2007) | ECG | 計算 |
| HRV | PPG | 同上 | 脈搏間隔(PRV)→ RMSSD / SDNN(Schäfer & Vagedes 2013) | ECG R-R | 計算 |
| 步數 | 加速度計 | 身體/手腕加速度 | 先辨識走路,再數波峰/門檻/頻率(Marcotte 2025;Small 2024) | 研究者目視並手動計數(Bassett 2017)或影像標註(Small 2024) | 計算或推估,依演算法而定 |
| SpO₂ | PPG(雙波長) | 紅光與紅外光脈搏 | 比值 R → 動脈血經驗校正曲線(Nitzan 2014) | 動脈血 SaO₂ | 推估 |
| 睡/醒 | 加速度計+多感測器 | 手腕活動與生理訊號 | 專利特徵分類演算法(Cole 1992;de Zambotti 2019) | PSG(腦電等多導) | 推估 |
依上述判準,把 Day 1 CSV 的欄位寫成帶來源與層級的 metadata schema,以 hrv_ms 為例:
# day01_week_daily.csv 欄位語意與層級定義
hrv_ms:
sensor: PPG
physical_measurement: 微血管床血容積變化
derived_via: 脈搏間隔(PRV)→ RMSSD 公式 → 夜間睡眠期間平均
reference: ECG R-R
level: 推估 (Estimation) # 睡眠期間來自睡/醒判斷
上表的 HRV 是單一時間窗算出的 RMSSD,屬於計算;hrv_ms 多了「夜間睡眠期間」這一步,依「任一步推估即推估」變成推估。
其餘三欄格式相同,差別在 derived_via 與 level:
resting_hr_bpm:脈搏波形 → 心率 → 夜間睡眠期間最低穩定心率 → 推估(同樣卡在睡眠期間這一步)sleep_duration_h:手腕活動 → 睡/醒判斷 → 主睡眠時段總時長 → 推估
steps:手腕加速度 → 走路辨識 → 數步 → 計算或推估,依演算法而定在查核文獻與重新檢視感測原理時,梳理出的認知落差:
| 原本以為 | 實際發現 |
|---|---|
| 手錶測血氧只要發射紅外光看吸收度 | 單波長無法計算,必須交替使用紅光與紅外光取比值 R,再比對動脈血 SaO₂ 做經驗校正 |
| 手錶量到的溫度等於身體核心溫度 | 腕上量的是末梢(手腕, 手指)周邊皮膚溫度,與核心溫度相反 |
| 睡著時體溫應該會跟著下降 | 睡前末梢血管擴張散熱,手腕皮膚溫度在入睡前後反而顯著上升,起床後驟降 |
| 手錶能精確辨識睡眠腦波分期 | 加速度計只能感應活動量;近期消費型裝置對照 PSG,判斷睡著的敏感度 ≥0.93,判斷清醒的特異度只有 0.18–0.54,睡眠分期結果不一致 |
| PPG 算出的 HRV 與心電圖完全相同 | 拿到的是脈搏間隔(PRV),靜止時高度吻合,但在活動或心理壓力下與心電圖一致性大幅下降 |
| 心率變異數是指統計學上的 Variance | 通用中文名是「心率變異性」;常用的 SDNN 是標準差,RMSSD 是差值均方根,皆非變異數 |
回到 Day 1:v0 讀完一週的 CSV,第一句就是「你的身體目前處於疲勞累積與自律神經偏緊繃的狀態」。
這是一個健康狀態,上表沒有任何感測器量得到它。CSV 裡沒有這個欄位,從數字到這句話沒有公式,也沒有對照任何參考標準,是模型自己補上的一層推估。它的起點也不是量測:hrv_ms 和 resting_hr_bpm 只取夜間睡眠期間,sleep_duration_h 是主睡眠時段的長度,而睡眠時段來自睡/醒判斷,依判準三個欄位都是推估。CSV 沒有標層級,從輸入看不出這是推估疊在推估上。
Hands-on 那份 schema 的 physical_measurement、reference 、level三個欄位,各自擋下一種誤讀:
physical_measurement:量測層也會讀錯hrv_ms 這欄寫的是「微血管床血容積變化」而不是「心跳」——欄位名沒講的事,這一欄要講。層級是量測,不代表不會被誤讀。腕上量的是末梢皮膚溫度,不是核心體溫;手腳等末梢部位的皮膚溫度,日夜節律和核心體溫正好相反(Kräuchi & Wirz-Justice 1994)。欄位若只寫 temperature,夜裡的上升就可能被當成體溫升高來讀。Day 1 的 CSV 沒有溫度,之後接上有溫度的資料時,這個欄位要寫明量的是哪裡的溫度。reference:能不能驗證,要看有沒有對照標準hrv_ms 的參考標準是 ECG R-R,可以驗證;但 PPG 拿到的是 PRV,靜止時夠準,活動和部分心理壓力下與 ECG 的一致性變差(Schäfer & Vagedes 2013),差多少留到 Day 9 用 PPG-DaLiA 的 ECG 比對。level:把推估讀成事實level,下游才知道這個數字要當「裝置估計」來用。Day 19 定 feature contract 時,這三個欄位是候選。