為Garmin手錶開發Poincaré HRV Visualizer 觀察自律神經的即時變化

延續前一篇開發的「即時心率顯示圖表」並順利上架後,我打算重啟一個三年前的挑戰,在手錶上繼續開發心率變異性(HRV)的圖表

這項計畫的核心在於分析「連續兩次心跳的時間間隔」(RR Interval),藉此觀察人體生理狀態的微妙變化。目前主流穿戴裝置(如 Apple Watch、Garmin)都有內建 HRV 偵測,並以此推算使用者的壓力指數。

(註:雖然在穿戴裝置上我們習慣稱之為 RR Interval,但由於手錶多是透過 PPG 光學感測器偵測血流脈動,而非直接量測心臟電位,因此在生理訊號處理上,更精確的說法是偵測脈搏波峰之間的 Peak-to-Peak (PP) Interval 或 NN Interval。)

而我這次的目標,是直接利用這些心跳間隔數據,繪製出能展示心臟動態規律的 龐加萊圖(Poincaré Plot)

什麼是龐加萊圖?

假設我們測得的一連串心跳間隔(單位為 ms)為 $RR = \{RR_1, RR_2, RR_3, \dots, RR_n\}$。

我們可以將「本次間隔 $RR_n$」作為 $X$ 軸,「下次間隔 $RR_{n+1}$」作為 $Y$ 軸,組成一系列座標點:

$$ (x, y) = (RR_n, RR_{n+1}) $$

將這些點繪製在二維空間中,就能觀察到心跳與心跳之間的「動態演變」,這反映了自律神經系統中交感神經副交感神經的拉鋸過程:

  • 當交感神經占優勢(壓力大、運動中): 心跳會變得非常規律,每次間隔趨於一致。此時座標點會緊密凝聚在 $y = x$ 的對角線上。



  • 當副交感神經活躍(放鬆、休息): 心臟調節的靈活性增加,導致心跳間隔產生波動(HRV 較高)。此時點位會顯得分散,形成類似橢圓形的雲狀分布。



我設計的程式提供三種模式(Wide, Zoom, Auto),針對 Poincaré 散佈圖提供不同的「視角」:

1. Wide Mode (廣角模式):大局觀

  • 心率範圍:固定在 50 - 130 BPM
  • 使用時機:最適合一般走動或輕度活動。它提供了一個穩定的參考系,讓你一眼看出當前心跳是在平均範圍內,還是正處於劇烈變動。


2. Zoom Mode (縮放模式):精細度

  • 心率範圍:固定在 60 - 90 BPM
  • 使用時機:專為靜坐、冥想或深度放鬆設計。在這個區間,微小的心跳間期差異會被放大顯示,讓你更容易捕捉到每一次深呼吸帶來的副交感神經脈衝。


3. Auto Mode (自動縮放):全視角

  • 心率範圍:動態調整。App 會自動根據過去 60 點的數據極值,計算出最適合的顯示範圍。
  • 使用時機:如果你發現自己的心跳超出了 Wide/Zoom 的預設範圍,或者想要追求「最高的細節度」,Auto Mode 是最佳選擇。它能確保所有點始終保持在畫面中央,並佔據最大顯示面積。




其他數據:SD1、SD2、R 與 A

在 Poincaré 圖左上角即時更新的數據,是透過將心跳點群旋轉 45 度後的幾何投影計算得出的。



1. SD1 (短軸):副交感神經的「即時煞車」

  • 計算公式: $$ SD1^2 = \frac{1}{2} Var(RR_n - RR_{n+1}) $$ 幾何上,它是垂直於 $y=x$ 直線的標準差。
  • 生理意義:主要受迷走神經(副交感神經)調控。反映了身體在極短時間內調整心跳的能力。當你進行深呼吸時,SD1 會迅速增加。數值越高,代表副交感神經越活躍,身體正處於高效的修復狀態。

2. SD2 (長軸):自律神經的「總體引擎」

  • 計算公式: $$ SD2^2 = 2 Var(RR_n) - \frac{1}{2} Var(RR_n - RR_{n+1}) $$ 幾何上,它是沿著 $y=x$ 直線方向的標準差。
  • 生理意義:反映生理系統的總體頻寬,受交感與副交感共同影響。SD2 代表你的「生理韌性」。若 SD2 過低,代表心跳變得極度規律且僵硬(Rigid),可能暗示過度訓練或慢性壓力。

