怎麼錄檔
加上 --csv 參數就能一邊看波形、一邊錄檔:
$ python3 python/ecg_plot.py --csv my_ecg.csv
關掉視窗或按 Ctrl-C 結束,程式會告訴你錄了幾筆。
檔案內容
sample,adc,filtered,lead_off
0,8213,0.000,0
1,8215,0.012,0
2,8210,-0.035,0
3,8198,-0.142,0
4,8247,0.381,0
5,8402,1.823,0
6,8510,2.941,0
7,8389,1.607,0
8,8244,0.338,0
9,8212,-0.008,0
...
四個欄位
-
sample流水號,從 0 開始。要算時間就除以取樣率。
-
adcArduino 原始 ADC 值。14-bit 解析度,範圍 0~16383。這是未經處理的原始訊號。
-
filteredPython 端濾波後的值(已去基線漂移、60Hz 市電、高頻肌電雜訊)。畫面上看到的波形就是這個值。
-
lead_off電極脫落狀態。0 = 三片都貼好,1 = 至少一片脫落。
關鍵數字
500
Hz 取樣率
每秒 500 筆,由 Arduino 韌體決定
時間還原
# 第 N 筆是第幾秒
time_sec = sample / 500
檔案大小估算
- 錄 1 分鐘 → 30,000 筆 → ~1 MB
- 錄 5 分鐘 → 150,000 筆 → ~4 MB
- 錄 10 分鐘 → 300,000 筆 → ~8 MB
為什麼保留原始 ADC 值?
adc 欄位是 Arduino 直接讀到的未處理值。濾波演算法可以改、可以重跑,但原始訊號丟了就沒了。
所以永遠保留原始值,分析都在事後做。想換不同的濾波參數?用 ecg_replay.py 重播 CSV,就能用新的設定重新跑一次:
# 用不同的陷波頻率重播
$ python3 python/ecg_replay.py my_ecg.csv
# 另一個終端機
$ python3 python/ecg_plot.py -p /dev/ttys012 --notch 50
用 Python 讀你的資料
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("my_ecg.csv")
# 還原時間軸
df["time"] = df["sample"] / 500
# 畫原始訊號
plt.figure(figsize=(12, 4))
plt.plot(df["time"], df["adc"], lw=0.5)
plt.xlabel("Time (s)")
plt.ylabel("ADC")
plt.title("Raw ECG")
plt.show()
# 只看貼好的部分
good = df[df["lead_off"] == 0]
print(f"有效資料: {len(good)} 筆 / {len(good)/500:.1f} 秒")