何英杰,刘娟秀,梁飞
(成都工业学院电子工程学院,四川成都 611730)
我国心血管疾病患者已达3.3 亿人,心血管疾病已经是我国所有疾病发病率、死亡率的首位[1]。传统的短时心电图由于心电采集时间不长,在实际的诊断过程中很难诊断出心率异常。而动态心电图(又叫长程心电图)的采集时间很长,采集时患者的生活环境也更为多样。为发现在常规体表心电图检查时不易发现的心律失常和心肌缺血等症状,为临床诊断、治疗及判断疗效提供重要的客观依据[2]。本文设计了一款可实时远程监控的移动便捷式心电采集系统。
本系统采用德州仪器的ECG 专用模拟前端ADS1292 对人体进行心电信号和呼吸信号进行采集。通过乐鑫的ESP32 对采集后的数据进行处理,并发送到服务器。系统框图如图1所示。
图1 系统总体框图
德州仪器的ADS1292 有两个低噪声可编程增益放大器(PGA)和两个高分辨率模数转换器(ADC),内置右腿驱动放大器、持续断线检测还完全集成型呼吸阻抗测量,方便设备小型化。功耗低(每个通道335μW),使得充一次电可以长时间使用。乐鑫的ESP32自带通讯,只需外加些许电路即可完成无线通讯,无需外加其他模块,可以简化电路设计和缩小体积。
本设计采用电池或USB供电。ADS1292对电源要求较高,而ESP32有射频功能电流波动较大,对电源的负载调整率有较高要求。且ESP32的最大电流在500mA左右,因此本设计采用双LDO 隔离供电。电源抑制比较高的AP211 2 芯片给ADS1292 供电,输出最大电流较大的AMS1117 给ESP32 供电,同时ADS1292电源输入采用了磁珠隔离,可以降低ADS1292的电源纹波。
图2 双LDO隔离供电电路
ADS1292采集部分对电源,呼吸检测和右腿驱动进行了滤波,电路如图3所示。
图3 ADS1292采集部分主要电路图
采集信号通过主控芯片的通信模块传输到上位机及服务器上,如图4所示。Type-c接口主要用于直接与电脑通讯和下载程序,其需要配一个串口通讯芯片,这里选址的是CH340K。CH340K配合两个NPN三极管可以自动下载电路。ESP32使用的是安信可的ESP32最小板,所以不需要做过多处理。
图4 主控芯片及外围电路
心电信号非常微弱,采集的典型值在1mV 左右,其幅值范围为0.05-4mV,一般而言,心电信号频率较低,其频率范围为0.05-100Hz,并且能量主要集中在0.05-40Hz,易于耦合工频等共模干扰。心电信号很容易受到外界干扰,导致信号畸变,特征值很难被提取。干扰主要来自两个方面[3]。
(1)人体的干扰。人体的干扰主要由人体的呼吸、皮肤、运动等因素造成的。
(2)技术上的干扰。首先电极贴与人体表面的接触不能保持始终不变,这就会造成连接点阻抗的变化。其次是环境的干扰,在仪器使用环境中会有大量的50Hz的工频干扰,会耦合到心电信号。此外采集电路以及电路与人的连线中也存在干扰。采集电路会因为电源的纹波和寄生参数而引入干扰。上述干扰情况表现在采集的心电信号上为基线漂移、50Hz 干扰和高频干扰。
心电信号的基线漂移是指心电信号的基线在某个数值附近缓慢上下飘动。漂移的频率一般在0~0.2HZ。基线漂移会导致波形识别和特征提取的误差增加。处理方法主要分为小波变换法、曲线拟合和传统高通滤波三种。小波变换继承和发展了短时傅立叶变换局部化的思想是时间频率的局部化分析,能自适应时频信号分析的要求[4]。
小波变换虽然可以很好地消除基线漂移,但是计算量太大。曲线拟合法是使用曲线拟合出心电信号的基线,然后让心电信号减去基线,就可以得到去基线的心电信号。采用曲线拟合的方法虽然可以在稳定的基线漂移中效果较好,但对于基线变化明显时效果不佳。
基线漂移的频率很低在0~0.2Hz,心电信号的集中在0.05-40Hz,可以较好地区分传统的高通滤波器,可以很好地改善低心电信号的基线漂移问题,传统的高通滤波已经足够。所以本系统采用传统高通滤波法抑制基线漂移。使用MATLAB 的Filter Designer 工具设计了一个切比雪夫Ⅰ型一阶0.2Hz截止频率的IIR滤波器,如图5。
图5 高通滤波器抑制基线漂移
在实际的应用中50Hz的工频干扰可能会很明显,甚至会将心电信号淹没。而高频干扰在对心电图进行分析时会有干扰,虽然在硬件上做了滤波处理但在软件上可以进一步进行低通处理,但难以调试,对环境敏感,同时也会增大系统体积。同样地使用MATLAB 的Filter Designer 工具进行设计。为了更好地保留心电信号的特征,本系统采用FIR 滤波器。如图6 使用Filter Designer工具设计了一个128阶带阻汉明窗。
图6 128阶带阻汉明窗抑制工频干扰
在测试时使用了麻省理工的噪声应力测试数据库中的数据(MIT-BIT Noise Stress Test atabase),该数据在MATLAB 上的滤波测试效果如图7。对于基线漂移,可以很明显地看见在一段时间后基线回零,上下漂移幅度减小,效果不错。再加上工频和高频抑制后,可以明显看出心电图的特征体现明显,线条光滑,特征易辨识。输入总体信号有时延大概为120个点,但对于本系统而言无影响。
图7 滤波测试效果
本系统使用的是乐鑫的ESP32 作为主控,其主频为240MHz、160MHz 和80MHz 可选,为降低功耗这里选用的是80Mhz的主频,80MHz的主频也足够胜任。本系统的软件设计使用了FreeRTOS 操作系统,使得系统软件设计和扩展更为方便。软件总框图如图8所示。
图8 采集端软件设计流程图
ESP32与ADS1292通过1MHz的SPI通信,在初始化后设置ADS1292 为连续读取模式。通过ADS1292 的DRDY 信号产生ESP32 外部中断,在外部中断中读取ADS1292 转换后的数据。然后对数据进行抑制基线漂移、抑制工频干扰和抑制高频干扰处理后,对其进行特征提出处理,提取出心率,放入发送队列中。最后通过TCP协议发送至服务器。
使用Apache Echarts v5,MDUI 与Golang Iris 框架组成前端呈现的主要技术栈。在初始化的时候会优先查询网关是否有设备链接通信功能,如果有则会询问网关心电设备信息。当网关无此功能或者网关长时间不回应时,会开始遍历当前网段下的所有链接设备,当查询到所有设备之后使用并发技术询问所有设备的特征码并且以此分类。
用户在进入客户端之时可以选择当前网段之下的任意一个设备进行查看,在此之前后端服务器会持续缓存心电设备的信息,当前端查询心电信息之时后端服务器会询问数据库调取心电数据;当前端判定心电图数据没有长达40 秒时会对空位进行填0标记处理,当心电图数据足够40秒之时会剔除最老的数据并且在末尾追加最新数据并且重新画图。
得益于Apache Echarts v5 的脏矩形绘制,前端刷新速度能在现代浏览器的加持之下拥有无与伦比的性能,就算在低性能设备上也能做到非常迅速地绘图。
由于设计架构上的前后端分离,因此能轻松地做到搭建中心服务器与搭建开放API 服务。同样的,由于可选的开放API功能,开发者能非常轻松地重新设计前端。
本文使用心电发生器和人体来验证系统。图9 是使用标准心电信号发生器采集端的实物图,为方便测试,直接使用了USB供电,也可使用3.7V锂电供电。在系统完成初始化和连接服务器后,打开心电信号发生器。在服务器端即可实时监测到由采集端发送的心电图和心率信息,心率信息与标准平均误差小于1 次/分钟。经测试在网络条件较好的情况下延时小于100ms。连接标准心电发生器的服务器端显示结果如图10 所示,连接人体的服务器端显示结果如图11所示。
图9 使用标准心电发生器采集端实物图
图10 标准心电信号的测试结果
图11 人体心电信号的测试结果
本文使用了ADS1292模拟前端采集心电数,使用ESP32芯片进行心电数据处理和发送处理后的数据到服务器,该方案的实时性强,可拓展性好。通过实际测试验证了方案的可行性,为心电检测设备的小型化,智能化和便携化提供了一套解决方案。