舒泽芳,王娟,彭晓珊
(1.贵阳学院机械工程学院,贵阳 550005;2.贵阳学院电子与通信工程学院,贵阳 550005)
标准导联ECG是医学上常用的心电图导联,其相关信号如QRS波群、P波、R-R间期等信息是诊断心脏疾病的重要依据,传统的心电图机属于机电式,不易于将心电信号数字化;现在主流的光电心电图机其数据已经成数字化,但不易于移植至MATLAB软件进行数据分析和研究。本文提出面向ECG标准导联数据采集系统设计,利用MATLAB平台设计GUI采集界面,采集卡基于STM32F103微控制器设计,利用INA333仪表放大器进行心电信号的滤波和放大。同时实现了心电信号的数据格式转换,将其保存为TXT或者XLS格式,易于在相关分析软件间进行数据交换,以发挥心电数据的潜在价值。
心电信号属于生物电信号,是心房心室极化和复极化过程在电信号上的表象,其幅值微弱,在10μV~4mV之间;频率范围较低,范围在0.05Hz~100Hz,大部分能量集中在0.05Hz~40Hz。其信噪比低,随机性强,直流成分多[1]。本采集系统针对医学上常用的标准导联,即采集并显示标准导联Ⅰ、Ⅱ、Ⅲ,标准导联电极信号之间的数学关系式如下:
Ⅰ=LA-RA
Ⅱ=LL-RA
Ⅲ=LL-LA
依据标准导联与电极信号之间的数学关系,系统需要采集 LA(左上肢)、RA(右上肢)、LL(左下肢)。根据以上分析,采集系统定义为两部分,采集卡和上位机采集软件。其系统结构示意图如图1所示。
图1 采集系统结构图
二阶有源滤波电路利用INA333芯片完成对原始心电信号的二阶带通滤波放大,放大后由STM32F103微控制器进行ADC转换。上位机采集软件则基于MATLAB平台设计,通过串行UART接口从STM32F103获取各路心电数据。LA、RA和LL电极信号的测量参考点为RL(右下肢)。
采集系统硬件包括二阶有源滤波电路和STM32F103微控制器电路构成,二阶有源滤波电路以INA333运放为核心设计,依据心电信号低频(频率范围0.05Hz~100Hz)的特点,二阶有源带通滤波放大电路设计如图2所示,R1和C1构成低通滤波电路,取R1为 4.7kΩ,C1为 0.33μF,转折频率为 fH=1/(2πR1C1)≈100Hz;R2和C2构成高通滤波电路,取R2为6.8 kΩ,C2 为 0.47μF,则其转折频率为 fL=1/(2πR2C2)≈0.05Hz。根据INA333运放单电阻配置放大倍数的特点,放大倍数为1+(100kΩ/RG),考虑后续STM32F103RCT6芯片中ADC的参考电压为3.3V,取心电信号最高值为5mV,则取RG为150Ω,即放大666倍。U2级采用射极跟随器设计,扩大输出电阻[2]。
图2 二阶有源带通和陷波电路原理图
STM32F103通过MAX232接口与PC上位机的UART串口连接,通过STM32F103内部自带12位ADC进行标准导联心电信号转换,STM32F103最小系统及外围电路原理图如图3所示[3]。
图3 STM32F103与PC机UART接口原理图
采集系统的软件部分为采集卡软件和上位机软件,采集卡软件针对STM32F103微控制器设计,实现GPIO、UART和ADC的初始化,ADC转换,UART数据传输等功能[4]。采集系统整体大约以300Hz频率对心电信号采样,STM32F103以间隔3ms将3组标准导联心电数据上传至上位机软件,上位机软件不断刷新其显示状态,采集卡软件流程图如图4所示。
图4 采集卡软件流程图
ADC转换部分核心代码如下:
u16 Get_Adc(u8 ch)
{
//设置转换序列
ADC1->SQR3&=0XFFFFFFFE0;//规则序列1通道ch
ADC1->SQR3|=ch;
ADC1->CR2|=1<<22;//启动规则转换通道while(!(ADC1->SR&1<<1));//等待转换结果Return ADC1->DR;
//返回ADC值
}
上位机软件采用MATLAB平台GUI设计,其主界面设计如图5所示。包括用户信息区、导联设定区、使用者操作区三个部分[5]。
用户信息区采用静态文本和编辑框控件,导联设置区采用单选按钮控件,使用者操作区采用按钮控件,在启动按钮被按下后,即创建串口对象,完成串口属性配置,同时利用相关串口回调函数接收、显示和保存数据,保存数据可选择TXT格式和XLS格式,其核心代码设计如下:
Serial_obj=serial('COM2');
Serial_obj.BaudRate=9600;
Serial_obj.DataBits=8;
Serial_obj.Parity='none';
Serial_obj.StopBits=1;
fopen(Serial_obj);
sdata=fscanf(Serial_obj,'%d',128);
data_Ⅰ=sdata;
plot(stime,data_Ⅰ);
fprintf(FileID,'%d',data_Ⅰ);[6]
图5 上位机主界面
在系统设计时,利用STM32F103自带的DAC,将采集的数据进行了数模转换,便于示波器进行测试,部分测试结果如下:图6为被测试者的标准导联Ⅰ的示波器显示波形,图7为被测试者的标准导联Ⅱ的示波器显示波形。
图6 被测试者标准导联Ⅰ示波器波形
图7 被测试者标准导联Ⅱ示波器波形
采集系统对标准导联Ⅰ、Ⅱ、Ⅲ的心电信号进行了相关功能测试,包括数据采集显示和保存等方面,在波形显示测试方面,图8为被测试者标准导联Ⅰ和Ⅱ的上位机界面显示波形,和示波器实际测试波形一致。
图8 标准导联Ⅰ和ⅡMATLAB显示波形
标准导联Ⅱ部分心电数据保存为TXT文本文件内容如下。
Sampling timeII
hh:mm:ss.mmm(mV)
0:00.000-0.145
0:00.003-0.145
第一列代表采样时间,第二列为II导联信号电压值,转换函数代码设计如下:
function[VarName1,VarName2,VarName3]=importfile
(filename,startRow,endRow)
if nargin<=2
startRow=1;
endRow=inf;
end
formatSpec='%9s%8s%s%[^ ]';
fileID=fopen(filename,'r');
示波器测试环节显示了采集卡部分运行情况,MATLAB GUI界面测试显示了上位机软件部分的运行情况,两者结果一致。整体测试表明,采用MATLAB作为心电信号上位机软件平台是一种有效的方式,借助其强大的数据处理能力可为挖掘心电信号的各种临床价值创造条件。
[1]宋勐翔,陈兰岚.基于ADS1298和STM32F407的心电采集与显示系统设计[J].现代电子技术,2015,13:141-142.
[2]李远,蒋稼欢,章毅等.基于Java手机便携式心电监护分析仪的ECG信号采集模块设计[J].医疗卫生装备,2011,1:19-20.
[3]勾慧兰,刘光超.基于STM32的最小系统及串口通信的实现[J].工业控制计算机,2012,9:20.
[4]刘军,张洋,严汉宇.例说STM32[M].北京:北京航空航天大学出版社,2014:260-269.
[5]余胜威,吴婷,罗建桥.MATLAB GUI设计入门与实践[M].北京:清华大学出版社,2016:351-368.
[6]温正.MATLAB科学计算[M].北京:清华大学出版社,2017:71-79.