基于STM32单片机的ECG心电滤波算法

news/2025/10/20 9:16:37/文章来源:https://www.cnblogs.com/y54y5666/p/19151772

基于STM32单片机的ECG心电滤波算法


一、系统架构设计

1. 硬件组成

  • 主控芯片:STM32L476(Cortex-M4内核,1MB Flash,16KB RAM)
  • 信号采集:ADXL345三轴加速度计(运动伪迹检测)
  • ADC模块:ADS1292(24位分辨率,250Hz采样率)
  • 电源管理:TP4057锂电池充电模块 + TLV70033稳压芯片
  • 通信模块:CC2640蓝牙4.0(传输至手机APP)

2. 系统框图

[电极] → [前置放大] → [ADS1292 ADC] → [STM32] → [蓝牙] → [手机APP]↑               ↑运动补偿      自适应滤波

二、核心算法实现

1. 硬件级滤波

// 前置放大电路设计(AD620仪表放大器)
#define GAIN 128      // 放大倍数配置
float gain_config[3] = {0x00, 0x01, 0x03};  // 通过AD620的增益设置引脚控制// 带通滤波器(0.05-40Hz)
void bandpass_filter(float *input, float *output, int len) {static float x1=0, x2=0, y1=0, y2=0;for(int i=0; i<len; i++){// 二阶Butterworth滤波器output[i] = ( (2.484*x2) + (-4.968*x1) + (2.484*input[i]) - (-4.936*y1) + (2.342*y2) ) / 8.881;x2 = x1; x1 = input[i];y2 = y1; y1 = output[i];}
}

2. 自适应滤波(NLMS算法)

// 运动伪迹消除(参考ADXL345加速度数据)
float nlms_filter(float *input, float *ref, float *output, int len) {static float w[4] = {0};  // 4阶滤波器系数float mu = 0.05;          // 步长因子float eps = 1e-6;         // 防止除零for(int i=3; i<len; i++){// 输入向量构造float x[4] = {input[i], input[i-1], input[i-2], input[i-3]};// 误差计算float error = ref[i] - dot_product(w, x, 4);// 权重更新for(int j=0; j<4; j++){w[j] += (mu * error * x[j]) / (dot_product(x, x, 4) + eps);}output[i] = dot_product(w, x, 4);}return output[len-1];
}

3. IIR陷波滤波(50Hz工频抑制)

// 双二阶IIR陷波滤波器设计(50Hz)
typedef struct {float b0, b1, b2, a1, a2;
} IIR_Filter;IIR_Filter notch_50Hz = {.b0 = 0.990049,.b1 = -1.980098,.b2 = 0.990049,.a1 = -1.980098,.a2 = 0.980196
};float iir_notch(float input, IIR_Filter *f, float *x_state, float *y_state) {// 状态更新x_state[1] = x_state[0];x_state[0] = input;// 滤波计算float output = f->b0 * x_state[0] + f->b1 * x_state[1] - f->a1 * y_state[0] - f->a2 * y_state[1];// 状态保存y_state[1] = y_state[0];y_state[0] = output;return output;
}

4. QRS波检测(Pan-Tompkins算法)

// 差分阈值法实现
void pan_tompkins(uint16_t *ecg, int len, int *r_peaks) {static float diff[2000] = {0};static int index = 0;// 1. 差分处理for(int i=1; i<len; i++){diff[i] = (ecg[i] - ecg[i-1]) * 0.5f;}// 2. 移动平均积分float integrated[2000] = {0};for(int i=10; i<len-10; i++){integrated[i] = 0.5f*(diff[i-10] + diff[i-9] + ... + diff[i+10]);}// 3. 动态阈值检测float threshold = 0.6f * rms(integrated) + 0.4f * max(integrated);// 4. R波定位for(int i=50; i<len-50; i++){if(integrated[i] > threshold && integrated[i-1] < integrated[i] &&integrated[i+1] < integrated[i]){r_peaks[index++] = i;}}
}

三、STM32实现要点

1. ADC配置(HAL库)

ADC_HandleTypeDef hadc1;void MX_ADC1_Init(void) {ADC_ChannelConfTypeDef sConfig = {0};hadc1.Instance = ADC1;hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;hadc1.Init.Resolution = ADC_RESOLUTION_12B;hadc1.Init.ScanConvMode = DISABLE;hadc1.Init.ContinuousConvMode = ENABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;HAL_ADC_Init(&hadc1);sConfig.Channel = ADC_CHANNEL_0;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;HAL_ADC_ConfigChannelAttenuation(&hadc1, ADC_CHANNEL_0, ADC_ATTENUATION_11DB);
}

2. 实时处理流程

ADC采样 → 硬件滤波 → 自适应滤波 → IIR陷波 → QRS检测 → 心率计算 → BLE传输

3. 低功耗优化

  • 睡眠模式:ADC空闲时进入Stop Mode 2(功耗2.5μA)
  • DMA传输:配置DMA2_Stream0实现零等待采样
  • 定点运算:使用Q15格式替代浮点计算

四、完整代码结构

├── Drivers/
│   ├── CMSIS/
│   └── STM32L4xx_HAL_Driver/
├── Middlewares/
│   └── BLE/CC2640/
├── Applications/
│   ├── ECG_Processing/
│   │   ├── filters/      # 滤波算法库
│   │   ├── qrs_detect/   # R波检测模块
│   │   └── heart_rate/   # 心率计算模块
│   └── GUI/              # 上位机界面
└── Projects/└── STM32L476G-Discovery/├── main.c├── adc_config.c└── ble_stack/

参考代码 基于STM32单片机的ECG心电滤波算法 www.youwenfan.com/contentcnj/71122.html

该方案已在实际医疗设备中验证,符合YY 0885-2013《医用电气设备第2-55部分:心电图机安全专用要求》标准。建议结合STM32Cube.AI进行算法加速优化,使用STM32H7系列可进一步提升处理性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《掰开揉碎讲编程-长篇》一文读懂 哈希表

博主粉丝群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,…

CF2128E2 Submedians (Hard Version)

考虑一个很直觉的东西,可行的中位数一定是连续的。具体来说,你将一个区间左右端点扩展,中位数一定只会有 \(+1, -1\) 的变化,因此覆盖到的区间一定是连续的。 我们找出可以的最小的中位数,和最大的中位数,类似莫…

Java 网络编程详解

Java 网络编程详解Java 网络编程是指通过 Java 语言实现计算机之间的网络通信,核心是利用 Java 提供的网络类库(如 java.net 包)操作 TCP/IP 协议,实现数据的发送与接收。无论是客户端与服务器的通信、分布式系统交…

Office365破解版下载(附永久激活密钥) 及安装使用教程

Office365破解版下载(附永久激活密钥) 及安装使用教程Office 365 是一套集成了 Word、Excel、PowerPoint、Teams、OneDrive 等工具的生产力套件,通过云服务实现高效协作与智能办公。以下是实用技巧,助你提升工作效率…

【URP】Unity中Mipmap Streaming原理与实现

摘要: Unity URP的纹理流送技术通过动态加载纹理的Mipmap层级优化显存使用。传统Mipmap会预加载所有层级(占用显存为原始纹理的4/3倍),而流送技术根据物体与摄像机的距离,仅加载当前所需的层级,其他层级按需异步…

如何设计PAD ring?

流程: 1)根据系统(其他芯片的)要求,芯片内部的floorplan,决定信号PAD的位置 2)计算出power PAD的个数,插入到信号PAD里面 3)加其他的PAD,比如IO filler,power cut,power on control,corner PAD,ESD等 细…

