﻿---
lang: zh-TW
title: "從兩個對不上的 HRV 數字說起：由淺入深理解心率變異性"
description: "同一塊 Apple Watch，健康 App 和 StressWatch 顯示的 HRV 對不上。是算錯了，還是兩個 App
  本來就在測兩樣東西？把 SDNN 和 RMSSD 分開看，HRV 能反映什麼、不能反映什麼也就清楚了。"
pubDate: 2026-10-14
tags: [ "HRV", "健康", "可穿戴设备", "算法" ]
clc: "R33"
hero: "./hero.zh-TW.svg"
refs:
  - id: "1"
    title: "Heart rate variability: standards of measurement, physiological
      interpretation and clinical use"
    site: "Circulation"
    author: "Task Force of the ESC and NASPE"
    date: "1996"
    note: "93(5):1043–1065"
  - id: "2"
    title: "An overview of heart rate variability metrics and norms"
    site: "Frontiers in Public Health"
    author: "Shaffer F, Ginsberg JP"
    date: "2017"
    note: "5:258"
  - id: "3"
    title: "More Frequently Asked Questions"
    url: "https://docs.ideation.love/stresswatch/en/principle/frequently-asked-ques\
      tions.html"
    collect: "ideation-stresswatch-principle-frequently-asked"
    site: "StressWatch 文件"
  - id: "4"
    title: "heartRateVariabilitySDNN"
    url: "https://developer.apple.com/documentation/healthkit/hkquantitytypeidentif\
      ier/heartratevariabilitysdnn"
    collect: "apple-documentation-healthkit-hkquantitytypeiden"
    site: "Apple Developer"
  - id: "5"
    title: "Why are the HRV values displayed in StressWatch different from those in
      Apple Health?"
    url: "https://docs.ideation.love/stresswatch/en/principle/why-are-different-fro\
      m-apple-health.html"
    collect: "ideation-stresswatch-principle-why-are-different"
    site: "StressWatch 文件"
  - id: "6"
    title: "HKHeartbeatSeriesSample"
    url: "https://developer.apple.com/documentation/healthkit/hkheartbeatseriessamp\
      le"
    collect: "apple-documentation-healthkit-hkheartbeatseriess"
    site: "Apple Developer"
  - id: "7"
    title: "Apple Watch Stress Tracking: No Score, But the Data Is There"
    url: "https://www.kygo.app/post/apple-watch-stress-tracking-explained"
    collect: "kygo-apple-watch-stress-tracking-explained"
    site: "Kygo"
  - id: "8"
    title: "Decreased heart rate variability and its association with increased
      mortality after acute myocardial infarction"
    site: "Am J Cardiol"
    author: "Kleiger RE, et al."
    date: "1987"
    note: "59(4):256–262"
  - id: "9"
    title: "Validity of (ultra-)short recordings for heart rate variability
      measurements"
    site: "PLoS ONE"
    author: "Munoz ML, et al."
    date: "2015"
    note: "10(9):e0138921"
  - id: "10"
    title: "Ultra-short-term heart rate variability indexes at rest and
      post-exercise in athletes"
    site: "J Sports Sci Med"
    author: "Esco MR, Flatt AA"
    date: "2014"
    note: "13(3):535–541"
  - id: "11"
    title: "Training adaptation and heart rate variability in elite endurance
      athletes: opening the door to effective monitoring"
    site: "Sports Medicine"
    author: "Plews DJ, et al."
    date: "2013"
    note: "43(9):773–781"
  - id: "12"
    title: "Comparison of heart-rate-variability recording with smartphone
      photoplethysmography, Polar H7 chest strap, and electrocardiography"
    site: "Int J Sports Physiol Perform"
    author: "Plews DJ, et al."
    date: "2017"
    note: "12(10):1324–1328"
  - id: "13"
    title: "Autonomic and endocrine control of cardiovascular function"
    site: "World J Cardiol"
    author: "Gordan R, Gwathmey JK, Xie LH"
    date: "2015"
    note: "7(4):204–214"
  - id: "14"
    title: "Respiratory sinus arrhythmia: a phenomenon improving pulmonary gas
      exchange and circulatory efficiency"
    site: "Circulation"
    author: "Hayano J, et al."
    date: "1996"
    note: "94(4):842–847"
  - id: "15"
    title: "Endurance training guided individually by daily heart rate variability
      measurements"
    site: "Eur J Appl Physiol"
    author: "Kiviniemi AM, et al."
    date: "2007"
    note: "101(6):743–751"
  - id: "16"
    title: "Pre-symptomatic detection of COVID-19 from smartwatch data"
    site: "Nature Biomedical Engineering"
    author: "Mishra T, et al."
    date: "2020"
    note: "4:1208–1220"
  - id: "17"
    title: "A model of neurovisceral integration in emotion regulation and
      dysregulation"
    site: "J Affect Disord"
    author: "Thayer JF, Lane RD"
    date: "2000"
    note: "61(3):201–216"
  - id: "18"
    title: "When will StressWatch prompt \"Stress Overload\"?"
    url: "https://docs.ideation.love/stresswatch/en/principle/when-will-stresswatch\
      -prompt-stress-overload.html"
    collect: "ideation-stresswatch-principle-when-will-stressw"
    site: "StressWatch 文件"
  - id: "19"
    title: "Short-term heart rate variability—influence of gender and age in healthy
      subjects"
    site: "PLoS ONE"
    author: "Voss A, et al."
    date: "2015"
    note: "10(3):e0118308"
  - id: "20"
    title: "The LF/HF ratio does not accurately measure cardiac sympatho-vagal
      balance"
    site: "Frontiers in Physiology"
    author: "Billman GE"
    date: "2013"
    note: "4:26"
  - id: "21"
    title: "Heart rate variability biofeedback: how and why does it work?"
    site: "Frontiers in Psychology"
    author: "Lehrer PM, Gevirtz R"
    date: "2014"
    note: "5:756"
  - id: "22"
    title: "Do existing measures of Poincaré plot geometry reflect nonlinear
      features of heart rate variability?"
    site: "IEEE Trans Biomed Eng"
    author: "Brennan M, Palaniswami M, Kamen P"
    date: "2001"
    note: "48(11):1342–1347"
  - id: "23"
    title: "Multiscale entropy analysis of complex physiologic time series"
    site: "Phys Rev Lett"
    author: "Costa M, Goldberger AL, Peng CK"
    date: "2002"
    note: "89(6):068102"
  - id: "24"
    title: "A new detection method defining the aerobic threshold for endurance
      exercise and training prescription based on fractal correlation properties
      of heart rate variability"
    site: "Frontiers in Physiology"
    author: "Rogers B, et al."
    date: "2021"
    note: "11:596567"
  - id: "25"
    title: "Why should one normalize heart rate variability with respect to average
      heart rate"
    site: "Frontiers in Physiology"
    author: "Sacha J"
    date: "2013"
    note: "4:306"
  - id: "26"
    title: "Monitoring training status with HR measures: do all roads lead to Rome?"
    site: "Frontiers in Physiology"
    author: "Buchheit M"
    date: "2014"
    note: "5:73"
  - id: "27"
    title: "Monitoring the athlete training response: subjective self-reported
      measures trump commonly used objective measures: a systematic review"
    site: "Br J Sports Med"
    author: "Saw AE, Main LC, Gastin PB"
    date: "2016"
    note: "50(5):281–291"
