基于SocFPGA的心电信号采集系统设计.docx
《基于SocFPGA的心电信号采集系统设计.docx》由会员分享,可在线阅读,更多相关《基于SocFPGA的心电信号采集系统设计.docx(79页珍藏版)》请在冰豆网上搜索。
基于SocFPGA的心电信号采集系统设计
基于Soc-FPGA的心电信号采集系统设计
TheECGsignalacquisitionsystembasedonSoc-FPGAdesign
学校湖北经济学院
专业电子信息工程
姓名黄艳丽叶鼎贾云心
指导教师孔德永
湖北经济学院
论文创新性声明
秉承学校严谨的学风和优良的科学道德,本人声明所呈交的论文是我队在导师指导下进行的研究工作及取得的研究成果。
尽我们所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果;也不包含为获得湖北经济学院或其它教育机构的学位或证书而使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说明并表示了谢意。
论文与资料若有不实之处,本队承担一切的法律责任。
本队签名:
黄艳丽叶鼎贾云心日期2014-10-16
摘要
介绍基于Soc-FPGA的心电信号采集及其系统的研究。
根据人体心电信号的征,设计性能优良的心电信号采集显示系统,选用最新的CycloneV-Soc-FPGA芯片为核心,心电信号经过AD620仪表运放和OP07运算放大器以及12位的A/D转换,然后通过D/A转换经过VGA接口在液晶显示屏上实时显示动态ECG图像和每分钟的心率。
该系统性能可靠,成本低廉,抗干扰能力强,体积小,重量轻,实时性强等特点。
关键词:
Soc-FPGA;心电监护;信号实时采集;数据存储
Abstract
ItisintroducedbasedonSoc-FPGAECGsignalacquisitionandsystemresearch.DesignedaccordingtohumanbodycharacterofECGsignal,goodperformanceofECGsignalcollectionanddisplaysystem,choosethelatestCycloneV-Soc-theFPGAchipasthecore,theECGsignalafterAD620meterop-ampandOP07operationalamplifierand12bitA/Dconversion,andthenthroughtheD/AconversionthroughtheVGAinterfacedynamicECGimagesdisplayedontheLCDscreeninrealtimeandtheheartrateperminute.Thesystemisreliableinperformance,lowcost,stronganti-interferenceability,smallvolume,lightweight,strongreal-timeperformance,etc.
KeyWords:
Soc-FPGA;ECG;Real-timesignalacquisition;Dataisstored
1.系统整体设计
心电监护仪系统包括心电信号采集硬件电路和软件显示系统。
系统的结构框图如下所示。
心电采集电路
心电处理平台
2.功能与指标
对于个人心脏进行随时随地进行监护,为心脏疫情的早期检测和亚健康人群进行预防提供有效的检测,为医生提供病人相关的有信息。
心电信号采集系统指标:
1:
显示ECG波形,HR数值;
2:
导联模式:
三导联(RA,LA,RL);
3:
增益:
可调;
4:
漏电流:
30uA;
5:
抗干扰:
波形稳定,参数准确。
3心电信号的形成
心电信号从宏观上记录心脏细胞的除极和复极过程,是人体心脏工作产生的生物电流,在人体内,窦房结发出一次兴奋,按一定途径和时程,依次传向心房和心室,引起整个心脏兴奋。
每个心动周期中,心脏各个部分兴奋过程中出现的生物电变化的方向、途径、次序和时间都有一定规律。
这种生物电变化通过心脏周围的导电组织和体液反映到身体表面上,使身体各部位在每一心动周期中也都发生有规律的生物电变化,即心电位。
心电图(ECG)即通过电极将变化着的电位差检测并记录下来。
3.1心电图
正常的心电波形分为P,P-R,QRS,S-T,T,J,U等几个部分。
P:
心脏的兴奋发源于窦房结,最先传至心房,故心电图各波中最先出现的是代表左右两心房兴奋过程的P波。
P波形小而圆钝,P波的宽度一般不超过0.11秒,不超过0.25毫伏。
P波的振幅和宽度超过正常范围即为异常,表示心房肥大或房内传导阻滞。
P-R间期:
是从P波起点到QRS波群起点的时间距离,代表心房开始兴奋到心室开始兴奋所需的时间。
一般成人P-R间期为0.12—0.20s。
P-R间期随心率与年龄而变化,年龄越大或心率越慢,间期越长。
间期延长表示房室交界区的时间延长,说明有房室传导障碍,常见于房室传导阻滞。
QRS波群:
代表两个心室兴奋传播过程的电位变化。
典型的QRS复合波包括三个相连的波动。
第一个向下的波为Q波,继Q波后一个狭高向上的波为R波,与R波相连接的又一个向下的波为S波。
由于这三个波紧密相连且总时间不超过0.10秒,故合称ORS复合波。
QRS复合波所占时间代表心室肌兴奋传播所需时间,正常人在0.06---0.10秒之间。
时间超过0.12s,表示室内传导障碍。
振幅超过正常,考虑左或右心室肥厚。
S-T段:
由QRS波群结束到T波开始的平线,反映心室各部均在兴奋而各部处于去极化状态,故无电位差。
S-TS上移超过正常范围多见于心肌梗塞,急性心包炎。
T波:
是继QRS波群后的一个波幅较低而波宽较长的电波,反映心室兴奋后再极化过程。
再极化过程同心肌代谢有关,因而较去极化过程缓慢,占时较长。
T波低平或倒置,常见于心肌缺血,低血钾等。
3.2心电信号的特性
正常心电信号的幅值范围在10μV-4mv之间,典型值为1mV。
频率范围在O.05-100Hz以内,90%的ECG频谱能量集中O.25-35Hz之间,心电信号频率较低,大量的是直流成分。
它的主要频率范围是O.05-100Hz,大部分能量集中在O.05-40Hz。
心电信号是一种典型的人体生理信号,幅度小、频率低,高阻抗性,信噪比低,易受外界环境干扰。
心电信号的信号源阻抗因人而异,和生理状态,电极的安放位置有关,源阻抗的不稳定,将使放大器电压增益不稳定,从而造成测量误差。
3.3心电信号干扰源
采集心电信号时,会受到人体生物电干扰,50Hz工频干扰,以及各种外部高频电磁干扰,噪声来源通常有下面几种:
(1)基线漂移和呼吸时ECG幅值的变化 基线漂移和呼吸时ECG幅值的变化一般由人体呼吸、电极移动等低频干扰所引起,频率小于5Hz;其变化可视为一个加在心电信号上的与呼吸频率同频率的正弦分量,在O.015-O.3Hz处基线变化变化幅度的为ECG峰峰值的15%。
(2)电极接触噪声 电极接触噪声是瞬时干扰,来源于电极与肌肤的不良接触,即病人与检侧系统的连接不好。
其连接不好可能是瞬时的,如病人的运动和振动导致松动;也可能是检测系统不断的开关、放大器输入端连接不好等。
电极接触噪声可抽象为快速、随机变化的阶跃信号,它按指数形式衰减到基线值,包含工频成分。
这种瞬态过渡过程可发生一次或多次、其特征值包括初始瞬态的幅值和工频成分的幅值、衰减的时间常数;其持续时间一般的1s左右,幅值可达记录仪的最大值。
(3)肌电干扰(EMG) 肌电干扰来自于人体的肌肉颤动,肌肉运动产生毫伏级电势。
EMG基线通常在很小电压范围内。
所以一般不明显。
肌电干扰可视为瞬时发生的零均值带限噪声,主要能量集中在30-300 Hz范围内。
(4)信号处理中用电设备产生的仪器噪声 心电信号是由人体心脏发出的极其精密、相当复杂并且有规律的微弱信号,外界干扰以及其它因素的存在都会使其变得更为复杂,要准确地对其进行自动检测、存储、分析却是一项十分艰巨的任务。
例如,工频干扰信号对心电图的影响会使心电信号的特征点定位变得十分困难。
因此,心电信号的监视、分析必须在建立在有效抑制各种干扰、检测出良好的心电信号的基础之上。
4系统硬件电路设计
4.1前置放大及右腿驱动
信号提取时,皮肤接触电极到分别通过1.5m长的屏蔽导联线与前置放大器相连接。
由于信号线对屏蔽线的输入电容不完全对称,造成共模电压的不等量衰减,使得包括导联在内的放大器共模抑制比降低,从而使系统抑制干扰的能力下降。
其中工频干扰引起的共模信号可能远大于心电信号,其影响尤为严重。
为有效地消除输入电路不对称而引起的电压分配效应所产生的共模干扰,采用右腿驱动电路。
从输入导联取出的共模电压送到右腿放大器反向放大,经一个限流电阻接到右腿电极,即等效为以人体为相加点的电压并联负反馈电路。
任何流入人体的位移电流基本等于反馈电阻上的驱动电流。
采用右腿驱动电路,对50Hz干扰的抑制并不以损失心电信号的频率成分为代价。
但由于右腿驱动存在交流干扰电压的反馈电路,而交流电流经人体,成为不安全因素,限流电阻通常在1MΩ以上。
前置放大模块在整机中处于非常重要的地位,其性能决定了整机的主要技术指标。
前置放大模块应具有高输入阻抗、高共模抑制比、低噪声、低漂移的特点。
我们采用了仪表放大芯片AD620。
其内部是集成共模抑制比最小可达可100dB的三运放仪用放大电路,只需外接一个电阻可调节增益,增益从1~10.000倍可调。
其差模输入阻抗高达10000M,可保证总电路差模输入阻抗大于5M。
此外,AD620还具有低噪声、低输入偏置电流特性。
电极接触噪声产生的直流极化电压是差模信号,可能会造成运放的饱和,可以利用AD620的REF端进行输出偏移调零。
虽然提高放大器的第一级增益有利于降低输出噪声,但考虑到极化电势的影响,第一级仪表放大电路增益不应太大。
我们的前级增益设置为7,在后级放大时增益为150,总增益为1050。
4.2滤波模块
(1)高通滤波电路
心电信号的最低可能频率成分只达到0.5Hz(相应于心脏搏动30次/分),但为降低信号因相移产生线性失真,心电信号放大电路的低频截止频率必须达到心电信号的低频截止频率的1/10,即0.05Hz。
实际上,在前置放大模块采用了高通负反馈滤波器进行隔直和低通滤波,0.05Hz信号包括直流极化信号已基本被滤掉。
为进一步满足高通滤波特性,可以采用效果不错且易于实现RC一阶无源滤波。
(2)低通滤波电路
滤除混入的各种高频干扰噪声。
对滤波特性的要求主要是信号的时域失真要小,心电信号具有脉冲波形的特征,为保证不失真放大,滤波器应具有较好的线性相位特性。
通常采用模拟有源滤波器实现。
模拟滤波器主要有巴特沃斯滤波器、切比雪夫滤波器和贝赛尔滤波器三种,其中贝赛尔滤波器具有线性相移特性,适用于心电信号的滤波处理。
为了达到更好的心电信号处理效果,我们采用二阶贝塞尔滤波电路。
4.350Hz陷波电路
无处不在的50Hz工频干扰对心电信号产生巨大干扰,为了是的心电信号的各波段较好显示,我们进一步采用了50Hz陷波技术。
最典型的陷波电路是无源双T网络加运算放大器,双T网络实际是由低通和高通滤波器并联组合成的二阶有源带阻滤波器,两个运算放大器接成射随状态,增益都为l。
本方案设计采用的电路就是这种双T网络构成的带阻滤波器。
4.4电平抬升电路
为了将采集到的心电模拟信号不失真的送给ADC,我们做了电平抬升电路,将信号电压抬1V。
4.5电压比较电路
为了检测到人体的心率,我们设计了比较电路。
5.软件设计
5.1系统软件流程设计
如下图所示,当EGC信号输入时,系统对输入EGC信号的频率进行测量并进行实时采样,并利用编码键盘来控制波形的位置以及选择液晶显示器的显示功能。
5.2系统软件框架
基于流程设计我们的框架图,一共有五个模块组成。
分别为AD7928采样模块,PS2接口编码键盘模块,存储与回放模块,测心率模块以及VGA显示模块。
5.21AD7928采样模块
由于板载的AD7928是一个12位精度,1MSPS的AD转化芯片。
故对于只有1Hz到2Hz的ECG信号来说在速度和精度上完成合乎要求。
然而由于AD的采样速度与VGA的显示速度是不同的,因此为了克服这个前后速度不同的问题。
我们使用FIFO模块进行数据缓存。
最后AD7928模块图如下
5.2.2PS2接口编码键盘模块
考虑到DE1-SOC上的按键只有4个,于是我们决定使用编码键盘来解决按键不足的情况。
而对于PS2接口共有6个引脚,其中最重要的是Pin5时钟,Pin1数据。
而PS2接口发来的数据又有通码和断码之分。
因此我们要对PS2进行解码。
我们将PS2模块又分为电平检测模块和PS2解码模块,其中键盘中的A键功能是压缩ECG图像的幅度,D键功能是增加ECG图像的幅度,W键功能是使ECG图像上移,S键功能是使ECG图像下移,SPACE键的功能是存储ECG图像,ENTER键的功能是回放ECG图像。
5.2.3心率测量模块
我们在硬件部分把ECG信号通过比较器整成方波信号,然后我们在FPGA这边通过检测二个下降沿之间的时间来换算出心率。
5.2.4存储与回放模块
关于存储与回放,我们经过团队讨论决定使用一种新的模式。
一般存储与回放是当用户按下存储键的时候,然后开始存储波形。
这样会有一个问题就是用户存储的是他按下按键后的波形而不是他看见那时候的波形。
一般使用的话,这种情形并无大碍,可是对于ECG信号,当心电监护仪刚好检测到一个异常信号,一般的存储模式就很有可能存储不到。
因此针对这个问题,我们团队采用另外一种思路。
即在正常情况下,存储空间也一样有ECG的信号流动。
当用户按下存储键时,存储空间的数据停止流动达到信号实时存储的目的。
因此我们将存储与回放模块有分为RAM模块用于正常的VGA的显示。
RAM_VGA模块用于存储ECG数据。
STORAGE_CHOOSE模块用来是显示正常ECG数据还是存储的ECG数据。
5.2.5VGA显示模块
VGA协议主要由5个输入信号组成:
HSYNCSignal,VSYNCSignal以及3个颜色信号RGBSignal。
其中,HSYNCSignal是列同步信号,VSYNCSignal是行同步信号,RGBSignal是红色-绿色-蓝色信号。
VGA的扫描频率是固定,我们根据液晶显示屏使用800*600@60Hz的显示标准。
然后根据我们的GUI界面布局我们用了6个ROM来存储GUI界面的数据。
其中ROM1中存储的是“心电监护仪”,ROM2中存储的是“湖北经济学院”,ROM3中存储的是“心”,ROM4中存储的是“率”,ROM5中存储的是0到9的数字库,ROM6中存储的是我们学校的校徽。
因此其程序框图如下
另外我们在VGA显示模块中遇到的最大的点就是我们的ECG图像动态显示问题。
如何让显示的ECG图像更加完整和真实,我们团队对于这个问题作了大量的改进。
我们知道常见的波形显示方法有二种。
假设存储在波形RAM中的数据为x(k),(m,n)为扫描点在波形显示区域中的相对坐标。
方法一:
当扫描点进入波形显示区域时,开始读取波形RAM中的数据,将读出的数据x(k)与当前扫描在波形显示区域中的纵坐标n或者N-n作比较,如果相等则显示,否则不显示。
下图为显示的效果能明显看出中间有断点使的整个ECG图像不是很完整。
方法二:
当扫描点进入波形显示区域时,开始读取波形ROM中的数据,
将当前扫描点在波形显示区域中的纵坐标n或者N-n与读出的当前的数据x(k)和上一个波形数据x(k-1)进行对比,如果扫描点刚好处于这两个值之间则显示,否则不予显示。
那么如何捕捉上一个波形数据x(k-1),我们使用了移位寄存器来捕捉上一个波形数据x(k-1)。
而我们在实际中发现把方法一和方法二结合在一起显示的效果最好,对于“变化缓慢甚至基本没有变化”和“变化比较陡峭”的波形显示具有很好的视觉显示效果。
显示效果如下,能够很明显的看出ECG图像的各个波段。
6.测试方案与测试结果
6.1系统测试方案
使用导联线测量时,要将电极放在左右手腕和右腿。
将导联线插头插入主机导联插口,一次性心电电极夹夹在肢体相应位置后,连接好导联线即可进行测量。
肢体电极位置:
电极标志符号
色码
肢体电极放置位置
RA(-)
绿色
右上肢内侧
LA(+)
黄色
左上肢内侧
RL(N)
黑色
左下肢内侧
注意:
使用导联线测量时,两手不能接触两侧的金属电极片,否则会产生干扰。
6.2测试仪器与设备
本设计对心电测试所选用的相应仪器与设备的相关如表1所示
表1测试仪器与设备列表
仪器名称
型号
用途
液晶显示屏
Lenovo
显示ECG图像
6.3测试数据和功能
能够明显看出ECG的各个波段。
P波,最先出现的一个振幅不高的圆钝波形,它记录的是窦房结激动的右、左心房的激动。
因为窦房结位于右心房,心房的激动先由它开始,所以P波的前半部分记录的是右心房的激动,中间部分记录的是左、右心房的共同激动而后部则代表左心房的激动。
QRS波群,继P波之后出现的一个狭窄但振幅高的波群。
由q波(有或无)、R波和S波组成。
它代表着兴奋从房室结发出先后通过房室束、左右束支和纤细的浦肯野纤维进入心肌细胞,刺激心室的收缩,因此可以将其看作是心室收缩的开始的心电图表现。
T波,上个波群暂停之后出现的波,代表着心室的复极(心室的舒张),以备下一次心室的除极。
观测T波我们要注意它的方向、形态和(高度)深度。
(1)方向,正常情况下,在Ⅰ、Ⅱ导联中T波是直立的;Ⅲ导联中则可以出现直立、平坦、双向甚至是倒置的T波;T波在aVR导联中是肯定倒置的,而在aVL和aVF导联中则是和QRS波群的主方向一致的。
U波,T波后的一个很微小的波,正常的u波并不是在每一个导联中都显而易见,它究竟代表什么尚无定论。
较为完整的捕捉并显示ECG信号并测的心率为91次/分。
7特色
我们由台式电脑得到的启发,把我们的心电监护仪做成分离式心电仪。
让硬件采样,Soc-FPGA数据处理,液晶显示各自通过相应的接口相联。
这让我们的心电监护仪在不降低显示效果的基础上,又能通过拆装便于携带。
并且由是分离式心电仪,那么它的维护和更新更加简单并且成本更低。
另外由于我们对与存储的思路的更改,使我们的存储能够做到实时性强。
此外,一般来说医用心电监护仪价钱昂贵(一般几万到十几万不等),并且不便携带。
但我们做的心电监护仪价格低廉(1000元左右)。
这还是因为是在DE1-SOC开发板本身的价格就较为昂贵,如果单独基于CycloneVSoc芯片做其价格将会更加低廉。
而心电仪等医疗电子产品价格的下降和其性价比的提高其重要意义在于,心电仪等医疗电子产品是智能云医疗的基石,只有当心电仪等医疗电子产品价格下降到能飞入平常百姓家时,那么智能云医疗的时代将会真正来临,到时整个的医疗格局就会发生改变。
医疗资源分布不均衡的问题可以得到极大的缓解。
参考文献
[1]杨开陵,徐巧玉,王志慧,王军委,马瑞.FPGA那些事儿---VerilogHDL建模技巧.北京航天航空大学出版社,2013.
[2]夏宇闻.Verilog数字系统设计教程.北京航天航空大学出版社,2013.
[3]吴厚航.深入浅出玩转FPGA.北京航天航空大学出版社,2010.
[4]郑争兵.基于FPGA的VGA波形显示系统设计与实现[A],2013.
[5]刘华东.Altera系类FPGA芯片IP核详解.电子工业出版社,2014.
[6]仁爱锋,罗丰,宋士权,董怡斌.基于FPGA的嵌入式系统设计---AlteraSocFPGA(第二版).西安电子科技大学出版社,2014.
附录A系统源代码
modulevga_test//VGA显示主模块
(
inputCLOCK_50,
inputCLOCK2_50,
inputCLOCK3_50,
inputCLOCK4_50,
inputrst_n,
input[9:
0]num,//input-fromsquare_test
////////////VGA//////////
output[7:
0]VGA_B,
outputVGA_BLANK_N,
outputVGA_CLK,
output[7:
0]VGA_G,
outputVGA_HS,
output[7:
0]VGA_R,
outputVGA_SYNC_N,
outputVGA_VS,
////////////AD////////////////
input[7:
0]read_data,//input-fromAD7928
output[8:
0]read_addr,//output-toAD7928
////////////ps2//////////////
inputW,//input-fromps2_demo
inputS//input-fromps2_demo
);
wire[63:
0]rom1_data;
rom_c_moduleU1
(
.address(rom1_addr),
.clock(CLOCK4_50),
.q(rom1_data)
);
wire[31:
0]rom2_data;
rom2_moduleU2
(
.address(rom2_addr),
.clock(CLOCK4_50),
.q(rom2_data)
);
wire[31:
0]rom3_data;
rom3_moduleU3
(
.address(rom3_addr),
.clock(CLOCK4_50),
.q(rom3_data)
);
wire[31:
0]rom4_data;
rom4_moduleU4
(
.address(rom4_addr),
.clock(CLOCK4_50),
.q(rom4_data)
);
wire[15:
0]rom5_data;
rom5_moduleU5
(
.address(rom5_addr),
.clock(CLOCK4_50),
.q(rom5_data)
);
wire[8:
0]rom1_addr;
wire[7:
0]rom2_addr;
wire[4:
0]rom3_addr;
wire[4:
0]rom4_addr;
wire[8:
0]rom5_addr;