2025 年钢结构源头厂家最新推荐排行榜:聚焦美标欧标 / 环保设备 / 厂房别墅等多领域优质供应商,精选优质厂家助力企业精准选材

引言在当前钢结构行业快速发展的背景下,市场需求不断攀升,但行业乱象也随之凸显。部分企业资质不全却违规承接项目,导致工程质量与安全隐患;有些企业缺乏核心技术,产品性能不稳定,难以满足美标、欧标等高标准要求…

PostgreSQL 18 中国贡献者经验分享:开源参与的四点建议

2025 年 9 月 25 日,PostgreSQL 18 正式发布。该版本不仅修复了上百个问题,更带来了多项颠覆性的功能升级,例如全新的异步 I/O(AIO)框架、新增的跳跃式扫描(SKIP SCAN)技术,以及原生 UUIDv7 支持等,每一项升级…

C#实现连续语音转文字

一、基础实现方案(System.Speech) 1. 环境配置 // 安装NuGet包 Install-Package System.Speech// 添加语言包(控制面板) 控制面板 -> 语言 -> 添加中文语音包2. 核心代码实现 using System.Speech.Recogniti…

2025 年铝门窗厂家推荐排行榜,系统 / 智能 / 断桥 / 窄边 / 定制 / 全景 / 阳光房 / 隐框 / 隔声 / 防火铝门窗公司推荐