---

最近一段時間，我同時在用 Apple Watch 自帶的健康 App 和一個叫 StressWatch 的第三方 App 看 HRV。下面是同一天、同一塊表，兩個 App 的截圖：

<figure class="hrv-shots" style="display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin:1.5rem 0;">
<img src="/images/hrv/apple-health.webp" alt="健康 App 的心率變異性日檢視：今天範圍 9–188 毫秒，最新 20:17 為 41 毫秒" width="720" height="945" loading="lazy" style="flex:1 1 260px;max-width:340px;height:auto;border-radius:12px;" />
<img src="/images/hrv/stresswatch.webp" alt="StressWatch 的今日 HRV 趨勢和實時壓力：夜間 HRV 高、白天低，白天實時壓力大多接近 100" width="720" height="1022" loading="lazy" style="flex:1 1 260px;max-width:340px;height:auto;border-radius:12px;" />
<figcaption style="flex-basis:100%;text-align:center;font-size:0.9em;opacity:0.75;">左：健康 App。右：StressWatch。同一天的資料。</figcaption>
</figure>

兩張圖的大趨勢是一致的：夜裡睡覺時 HRV 高，早上六點以後一路掉下來，整個白天都在低位。但細看又處處對不上：

- **健康 App** 給的是毫秒數：今天的範圍是 9 到 188 毫秒，最新一次（20:17）是 41 毫秒，下午那幾個小時基本在 10 到 30 毫秒之間。
- **StressWatch** 的 HRV 趨勢圖上乾脆沒有毫秒刻度，只有按狀態上色的點：夜裡是綠色，白天是一片紅。而且它的點比健康 App 密得多，夜裡幾分鐘就一個。
- StressWatch 下面的"實時壓力"更直接：從上午九點多開始，柱子大多頂到了 100 附近。

可我那天下午並沒覺得壓力大，就是人有點木木的，思維不太活躍。

於是有了幾個問題：

1. 兩個 App 用的是什麼演算法？
2. 為什麼它們要選不同的演算法？
3. 不同的演算法，到了使用者這邊看到的東西有什麼不同？
4. 再往深一層：HRV 到底為什麼能反映身體狀態？它說的"10"，和我感覺到的"木木的"，是不是一回事？

本文就順著這幾個問題，一層一層往下講。

---

## 第一層：HRV 測的到底是什麼

先從最基礎的說起。我們常說"心率 60"，聽起來好像心臟像節拍器一樣每秒跳一下。實際上並不是。如果把每兩次心跳之間的時間（醫學上叫 **RR 間期**）逐個記下來，你會看到一串像這樣的數字：

```text
1012 ms, 968 ms, 1035 ms, 991 ms, 1047 ms, 973 ms ...
```

平均下來確實接近 60 bpm，但每一拍都不一樣。**HRV（Heart Rate Variability，心率變異性）說的就是這串數字的"不一樣"有多明顯。**

