基于 Edge Impulse 与 Arduino Nano 33 BLE Sense 的精准 ECG 分析仪
元件与材料
| Arduino Nano 33 BLE Sense | × | 1 |
| SparkFun AD8232 单导联心率监测模块 | × | 1 |
| ElectroPeak 0.96" OLED 128×64 显示模块 | × | 1 |
所需工具
- 电烙铁
- 无铅焊锡丝
- 10 根 5cm 跳线
软件与云服务
- Edge Impulse Studio (TinyML 模型训练平台)
- MATLAB (信号仿真与数据生成)
- Arduino IDE
- Visual Studio 2017
项目背景
突发心脏死亡率上升 — 全球关注
过去十年突发心脏死亡显著增加,尤其在印度等发展中国家,除基因和生活方式外,农村医疗资源匮乏是主要原因。
技术方案:TinyML 离线 ECG 分析
利用 Edge Impulse 开发掌上型 ECG 分析仪,无需联网、无需高性能主机,单片机端即时推理,延迟极低。模型仅 15KB ROM,可部署于任意 TinyML 支持的 MCU。可识别:正常窦性心律、房颤 (Atrial Fibrillation)、一度房室传导阻滞 (First-Degree Heart Block)。
现有方案局限
- IoT 设备上传原始波形至云端/手机分析,依赖网络
- PC 软件分析,依赖高算力主机
- 均无法离线实时判读
系统架构
- AD8232 采集 ECG 信号
- MATLAB Signal Builder 仿真生成房颤、一度房阻波形
- 创新特征工程:从滤波后 ECG 提取 R-R 间期、P-R 间期波形
- Edge Impulse 训练分类模型
- 部署至 Nano 33 BLE Sense,集成应用代码

ECG 基础知识
ECG 波形包含 P、Q、R、S、T 波。房颤表现为 R-R 间期极度不规则;一度房阻表现为 P-R 间期 > 200ms。



核心创新:特征工程提升精度
原始滤波波形在 3 秒窗口难以区分,直接训练准确率 <23%。长窗口又增加算力。借鉴医生读图思路:人工计算 R-R、P-R 间期小格数。由此构造两个新波形:
- R-R 间期波形:正常恒定 100,偏离时降至 -100
- P-R 间期波形:正常恒定 50,P-R>200ms 时降至 -50
该方法将模型准度提升至 >90%。


Edge Impulse 训练流程
- 配置
SIMULATION宏:0=实测 AD8232,1=MATLAB 仿真数据 - 注释/取消注释对应数据缓冲区
- 采集三类标签数据:Normal、Atrial Fibrillation、First-Degree Heart Block
- Edge Impulse Daemon 采样率设为 202 Hz:
edge-impulse-daemon --frequency 202 - 冲击设计:窗口 3000ms,增量 2999ms,启用 K-means 异常检测
- 频谱特征:滤波器类型 None
- NN 分类器:40 轮,学习率 0.005,达 92.9% 训练准确率
- 异常检测特征:P-R 间期 RMS、R-R 间期 RMS
测试与部署
测试集准确率 ~97%。部署选 Arduino 库,导入 IDE。另需加入 ECG_Analyzer 库 (含解码算法)。将应用代码合并至 EI 生成的 nano_ble33_sense_accelerometer_continuous 例程,保存为 ECGAnalyzer.ino,烧录时设 SIMULATION=0。
硬件连接
按 Fritzing 图接线:AD8232 输出接 A0,LO+/LO- 接 D2/D3,OLED 接 I2C (A4/A5)。


成品展示


代码仓库
GitHub (含 EI 部署库、ECG_Analyzer 库、MATLAB 脚本、Signal Builder 模型)
原理图
ecgdefault_SjMMcgW8jY.fzz (Fritzing 文件)

制造工艺