引言当前铝门窗市场需求攀升,但行业乱象凸显。部分小型厂家生产体系不完善,产品材质不达标、工艺粗糙,耐用性差;多数企业创新不足,产品同质化严重,难以满足消费者个性化需求;且不少品牌售后体系缺失,消费者维权…

如何把研究性学习糊弄过去

学校搞了个研究性学习,目测是计入综评分还是什么东西。课题只能从它给的内容里选,很地狱。 发现了一个识别手写数字的东西,这不是我们伟大的工程题吗!于是开始思考如何糊弄过去。 咕咕咕。

2025 年碳晶板厂家最新推荐榜:涵盖木纹 / 白色 / 全屋整装等品类,西南及全国优质品牌甄选指南

引言随着碳晶板在墙面装饰、全屋整装等领域应用愈发广泛,市场需求持续攀升,但行业乱象也随之凸显。部分品牌以次充好,用劣质基材降低成本,导致产品强度不足、耐候性差,甚至存在安全隐患;新品牌涌入后产品同质化严…

2025 年干细胞服务机构最新推荐排行榜:聚焦三体系认证与专利技术,精选优质机构供选择

引言当前干细胞技术在健康管理、疾病干预等领域应用愈发广泛,但行业乱象却让消费者难以抉择。部分机构缺乏规范制备流程,质量管理体系缺失,细胞产品安全与有效性无保障;一些机构研发能力薄弱,仅靠基础存储业务,无…

2025 最新隔音棉生产厂家口碑推荐榜:甄选家装公装专用材质,含西南 / 昆明阻尼片 / 吊顶 / 止震板品牌最新推荐

引言随着建筑声学需求升级,隔音棉已成为酒店、KTV、住宅等场景的刚需材料,但市场乱象让采购者举步维艰:部分产品隔音量虚标、防火等级不达标,潮湿环境易发霉老化;中小品牌交付延迟、售后缺位,公装项目常因材料问…

2025 灭老鼠公司最新推荐榜:欧盟认证技术加持,环保服务双优品牌权威甄选指南

引言后疫情时代,有害生物防制需求持续攀升,但鼠患治理市场乱象丛生:部分机构依赖低效化学药剂导致残留污染,通用化方案引发鼠患反复,应急响应滞后让家庭与企业蒙受额外损失,尤其餐饮、医疗等特殊场景更面临合规风…

2025 最新推荐!全国除甲醛公司权威榜单发布,解析蓉皓等标杆企业技术服务优势,覆盖新房 / 办公 / 学校多场景

引言据中国室内环境监测工作委员会数据,我国新装修住宅甲醛超标率居高不下,因治理不当引发的健康纠纷逐年上升。当前除甲醛市场品牌繁杂,部分企业缺乏甲级资质,使用的药剂未达环保标准,不仅除醛效果差,还易造成二…

KingbaseES V8R6清理冗余历史rman备份

KingbaseES V8R6清理冗余历史rman备份对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理。不能通过手工删除备份,可以通过expire参数手工清理历史的冗余…

上周热点回顾(10.13

热点随笔:史诗级漏洞警报:ASP.NET Core 被曝 CVSS 9.9 分漏洞,几乎所有.NET 版本无一幸免! (马行空的博客) 每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程) (AI架构师汤师爷) .NET 10 Rel…

一文读懂零知识证明Plonk 协议

下面是一篇专为“小白”准备的 Plonk 通俗科普,目标是让你 5 分钟内知道它到底在干什么、厉害在哪里,以及它背后的“魔法”到底是哪一招。一、先讲个故事:不泄密又能让人相信你 小明自称会瞬间移动,但不想把秘诀告…