<figure class="dd dd-figure">
<div class="dd-scroll">
<svg class="dd-svg" viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="hrv-rr-title hrv-rr-desc">
<title id="hrv-rr-title">RR 間期是怎麼來的</title>
<desc id="hrv-rr-desc">上半部分是一段心電圖，相鄰兩個 R 波峰之間的時間就是 RR 間期，依次為 1012、968、1035、991、1047、973 毫秒。下半部分把這些間隔按順序排開，它們圍繞平均值 1004 毫秒上下波動，HRV 衡量的就是這種波動。</desc>
<rect class="dd-frame" width="800" height="400" rx="10"/>
<rect class="dd-zone" x="16" y="16" width="768" height="196" rx="8"/>
<text class="t-zone" x="32" y="44">一段心電圖（示意）</text>
<text class="t-note" x="768" y="44" text-anchor="end">每個尖峰是一次心跳（R 波）</text>
<rect class="dd-zone" x="16" y="228" width="768" height="156" rx="8"/>
<text class="t-zone" x="32" y="256">把間隔按順序排開</text>
<polyline class="dd-edge" points="32,150 44,150 51,154 56,76 61,162 66,150 86,150 98,138 110,150 130.0,150 137.0,154 142.0,76 147.0,162 152.0,150 172.0,150 184.0,138 196.0,150 212.3,150 219.3,154 224.3,76 229.3,162 234.3,150 254.3,150 266.3,138 278.3,150 300.3,150 307.3,154 312.3,76 317.3,162 322.3,150 342.3,150 354.3,138 366.3,150 384.5,150 391.5,154 396.5,76 401.5,162 406.5,150 426.5,150 438.5,138 450.5,150 473.5,150 480.5,154 485.5,76 490.5,162 495.5,150 515.5,150 527.5,138 539.5,150 556.2,150 563.2,154 568.2,76 573.2,162 578.2,150 598.2,150 610.2,138 622.2,150 638.2,150"/>
<path class="dd-edge-acc" d="M58.0 175 V180 H140.0 V175"/>
<text class="t-mono t-acc" x="99.0" y="198" text-anchor="middle">1012 ms</text>
<path class="dd-edge-acc" d="M144.0 175 V180 H222.3 V175"/>
<text class="t-mono t-acc" x="183.2" y="198" text-anchor="middle">968 ms</text>
<path class="dd-edge-acc" d="M226.3 175 V180 H310.3 V175"/>
<text class="t-mono t-acc" x="268.3" y="198" text-anchor="middle">1035 ms</text>
<path class="dd-edge-acc" d="M314.3 175 V180 H394.5 V175"/>
<text class="t-mono t-acc" x="354.4" y="198" text-anchor="middle">991 ms</text>
<path class="dd-edge-acc" d="M398.5 175 V180 H483.5 V175"/>
<text class="t-mono t-acc" x="441.0" y="198" text-anchor="middle">1047 ms</text>
<path class="dd-edge-acc" d="M487.5 175 V180 H566.2 V175"/>
<text class="t-mono t-acc" x="526.9" y="198" text-anchor="middle">973 ms</text>
<line class="dd-edge dd-dash" x1="40" y1="322" x2="578" y2="322"/>
<line class="dd-edge-acc" x1="99.0" y1="322" x2="99.0" y2="314.3"/>
<circle class="dd-card" cx="99.0" cy="314.3" r="4"/>
<text class="t-note" x="109.0" y="318.3">+8</text>
<line class="dd-edge-acc" x1="183.2" y1="322" x2="183.2" y2="358.3"/>
<circle class="dd-card" cx="183.2" cy="358.3" r="4"/>
<text class="t-note" x="193.2" y="362.3">-36</text>
<line class="dd-edge-acc" x1="268.3" y1="322" x2="268.3" y2="291.3"/>
<circle class="dd-card" cx="268.3" cy="291.3" r="4"/>
<text class="t-note" x="278.3" y="295.3">+31</text>
<line class="dd-edge-acc" x1="354.4" y1="322" x2="354.4" y2="335.3"/>
<circle class="dd-card" cx="354.4" cy="335.3" r="4"/>
<text class="t-note" x="364.4" y="339.3">-13</text>
<line class="dd-edge-acc" x1="441.0" y1="322" x2="441.0" y2="279.3"/>
<circle class="dd-card" cx="441.0" cy="279.3" r="4"/>
<text class="t-note" x="451.0" y="283.3">+43</text>
<line class="dd-edge-acc" x1="526.9" y1="322" x2="526.9" y2="353.3"/>
<circle class="dd-card" cx="526.9" cy="353.3" r="4"/>
<text class="t-note" x="536.9" y="357.3">-31</text>
<text class="t-note" x="592" y="326">平均 1004 ms ≈ 60 bpm</text>
<text class="t-say" x="592" y="282">HRV 就是把這些</text>
<text class="t-say" x="592" y="300">上下的偏離壓成一個數</text>
</svg>
</div>
<figcaption>圖 1 · 心率說的是"平均每分鐘跳幾下"，HRV 說的是"每一拍之間差多少"。同樣是 60 bpm，間隔可以像這樣忽長忽短。</figcaption>
</figure>

反直覺的是：**健康的心跳恰恰是不規律的。** 心跳間隔變化越豐富，通常說明神經系統對心臟的調控越靈活；心跳越像節拍器，反而越可能是身體處在緊繃、疲勞或疾病的狀態[^1][^2]。

