摘要(中英文)
本项目以MSP430微控制器设计实现远程心电智能监护系统。通过传感器从V1导联实时检测心电信号,用前置电路对信号进行放大,对放大后的模拟信号转换为数字信号输入到MSP430系统中。在MSP430程序设计中,首先,用整数小波对信号滤波,并实时显示波形和心率;然后,程序智能地检测心律失常,如果检测到PVC或其他症状,则通过无线模块向基站、病人、或亲友报警。
It is developed an electrocardiogram (ECG) tele-monitoring intelligent diagnosis system on MSP430. It detects and amplifies the ECG signal at V1 lead, and the signal is converted to digital values as inputs for the MSP430 processor. For the development of the program in the system, firstly, it filters the digital signal with integer-wavelet and displays both ECG wave and heart rate on LCD in time. Secondly, the program detects signal intelligently, once the signal is classified as PVC or other symptoms, alarm messages are send to base station, patients or relatives.
1. 引言
1.1 系统设计的背景与目的
心电图(ECG信号)是利用心电图机从体表记录心脏每一心动周期所产生电活动变化的曲线图形。ECG诊断方法简便可靠,对病人无损,是心血管疾病诊断十分重要的一种方法。
早期的ECG分析完全由医生用人工的方法完成,计算机辅助的心电分析与诊断系统的研究始于50年代末,使得ECG分析中的特征提取从相对人工定性分析过程转变为数字化处理过程。目前,绝大多数心电监护仪只具备简单的监护报警功能,不能实施急救,且体积较大不适合随身携带[1]。设计一款低功耗、便携式,能够实时监测心律,自动诊断心律失常并发出救援信号的心电监护仪的研发意义十分重大。
1.2 项目所要解决的问题
本项目基于MSP430低功耗、高速实时运算特性,设计了一款新型的心电监控系统。该系统主要功能包括采集待测人员体表心电信号,监测实时心率,实时分析有无心律失常并进行自动诊断。当出现突发性心律失常如室性心动过速、心室颤动、停博等症状时,该系统能实时蜂鸣报警,提醒携带者。并能将相应报警信息通过无线模块发送给医生或病人亲友,以便能够实施急救。
2. 系统方案
本系统的设计关键模块有:信号采集模块、信号处理模块、波形/心率显示模块、蜂鸣器报警模块以及短信发送模块。
系统整体框图如图1所示。信号采集模块将由心电电极贴片在人体皮肤表面采集到的峰峰值小于4mV微弱信号通过放大滤波电路放大到适合MSP430F2618中ADC12模块进行模数转换的电压范围。经AD转换后,用MSP430F2618进行信号处理,其关键算法为CDF97小波滤波、差分阈值检测、逻辑法诊断病例三部分。MSP430F2618通过SPI、I2C和UART接口分别与LCD示波器、段式LCD和EM310无线模块相连接,实时显示滤波后的心电波形与计算得到的心率值,并对异常情况进行短信报警。MSP430F2618通过P3.0口与蜂鸣器相连接,对异常情况进行蜂鸣报警。
图1 系统框图
3. 系统硬件设计
3.1 放大滤波电路
系统的放大滤波电路选用TI公司的低功耗单电源 CMOS 仪表放大器INA331与单电源微功耗 CMOS 运算放大器OPA2336搭建而成,将采集自人体皮肤表面的微弱信号放大到适合MSP430内部ADC12模块进行模数转换的电压范围。INA331的主要特点是:轨至轨输出、低功耗的COMS工艺、高共模抑制比、低静态电流、带宽范围0~2.0MHz、工作温度范围-55~125℃;OPA2336的主要特点是:轨至轨输出、微功耗的COMS工艺、低静态电流、低失调电压、工作温度范围-40~85℃。这些特点决定了放大前置滤波电路在极端环境条件下仍能正常工作且功耗低,可以用电池供电。
放大滤波电路可分为前置放大电路、右腿驱动电路和低通滤波放大电路。
如图2所示,前置放大电路中INA331的正负输入引脚通过心电电极分别与人体的左臂和右臂相连接, INA331的1脚与6脚连接,使VOUT = VREF + 5 (VIN+ – VIN–),防止因增益过大、输入电流过大导致的电极极化高压。共模电压设置由2MΩ电阻完成。VR为两片OPA2336提供偏置电压,使其以此偏置电压为工作点变化。将一片OPA2336的一个输出端连接至INA331的REF端构成反馈,使INA331的输出电压以此偏置电压为工作点变化。另一片OPA2336作为电压跟随器,用于右腿驱动。
图2 前级放大电路与右腿驱动电路
低通滤波放大电路如图3所示,由同相比例运算电路与二阶有源低通滤波电路组成。
图3 低通滤波放大电路
同相比例运算电路的增益为:
(1)
二阶有源低通滤波电路的频率特性表达式为:
(2)
其中,通带内增益理论值,特征角频率理论值,品质因数理论值,可见这是一个巴特沃斯滤波器,截止频率理论值,其幅频特性如图4所示。
图4 巴特沃斯滤波器幅频特性
3.2 ADC12模块与DMA控制器相结合的数据采集
将放大滤波电路的输出与MSP430F2618的P6.0相连接,利用ADC12模块的通道A0对输入模拟电压进行模数转换。ADC12模块的工作原理如图5所示。
图5 ADC12原理图
选择ACLK作为定时器B的时钟源,设置定时器B工作在增计数模式和输出模式7,由Timer_B OUT1产生周期、占空比均可调节的PWM波。本系统中设置TBCCR0=256,TBCCR1=230,即PWM波的,,PWM波的上升沿触发采样,下降沿触发转换,即ADC12的采样率。设置ADC12模块工作在单通道重复转换模式,选择2.5V内部参考电压作为参考源,ADC12IFGx 作为 DMA0的触发源,重复转换结束时, ADC12IFGx被置位,继而触发DMA操作[2]。选择DMA0传输源地址为ADC12MEM0,目的地址为手动分配RAM存储空间的物理地址(本系统中为0x1200),设置DMA0传输源地址不变,目的地址增量,传输基本单元个数DMA0SZ=512。这样,4秒的转换结果经DMA0通道送至固定的RAM空间。 AD转换与DMA传输在LPM3模式中进行以降低功耗,设置中断向量为 DMA_VECTOR,当512个转换结果全部传输到指定地址后,CPU才被唤醒。
3.3 LCD数字示波器模块
系统所用的开发板提供了LM240160GCW液晶模块,利用此模块可以设计数字示波器来实时显示心电波形。数字示波器基本原理为:数据采集+图形显示,该过程循环进行。
LM240160GCW液晶的显示RAM中,一个单元的地址由行地址和列地址组合成,以显示屏自上而下排序1-160行为行地址,以水平三个像素点为一组,为一个列地址。RAM中得单元数据位为15位,每5位为一个像素点的显示数据,一个RAM单元容纳了3个像素数据,即数据字节中DB7-DB3为数据,DB2-DB0无用。每一次读写RAM时,必须以3个数据连续写入/读出为一个最小操作。
液晶模块内置ST7529液晶显示模块系列的指令系统,分基础基本指令集EXT0和扩展指令集EXT1。实现对模块的初始设置。包括启动 LCD 驱动电源工作、灰度数据设置、调节对比度电压、扫描时序的设置等;显示数据的操作,有数据的读写、修改写、局部显示以及卷动设置等。
GT23L32S4W 是一款内含 11X12 点阵、 15X16 点、 24X24 点阵、 32X32 点阵的汉字库芯片,支持 GB2312 国标汉字及 SCII 字符。排列格式为横置横排。用户通过字符内码,可计算出该字符点阵在芯片中的地址,可从该地址连续读出字符点阵信息。由上述可知, GT23L32S4W 支持 SPI 、 PLII 两种通讯方式,本项目采用SPI方式。
示波器设计中,先对软件滤波后的信号进行采集,对LCD以最小3个像素进行操作,向指定位置写入灰度数据,灰色为点,白色为背景。本项目采用了波形逐帧显示的方法,当软件滤波完成后,开始进行LCD操作,在下一组数据的采集与滤波过程中LCD显示内容保持不变,等待下一次滤波完成后刷新波形。在逐单元(3个像素)显示中,每一个单元的数据采集,AD转换,数字量到液晶屏幕高度换算,显示数据进入显示RAM,将显示数据送到屏幕显示的时间都是单独的,整个过程要占用毫秒级以上时间,采用逐帧显示,扫描频率只由每屏显示数据的采样总时间决定,不受点阵液晶显示速度限制。图6为LCD操作的流程图:
图6 LCD操作流程图
LCD3个像素点的像素数据是软件滤波后的数据,每一个行地址对应3个像素点,即绘制出的曲线是由“点”组成,每列只有一个点,效果不理想,故考虑使用矢量绘图的方法对其进行优化,将一个单元3个像素和下一个单元第一个像素一起考虑,根据其位置在两点之间差值填充点,得到连贯的曲线。优化前后的对比如图7所示:
图7 矢量优化前后对比
3.4 段式LCD显示心率模块
MSP430F2618开发板提供了段式液晶模块,利用此模块可以实时显示心率。在MSP430F2618开发板上使用了一片LCD驱动器BU9796FS,其具有较低工作电压范围,200bit的显存空间,标准2线制I2C通讯。
根据指令集以I2C协议配置BU9796FS,将计算好的心率值显示到段式LCD上,每隔4s刷新一次。具体流程如图8所示:
图8 段式LCD操作流程图
3.5 UART发送短信模块
当心电波形失常或者心率有问题的时候,可以通过无线模块发送中文或英文短信息到患者或医生手机上实现报警功能。利用MSP430F2618单片机的USCI_Ax的UART模式实现单片机与EM310无线通讯模块的通信。EM310模块是华为公司推出的一款 GSM/GPRS 无线模块。通过串口向EM310写入AT指令即可实现单片机控制EM310发送短信。
配置UART包括设置UART模块的寄存器,设置传输需要的时钟XT2、波特率为9600、无校验位、8个数据位和1个停止位。通过UART模块向EM310发送AT指令集,完成EM310发送短信的功能。
通过C语言程序将AT指令集写成字符串的形式,再向串口发送字符串,即完成了AT指令集的发送。EM310接收到UART端口发送过来的AT指令后根据指令返回相应指令符号,完成发送中文或英文短信的任务。
4. 系统软件设计
由于心电信号本身微弱、多变,容易受外界干扰,所以在分析诊断过程中需要预处理去除干扰。本系统软件设计主要包括:数字滤波、R波检测、心律失常诊断。
4.1 CDF97小波滤波
数字滤波算法采用CDF97小波滤波,根据经小波变换后,有效信号对应的小波系数很大,而噪声对应的系数很小的原理,对ECG信号进行三层小波分解后,采用软阈值方法,先求出各层高频信号的门限阈值,然后去除每层高频信号中小于该门限阈值的系数。最后从后往前一层一层重构,得出滤波后的ECG信号。
考虑硬件平台选用低功耗MSP430系列,我们选取基于提升算法的 CDF97小波滤波。Sweldens的提升小波变换是实现DWT的一种新方法,比原有的基于卷积的DWT方法计算量少、复杂度低,且在运算过程中可实现原位计算,存储空间需求少,更加适合硬件的实现[3]。其中CDF97小波是一种典型的离散小波提升算法,其对应五个提升系数如下:
(3)
我们根据CDF97小波原理先构造出小波基函数,用matlab仿真出CDF97小波滤波器组如图9所示,经matlab仿真验证其具备较好的滤波效果。
a.分解低通滤波器 b.分解高通滤波器
c.重构低通滤波器 d.重构高通滤波器
图9 CDF97小波滤波器组
硬件乘法器是存在于MSP430F2618芯片中通过内部总线与CPU相连的16位外围模块,它最多可支持1616位无/有符号数的乘法运算与乘加运算,若能对其进行有效利用,必能增加对数据处理的速度。本系统利用硬件乘法器实现了心电信号的小波滤波与重构。
由于硬件乘法器只支持整数的乘法运算与乘加运算,对于提升系数为小数的CDF97小波,如何实现运算结果不溢出与运算精度的最优折中成为设计的难点。项目采取的方法如图10所示,将提升系数扩大16384(214)倍写入有符号乘法的操作数1寄存器,将AD转换得到的心电数据扩大2倍写入操作数2寄存器,运算完成后,提升系数与心电数据相乘或乘加的运算结果,为了提高运算精度,需要利用RESLO的最高位与次高位对result进行校正:
(1)如果RESHI15=0且RESLO15=1,说明result为正数且最低整数位为1,要对其进行+1校正;
(2)如果RESHI15=0且RESLO14=1,说明result为正数且小数部分大于0.5,要对其进行+1校正;
(3)如果RESHI15=1且RESLO15=0,说明result为负数且最低整数位为1(以补码形式存放),要对其进行-1校正;
(4)如果RESHI15=1且RESLO14=0,说明result为负数且小数部分绝对值大于0.5,要对其进行-1校正;
(5)特殊情况:如果RESHI15=1且RESLO=0,说明result为负数且,但它满足(3)和(4)的校正条件,所以要对其进行+2校正以消除(3)和(4)引入的误差。
图10 硬件乘法器滤波算法示意图
Fig.10 Filtering algorithm schematic diagram of the hardware multiplier
利用上述方案,便可基于硬件乘法器实现高速度高精度的97小波滤波与重构,对实测心电信号的小波滤波与重构如图11所示,蓝色为ADC12模块得到的心电数据,红色为经硬件乘法器进行小波滤波与重构后的数据,可以看出高频噪声被有效滤除,使数据能够更好地显示、处理与分析。
图11 实测心电信号的小波滤波与重构
4.2 R波检测算法
QRS波群是一个心电周期中特征最显著的部分,它具有高幅度和高斜率、具有一定的宽度的时域波形特征和频谱分布在ECG信号的中、高频区域的频域特征(峰值频率在10~20Hz)。本项目基于MSP430平台且需要R波实时检测,这使得算法必须具有占有硬件资源小、检测精度高、运行速度快的特点。综合考虑,我们采用了基于滤波和阈值检测的算法。
根据QRS波群时域特点,我们采用如下方法确定R波位置:①固定一个时间窗,在该时间段内采用二次差分方法,寻找波形奇异点。对N个(本系统中N=512)数据进行奇点检测。②保留得到的所有极大值在一个数组A内,并记录其对应波形位置。取阈值Rth,与上述数组A内值比较,保留大于Rth的极大值在数组B内,并记录其对应波形位置。认为B中数据为检测到的R波幅值,其对应位置为R波位置。
在此,算法难点在于阈值Rth的确定。因为ECG信号个体差异较大,即便是同一人,在不同时间段内其波形也不稳定。所以,不能单纯采用固定阈值,而要求阈值具有动态自适应性。否则会造成R波误检、漏检而导致诊断错误。动态阈值设置,我们采用直方图分布法,这也是本项目创新点之一。根据极大值点的分布特点,做点数与幅值段的直方图。根据极大值点的统计特性做出的直方图中,会出现连续的一段无极大值分布的区域。在该区域之后的幅值段内存在的极大值就是R波幅值。根据此特征确定Rth,由于该分布随着数据刷新而更新,则具有实时的自适应性。经matlab试验验证该算法确实可行、简洁、快速、空间占用小、阈值具有动态适应性且准确度很高,适合在MSP430上实现。
4.3 心律失常诊断算法
临床上医生通过观察一段时间的ECG波形来根据相关经验来判断患者病情。心率失常智能诊断是主要借助计算机,根据医生的临床经验,采用逻辑判断来确定患者心律失常情况的。心电自动分析系统如图12所示,主要包括心电数据采集、预处理,心电参数自动检测、心电异常诊断分类等内容。
图12 心电自动分析系统
其中心电参数自动检测与心电异常诊断分类尤为重要。由于ECG信号的时域特征提取方法符合临床医生的诊断习惯,并且算法运算量小,适合应用于便携式心电仪。时域心电参数主要包括:平均心率Rate,RR间期Trr,以及相邻RR间期差HRV等。该系统诊断算法采用简单的逻辑判断算法:比较实际测得平均心率Rate与各病例中的Rate参考值或比较实际测得RR间期差HRV与室性心律失常HRV参考值来确定心脏活动是否正常,存在何种异常。心律失常逻辑判断方法如表1所示。
表1心律失常逻辑判断方法
病例名称
|
算法
|
正常
|
————
|
室性早搏
|
HRV(i)>0.12s&&HRV(i+1)>0.12s&&HRV(i+2)>0.12s
|
停博
|
Rate<20次/分
|
房性颤动
|
Rate:500~600次/分
|
房颤或室颤
|
Rate:350~500次/分
|
房扑或室颤
|
Rate:240~350次/分
|
室上速或室颤
|
Rate:160~240次/分
|
心率过缓
|
20<=Rate<40次/分
|
心率过速
|
120<=Rate<160次/分
|
基于上述诊断算法,需要进行算法正确性验证,此时需要输入一些带有明确注释的心律失常信号。通常采用MIT-BIH标准心律失常数据库中数据作为检验算法。MIT-BIH[4]数据库数据的采样频率为360Hz,采样精度为11位。该数据库一共大约有 109933拍,都是经过至少两个以上的心电图专家手工独立标注的。算法评估流程如图13所示,评估结果见评测与结论部分。
图13 算法评估流程图
4.4系统算法流程与状态机设置
图14 系统算法流程图
系统算法流程如图14所示。由于系统每4秒采集512个心电数据并进行分析与诊断,而且人为运动等因素有可能影响心电数据的采集情况造成误检,若对每次诊断出的异常状态都进行短信报警是没有必要的,所以我们对系统进行状态机设置防止短信报警过于频繁。
图15 室上速或室颤症状的状态机示意图
图15为室上速或室颤症状的状态机示意图,Rate_flag为表示状态机当前工作状态的标志位,系统状态的跳转由每4秒心电数据分析得到的特征参数与Rate_flag共同决定。S0为系统的初始状态也是正常状态,Rate_flag=0。处于S0状态时,如果计算得到的各项指标均正常,则保持S0状态不变;如果心率值在160(含)与240之间,则跳转到S1状态, Rate_flag变为501。S1与S2状态为短信报警前等待状态,可以消除因人为运动等因素造成的误检。处于S1状态时,如果心率值在160(含)与240之间,则跳转到S2状态, Rate_flag变为502;如果心率值在其他范围,则跳转到S0状态,Rate_flag变为0。处于S2状态时,如果心率值在160(含)与240之间,则跳转到S3状态, Rate_flag变为503;如果心率值在其他范围,则跳转到S0状态,Rate_flag变为0。处于S3状态时,说明已出现连续12秒左右的室上速或室颤症状,便进行短信报警,报警后跳转到S4状态,Rate_flag变为504。S4状态为短信报警后的等待状态,以保证系统进行过短信报警后约7分钟的时间内不会再次进行短信报警。处于S4状态时,如果Rate_flag在504(含)与600之间,则保持S4状态不变,Rate_flag加1;如果Rate_flag=600,则跳转到S0状态,Rate_flag变为0。表2列出了系统各状态时Rate_flag的值。由于人为运动因素而产生室性早搏误检的几率较小,所以没有为室性早搏设置短信报警前的等待状态,即检测出一次房性早搏病例立刻进行报警,报警后跳转至等待状态。另外需要说明的是,状态机的等待状态只影响短信报警的时间间隔,对蜂鸣器报警并无影响,只要4秒内的数据出现异常,蜂鸣器便立即进行报警。
表2系统各状态Rate_flag值
Rate_flag 状态
病例
|
短信报警前等待
|
短信报警
|
短信报警后等待
|
室性早搏
|
无
|
1
|
2~100
|
停博
|
101、102
|
103
|
104~200
|
房性颤动
|
201、202
|
203
|
204~300
|
房颤或室颤
|
301、302
|
303
|
304~400
|
房扑或室颤
|
401、402
|
403
|
404~500
|
室上速或室颤
|
501、502
|
503
|
504~600
|
心率过缓
|
601、602
|
603
|
604~700
|
心率过速
|
701、702
|
703
|
704~800
|
5. 系统创新
1.算法中采用直方图统计法设定自适应阈值,准确定位R波位置。
2.利用MSP430内部的硬件乘法器实现CDF97小波滤波算法。
3.系统中LCD示波器采用了波形逐帧显示的方法,扫描频率只由每屏显示数据的采样总时间决定,不受点阵液晶显示速度限制,提高了显示可靠性,采集数据在显示过程中不丢失。
4.系统可以自动诊断多种心律失常病例。
5.无线模块发送中文或英文短信息到患者或医生手机上实现报警功能,满足了不同用户对短信语言的需求,应用面广。
6. 评测与结论
6.1 MIT/BIH数据库数据算法仿真结果
(1)数据105.data
取105数据第21.3s—25.6s,约4s左右的心电波形信号,进行算法可行性、准确性验证。取该段数据是由于该段数据中存在室性期前收缩(又称室性早搏,PVC)心拍,可验证算法检测PVC的算法的准确性。matlab 仿真图如图16所示:
a. 极大值点分布直方图 b. 512点心电数据
图16 数据105 PVC段算法仿真图
由图16.a可见,该段数据极大值点分布满足算法所使用规则:出现连续一段无极大值分布的区域。根据图16.a设定的阈值在图16.b中,用红线标出。图16.b中蓝色“*”号标出点表示所有该段数据的极大值点,绿色表示经阈值设定、误检修正之后检出的R波位置。可见该算法实现了准确的R波定位。
图16.b蓝色虚线表示PVC幅值阈值。根据数据库注释文件105.atr文件可知该段数据有一室性期前收缩的心拍。本系统设计的目的就是能够在准确定位R波之后,求出心率值,确定出有无室性期前收缩等心律失常。
在matlab命令窗口中显示,针对该段数据程序运行结果如图17所示:
图17 数据105 PVC段检测结果
检测出6个心拍,该段时间心率值为84.3750,有室性期前收缩(PVC)心拍出现。
下面一段数据取自105.data的第4.3s-8.53s,不同的是该段数据中六个心拍均为正常心电波形,所以在检测结果中没有PVC显示。该段数据用来验证本系统所采用算法的准确性——不会造成误检。
a. 极大值点分布直方图 b. 512点心电数据
c.检测结果
图18 数据105 正常段检测结果
(2)为验证算法普适性,再选取119.data中一组数据进行说明。
该段数据取自109.data的第21.3s—25.6s,该段数据共5个心拍,其中有三个PVC心拍,所以检测结果中有PVC=3的显示。
a. 极大值点分布直方图 b. 512点心电数据
c.检测结果
图19 数据119PVC段检测结果
在整个系统设计、算法验证过程中,我们做了大量仿真实验,但受项目报告的篇幅限制,在此不再过多列举。
现以MIT/BIH数据库中的三组病例记录(105\119\205),每组数据截取前约213.3s的心拍,进行检测结果分析。检测结果如下表3、表4,其中误检为将非R波检测为R波,漏检为正确的R波未被标记出来。
准确率=正确检测心拍数/检测心拍总数*100%
表3 R波检测结果
记录数据
|
R波个数
|
正确检测R波个数
|
误检
|
漏检
|
准确率
|
105.data
|
289
|
287
|
3
|
2
|
99.3%
|
119.data
|
232
|
223
|
0
|
9
|
96.1%
|
205.data
|
320
|
317
|
0
|
3
|
99.1%
|
总计
|
841
|
827
|
3
|
14
|
98.3%
|
表4 PVC检测结果
记录数据
|
PVC心拍数
|
正确检出PVC数
|
准确率
|
105.data
|
10
|
7
|
70%
|
119.data
|
53
|
41
|
77.4%
|
205.data
|
3
|
3
|
100%
|
总计
|
66
|
51
|
77.3%
|
R波检测效果很好,检测准确率达到98.3%。其中误检发生在105记录中,是由于其基线漂移过大。漏检除105数据中有一心拍是因为滤波后R波峰被削平而未正确检出外,其余是由采样数据刚好以R波波峰为起点或终点而导致漏检。
室性早搏心拍的检测结果不够理想,原因有二:(1)R波的误检、漏检导致PVC漏检或误检;(2)PVC心拍的R波刚好落在采样数据的起点或终点而其R波峰值又未超过设定阈值时导致PVC漏检或误检。在后期工作中将添加判断条件,来提高算法准确率。
6.2 系统实际测试结果
参赛队员与实验室其他同学对系统进行了实际测试,经测试系统能够正常工作,LCD每4秒钟对实时心电波形刷新一次,段式LCD显示心率值,无线模块正常工作未报警。
7. 附录
7.1 系统实物图
此内容由EEWORLD论坛网友兰博原创,如需转载或用于商业用途需征得作者同意并注明出处