最近一段時間,我同時在用 Apple Watch 自帶的健康 App 和一個叫 StressWatch 的第三方 App 看 HRV。下面是同一天、同一塊表,兩個 App 的截圖:
兩張圖的大趨勢是一致的:夜裡睡覺時 HRV 高,早上六點以後一路掉下來,整個白天都在低位。但細看又處處對不上:
- 健康 App 給的是毫秒數:今天的範圍是 9 到 188 毫秒,最新一次(20:17)是 41 毫秒,下午那幾個小時基本在 10 到 30 毫秒之間。
- StressWatch 的 HRV 趨勢圖上乾脆沒有毫秒刻度,只有按狀態上色的點:夜裡是綠色,白天是一片紅。而且它的點比健康 App 密得多,夜裡幾分鐘就一個。
- StressWatch 下面的”實時壓力”更直接:從上午九點多開始,柱子大多頂到了 100 附近。
可我那天下午並沒覺得壓力大,就是人有點木木的,思維不太活躍。
於是有了幾個問題:
- 兩個 App 用的是什麼演算法?
- 為什麼它們要選不同的演算法?
- 不同的演算法,到了使用者這邊看到的東西有什麼不同?
- 再往深一層:HRV 到底為什麼能反映身體狀態?它說的”10”,和我感覺到的”木木的”,是不是一回事?
本文就順著這幾個問題,一層一層往下講。
第一層:HRV 測的到底是什麼
先從最基礎的說起。我們常說”心率 60”,聽起來好像心臟像節拍器一樣每秒跳一下。實際上並不是。如果把每兩次心跳之間的時間(醫學上叫 RR 間期)逐個記下來,你會看到一串像這樣的數字:
1012 ms, 968 ms, 1035 ms, 991 ms, 1047 ms, 973 ms ...平均下來確實接近 60 bpm,但每一拍都不一樣。HRV(Heart Rate Variability,心率變異性)說的就是這串數字的”不一樣”有多明顯。
反直覺的是:健康的心跳恰恰是不規律的。 心跳間隔變化越豐富,通常說明神經系統對心臟的調控越靈活;心跳越像節拍器,反而越可能是身體處在緊繃、疲勞或疾病的狀態12。
Apple Watch 測 HRV 的過程大致是:在你靜止、表戴得比較穩的時候,用背面的光學感測器(PPG)測一小段脈搏,找出每一拍的位置,得到一串逐拍間隔。按 StressWatch 文件的說法,預設情況下這種自動測量大約每 2 到 5 小時一次,運動、低電量模式、表沒戴穩時都會暫停3;開啟房顫記錄等功能或換了新款手錶後會頻繁得多4。我截圖裡的健康 App,幾乎每個小時都有好幾次測量。
到這裡我們有了一串數字。但”不一樣有多明顯”是個模糊的說法,要變成螢幕上的一個數,就得選一個公式。問題來了:用什麼公式?
第二層:兩個 App,兩個公式
答案很簡單,兩個 App 用的公式不一樣:
- 健康 App 用 SDNN。 Apple 在 HealthKit 裡存 HRV 用的資料型別就叫
heartRateVariabilitySDNN,名字裡直接寫明瞭演算法5。 - StressWatch 用 RMSSD。 它的官方文件專門有一篇解釋”為什麼和 Apple 健康的數值不一樣”,原話是:StressWatch 選擇 RMSSD 作為計算方法,因為它比 SDNN 更敏感6。
那它是怎麼拿到資料的?Apple Watch 每次測 HRV,除了往 HealthKit 裡寫一個算好的 SDNN 數值,還會寫一份原始的逐拍心跳序列(HKHeartbeatSeriesSample,watchOS 6 起提供)7。健康 App 只展示前者;第三方 App 獲得授權後可以讀後者,用自己的公式重新算。HRV4Training、Athlytic 這類 App 就是這樣從 Apple Watch 資料裡算出 RMSSD 的4。StressWatch 文件沒寫它具體讀的是哪份資料,但既然它要算 RMSSD,從逐拍序列重算是最直接的路徑(這一點是我的推斷)。
兩個公式分別長這樣。設逐拍間隔為 :
SDNN:所有間隔的標準差。
其中 是所有間隔的平均值。
RMSSD:相鄰兩拍之差的均方根。
公式看著像,其實問的是兩個完全不同的問題:
- SDNN 問的是:這串數整體有多分散? 它不在乎數字的先後順序。
- RMSSD 問的是:每一拍和上一拍差多少? 它只看相鄰的變化。
用一個例子最容易看出區別。下面 A、B 兩段心跳用的是完全相同的 16 個數,只是排列順序不同:
A 的心跳是慢慢變慢、再慢慢變快;B 的心跳每一拍都在大幅跳動。兩段的 SDNN 一模一樣,都是 47.3 ms,因為數字本身沒變;但 RMSSD 一個是 19.3 ms,一個是 88.8 ms,差了 4 倍多。
這就解釋了第一個現象:兩個 App 的數字對不上,不是誰測錯了,而是它們在回答不同的問題6。 上面這個例子也說明,SDNN 和 RMSSD 之間沒有固定的換算比例,所以不能拿一個去校驗另一個。
既然兩個公式都對,為什麼 Apple 選了 SDNN,StressWatch 偏偏選了 RMSSD?
第三層:為什麼要選不同的演算法
Apple 為什麼用 SDNN
SDNN 是 HRV 領域最”正統”的指標。1996 年歐洲心臟病學會和北美起搏電生理學會聯合釋出的 HRV 測量標準(業內常說的 Task Force 標準)裡,SDNN 排在時域指標的第一位,而它最初是為 24 小時動態心電圖 設計的1。臨床上有一個經典結論:心梗後病人的 24 小時 SDNN 低於 50 ms,死亡風險顯著升高8。
HealthKit 是按醫療資料標準設計的,選一個臨床上最有名的指標,是很自然的選擇4。SDNN 還有一個好處:它是”總變異”,交感、副交感、呼吸、體溫、晝夜節律帶來的變化都會算進去,資訊量最全。
問題在於,SDNN 的”全”在短時測量裡反而是缺點。 它會隨記錄時長變大:同一個人,測 1 分鐘和測 24 小時,SDNN 能差好幾倍2。它還會把一些和”狀態”無關的慢變化也算進去,比如測量中途換了個姿勢、心率慢慢往下走。手錶每次只測一小段,這種慢漂移在短視窗裡佔的比重更大。
StressWatch 為什麼用 RMSSD
StressWatch 要做的事情不是給醫生看報告,而是提醒你”現在身體有點緊”。它需要的是一個對短時變化敏感、又不容易被慢漂移帶偏的指標。RMSSD 恰好滿足:
- 只看相鄰兩拍,慢慢的漂移在相鄰兩拍之間幾乎為零,被自然過濾掉了(就像圖 3 裡的 A)。
- 對視窗長度不敏感。 研究顯示,1 分鐘的 RMSSD 和 5 分鐘的 RMSSD 一致性仍然不錯,而 SDNN 和頻域指標在超短視窗裡就不太可靠910。
- 它幾乎只反映副交感神經(迷走神經)的活動,這是它和”壓力”掛鉤的關鍵,下一層專門講。
這也是為什麼絕大多數做恢復、壓力的裝置,比如 Oura、WHOOP、Garmin,以及運動科學圈常用的 HRV4Training,用的都是 RMSSD 或它的對數 lnRMSSD1112。
| SDNN | RMSSD | |
|---|---|---|
| 問的問題 | 整體有多分散 | 相鄰兩拍差多少 |
| 主要反映 | 總變異(多種來源混在一起) | 迷走神經活動 |
| 對記錄時長 | 越長越大,短時與長時不可比 | 較穩健,1 分鐘也能用 |
| 典型場景 | 24 小時臨床評估 | 短時壓力、每日恢復 |
| 誰在用 | Apple 健康 | StressWatch、Oura、WHOOP、Garmin |
到這裡又冒出一個更根本的問題:為什麼”相鄰兩拍差多少”能代表壓力?
第四層:為什麼 HRV 能反映身體狀態
心臟有自己的節拍器,但一直被踩著剎車
心臟裡有一個天然的起搏點,叫竇房結。如果切斷它和神經的聯絡(比如心臟移植後的病人),它自己的節奏大約是每分鐘 100 次左右13。我們靜息心率只有 60 多,是因為迷走神經一直在踩剎車。
調節心跳的有兩套神經系統,關鍵區別在於速度:
- 迷走神經(副交感):釋放乙醯膽鹼,直接開啟心肌細胞上的鉀通道,起效在一秒以內,撤得也快。它可以做到這一拍讓心跳慢一點、下一拍鬆開。
- 交感神經:釋放去甲腎上腺素,要經過細胞內的第二信使通路,起效要幾秒,恢復要幾十秒。它像一個低通濾波器,做不出逐拍的快速變化213。
所以,相鄰兩拍之間的快速變化,基本只能由迷走神經造成。 RMSSD 量的正是這個,於是它成了迷走神經活動的一個無創讀數。
呼吸是最大的推手
最明顯的逐拍變化來自呼吸:吸氣時心跳加快,呼氣時心跳變慢,這叫呼吸性竇性心律不齊(RSA)14。你現在就可以試一下:摸著脈搏慢慢深呼吸,能感覺到吸氣時脈搏變密、呼氣時變疏。這就是圖 3 裡 B 那種”逐拍跳動”的主要來源。
從”迷走神經”到”身體狀態”
迷走神經活躍,意味著身體處在”休息和修復”的模式;當身體需要應對什麼的時候,迷走神經會先撤退,交感神經接管。能讓迷走神經撤退的事情很多:
- 心理壓力:焦慮、緊張時 HRV 下降2。
- 身體負荷:大強度訓練後第二天,晨起 RMSSD 通常低於個人基線,恢復後回升。運動科學裡有專門的”按 HRV 安排訓練”方法,效果不比固定計劃差1115。
- 生病:感染早期,常常在發燒之前,就能看到 HRV 下降、靜息心率上升16。
- 生活方式:喝酒、熬夜、晚飯吃得太晚,第二天的夜間 HRV 往往明顯偏低。
更宏觀地看,有學者提出”神經內臟整合模型”:大腦前額葉透過一條抑制性通路影響迷走神經輸出,所以靜息 HRV 高的人,往往情緒調節和執行功能也更好17。這是 HRV 能從”心臟指標”延伸到”身心狀態指標”的理論基礎。
回到下午那個”10”
現在可以回答開頭的問題了。下午健康 App 裡的 HRV 只有 10 到 30 毫秒、StressWatch 的壓力柱頂到 100,人又木木的,兩者有關係,但不是一回事。
HRV 測的是自主神經對心臟的調控,不直接測大腦清不清醒。下午這兩件事更可能是同一個原因的兩個結果:
- 餐後:消化時迷走張力下降、心率上升,HRV 跟著掉;同時人會犯困。
- 午後低谷:人體晝夜節律在下午本來就有一個警覺度低點,睡眠不足時更明顯。
- 久坐、喝水少、咖啡因作用退去:同時壓低 HRV 和精神狀態。
所以 HRV 低並不需要你”感覺到壓力”,身體層面的負擔(消化、缺覺、脫水)也算負荷,只是主觀上察覺不到。StressWatch 自己的文件也說得很清楚:它測的是身體壓力,不是情緒或認知壓力,“HRV 不等於心理壓力”318。
另外,截圖裡那個低位的數字來自健康 App,是 SDNN。它和 StressWatch 內部用的 RMSSD 不在一個尺度上;StressWatch 給我的”紅色”和”接近 100”,是拿 RMSSD 和我自己的基線比出來的,不是拿 10 毫秒這個絕對值判斷的。夜裡同樣的手錶、同樣的人,兩個 App 都顯示 HRV 很高,這說明白天的低位是一種狀態變化,而不是裝置壞了。
這就引出了使用者側最實際的問題:同樣叫 HRV,兩個 App 給我的體驗到底有什麼不同?
第五層:演算法不同,使用者看到的有什麼不同
把兩邊的差異攤開來看:
| 健康 App | StressWatch | |
|---|---|---|
| 顯示什麼 | 一個 SDNN 原始數值(毫秒) | 一個壓力等級,背後是 RMSSD |
| 更新頻率 | 跟著手錶的自動測量走 | HRV 點更密;“實時壓力”約每 6 分鐘更新一次18 |
| 怎麼解釋 | 不解釋,只給數字和歷史曲線 | 結合靜息心率和個人基線給結論 |
| 需要多久 | 戴上就有 | 需要約 30 天資料,個性化演算法才比較準18 |
有幾點值得展開說:
第一,數字不能跨 App 比較,也不能和別人比。 SDNN 和 RMSSD 不能互換,不同人的 HRV 又受年齡、性別、遺傳影響很大:從 20 歲到 60 歲,RMSSD 大約會少掉一半19。所以 HRV 只適合和自己的過去比。StressWatch 要攢 30 天資料,做的正是建立你個人的基線。
第二,兩邊的點數不一樣多。 對比開頭的截圖,StressWatch 夜裡幾分鐘就有一個 HRV 點,健康 App 一個小時只有幾個。它的 App Store 更新說明提到,在新款手錶上 HRV 最快可以每 5 分鐘更新一次;另一種可能是它把一段逐拍心跳切成更短的視窗分別算 RMSSD(推斷,文件沒寫)。而”實時壓力”按文件的說法是”基於過去的心率和 HRV 資料”算的18,兩次 HRV 之間主要靠每分鐘都有的心率來推(推斷)。所以壓力曲線看起來很連續,不代表每根柱子背後都有一次新的 HRV 測量。
第三,單次讀數噪聲很大。 HRV 每天的自然波動可以超過 10%,體位、呼吸、剛走過幾步、表沒貼緊,都會讓某一次讀數偏離很多11。StressWatch 文件也建議看”當天的整體壓力狀態”,而不是盯著單次讀數18。運動科學裡的標準做法,是看晨起 lnRMSSD 的 7 天滾動平均和它的波動幅度11。
第四,健康 App 給的是”原材料”,StressWatch 給的是”結論”。 原材料更透明,但普通人很難解讀;結論更好用,但演算法不公開,你沒法知道它為什麼這麼判斷。
到這裡,兩個 App 的差別已經說清楚了。但 RMSSD 和 SDNN 只是 HRV 分析裡最簡單的兩個指標。如果想更細地看這串心跳,還有什麼辦法?
第六層:更深一層的 HRV 分析
頻域:把心跳拆成不同的”頻率”
把那串逐拍間隔當成一個訊號,做頻譜分析,可以看到不同快慢的波動各佔多少能量1:
| 頻段 | 範圍 | 主要來源 |
|---|---|---|
| HF(高頻) | 0.15–0.40 Hz | 呼吸帶來的逐拍變化,反映迷走神經 |
| LF(低頻) | 0.04–0.15 Hz | 約 10 秒一個週期的血壓調節反射 |
| VLF / ULF | 更低 | 體溫、激素、晝夜節律 |
這裡有一個流傳很廣的誤解要糾正:很多資料說 LF/HF 比值代表”交感-副交感平衡”,LF/HF 越高越緊張。這個說法已經被生理學界大量質疑。LF 並不是純粹的交感指標,它主要反映血壓調節反射,交感和副交感都參與其中,LF/HF 也就談不上”平衡”20。如果在別的地方看到用 LF/HF 量化壓力,最好打個問號。
另一個實用的結論是:呼吸會直接改變 HRV。 當呼吸放慢到每分鐘 6 次左右,呼吸節律和血壓調節反射的節律正好共振,HRV 會被明顯放大。很多”HRV 呼吸訓練”就是利用這個原理21。反過來說,你剛做完幾分鐘慢呼吸,HRV 會明顯升高,這不代表身體狀態一下子變好了。
非線性:心跳的”複雜度”
心跳調節是一個多層反饋的複雜系統,於是有了一些非線性指標:
- Poincaré 散點圖:以第 拍的間隔 為橫軸、第 拍的間隔 為縱軸畫散點,會得到一個橢圓。橢圓的短軸寬度 SD1 和長軸寬度 SD2 很有意思:可以證明 ,而 22。也就是說,RMSSD 和 SDNN 在這張圖裡分別對應橢圓的”短軸”和”整體大小”,正好把前面兩個 App 的演算法統一到了一張圖上。
- 樣本熵、多尺度熵:衡量序列的”不可預測性”。研究發現,健康年輕人的心跳在多個時間尺度上都保持很高的複雜度,衰老和心衰會讓複雜度下降23。
- DFA α1:衡量心跳序列的分形相關性。近幾年運動科學發現,運動中 α1 降到 0.75 左右大約對應有氧閾值,可以用來劃分訓練強度24。
這些指標消費級產品基本不展示,但它們說明了一件事:HRV 不只是”一個數”,而是一個可以從很多角度觀察的訊號。
講到這裡,最後一個問題就躲不開了:既然 HRV 有這麼多侷限,有沒有比它更好的方式來量化人的狀態?
第七層:HRV 的邊界,以及更好的方式
先說結論:沒有哪個單一指標能全面取代 HRV。 HRV 的優點是無創、便宜、可以連續測、對自主神經很敏感;它最大的缺點是不特異。壓力、生病、喝酒、訓練、沒睡好都會讓它下降,但它不會告訴你是哪個原因。
還有幾種情況下 HRV 會”騙人”:
- 心率本身的影響:心率越高,相鄰兩拍的時間越短,能變化的空間就越小。HRV 和平均心率之間有一部分是數學上的耦合25。
- HRV 高不一定好:房顫、頻繁早搏會讓心跳極度不規律,HRV 數值看起來很高,實際上是病理性的2。
- 耐力運動員的”飽和”:靜息心率非常低的運動員,迷走神經已經接近”飽和”,RMSSD 有時反而會下降,這和疲勞無關11。
所以,目前比較靠譜的思路不是找一個”更好的指標”,而是多訊號結合,按時間尺度分層:
| 時間尺度 | 看什麼 | 回答什麼問題 |
|---|---|---|
| 秒到分鐘 | HRV、皮膚電(只受交感神經支配)、呼吸 | 現在是不是緊張 |
| 天 | 晨起或夜間 HRV 的 7 天均值、靜息心率、睡眠、體溫 | 恢復得怎麼樣,是不是要生病 |
| 月到年 | 最大攝氧量(VO₂max)、運動後心率恢復、體檢指標 | 身體底子怎麼樣 |
其中有兩個值得單獨提:
- 靜息心率:和 HRV 高度相關,但測量誤差小得多,任何裝置都測得準。和 HRV 一起看,比單看 HRV 更穩26。
- 你自己的主觀感受:這一點可能最反直覺。一篇發表在《英國運動醫學雜誌》上的系統綜述比較了運動員的各種監測手段,結論是:主觀問卷(情緒、疲勞、睡眠質量、肌肉痠痛)對訓練負荷的反應,常常比心率、HRV、血液指標這些客觀指標更敏感、更一致27。
回到開頭下午那個場景:你感覺到的”木木的”,本身就是一個有價值的訊號。HRV 的意義不是替代這種感覺,而是在它之外,提供一個可以長期追蹤、可以和自己過去比較的客觀參照。
寫在最後
從兩個對不上的數字出發,我們一路追到了:
- 兩個 App 用的是不同的公式:健康 App 用 SDNN,看整體有多分散;StressWatch 用 RMSSD,看相鄰兩拍差多少。
- 選擇不同是因為目的不同:SDNN 來自 24 小時臨床標準,資訊全但受時長和慢漂移影響;RMSSD 對短時變化敏感,幾乎只反映迷走神經,更適合做壓力提醒。
- 使用者側的差別:數字不能互比,只能和自己的基線比;看趨勢,不看單次讀數。
- HRV 能反映狀態,是因為只有迷走神經快到能製造逐拍變化,而迷走神經活動會被壓力、疲勞、疾病、生活方式壓低。
- HRV 不特異,最好和靜息心率、睡眠、主觀感受一起看。
如果你手邊有 Polar 胸帶或者能匯出逐拍資料的裝置,也可以自己算一下:
import numpy as np
rr = np.array([1012, 968, 1035, 991, 1047, 973]) # 逐拍间隔,单位 ms
sdnn = np.std(rr, ddof=1)rmssd = np.sqrt(np.mean(np.diff(rr) ** 2))sd1 = rmssd / np.sqrt(2)
print(f"SDNN={sdnn:.1f} ms RMSSD={rmssd:.1f} ms SD1={sd1:.1f} ms")一個簡單的實驗:下次感覺人發木的時候,先安靜坐著測一次,然後快走 10 分鐘或者做 5 分鐘慢呼吸,再測一次,看看 HRV 和精神是不是一起回升。如果總是一起變,說明在你身上它們的同源性很強。
參考資料
參考資料
-
Heart rate variability: standards of measurement, physiological interpretation and clinical use93(5):1043–1065 ↩ ↩2 ↩3
-
An overview of heart rate variability metrics and norms5:258 ↩ ↩2 ↩3 ↩4 ↩5
-
More Frequently Asked Questions收藏docs.ideation.lovehttps://docs.ideation.love/stresswatch/en/principle/frequently-asked-questions.html ↩ ↩2
-
Apple Watch Stress Tracking: No Score, But the Data Is There收藏kygo.apphttps://www.kygo.app/post/apple-watch-stress-tracking-explained ↩ ↩2 ↩3
-
heartRateVariabilitySDNN收藏developer.apple.comhttps://developer.apple.com/documentation/healthkit/hkquantitytypeidentifier/heartratevariabilitysdnn ↩
-
Why are the HRV values displayed in StressWatch different from those in Apple Health?收藏docs.ideation.lovehttps://docs.ideation.love/stresswatch/en/principle/why-are-different-from-apple-health.html ↩ ↩2
-
HKHeartbeatSeriesSample收藏developer.apple.comhttps://developer.apple.com/documentation/healthkit/hkheartbeatseriessample ↩
-
Decreased heart rate variability and its association with increased mortality after acute myocardial infarction59(4):256–262 ↩
-
Validity of (ultra-)short recordings for heart rate variability measurements10(9):e0138921 ↩
-
Ultra-short-term heart rate variability indexes at rest and post-exercise in athletes13(3):535–541 ↩
-
Training adaptation and heart rate variability in elite endurance athletes: opening the door to effective monitoring43(9):773–781 ↩ ↩2 ↩3 ↩4 ↩5
-
Comparison of heart-rate-variability recording with smartphone photoplethysmography, Polar H7 chest strap, and electrocardiography12(10):1324–1328 ↩
-
Autonomic and endocrine control of cardiovascular function7(4):204–214 ↩ ↩2
-
Respiratory sinus arrhythmia: a phenomenon improving pulmonary gas exchange and circulatory efficiency94(4):842–847 ↩
-
Endurance training guided individually by daily heart rate variability measurements101(6):743–751 ↩
-
Pre-symptomatic detection of COVID-19 from smartwatch data4:1208–1220 ↩
-
A model of neurovisceral integration in emotion regulation and dysregulation61(3):201–216 ↩
-
When will StressWatch prompt "Stress Overload"?收藏docs.ideation.lovehttps://docs.ideation.love/stresswatch/en/principle/when-will-stresswatch-prompt-stress-overload.html ↩ ↩2 ↩3 ↩4 ↩5
-
Short-term heart rate variability—influence of gender and age in healthy subjects10(3):e0118308 ↩
-
The LF/HF ratio does not accurately measure cardiac sympatho-vagal balance4:26 ↩
-
Heart rate variability biofeedback: how and why does it work?5:756 ↩
-
Do existing measures of Poincaré plot geometry reflect nonlinear features of heart rate variability?48(11):1342–1347 ↩
-
Multiscale entropy analysis of complex physiologic time series89(6):068102 ↩
-
A new detection method defining the aerobic threshold for endurance exercise and training prescription based on fractal correlation properties of heart rate variability11:596567 ↩
-
Why should one normalize heart rate variability with respect to average heart rate4:306 ↩
-
Monitoring training status with HR measures: do all roads lead to Rome?5:73 ↩
-
Monitoring the athlete training response: subjective self-reported measures trump commonly used objective measures: a systematic review50(5):281–291 ↩