Apple Watch 測 HRV 的過程大致是：在你靜止、表戴得比較穩的時候，用背面的光學感測器（PPG）測一小段脈搏，找出每一拍的位置，得到一串逐拍間隔。按 StressWatch 文件的說法，預設情況下這種自動測量大約每 2 到 5 小時一次，運動、低電量模式、表沒戴穩時都會暫停[^3]；開啟房顫記錄等功能或換了新款手錶後會頻繁得多[^7]。我截圖裡的健康 App，幾乎每個小時都有好幾次測量。

到這裡我們有了一串數字。但"不一樣有多明顯"是個模糊的說法，要變成螢幕上的一個數，就得選一個公式。**問題來了：用什麼公式？**

---

## 第二層：兩個 App，兩個公式

答案很簡單，兩個 App 用的公式不一樣：

- **健康 App 用 SDNN。** Apple 在 HealthKit 裡存 HRV 用的資料型別就叫 `heartRateVariabilitySDNN`，名字裡直接寫明瞭演算法[^4]。
- **StressWatch 用 RMSSD。** 它的官方文件專門有一篇解釋"為什麼和 Apple 健康的數值不一樣"，原話是：StressWatch 選擇 RMSSD 作為計算方法，因為它比 SDNN 更敏感[^5]。

那它是怎麼拿到資料的？Apple Watch 每次測 HRV，除了往 HealthKit 裡寫一個算好的 SDNN 數值，還會寫一份原始的逐拍心跳序列（`HKHeartbeatSeriesSample`，watchOS 6 起提供）[^6]。健康 App 只展示前者；第三方 App 獲得授權後可以讀後者，用自己的公式重新算。HRV4Training、Athlytic 這類 App 就是這樣從 Apple Watch 資料裡算出 RMSSD 的[^7]。StressWatch 文件沒寫它具體讀的是哪份資料，但既然它要算 RMSSD，從逐拍序列重算是最直接的路徑（這一點是我的推斷）。

