← W3 | 作業

練習作業

用課堂上錄到的心電資料,透過 Claude Code + NeuroKit2 產出一份完整的 HRV 分析報告與龐加萊圖。

1

HRV 報告 + 龐加萊圖

在課堂上用 Arduino + AD8232 錄一段至少 5 分鐘的心電訊號(CSV),然後用 Claude Code 寫一個 Python 程式,用 NeuroKit2 分析 HRV 並產出龐加萊圖。

為什麼要 5 分鐘?HRV 的頻域分析(LF/HF ratio)需要至少 5 分鐘的資料才有統計意義。這是臨床標準,不是隨便定的。

Step 1:錄 5 分鐘心電資料

# 課堂上錄,或用模擬器錄
$ python3 python/ecg_plot.py --csv my_ecg_5min.csv

# 錄 5 分鐘 = 150,000 筆 (500 Hz × 300 秒)
# 錄的時候盡量保持靜止,減少肌電雜訊

Step 2:用 Claude Code 寫分析程式

# 建立專案
$ mkdir ecg-hrv && cd ecg-hrv
$ conda activate bioagent
$ pip install neurokit2
$ git init

# 把錄好的 CSV 複製進來
$ cp ../ecg-r4/my_ecg_5min.csv .

# 開 Claude Code
$ claude

Step 3:給 Claude Code 的 Prompt

# 在 Claude Code 裡輸入:

讀取 my_ecg_5min.csv,
這是 500 Hz 取樣的心電圖資料,
欄位是 sample, adc, filtered, lead_off。

幫我用 neurokit2 做以下分析:

1. 用 adc 欄位的原始訊號做 R 波偵測
2. 計算 HRV 指標(時域:RMSSD, SDNN, pNN50;
   頻域:LF, HF, LF/HF ratio)
3. 畫龐加萊圖(Poincaré plot):
   X 軸 = RR(n), Y 軸 = RR(n+1)
4. 產出一份摘要報告,包含所有數值

把結果存成 PNG 圖片和文字報告。

Step 4:推到 GitHub

$ git add .
$ git commit -m "Add HRV analysis with Poincaré plot"
$ git remote add origin git@github.com:你的帳號/ecg-hrv.git
$ git push -u origin main

繳交內容

  • 1. GitHub repo 連結
  • 2. HRV 報告截圖(包含 RMSSD, SDNN, LF/HF 等數值)
  • 3. 龐加萊圖截圖

產出的結果會長這樣

以下是用模擬的 5 分鐘心電資料跑出來的範例,你的實際數據會不一樣:

HRV 分析報告範例

HRV 報告:ECG + R 波、RR 間期趨勢、時域指標、頻域 LF/HF

龐加萊圖範例

龐加萊圖:SD1/SD2 橢圓反映短期與長期心率變異

這個作業練到什麼?

  • 資料採集到分析的完整流程

    從貼電極、錄 CSV、到跑出臨床等級的 HRV 報告——整條路你都走過一遍

  • 用 Claude Code 駕馭陌生的套件

    你不需要先學會 NeuroKit2 的 API。把需求描述清楚,Claude Code 會幫你寫出正確的程式

  • 理解 HRV 指標的意義

    RMSSD 反映副交感神經活性、LF/HF 反映交感/副交感平衡——這些不再只是課本上的名詞,而是你自己身體量出來的數據

  • 龐加萊圖的直覺

    散點越集中代表心率越穩定,沿對角線的分散程度反映長期變異——看一眼圖就能判斷大致的自律神經狀態

HRV 指標速查

時域(Time-domain)

  • SDNN — 所有 RR 間期的標準差。反映整體 HRV。
  • RMSSD — 相鄰 RR 間期差值的均方根。反映副交感(迷走)神經活性。
  • pNN50 — 相鄰 RR 差值 > 50ms 的比例。同樣反映副交感活性。

頻域(Frequency-domain)

  • LF (0.04-0.15 Hz) — 低頻功率。混合交感與副交感。
  • HF (0.15-0.4 Hz) — 高頻功率。主要反映副交感活性。
  • LF/HF ratio — 交感/副交感平衡的粗略指標。

龐加萊圖(Poincaré Plot)

  • SD1 — 垂直對角線的分散度。反映短期(逐拍)變異。
  • SD2 — 沿對角線的分散度。反映長期變異。
  • 形狀 — 越圓越好(變異均勻),細長扁平可能代表自律神經失衡。

提示:如果課堂上沒錄到好的資料,可以用模擬器 ecg_sim.py 搭配 ecg_plot.py --csv 先錄一段合成資料來練習。交作業時請註明是模擬資料。