MITBIH心律失常心电图分析资料报告软件毕业论文设计.docx
- 文档编号:11779682
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:38
- 大小:171.98KB
MITBIH心律失常心电图分析资料报告软件毕业论文设计.docx
《MITBIH心律失常心电图分析资料报告软件毕业论文设计.docx》由会员分享,可在线阅读,更多相关《MITBIH心律失常心电图分析资料报告软件毕业论文设计.docx(38页珍藏版)》请在冰豆网上搜索。
MITBIH心律失常心电图分析资料报告软件毕业论文设计
毕业设计说明书(论文)
作者:
学号:
系:
专业:
题目:
指导者:
(姓名)(专业技术职务)
评阅者:
(姓名)(专业技术职务)
2011年6月10日
毕业设计(论文)中文摘要
MIT-BIH心律失常心电图分析软件
摘要:
MIT-BIH心律失常数据库是目前国际上公认的可作为标准的心律失常分析数据库之一。
开始执行软件,需要导入外部数据文件,同时把病例信息保存至数据库,方便以后对病例信息的管理。
想要绘制波形并且显示专家标记,可以通过读取自定义格式的二进制文件,获取心电两导波形数据以与专家在特定时间点标注的标记,实现对应波形与相关专家标记的同步,以与方便用户分析两导心电波形并且与专家做的标记相比对,了解各种心律失常类型的典型波形形态。
至于对心律失常类型定位,浏览波形的同时,可以选择任意一种该病例中存在的心律失常类型,根据所选择的心律失常类型发生的时间顺序依次定位,定位显示出对应的心电波形。
最后如果想对病例信息后台管理,可以借助数据库,实现病例中患者信息以与心律失常类型发生次数的统计,并且实现对病例的波形回顾、查询、删除等功能。
关键词:
MIT-BIH心律失常两通道心电数据专家诊断标记MFCAccess
毕业设计(论文)外文摘要
TitleMIT-BIHofArryhthmiaDatabaseAnalysisSoftware
Abstract
TheMIT-BIHArryhthmiaDatabase(MIT)isoneoftheinternationalrecognizeddatabasesasthestandardarrhythmiaanalysis.Importthefilesintothesoftware:
Itneedimportexternaldatafiles,meanwhilesavethecaseinformationintothedatabase,anditisconvenienttomanageofthecases.Drawthewaveandtheexpertmarks:
Throughreadingthedefinedformatbinaryfiles,gettwoguidewaveformsandtheexpertofmasksinthespecifictime.TheuseranalysiswiththetwoguideECGwaveformandtheexpertsmark.Ouranalysisresultsparedtotheexpertmasks.Understandallkindsofarrhythmiatypesofwaveform.Fixthearrhythmiatype:
Whilebrowsingthewaveform,canchooseanykindoftheexistingarrhythmiatypesinthecase,accordingtothechosenarrhythmiatypeoccurrenceoftimepositioning,showthecorrespondingECGwaveform.Managethecaseinformationswiththehelpofthedatabase:
Whileweimportthecases,canalsoreadthecaseinformationwiththehelpofthedatabasemanage,realizecasespatientsinformationandmonarrhythmiatypesofhappentimesofstatistics.Anditcanrealizesomefunctions,suchasthereviewofthewaveform,inquirycase,anddeletecase.
Keywords:
MIT-BIHArryhthmiaDatabasetwo-channelambulatoryexcerptsmarksMFCAccess
目次
1引言
目前世界上公认的心电数据库有三个,分别是美国麻省理工学院提供的MIT-BIH心电数据库,和美国心脏学会提供的AHA以与欧洲的ST-T心电数据库。
其中MIT-BIH数据库近几年应用比拟广泛。
为了方便研究,该数据库的所有者也将越来越多的数据放到了互联网上。
该数据库中的数据是通过录制在磁带上的模拟信号通过模数(A/D)转换后的数字信号。
在存储时为了减少文件长度节省空间,采用了自定义的格式,无法使用通用的方法去读取这些数据,因此在一些上出现了读取该文件的工具软件和库函数,使用这些工具或函数就可以获取所有的数据。
但是如果每次都是用这些工具软件或者库函数,不仅会增加程序的复杂度,而且使用也不灵活。
我们完全可以根据文件的格式读出数据,可以灵活的使用这些心电数据。
该数据库中包含48条病历数据,每条病历均为30分钟两通道心电数据,包含全程(30分钟)专家诊断标记。
MIT-BIH数据库近年来在心电图产品认证、心电图教学等方面应用比拟广泛,尤其是IEC60601-2-47、AAMIEC57等标准中明确规定使用该数据库作为设备(软件)心律失常自动分析功能的性能测试数据库。
1.1心电知识简介
(1)心电图:
心脏的电激动过程影响着全身各部,使体表的不同部位发生了电位差,按照心脏激动的时间顺序,将此体表电位的变化记录下来,形成一条连续曲线,即为心电图。
英文为electrocardiogram,简写为ECG。
在正常情况下,每次心动周期在心电图上均可出现相应的一组波形。
如图1-1所示。
图1-1一个良好的心电波形图
P波心房除极时的电位变化
P-R间期心房开始除极至心室开始除极的时间
QRS波群全部心室除极时的电位变化
S-T段心室复极时的电位变化(早期)
T波心室复极时的电位变化(晚期)
Q-T间期心室除极与复极的总时间
(2)导联的定义:
将两电极置于人体的任意两点与心电图机相连,可描记出心电图,电极与心电图机的线路,称作心电图的导联。
1.2心电数据文件存储格式简介
通过对MIT-BIH心律失常数据库中数据的直接识读,使我们能更灵活地使用这些数据,并可以对其进展二次开发。
一个完整的心电记录由三局部组成:
(1)头文件[.hea],以ASCII码的形式存储,文件中存储了病历中患者的根本信息、用药情况以与一些信号标准;
(2)数据文件[.dat],按二进制存储,每三个字节存储两个数,分别表示两导波形在某一时间点的电压值,一个数12bit,存储绘制两导波形的数据;
(3)注释文件[.art],按二进制存储,表示在特定时间点处专家标注的诊断标记;
如图1-2所示为三个文件之间的关系:
图1-2数据库中病例记录的组成框图
2MIT-BIH心律失常心电图分析软件整体设计
开发这款软件可以作为研究心律失常的一个模型软件,通过这款软件可以浏览经典的48条MIT-BIH心律失常病例的两导心电波形。
通过与专家标记的比对方便我们学习了解各种常见心律失常类型的波形形态,
软件负责管理指定路径中存储的心电数据和专家诊断标记,数据库系统中维护着每一条病历的相关信息,方便用户对所有数据、信息等进展查阅、维护等工作。
MIT-BIH心律失常数据库心电图显示软件运行于WindowsXP/SP2或更高版本操作系统之上,代码的编写采用C++语言,使用MFC作为程序开发框架、使用ADO组件操作Access数据库,对48条心律失常病例进展维护管理。
2.1软件主要功能
1.导入病历:
将原始病历数据导入软件(把源文件复制到软件指定的文件夹中),同时将病历的信息以与专家分析结果的统计信息保存到数据库中。
2.病历管理:
采用列表的方式显示已导入的病历,提供对病历与信息的查询、回顾、删除等功能。
3.病历回顾:
浏览心电波形、并且显示对应的专家分析诊断结果,可调整波形的走速与增益,并可通过选择心律失常类型定位到指定时间。
4.设置功能:
用户可对文字、波形、心电图背景格、定标信号等指定颜色。
程序流程图
如图2-1所示,为软件的程序流程图,描述了软件的整体执行过程。
图2-1MIT-BIH心律失常心电图分析软件程序流程图
3头文件的识读
头文件是由一行或多行ASCII字符码组成,至少包含一个记录行,通常还包括信号技术规行,片段技术规行(对于多片段数据记录)和信息注释行。
每条病历都对应一个头文件,头文件中包含了该条病历中患者的一些根本信息,包含患者的性别、年龄、用药情况等,以与采集信号时候的一些信号规,比如采样频率、采集信号时的导联编号、信号电压基值等有效信息。
在这款软件中根据功能方面的要求读取文件提取有效信息。
将病历的局部相关信息保存至数据库以与利用提供的一些信号规绘制波形。
3.1头文件信息存储格式
记录行中从左到右依次记录了信号的名称、片段数(可选,对多片段记录,且与名称之间以“/〞分隔)、信号数量、采样频率、计数频率(可选)、计数基值(可选,与计数频率配合使用且以圆括号而非空格分隔)、每信号采样数、采样开始时间(可选)、采样开始日期(可选),这些字段之间除前面指明的之外都是以空格分隔。
紧跟记录行的是信号技术规行,该行主要包含了存储信号的文件名、存储格式、ADC增益、基线值、ADC分辨率、ADC零值、信号初始值等字段。
片段技术规行主要包括记录名称和每信号的采样数两个字段,该行只有在多片段记录的头文件中才有。
信息注释行一般在文件的最后,每行的开头以“#〞开始,容一般是说明患者的简单情况。
下面以编号100的头文件100.hea为例说明,文件的容如下:
10023606500000:
0:
00/0/0
100.dat212200l11024995-221310MLII
100.dat2122001110241011200520V5
#69M10851629x1
该头文件的第一行为记录行,指出该记录为一个包含两个采样率为360HZ的信号,每一信号的长度为65万个采样点,采样开始时间和日期没有记录。
后面紧跟的两行为信号技术规说明行,从中可以看出,两个信号都包含在文件100.dat中,每一信号都是以12位的位压缩格式(即“212〞格式)进展存储的,两个信号的增益都是每200ADCunits/mv,ADC的分辨率为11位。
ADC零值为1024,在这里基线值没有明确给出,但可以认为它等于ADC零值1024。
两个信号的第一采样点的值分别为995和1011(可以看出这他们都略低于0V),65万个采样点的校验数分别为-22131和20052,输入输出可以以任何尺寸的块来执行,因为文件容说明了这两个信号的该值都为0,信号描述字段说明了这两个信号分别采自MLII导联和V5导联。
文件的最后两行包含了注释字符串,其中第一行说明了患者的性别和年龄以与记录数据,第二行列出了患者的用药情况。
读取头文件信息
因为每一个病历文件都是由三个根本文件组成的,一条完整的病历信息的获取需要同时读取对应的三个文件。
当导入绘制波形的文件〔.dat〕文件的同时对该文件的后缀名做处理,比如当导入100.dat时,经过处理同时导入了100.hea和100.atr文件。
具体实现方法如下代码所示:
intn_dot=Dsource.Find(".");
CStringbeforedot=Dsource.Left(n_dot);
Hsource=beforedot+".hea";
m_Hdest=MyApp->m_savepath+dlg.GetFileTitle()+".hea";
通过WinHex软件查看可以了解到48条病历中的每一个.hea文件虽然存储的容不一样,但是在文件中存储一样信息的位置顺序是一样的。
比如说文件中第一个有效数据固定表示了病历的编号,这就方便了我们对文件的读取。
把读取出的有用信息依次存放入一个结构体中。
方便使用并且把结构体中的数据存入数据库中。
读取头文件信息的代码与局部注释信息如下所示:
ReadHea(CStringPath)//读头文件
{
CFilehfile;//定义一个文件类hfile
CStringinfo[25];//定义一个数组,存放读取出来的病例信息
intm=0;
charpbuf[500];//接收读取出的字节数据
CStringstr;
CStringsingle;
CStringtempinfo;
memset(pbuf,0,sizeof(pbuf));//初始化字符数组
if(hfile.Open(m_Hdest,CFile:
:
modeReadWrite)==NULL)
{
return;//如果不能打开指定文件,就返回
}
else
{
hfile.Read(pbuf,sizeof(pbuf));//按字节读取文件
char*hp;
hp=&pbuf[0];
for(intk=0;k<=sizeof(pbuf);k++)
{
if(m==25)
{
break;
}
if((int)*hp==10||(int)*hp==13)
{
hp++;
}
if(*hp!
=''&&(int)*hp!
=10&&(int)*hp!
=13)
{
tempinfo=tempinfo+(CString)(*hp);
}
else
{
info[m]=tempinfo;//把读取出的信息存放到数组中
tempinfo="";
m++;
}
hp++;
}
}
m_case.m_ID=info[0];//把病历信息存放到结构体中
m_case.m_dao0=info[12];
m_case.m_dao1=info[21];
m_case.m_Name=info[13];
if(info[24]=="F")
{
m_case.m_Sex="女";
}
else
{
m_case.m_Sex="男";
}
m_case.m_Age=atoi(info[23]);
hfile.Close();//关闭打开的文件,否如此第二次导入文件会发生存溢出错误
}
4波形文件的识读
MIT-BIH数据库中的数据存储格式有Format8、Format16、Format80、Format212、Format310等8种,具体到某一数据文件的存储格式已在相应的头文件中说明,在每一种格式中都是将来自两个或多个信号采样得到的数据交替存储。
在这里仅介绍心律失常数据文件应用最多的Format212格式的存储方法。
格式212是针对两个信号的数据库记录,这两个信号(为了方便起见,我们设定为信号0和信号1)的采样数据进展交替存储,每三个字节存储两个数据,这两个数据分别采样自信号0和信号1,信号0的采样数据取自第一字节对(共16位)的最低12位,信号1的采样数据由第一字节对的剩余4位(作为组成信号1采样数据的12位的高4位)和下一字节的8位(作为组成信号1采样数据的12位的低8位)共同组成。
两个信号的所有数据都按照这种方法连续存储。
如图4-1所示显示了100.dat的十六进制容的一个片段。
图4-1数据文件100.dat的十六进制显示(片段)
按照“212〞的存储格式,从第一字节读起,每三个字节(24位)表示两个值,第一组为“E333F3〞,两个值如此分别为Ox3E3和0x3F3,转换为十进制分别为995和1011,代表的信号幅度分别为4.975mv(计算过程:
读出的数据/信号的增益值)和5.055mv,这两个值分别是两个信号的第一个采样点,后面依此类推,分别表示了两个信号的采样值。
绘制波形的主要技术指标
采样频率:
信号的采样率(该软件的采样频率为360HZ);
走速(走纸速度):
屏幕上1mm约等于4个像素点,以标准走速25mm/s为例,每秒钟在屏幕上显示100个像素点,小于信号采集时的360个点。
所以绘制波形的时候需要隔点(360/100)读取原始的采样数据用于绘制波形(25mm/s、50mm/s)。
增益(灵敏度):
(5mm/mV、10mm/mV、20mm/mV)绘制波形的时候根据增益值得出波形在垂直方向上的增量。
由于走速的设置要求我们隔点读取数据,在软件中标准走速为25mm/s的时候隔点数目为3.6,这就需要把存储波形数据的数组下标定义成浮点类型,把误差降低到最低。
4.2读取波形数据文件
绘制波形的数据量很大,每个波形文件中每导波形存储了650000个像素数据,由于外部显示设备的宽度限制,不可能一次显示出所有波形文件,所以在软件中每次只处理足够显示一屏的数据量,这就要求我们读取波形文件的时候根据走速设置每次读取一定量的数据,借助滚动条显示下一时间段的波形时,再读取文件处理该时间段的波形数据。
具体实现代码如下所示:
ReadDat(CStringPath)//读数据文件
{
m_0=0;
m_1=0;
CFiledfile;
if(dfile.Open(Path,CFile:
:
modeReadWrite|CFile:
:
typeBinary)==NULL)
{
return;
}
intfilelongth=dfile.GetLength();
unsignedchar*pbuf=(unsignedchar*)malloc(filelongth*sizeof(unsignedchar));
int*mydata=(int*)malloc(filelongth*sizeof(int));
dfile.Read(pbuf,filelongth);
CSyssetDlgdlg;
for(floati=m_nHScrollPos*(m_set.m_v*4)*(360/(m_set.m_v*4))*3;i<(m_nHScrollPos*m_set.m_v*4*(360/(m_set.m_v*4))+m_widthwave*(360/(m_set.m_v*4)))*3-1&&i<(filelongth);i=i++)//i表示文件中从0开始的字节的标号,每次只处理可以显示一屏的数据
{
mydata[(int)i]=pbuf[(int)i];//按字节读取文件
}
for(floatj=m_nHScrollPos*(m_set.m_v*4)*(360/(m_set.m_v*4))*3+1;j<(m_nHScrollPos*m_set.m_v*4*(360/(m_set.m_v*4))+m_widthwave*(360/(m_set.m_v*4)))*3-2&&j<=(filelongth);j=j++)//j表示移动读数据移动指针的位置
{
intm=15&mydata[(int)j];
intx0=m*256+mydata[(int)j-1];
j++;
m_data0[m_0]=(float)x0/200-(float)5.120;//得到第一导波形的画波数据
m_0++;
intn=240&mydata[(int)j-1];
n=n>>4;
intx1=n*256+mydata[(int)j];
j++;
m_data1[m_1]=(float)x1/200-(float)5.120;//得到第二导波形的画波数据
m_1++;
}
dfile.Close();
free(pbuf);
free(mydata);
}
4.3绘制波形的实现过程
实现连续波形显示,连续波形绘制主要思想是,利用MoveTo和LineTo这两个函数,当画完一个新点后,要将这个新点的坐标记录下来,作为下一次画线的起点,这样就解决了连续绘制波形。
绘制波形的代码如下所示:
DrawWave(CDC*pDC)//画波形
{
CSyssetDlgdlg;
CPenpen3;
pen3.CreatePen(PS_COSMETIC,2,m_set.m_wavecolor);//创建波形画笔
intstartx=40;
intendx=startx;
intendy;
intendy1;
inttop0=250-m_nVScrollPos;
inttop1=450-m_nVScrollPos;
m_widthwave=100*(int)((pDC->GetDeviceCaps(HORZRES)-44)/100);
for(floatfi=0;fi { inti=(int)fi; if(i==0) { if(m_data0[0]>0) { endy=top0-abs((int)((m_data0[0]*m_set.m_up*4)));//得到第一道波形位置点的纵坐标值 } else { endy=top0+abs((int)((m_data0[0]*m_set.m_up*4))); } pDC->MoveTo(startx,endy); continue; } else { if(m_data0[i]>0) { endy=top0-abs((int)((m_data0[i]*m_set.m_up*4))); } else { endy=top0+abs((int)((m_data0[i]*m_set.m_up*4))); } pDC->SelectObject(&pen3); pDC->LineTo(endx,endy); } endx=endx++; } endx=startx;//第一导波形输出完后把end_x的坐标设置成初始值 for(floatfii=0;fii { intii=(int)fii; if(ii==0) { if(m_data1[0]>0) { endy1=top1-abs((int)((m_data1[0]*m_set.m_up*4))); } else { endy1=top1+abs((int)((m_data1[0]*m_set.m_up*4))); } pDC->MoveTo(startx,endy1);//心电数据中的第一个点做为起点 continue; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MITBIH 心律失常 心电图 分析 资料 报告 软件 毕业论文 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)