<figure class="dd dd-figure">
<div class="dd-scroll">
<svg class="dd-svg" viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="hrv-pipe-title hrv-pipe-desc">
<title id="hrv-pipe-title">同一次測量，兩個 App 讀出兩個數</title>
<desc id="hrv-pipe-desc">Apple Watch 靜止時測一段心跳，寫進 HealthKit 兩份資料：一個 SDNN 數值和一串逐拍心跳。健康 App 展示 SDNN，StressWatch 用 RMSSD 並結合靜息心率和 30 天基線給出壓力等級。</desc>
<defs>
<marker id="hrv-pipe-arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path class="dd-head" d="M1 1 L7 4 L1 7"/></marker>
<marker id="hrv-pipe-arrow-acc" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path class="dd-head-acc" d="M1 1 L7 4 L1 7"/></marker>
</defs>
<rect class="dd-frame" width="800" height="400" rx="10"/>
<rect class="dd-zone" x="16" y="16" width="200" height="368" rx="8"/>
<text class="t-zone" x="32" y="44">Apple Watch</text>
<rect class="dd-zone" x="232" y="16" width="272" height="368" rx="8"/>
<text class="t-zone" x="248" y="44">HealthKit（iPhone）</text>
<rect class="dd-zone" x="520" y="16" width="264" height="368" rx="8"/>
<text class="t-zone" x="536" y="44">App</text>
<path class="dd-edge" d="M200 116 H246" marker-end="url(#hrv-pipe-arrow)"/>
<path class="dd-edge-acc" d="M200 164 H216 Q224 164 224 172 V260 Q224 268 232 268 H246" marker-end="url(#hrv-pipe-arrow-acc)"/>
<path class="dd-edge" d="M488 116 H534" marker-end="url(#hrv-pipe-arrow)"/>
<path class="dd-edge-acc" d="M488 268 H534" marker-end="url(#hrv-pipe-arrow-acc)"/>
<rect class="dd-card" x="32" y="72" width="168" height="110" rx="6"/>
<path class="dd-card-head" d="M32.6 104 V78 Q32.6 72.6 38 72.6 H194 Q199.4 72.6 199.4 78 V104 Z"/>
<line class="dd-edge" x1="32" y1="104" x2="200" y2="104"/>
<text class="t-name" x="48" y="93">光學心率 PPG</text>
<text class="t-mono" x="48" y="121">觸發</text><text class="t-val" x="184" y="121" text-anchor="end">靜止、戴穩</text>
<line class="dd-hair" x1="48" y1="130" x2="184" y2="130"/>
<text class="t-mono" x="48" y="147">間隔</text><text class="t-val" x="184" y="147" text-anchor="end">幾分鐘到幾小時</text>
<line class="dd-hair" x1="48" y1="156" x2="184" y2="156"/>
<text class="t-mono" x="48" y="173">產出</text><text class="t-val" x="184" y="173" text-anchor="end">一段逐拍心跳</text>
<rect class="dd-card" x="248" y="72" width="240" height="84" rx="6"/>
<path class="dd-card-head" d="M248.6 104 V78 Q248.6 72.6 254 72.6 H482 Q487.4 72.6 487.4 78 V104 Z"/>
<line class="dd-edge" x1="248" y1="104" x2="488" y2="104"/>
<text class="t-name" x="264" y="93">HKQuantitySample</text>
<text class="t-mono" x="264" y="121">type</text><text class="t-val" x="472" y="121" text-anchor="end">HRV · SDNN</text>
<line class="dd-hair" x1="264" y1="130" x2="472" y2="130"/>
<text class="t-mono" x="264" y="147">value</text><text class="t-val" x="472" y="147" text-anchor="end">42 ms</text>
<rect class="dd-card" x="248" y="200" width="240" height="136" rx="6"/>
<path class="dd-card-head" d="M248.6 232 V206 Q248.6 200.6 254 200.6 H482 Q487.4 200.6 487.4 206 V232 Z"/>
<line class="dd-edge" x1="248" y1="232" x2="488" y2="232"/>
<text class="t-name t-acc" x="264" y="221">HKHeartbeatSeriesSample</text>
<text class="t-mono" x="264" y="249">beat 1</text><text class="t-val" x="472" y="249" text-anchor="end">1.012 s</text>
<line class="dd-hair" x1="264" y1="258" x2="472" y2="258"/>
<text class="t-mono" x="264" y="275">beat 2</text><text class="t-val" x="472" y="275" text-anchor="end">0.968 s</text>
<line class="dd-hair" x1="264" y1="284" x2="472" y2="284"/>
<text class="t-mono" x="264" y="301">beat 3</text><text class="t-val" x="472" y="301" text-anchor="end">1.035 s</text>
<line class="dd-hair" x1="264" y1="310" x2="472" y2="310"/>
<text class="t-note" x="264" y="327">…</text>
<rect class="dd-card" x="536" y="72" width="232" height="84" rx="6"/>
<path class="dd-card-head" d="M536.6 104 V78 Q536.6 72.6 542 72.6 H762 Q767.4 72.6 767.4 78 V104 Z"/>
<line class="dd-edge" x1="536" y1="104" x2="768" y2="104"/>
<text class="t-name" x="552" y="93">健康 App</text>
<text class="t-mono" x="552" y="121">HRV</text><text class="t-val" x="752" y="121" text-anchor="end">42 毫秒</text>
<line class="dd-hair" x1="552" y1="130" x2="752" y2="130"/>
<text class="t-mono" x="552" y="147">演算法</text><text class="t-val" x="752" y="147" text-anchor="end">SDNN</text>
<rect class="dd-card" x="536" y="200" width="232" height="136" rx="6"/>
<path class="dd-card-head" d="M536.6 232 V206 Q536.6 200.6 542 200.6 H762 Q767.4 200.6 767.4 206 V232 Z"/>
<line class="dd-edge" x1="536" y1="232" x2="768" y2="232"/>
<text class="t-name" x="552" y="221">StressWatch</text>
<text class="t-mono" x="552" y="249">HRV</text><text class="t-val t-acc" x="752" y="249" text-anchor="end">RMSSD</text>
<line class="dd-hair" x1="552" y1="258" x2="752" y2="258"/>
<text class="t-mono" x="552" y="275">靜息心率</text><text class="t-val" x="752" y="275" text-anchor="end">白天平靜時</text>
<line class="dd-hair" x1="552" y1="284" x2="752" y2="284"/>
<text class="t-mono" x="552" y="301">基線</text><text class="t-val" x="752" y="301" text-anchor="end">約 30 天個人資料</text>
<line class="dd-hair" x1="552" y1="310" x2="752" y2="310"/>
<text class="t-mono" x="552" y="327">輸出</text><text class="t-val" x="752" y="327" text-anchor="end">壓力等級</text>
<text class="t-say" x="536" y="358">RMSSD 要從逐拍心跳重新算，</text>
<text class="t-say" x="536" y="376">健康 App 裡看不到這個數。</text>
</svg>
</div>
<figcaption>圖 2 · 同一次測量寫進 HealthKit 兩份資料。健康 App 展示現成的 SDNN，StressWatch 用 RMSSD，再疊加靜息心率和個人基線。圖中數值為示意。</figcaption>
</figure>

兩個公式分別長這樣。設逐拍間隔為 $RR_1, RR_2, \dots, RR_N$：

**SDNN**：所有間隔的標準差。

$$
\mathrm{SDNN} = \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}\left(RR_i - \overline{RR}\right)^2}
$$

其中 $\overline{RR}$ 是所有間隔的平均值。

**RMSSD**：相鄰兩拍之差的均方根。

$$
\mathrm{RMSSD} = \sqrt{\frac{1}{N-1}\sum_{i=1}^{N-1}\left(RR_{i+1} - RR_i\right)^2}
$$

公式看著像，其實問的是兩個完全不同的問題：

- SDNN 問的是：**這串數整體有多分散？** 它不在乎數字的先後順序。
- RMSSD 問的是：**每一拍和上一拍差多少？** 它只看相鄰的變化。

用一個例子最容易看出區別。下面 A、B 兩段心跳用的是**完全相同的 16 個數**，只是排列順序不同：

