第2章 心电信号基础:从原理到实战的必修课

做心电算法移植,说白了你得先懂心电信号本身。我见过不少工程师,一上来就急着调滤波器、跑算法,结果连P波和T波都分不清——这活儿肯定干不好。

这一章,咱们把心电信号的基础掰开揉碎了讲。嗯,都是干货。

2.1 心电信号是怎么产生的?

心脏每次跳动,都伴随着电活动。心肌细胞在静息状态下,膜内带负电、膜外带正电。当兴奋传来,细胞膜上的离子通道打开,钠离子、钙离子涌进来,膜电位瞬间翻转——这就产生了动作电位。

你想想看,几十亿个心肌细胞同步放电,这个电信号会传导到体表。我们在皮肤上贴几个电极,就能捕捉到这种微弱的电位变化。这就是心电图的本质。

关键点:心电信号不是心脏本身的机械活动,而是心肌细胞电活动的综合表现。机械收缩是电活动的结果,不是原因。

我个人习惯把心电的产生过程分成三步:

  1. 起搏——窦房结发出电脉冲,约60-100次/分钟
  2. 传导——电信号沿房室结、希氏束、浦肯野纤维传遍整个心脏
  3. 复极——心肌细胞恢复静息电位,准备下一次跳动

我在项目中遇到过一位同事,他总以为心电信号是心脏收缩产生的压力信号。后来调试算法时发现怎么滤波都不对,我帮他一看——他把心电当成了压力波来处理。嗯,这个坑不小。

2.2 典型心电波形特征:P波、QRS波、T波

一个完整的心动周期,在体表记录下来就是P波、QRS波群和T波。咱们一个一个说。

P波

P波代表心房除极。说白了就是心房在收缩前的那一下电活动。正常P波宽度不超过0.11秒,幅度不超过0.25mV。

我提醒一句:P波很微弱,在噪声大的环境下很容易被淹没。做算法时,P波检测往往是第一个难点。

QRS波群

这是心电图上最显眼的家伙。它代表心室除极。QRS波的幅度通常在1-2mV,宽度0.06-0.10秒。

为什么QRS波这么高?因为心室肌肉量大,同步放电的细胞数量多,产生的电信号自然强。

实战经验:我在ARM Cortex-M4上做QRS检测时,发现直接用阈值法容易误检。后来改用斜率+幅度双重判断,准确率从85%提升到了97%。具体做法是:先计算信号的导数,再结合自适应阈值。

T波

T波代表心室复极。幅度约为0.1-0.5mV,宽度0.16-0.40秒。T波形态变化很大,有时候高耸,有时候低平,甚至倒置。

为什么会这样?因为T波受心率、电解质、药物等多种因素影响。做算法时,T波检测比P波还难。

波形 代表意义 典型幅度 典型宽度 检测难度
P波 心房除极 ≤0.25mV ≤0.11s
QRS波 心室除极 1-2mV 0.06-0.10s
T波 心室复极 0.1-0.5mV 0.16-0.40s

2.3 心电信号的频率范围与幅值特性

搞嵌入式心电处理,频率特性必须烂熟于心。我直接给结论:

  • 心电信号主要能量集中在0.05-100Hz
  • QRS波的能量集中在3-40Hz
  • P波和T波的能量集中在0.5-10Hz
  • 体表心电信号幅度:0.1-5mV(典型值1mV)

你想想看,这么微弱的信号,ADC的参考电压通常是3.3V或5V。也就是说,心电信号只占ADC满量程的0.03%左右。这就是为什么前端放大电路那么重要。

注意:采样率的选择直接影响算法效果。我个人建议:

  • 基础心率检测:250Hz就够了
  • P波、T波分析:至少500Hz
  • 心电细节分析(如晚电位):1000Hz以上

在ARM Cortex上,采样率越高,CPU负载越大。我一般选500Hz作为折中点。

2.4 常见噪声源分析

做心电算法,一半时间在对付噪声。我总结了几种最常见的噪声源:

2.4.1 工频干扰(50Hz/60Hz)

这是最烦人的噪声。来自电网的电磁耦合,幅度可达心电信号的10%-50%。

我曾经在一个项目中,工频干扰大到QRS波都看不清。后来发现是导联线屏蔽层接地不良。换了屏蔽线,问题立刻解决。

2.4.2 肌电干扰

肌肉收缩产生的电信号,频率范围10-500Hz。患者紧张、发抖、说话都会引入这种噪声。

肌电干扰的特点是随机性强,很难用固定滤波器去除。我常用的方法是自适应滤波,或者干脆让患者放松。

2.4.3 基线漂移

频率低于0.5Hz的缓慢波动。原因包括呼吸、电极移动、皮肤阻抗变化等。

基线漂移会让心电波形上下晃动,影响ST段分析。高通滤波器可以解决,但截止频率不能设太高,否则会扭曲ST段。

2.4.4 运动伪迹

电极与皮肤相对运动产生的干扰。幅度很大,有时比QRS波还高。

嗯,这个最难处理。我在做动态心电时,运动伪迹是头号难题。后来用了加速度传感器辅助检测,效果不错。

噪声类型 频率范围 幅度特征 常用抑制方法
工频干扰 50/60Hz 正弦波,幅度稳定 陷波滤波器、屏蔽
肌电干扰 10-500Hz 随机、高频 低通滤波、自适应滤波
基线漂移 <0.5Hz 缓慢变化 高通滤波、多项式拟合
运动伪迹 0.1-10Hz 突发、大幅值 模板匹配、加速度辅助

我的建议:在ARM Cortex上做心电算法,不要一上来就搞复杂的滤波器。先做好硬件层面的屏蔽和接地,能省掉一半的软件工作量。我见过太多人把时间花在写数字滤波器上,结果发现换个好点的导联线就全解决了。

好了,心电信号的基础就讲到这里。下一章咱们开始聊如何在ARM Cortex上搭建心电采集的前端电路——那才是真正动手的地方。