3. R (Ratio) - 自律神經平衡比

  • 計算公式: $$ R = \frac{SD1}{SD2} $$
  • 代表意義:反映「煞車」與「油門」的相對強度。
    • 低比例 ($R < 0.5$):通常出現在運動中或極大壓力下,代表交感神經過旺。
    • 中等比例 ($0.5 \le R \le 0.7$):理想的安靜休息狀態。
    • 高比例 ($R > 0.8$):極度放鬆或迷走神經亢進。

4. A (Area) - 總體能量 (橢圓面積)

  • 計算公式: $$ A = \pi \cdot SD1 \cdot SD2 $$
  • 代表意義:Poincaré 橢圓所覆蓋的面積,反映心血管系統總體調節能力的強弱。面積越大,代表心血管系統具備越高的韌性與應變能力。





其他圖表解析

除了三張不同縮放比例的Poincaré 圖外,另外還有兩張圖

Autonomic State Map (ASM):神經態勢圖

橫座標是SD1,縱座標是SD2,畫面中有一個白色參考點為 (60秒的平均) ,橙色點則為即時的狀態 (最近15秒內的計算結果)。斜線標示了SD1=SD2的直線。

Energy vs Balance (能量平衡圖):抗壓儲備指標

  • X 軸為平衡比 SD1/SD2的比,Y 軸為面積面積,但以對數顯示 (Area Log Scale)。



  • 圖表格線
    • X 軸兩條格線是 SD1/SD2=0.5 與 SD1/SD2=1.0 :這是判斷平衡的標尺。如果你在Poincaré 圖的橢圓沿著越扁,那麼在這張圖上你的點就會越靠左,而如果橢圓越高則越靠右。
    • Y 軸兩條格線是 10^3 (1000) 與 10^4 (10000) 格線:代表的就是那個橢圓的面積,越大則Y座標越高。

應用場景

我給幾個朋友測試過,也用這個圖表在許多場景測試過。首先每個人的狀況不一樣,所以你應該先觀察自己當下的狀態後,搭配這些圖表來進行生理回饋,了解當下的狀況。

在深呼吸或冥想或是進食時,副交感神經會像「即時煞車」一樣介入,導致心跳間期出現顯著的不規律波動。這在三張圖表中會呈現以下連動:

  1. Poincaré 圖:橢圓明顯「變胖」。點往兩側延伸,SD1 顯著增加。


  2. Autonomic State Map (ASM):即時狀態(橙色點)會向右方(SD1 軸)飄移,顯示煞車力道增強。


  3. Energy vs Balance 圖:點會往「右上角」移動,代表能量儲備(面積)增加且系統趨於平衡。



當身體進入「戰或逃(Fight-or-Flight)」模式時,交感神經會接管主導權。為了維持穩定的輸出,心臟會像精密運行的時鐘,心跳間期的變異會大幅縮小。

  1. Poincaré 圖 (Wide Mode):橢圓會變得極度「乾癟」且「細長」。所有的點緊緊貼附在 $y=x$ 的對角線上,代表 $RR_n$ 與 $RR_{n+1}$ 幾乎相等,SD1(短軸)幾乎消失。

  2. Autonomic State Map (ASM):即時狀態(橙色點)會向左方與上方移動(靠近 Y 軸),反映出 SD1(煞車)極低,而由交感主導的規律性讓點留在高位。


Energy vs Balance 圖:點會掉入「左下角」或「左方」。平衡比 $R$ 掉到 $0.5$ 以下,且因為變異性變小,總體面積(能量)也會顯著縮水。




數據本身沒有好壞,只有『適配性』。當你在深蹲或進行高強度簡報時,你應該是「壓力模式」,這代表你的身體正在全神貫注應戰。但如果是在深夜睡覺時看到這種圖,那就是身體在對你發出過度勞累的警訊了。

另外,在使用本 App 時,若看到底部指示燈變為黃色或紅色,代表手錶感測器暫時抓不到精確的脈搏波峰。這是 Garmin 光學心率感測器 (OHR) 的物理限制。你可以收緊錶帶減少雜訊、保持靜止來讓數據正常。

或在Garmin Connect IQ搜尋 POINCARÉ HRV VISUALIZER