<figure class="dd dd-figure">
<div class="dd-scroll">
<svg class="dd-svg" viewBox="0 0 800 400" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="hrv-order-title hrv-order-desc">
<title id="hrv-order-title">同一組 RR 間期，兩種排列</title>
<desc id="hrv-order-desc">A 和 B 用的是完全相同的 16 個 RR 間期，只是順序不同。SDNN 兩邊一樣，RMSSD 在 B 裡是 A 的 4 倍多。</desc>
<rect class="dd-frame" width="800" height="400" rx="10"/>
<rect class="dd-zone" x="16" y="16" width="376" height="368" rx="8"/>
<text class="t-zone" x="32" y="44">A · 慢漂移</text>
<text class="t-note" x="32" y="64">心跳先慢慢變慢，再慢慢變快</text>
<line class="dd-hair" x1="56" y1="230.2" x2="376" y2="230.2"/>
<text class="t-note" x="50" y="234.2" text-anchor="end">820</text>
<line class="dd-hair" x1="56" y1="176.9" x2="376" y2="176.9"/>
<text class="t-note" x="50" y="180.9" text-anchor="end">880</text>
<line class="dd-hair" x1="56" y1="123.6" x2="376" y2="123.6"/>
<text class="t-note" x="50" y="127.6" text-anchor="end">940</text>
<polyline class="dd-edge" points="72.0,230.2 91.2,212.4 110.4,194.7 129.6,176.9 148.8,159.1 168.0,141.3 187.2,123.6 206.4,105.8 225.6,105.8 244.8,123.6 264.0,141.3 283.2,159.1 302.4,176.9 321.6,194.7 340.8,212.4 360.0,230.2"/>
<circle class="dd-card" cx="72.0" cy="230.2" r="3.5"/>
<circle class="dd-card" cx="91.2" cy="212.4" r="3.5"/>
<circle class="dd-card" cx="110.4" cy="194.7" r="3.5"/>
<circle class="dd-card" cx="129.6" cy="176.9" r="3.5"/>
<circle class="dd-card" cx="148.8" cy="159.1" r="3.5"/>
<circle class="dd-card" cx="168.0" cy="141.3" r="3.5"/>
<circle class="dd-card" cx="187.2" cy="123.6" r="3.5"/>
<circle class="dd-card" cx="206.4" cy="105.8" r="3.5"/>
<circle class="dd-card" cx="225.6" cy="105.8" r="3.5"/>
<circle class="dd-card" cx="244.8" cy="123.6" r="3.5"/>
<circle class="dd-card" cx="264.0" cy="141.3" r="3.5"/>
<circle class="dd-card" cx="283.2" cy="159.1" r="3.5"/>
<circle class="dd-card" cx="302.4" cy="176.9" r="3.5"/>
<circle class="dd-card" cx="321.6" cy="194.7" r="3.5"/>
<circle class="dd-card" cx="340.8" cy="212.4" r="3.5"/>
<circle class="dd-card" cx="360.0" cy="230.2" r="3.5"/>
<text class="t-note" x="376" y="268" text-anchor="end">第 1 → 16 拍，RR 間期（ms）</text>
<rect class="dd-card" x="32" y="288" width="344" height="84" rx="6"/>
<path class="dd-card-head" d="M32.6 320 V294 Q32.6 288.6 38 288.6 H370 Q375.4 288.6 375.4 294 V320 Z"/>
<line class="dd-edge" x1="32" y1="320" x2="376" y2="320"/>
<text class="t-name" x="48" y="309">同一組 16 個數，均值 890 ms</text>
<text class="t-mono" x="48" y="337">SDNN</text>
<text class="t-val" x="360" y="337" text-anchor="end">47.3 ms</text>
<line class="dd-hair" x1="48" y1="346" x2="360" y2="346"/>
<text class="t-mono" x="48" y="363">RMSSD</text>
<text class="t-val t-acc" x="360" y="363" text-anchor="end">19.3 ms</text>
<rect class="dd-zone" x="408" y="16" width="376" height="368" rx="8"/>
<text class="t-zone" x="424" y="44">B · 逐拍跳變</text>
<text class="t-note" x="424" y="64">每一拍都和上一拍差很多</text>
<line class="dd-hair" x1="448" y1="230.2" x2="768" y2="230.2"/>
<text class="t-note" x="442" y="234.2" text-anchor="end">820</text>
<line class="dd-hair" x1="448" y1="176.9" x2="768" y2="176.9"/>
<text class="t-note" x="442" y="180.9" text-anchor="end">880</text>
<line class="dd-hair" x1="448" y1="123.6" x2="768" y2="123.6"/>
<text class="t-note" x="442" y="127.6" text-anchor="end">940</text>
<polyline class="dd-edge" points="464.0,230.2 483.2,105.8 502.4,212.4 521.6,123.6 540.8,194.7 560.0,141.3 579.2,176.9 598.4,159.1 617.6,230.2 636.8,105.8 656.0,212.4 675.2,123.6 694.4,194.7 713.6,141.3 732.8,176.9 752.0,159.1"/>
<circle class="dd-card" cx="464.0" cy="230.2" r="3.5"/>
<circle class="dd-card" cx="483.2" cy="105.8" r="3.5"/>
<circle class="dd-card" cx="502.4" cy="212.4" r="3.5"/>
<circle class="dd-card" cx="521.6" cy="123.6" r="3.5"/>
<circle class="dd-card" cx="540.8" cy="194.7" r="3.5"/>
<circle class="dd-card" cx="560.0" cy="141.3" r="3.5"/>
<circle class="dd-card" cx="579.2" cy="176.9" r="3.5"/>
<circle class="dd-card" cx="598.4" cy="159.1" r="3.5"/>
<circle class="dd-card" cx="617.6" cy="230.2" r="3.5"/>
<circle class="dd-card" cx="636.8" cy="105.8" r="3.5"/>
<circle class="dd-card" cx="656.0" cy="212.4" r="3.5"/>
<circle class="dd-card" cx="675.2" cy="123.6" r="3.5"/>
<circle class="dd-card" cx="694.4" cy="194.7" r="3.5"/>
<circle class="dd-card" cx="713.6" cy="141.3" r="3.5"/>
<circle class="dd-card" cx="732.8" cy="176.9" r="3.5"/>
<circle class="dd-card" cx="752.0" cy="159.1" r="3.5"/>
<text class="t-note" x="768" y="268" text-anchor="end">第 1 → 16 拍，RR 間期（ms）</text>
<rect class="dd-card" x="424" y="288" width="344" height="84" rx="6"/>
<path class="dd-card-head" d="M424.6 320 V294 Q424.6 288.6 430 288.6 H762 Q767.4 288.6 767.4 294 V320 Z"/>
<line class="dd-edge" x1="424" y1="320" x2="768" y2="320"/>
<text class="t-name" x="440" y="309">同一組 16 個數，均值 890 ms</text>
<text class="t-mono" x="440" y="337">SDNN</text>
<text class="t-val" x="752" y="337" text-anchor="end">47.3 ms</text>
<line class="dd-hair" x1="440" y1="346" x2="752" y2="346"/>
<text class="t-mono" x="440" y="363">RMSSD</text>
<text class="t-val t-acc" x="752" y="363" text-anchor="end">88.8 ms</text>
</svg>
</div>
<figcaption>圖 3 · SDNN 只看這組數有多分散，不管先後順序；RMSSD 只看相鄰兩拍差多少。同樣 16 個數，換個順序，RMSSD 從 19 ms 變成 89 ms。</figcaption>
</figure>

A 的心跳是慢慢變慢、再慢慢變快；B 的心跳每一拍都在大幅跳動。兩段的 SDNN 一模一樣，都是 47.3 ms，因為數字本身沒變；但 RMSSD 一個是 19.3 ms，一個是 88.8 ms，差了 4 倍多。

這就解釋了第一個現象：**兩個 App 的數字對不上，不是誰測錯了，而是它們在回答不同的問題[^5]。** 上面這個例子也說明，SDNN 和 RMSSD 之間沒有固定的換算比例，所以不能拿一個去校驗另一個。

既然兩個公式都對，**為什麼 Apple 選了 SDNN，StressWatch 偏偏選了 RMSSD？**

---

## 第三層：為什麼要選不同的演算法

### Apple 為什麼用 SDNN

SDNN 是 HRV 領域最"正統"的指標。1996 年歐洲心臟病學會和北美起搏電生理學會聯合釋出的 HRV 測量標準（業內常說的 Task Force 標準）裡，SDNN 排在時域指標的第一位，而它最初是為 **24 小時動態心電圖** 設計的[^1]。臨床上有一個經典結論：心梗後病人的 24 小時 SDNN 低於 50 ms，死亡風險顯著升高[^8]。

HealthKit 是按醫療資料標準設計的，選一個臨床上最有名的指標，是很自然的選擇[^7]。SDNN 還有一個好處：它是"總變異"，交感、副交感、呼吸、體溫、晝夜節律帶來的變化都會算進去，資訊量最全。

問題在於，**SDNN 的"全"在短時測量裡反而是缺點。** 它會隨記錄時長變大：同一個人，測 1 分鐘和測 24 小時，SDNN 能差好幾倍[^2]。它還會把一些和"狀態"無關的慢變化也算進去，比如測量中途換了個姿勢、心率慢慢往下走。手錶每次只測一小段，這種慢漂移在短視窗裡佔的比重更大。

### StressWatch 為什麼用 RMSSD

StressWatch 要做的事情不是給醫生看報告，而是**提醒你"現在身體有點緊"**。它需要的是一個對短時變化敏感、又不容易被慢漂移帶偏的指標。RMSSD 恰好滿足：

1. **只看相鄰兩拍**，慢慢的漂移在相鄰兩拍之間幾乎為零，被自然過濾掉了（就像圖 3 裡的 A）。
2. **對視窗長度不敏感。** 研究顯示，1 分鐘的 RMSSD 和 5 分鐘的 RMSSD 一致性仍然不錯，而 SDNN 和頻域指標在超短視窗裡就不太可靠[^9][^10]。
3. **它幾乎只反映副交感神經（迷走神經）的活動**，這是它和"壓力"掛鉤的關鍵，下一層專門講。

這也是為什麼絕大多數做恢復、壓力的裝置，比如 Oura、WHOOP、Garmin，以及運動科學圈常用的 HRV4Training，用的都是 RMSSD 或它的對數 lnRMSSD[^11][^12]。

| | SDNN | RMSSD |
|---|---|---|
| 問的問題 | 整體有多分散 | 相鄰兩拍差多少 |
| 主要反映 | 總變異（多種來源混在一起） | 迷走神經活動 |
| 對記錄時長 | 越長越大，短時與長時不可比 | 較穩健，1 分鐘也能用 |
| 典型場景 | 24 小時臨床評估 | 短時壓力、每日恢復 |
| 誰在用 | Apple 健康 | StressWatch、Oura、WHOOP、Garmin |

到這裡又冒出一個更根本的問題：**為什麼"相鄰兩拍差多少"能代表壓力？**

---

## 第四層：為什麼 HRV 能反映身體狀態

### 心臟有自己的節拍器，但一直被踩著剎車

心臟裡有一個天然的起搏點，叫竇房結。如果切斷它和神經的聯絡（比如心臟移植後的病人），它自己的節奏大約是每分鐘 100 次左右[^13]。我們靜息心率只有 60 多，是因為**迷走神經一直在踩剎車**。

調節心跳的有兩套神經系統，關鍵區別在於**速度**：

- **迷走神經（副交感）**：釋放乙醯膽鹼，直接開啟心肌細胞上的鉀通道，**起效在一秒以內，撤得也快**。它可以做到這一拍讓心跳慢一點、下一拍鬆開。
- **交感神經**：釋放去甲腎上腺素，要經過細胞內的第二信使通路，**起效要幾秒，恢復要幾十秒**。它像一個低通濾波器，做不出逐拍的快速變化[^2][^13]。

所以，**相鄰兩拍之間的快速變化，基本只能由迷走神經造成。** RMSSD 量的正是這個，於是它成了迷走神經活動的一個無創讀數。

### 呼吸是最大的推手

最明顯的逐拍變化來自呼吸：吸氣時心跳加快，呼氣時心跳變慢，這叫**呼吸性竇性心律不齊（RSA）**[^14]。你現在就可以試一下：摸著脈搏慢慢深呼吸，能感覺到吸氣時脈搏變密、呼氣時變疏。這就是圖 3 裡 B 那種"逐拍跳動"的主要來源。

### 從"迷走神經"到"身體狀態"

迷走神經活躍，意味著身體處在"休息和修復"的模式；當身體需要應對什麼的時候，迷走神經會先撤退，交感神經接管。能讓迷走神經撤退的事情很多：

- **心理壓力**：焦慮、緊張時 HRV 下降[^2]。
- **身體負荷**：大強度訓練後第二天，晨起 RMSSD 通常低於個人基線，恢復後回升。運動科學裡有專門的"按 HRV 安排訓練"方法，效果不比固定計劃差[^11][^15]。
- **生病**：感染早期，常常在發燒之前，就能看到 HRV 下降、靜息心率上升[^16]。
- **生活方式**：喝酒、熬夜、晚飯吃得太晚，第二天的夜間 HRV 往往明顯偏低。

更宏觀地看，有學者提出"神經內臟整合模型"：大腦前額葉透過一條抑制性通路影響迷走神經輸出，所以靜息 HRV 高的人，往往情緒調節和執行功能也更好[^17]。這是 HRV 能從"心臟指標"延伸到"身心狀態指標"的理論基礎。

### 回到下午那個"10"

現在可以回答開頭的問題了。下午健康 App 裡的 HRV 只有 10 到 30 毫秒、StressWatch 的壓力柱頂到 100，人又木木的，**兩者有關係，但不是一回事**。

HRV 測的是自主神經對心臟的調控，不直接測大腦清不清醒。下午這兩件事更可能是**同一個原因的兩個結果**：

- **餐後**：消化時迷走張力下降、心率上升，HRV 跟著掉；同時人會犯困。
- **午後低谷**：人體晝夜節律在下午本來就有一個警覺度低點，睡眠不足時更明顯。
- **久坐、喝水少、咖啡因作用退去**：同時壓低 HRV 和精神狀態。

所以 HRV 低並不需要你"感覺到壓力"，身體層面的負擔（消化、缺覺、脫水）也算負荷，只是主觀上察覺不到。StressWatch 自己的文件也說得很清楚：它測的是**身體壓力**，不是情緒或認知壓力，"HRV 不等於心理壓力"[^3][^18]。

另外，截圖裡那個低位的數字來自健康 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é 散點圖**：以第 $i$ 拍的間隔 $RR_i$ 為橫軸、第 $i+1$ 拍的間隔 $RR_{i+1}$ 為縱軸畫散點，會得到一個橢圓。橢圓的短軸寬度 SD1 和長軸寬度 SD2 很有意思：可以證明 $\mathrm{SD1} = \mathrm{RMSSD}/\sqrt{2}$，而 $\mathrm{SDNN}^2 \approx (\mathrm{SD1}^2 + \mathrm{SD2}^2)/2$[^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 的意義不是替代這種感覺，而是在它之外，提供一個可以長期追蹤、可以和自己過去比較的客觀參照。

---

## 寫在最後

從兩個對不上的數字出發，我們一路追到了：

1. **兩個 App 用的是不同的公式**：健康 App 用 SDNN，看整體有多分散；StressWatch 用 RMSSD，看相鄰兩拍差多少。
2. **選擇不同是因為目的不同**：SDNN 來自 24 小時臨床標準，資訊全但受時長和慢漂移影響；RMSSD 對短時變化敏感，幾乎只反映迷走神經，更適合做壓力提醒。
3. **使用者側的差別**：數字不能互比，只能和自己的基線比；看趨勢，不看單次讀數。
4. **HRV 能反映狀態，是因為只有迷走神經快到能製造逐拍變化**，而迷走神經活動會被壓力、疲勞、疾病、生活方式壓低。
5. **HRV 不特異**，最好和靜息心率、睡眠、主觀感受一起看。

如果你手邊有 Polar 胸帶或者能匯出逐拍資料的裝置，也可以自己算一下：

```python
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 和精神是不是一起回升。如果總是一起變，說明在你身上它們的同源性很強。

---

## 參考資料
