




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、畢業(yè)設(shè)計說明書(論文) 作 者: 學(xué) 號: 系 : 專 業(yè): 題 目: 指導(dǎo)者: (姓 名) (專業(yè)技術(shù)職務(wù))評閱者: (姓 名) (專業(yè)技術(shù)職務(wù)) 2011 年 6 月 10 日畢業(yè)設(shè)計(論文)中文摘要MIT-BIH心律失常心電圖分析軟件 摘要: MIT-BIH 心律失常數(shù)據(jù)庫是目前國際上公認(rèn)的可作為標(biāo)準(zhǔn)的心律失常分析數(shù)據(jù)庫之一。開始執(zhí)行軟件,需要導(dǎo)入外部數(shù)據(jù)文件,同時把病例信息保存至數(shù)據(jù)庫,方便以后對病例信息的管理。想要繪制波形并且顯示專家標(biāo)記,可以通過讀取自定義格式的二進(jìn)制文件,獲取心電兩導(dǎo)波形數(shù)據(jù)以及專家在特定時間點標(biāo)注的標(biāo)記,實現(xiàn)對應(yīng)波形與相關(guān)專家標(biāo)記的同步,以及方便用戶分析兩導(dǎo)心電
2、波形并且與專家做的標(biāo)記相比對,了解各種心律失常類型的典型波形形態(tài)。至于對心律失常類型定位,瀏覽波形的同時,可以選擇任意一種該病例中存在的心律失常類型,根據(jù)所選擇的心律失常類型發(fā)生的時間順序依次定位,定位顯示出對應(yīng)的心電波形。最后如果想對病例信息后臺管理,可以借助數(shù)據(jù)庫,實現(xiàn)病例中患者信息以及心律失常類型發(fā)生次數(shù)的統(tǒng)計,并且實現(xiàn)對病例的波形回顧、查詢、刪除等功能。關(guān)鍵詞: MIT-BIH 心律失常 兩通道心電數(shù)據(jù) 專家診斷標(biāo)記 MFC Access 畢業(yè)設(shè)計(論文)外文摘要Title MIT-BIH of Arryhthmia Database Analysis Software Abstrac
3、tThe MIT-BIH Arryhthmia Database (MIT) is one of the international recognized databases as the standard arrhythmia analysis. Import the files into the software:It need import external data files,meanwhile save the case information into the database, and it is convenient to manage of the cases.Draw t
4、he wave and the expert marks:Through reading the defined format binary files, get two guide waveforms and the expert of masks in the specific time . The user analysis with the two guide ECG waveform and the experts mark. Our analysis results compared to the expert masks. Understand all kinds of arrh
5、ythmia types of waveform .Fix the arrhythmia type: While browsing the waveform, can choose any kind of the existing arrhythmia types in the case, according to the chosen arrhythmia type occurrence of time positioning, show the corresponding ECG waveform.Manage the case informations with the help of
6、the database: While we import the cases, can also read the case information with the help of the database manage , realize cases patients information and common arrhythmia types of happen times of statistics. And it can realize some functions,such as the review of the waveform , inquiry case, and de
7、lete case. Keywords: MIT-BIH Arryhthmia Database two-channel ambulatory excerpts marks MFC Access 目 次1 引言11.1 心電知識簡介11.2 心電數(shù)據(jù)文件存儲格式簡介22 MIT-BIH心律失常心電圖分析軟件整體設(shè)計32.1 軟件主要功能32.2 程序流程圖33 頭文件的識讀53.1 頭文件信息存儲格式53.2 讀取頭文件信息64波形文件的識讀84.1 繪制波形的主要技術(shù)指標(biāo)84.2 讀取波形數(shù)據(jù)文件94.3 繪制波形的實現(xiàn)過程105 專家標(biāo)記文件的識讀155.1 專家標(biāo)記文件的讀取155.2
8、專家標(biāo)記文件的顯示185.3 心律失常類型時間定位226 病例信息管理236.1 打開數(shù)據(jù)庫236.2 數(shù)據(jù)管理的主要功能236.3 數(shù)據(jù)庫中字段的設(shè)置267 系統(tǒng)測試267.1 系統(tǒng)測試內(nèi)容277.2 測試結(jié)果27結(jié) 論29參 考 文 獻(xiàn)30致 謝31 1 引言目前世界上公認(rèn)的心電數(shù)據(jù)庫有三個,分別是美國麻省理工學(xué)院提供的MIT-BIH心電數(shù)據(jù)庫,和美國心臟學(xué)會提供的AHA以及歐洲的ST-T心電數(shù)據(jù)庫。其中MIT-BIH數(shù)據(jù)庫近幾年應(yīng)用比較廣泛。為了方便研究,該數(shù)據(jù)庫的所有者也將越來越多的數(shù)據(jù)放到了互聯(lián)網(wǎng)上。該數(shù)據(jù)庫中的數(shù)據(jù)是通過錄制在磁帶上的模擬信號通過模數(shù)(A/D)轉(zhuǎn)換后的數(shù)字信號。在存
9、儲時為了減少文件長度節(jié)省空間,采用了自定義的格式,無法使用通用的方法去讀取這些數(shù)據(jù),因此在一些網(wǎng)站上出現(xiàn)了讀取該文件的工具軟件和庫函數(shù),使用這些工具或函數(shù)就可以獲取所有的數(shù)據(jù)。但是如果每次都是用這些工具軟件或者庫函數(shù),不僅會增加程序的復(fù)雜度,而且使用也不靈活。我們完全可以根據(jù)文件的格式讀出數(shù)據(jù),可以靈活的使用這些心電數(shù)據(jù)。該數(shù)據(jù)庫中包含48條病歷數(shù)據(jù),每條病歷均為30分鐘兩通道心電數(shù)據(jù),包含全程(30分鐘)專家診斷標(biāo)記。MIT-BIH 數(shù)據(jù)庫近年來在心電圖產(chǎn)品認(rèn)證、心電圖教學(xué)等方面應(yīng)用比較廣泛,尤其是IEC60601-2-47、AAMI EC57等標(biāo)準(zhǔn)中明確規(guī)定使用該數(shù)據(jù)庫作為設(shè)備(軟件)心律
10、失常自動分析功能的性能測試數(shù)據(jù)庫。1.1 心電知識簡介(1)心電圖:心臟的電激動過程影響著全身各部,使體表的不同部位發(fā)生了電位差,按照心臟激動的時間順序,將此體表電位的變化記錄下來,形成一條連續(xù)曲線,即為心電圖。英文為electrocardiogram,簡寫為ECG。在正常情況下,每次心動周期在心電圖上均可出現(xiàn)相應(yīng)的一組波形。如圖1-1所示。圖 1-1 一個良好的心電波形圖P波 心房除極時的電位變化P-R間期 心房開始除極至心室開始除極的時間QRS波群 全部心室除極時的電位變化S-T段 心室復(fù)極時的電位變化(早期)T波 心室復(fù)極時的電位變化(晚期)Q-T間期 心室除極與復(fù)極的總時間 (2)導(dǎo)聯(lián)
11、的定義:將兩電極置于人體的任意兩點與心電圖機(jī)相連,可描記出心電圖,電極與心電圖機(jī)鏈接的線路,稱作心電圖的導(dǎo)聯(lián)。1.2 心電數(shù)據(jù)文件存儲格式簡介通過對MIT-BIH 心律失常數(shù)據(jù)庫中數(shù)據(jù)的直接識讀,使我們能更靈活地使用這些數(shù)據(jù),并可以對其進(jìn)行二次開發(fā)。一個完整的心電記錄由三部分組成: (1)頭文件.hea,以ASCII碼的形式存儲,文件中存儲了病歷中患者的基本信息、用藥情況以及一些信號標(biāo)準(zhǔn);(2)數(shù)據(jù)文件.dat,按二進(jìn)制存儲,每三個字節(jié)存儲兩個數(shù),分別表示兩導(dǎo)波形在某一時間點的電壓值,一個數(shù)12bit,存儲繪制兩導(dǎo)波形的數(shù)據(jù);(3)注釋文件.art,按二進(jìn)制存儲,表示在特定時間點處專家標(biāo)注的診
12、斷標(biāo)記;如圖1-2所示為三個文件之間的關(guān)系:注釋文件.atr數(shù)據(jù)文件.dat件.dat病例記錄頭文件.hea圖1-2 數(shù)據(jù)庫中病例記錄的組成框圖2 MIT-BIH心律失常心電圖分析軟件整體設(shè)計開發(fā)這款軟件可以作為研究心律失常的一個模型軟件,通過這款軟件可以瀏覽經(jīng)典的48條MIT-BIH心律失常病例的兩導(dǎo)心電波形。通過與專家標(biāo)記的比對方便我們學(xué)習(xí)了解各種常見心律失常類型的波形形態(tài),軟件負(fù)責(zé)管理指定路徑中存儲的心電數(shù)據(jù)和專家診斷標(biāo)記,數(shù)據(jù)庫系統(tǒng)中維護(hù)著每一條病歷的相關(guān)信息,方便用戶對所有數(shù)據(jù)、信息等進(jìn)行查閱、維護(hù)等工作。MIT-BIH 心律失常數(shù)據(jù)庫心電圖顯示軟件運(yùn)行于Windows XP/ SP
13、2或更高版本操作系統(tǒng)之上,代碼的編寫采用C+語言,使用MFC作為程序開發(fā)框架、使用ADO組件操作Access 數(shù)據(jù)庫,對48條心律失常病例進(jìn)行維護(hù)管理。2.1 軟件主要功能 1.導(dǎo)入病歷:將原始病歷數(shù)據(jù)導(dǎo)入軟件(把源文件復(fù)制到軟件指定的文件夾中),同時將病歷的信息以及專家分析結(jié)果的統(tǒng)計信息保存到數(shù)據(jù)庫中。2.病歷管理:采用列表的方式顯示已導(dǎo)入的病歷,提供對病歷及信息的查詢、回顧、刪除等功能。3.病歷回顧:瀏覽心電波形、并且顯示對應(yīng)的專家分析診斷結(jié)果,可調(diào)整波形的走速與增益,并可通過選擇心律失常類型定位到指定時間。4.設(shè)置功能:用戶可對文字、波形、心電圖背景格、定標(biāo)信號等指定顏色。2.2 程序流
14、程圖如圖2-1所示,為軟件的程序流程圖,描述了軟件的整體執(zhí)行過程。開始增加新病例病例回顧導(dǎo)入文件初始化獲取軟件的執(zhí)行路徑根目錄的Heart文件夾中讀取hea頭文件添加到數(shù)據(jù)庫中讀到文件尾讀取數(shù)據(jù)文件點擊水平滾動條觸發(fā)刷新設(shè)置nPos的值nPos=m_nHScrollPos nPos=m_nHScrollPos讀取專家標(biāo)記文件結(jié)束得到常見類型心律失常的統(tǒng)計信息得到病例信息顯示波形顯示專家標(biāo)記YNNY圖2-1 MIT-BIH心律失常心電圖分析軟件程序流程圖3 頭文件的識讀 頭文件是由一行或多行ASCII字符碼組成,至少包含一個記錄行,通常還包括信號技術(shù)規(guī)范行,片段技術(shù)規(guī)范行(對于多片段數(shù)據(jù)記錄)和
15、信息注釋行。每條病歷都對應(yīng)一個頭文件,頭文件中包含了該條病歷中患者的一些基本信息,包含患者的性別、年齡、用藥情況等,以及采集信號時候的一些信號規(guī)范,比如采樣頻率、采集信號時的導(dǎo)聯(lián)編號、信號電壓基值等有效信息。在這款軟件中根據(jù)功能方面的要求讀取文件提取有效信息。將病歷的部分相關(guān)信息保存至數(shù)據(jù)庫以及利用提供的一些信號規(guī)范繪制波形。3.1 頭文件信息存儲格式記錄行中從左到右依次記錄了信號的名稱、片段數(shù)(可選,對多片段記錄,且與名稱之間以“/”分隔)、信號數(shù)量、采樣頻率、計數(shù)頻率(可選)、計數(shù)基值(可選,與計數(shù)頻率配合使用且以圓括號而非空格分隔)、每信號采樣數(shù)、采樣開始時間(可選)、采樣開始日期(可選
16、),這些字段之間除前面指明的之外都是以空格分隔。緊跟記錄行的是信號技術(shù)規(guī)范行,該行主要包含了存儲信號的文件名、存儲格式、ADC增益、基線值、ADC分辨率、ADC零值、信號初始值等字段。片段技術(shù)規(guī)范行主要包括記錄名稱和每信號的采樣數(shù)兩個字段,該行只有在多片段記錄的頭文件中才有。信息注釋行一般在文件的最后,每行的開頭以“#”開始,內(nèi)容一般是說明患者的簡單情況。下面以編號100的頭文件100.hea為例說明,文件的內(nèi)容如下:100 2 360 650000 0:0:0 0/0/0100.dat 212 200 l1 1024 995 -22131 0 MLII100.dat 212 200 11 1
17、024 1011 20052 0 V5# 69 M 1085 1629 x1# Aldoment.Inderal該頭文件的第一行為記錄行,指出該記錄為一個包含兩個采樣率為360HZ的信號,每一信號的長度為65萬個采樣點,采樣開始時間和日期沒有記錄。后面緊跟的兩行為信號技術(shù)規(guī)范說明行,從中可以看出,兩個信號都包含在文件100.dat中,每一信號都是以12位的位壓縮格式(即“212”格式)進(jìn)行存儲的,兩個信號的增益都是每200ADC units/mv,ADC的分辨率為11位。ADC零值為1024,在這里基線值沒有明確給出,但可以認(rèn)為它等于ADC零值1024。兩個信號的第一采樣點的值分別為995和1
18、011(可以看出這他們都略低于0V),65萬個采樣點的校驗數(shù)分別為-22131和20052,輸入輸出可以以任何尺寸的塊來執(zhí)行,因為文件內(nèi)容說明了這兩個信號的該值都為0,信號描述字段說明了這兩個信號分別采自MLII導(dǎo)聯(lián)和V5導(dǎo)聯(lián)。文件的最后兩行包含了注釋字符串,其中第一行說明了患者的性別和年齡以及記錄數(shù)據(jù),第二行列出了患者的用藥情況。3.2 讀取頭文件信息因為每一個病歷文件都是由三個基本文件組成的,一條完整的病歷信息的獲取需要同時讀取對應(yīng)的三個文件。當(dāng)導(dǎo)入繪制波形的文件(.dat)文件的同時對該文件的后綴名做處理,比如當(dāng)導(dǎo)入100.dat時,經(jīng)過處理同時導(dǎo)入了100.hea和100.atr文件。
19、具體實現(xiàn)方法如下代碼所示:int n_dot = Dsource.Find(.);CString beforedot = Dsource.Left(n_dot); Hsource = beforedot + .hea;m_Hdest = MyApp-m_savepath + dlg.GetFileTitle() + .hea;通過WinHex軟件查看可以了解到48條病歷中的每一個.hea文件雖然存儲的內(nèi)容不相同,但是在文件中存儲相同信息的位置順序是相同的。比如說文件中第一個有效數(shù)據(jù)固定表示了病歷的編號,這就方便了我們對文件的讀取。把讀取出的有用信息依次存放入一個結(jié)構(gòu)體中。方便使用并且把結(jié)構(gòu)體中
20、的數(shù)據(jù)存入數(shù)據(jù)庫中。讀取頭文件信息的代碼及部分注釋信息如下所示:ReadHea(CString Path)/讀頭文件CFile hfile;/定義一個文件類hfileCString info25;/定義一個數(shù)組,存放讀取出來的病例信息int m = 0;char pbuf500;/接收讀取出的字節(jié)數(shù)據(jù)CString str;CString single;CString tempinfo;memset(pbuf,0,sizeof(pbuf);/初始化字符數(shù)組if (hfile.Open(m_Hdest,CFile:modeReadWrite) = NULL)return;/如果不能打開指定文件,
21、就返回elsehfile.Read(pbuf,sizeof(pbuf);/按字節(jié)讀取文件char *hp;hp = &pbuf0;for (int k = 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);elseinfom = tempinfo; /把讀取出的信息存放到數(shù)組中tempinfo = ;m+;hp+;m_case.m_ID = in
22、fo0;/把病歷信息存放到結(jié)構(gòu)體中m_case.m_dao0 = info12;m_case.m_dao1 = info21;m_case.m_Name = info13;if (info24 = F)m_case.m_Sex = 女; elsem_case.m_Sex = 男;m_case.m_Age = atoi(info23);hfile.Close();/關(guān)閉打開的文件,否則第二次導(dǎo)入文件會發(fā)生內(nèi)存溢出錯誤4 波形文件的識讀MIT-BIH 數(shù)據(jù)庫中的數(shù)據(jù)存儲格式有Format 8、Format16、Format 80、Format 212、Format 310等8種,具體到某一數(shù)據(jù)文件
23、的存儲格式已在相應(yīng)的頭文件中說明,在每一種格式中都是將來自兩個或多個信號采樣得到的數(shù)據(jù)交替存儲。在這里僅介紹心律失常數(shù)據(jù)文件應(yīng)用最多的Format 212格式的存儲方法。格式212是針對兩個信號的數(shù)據(jù)庫記錄,這兩個信號(為了方便起見,我們設(shè)定為信號0和信號1)的采樣數(shù)據(jù)進(jìn)行交替存儲,每三個字節(jié)存儲兩個數(shù)據(jù),這兩個數(shù)據(jù)分別采樣自信號0和信號1,信號0的采樣數(shù)據(jù)取自第一字節(jié)對(共16位)的最低12位,信號1的采樣數(shù)據(jù)由第一字節(jié)對的剩余4位(作為組成信號1采樣數(shù)據(jù)的12位的高4位)和下一字節(jié)的8位(作為組成信號1采樣數(shù)據(jù)的12位的低8位)共同組成。兩個信號的所有數(shù)據(jù)都按照這種方法連續(xù)存儲。如圖4-1
24、所示顯示了100.dat的十六進(jìn)制內(nèi)容的一個片段。圖 4-1 數(shù)據(jù)文件100.dat的十六進(jìn)制顯示(片段)按照“212”的存儲格式,從第一字節(jié)讀起,每三個字節(jié)(24位)表示兩個值,第一組為“E3 33 F3”,兩個值則分別為Ox3E3和0x3F3,轉(zhuǎn)換為十進(jìn)制分別為995和1011,代表的信號幅度分別為4.975mv(計算過程:讀出的數(shù)據(jù)/信號的增益值)和5.055mv,這兩個值分別是兩個信號的第一個采樣點,后面依此類推,分別表示了兩個信號的采樣值。4.1 繪制波形的主要技術(shù)指標(biāo)采樣頻率:信號的采樣率(該軟件的采樣頻率為360HZ);走速 (走紙速度):屏幕上1mm約等于4個像素點,以標(biāo)準(zhǔn)走速
25、25mm/s為例,每秒鐘在屏幕上顯示100個像素點,小于信號采集時的360個點。所以繪制波形的時候需要隔點(360/100)讀取原始的采樣數(shù)據(jù)用于繪制波形(25mm/s、50mm/s)。增益 (靈敏度):(5mm/mV、10mm/mV、20mm/mV)繪制波形的時候根據(jù)增益值得出波形在垂直方向上的增量。由于走速的設(shè)置要求我們隔點讀取數(shù)據(jù),在軟件中標(biāo)準(zhǔn)走速為25mm/s的時候隔點數(shù)目為3.6,這就需要把存儲波形數(shù)據(jù)的數(shù)組下標(biāo)定義成浮點類型,把誤差降低到最低。4.2 讀取波形數(shù)據(jù)文件繪制波形的數(shù)據(jù)量很大,每個波形文件中每導(dǎo)波形存儲了650000個像素數(shù)據(jù),由于外部顯示設(shè)備的寬度限制,不可能一次顯示
26、出所有波形文件,所以在軟件中每次只處理足夠顯示一屏的數(shù)據(jù)量,這就要求我們讀取波形文件的時候根據(jù)走速設(shè)置每次讀取一定量的數(shù)據(jù),借助滾動條顯示下一時間段的波形時,再讀取文件處理該時間段的波形數(shù)據(jù)。具體實現(xiàn)代碼如下所示:ReadDat(CString Path)/讀數(shù)據(jù)文件m_0 = 0;m_1 = 0;CFile dfile;if(dfile.Open(Path,CFile:modeReadWrite|CFile:typeBinary) = NULL)return;int filelongth = dfile.GetLength();unsigned char *pbuf=(unsigned ch
27、ar*)malloc(filelongth*sizeof(unsigned char);int *mydata = (int*)malloc(filelongth*sizeof(int);dfile.Read(pbuf,filelongth);CSyssetDlg dlg;for(float i = 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);
28、 i = i+)/i表示文件中從0開始的字節(jié)的標(biāo)號,每次只處理可以顯示一屏的數(shù)據(jù)mydata(int)i = pbuf(int)i;/按字節(jié)讀取文件for (float j = 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 4;int x1 = n*256+mydata(int)j; j+;m_data1m_1 = (float)x1/200-(float)5.120;
29、/得到第二導(dǎo)波形的畫波數(shù)據(jù)m_1+;dfile.Close();free(pbuf);free(mydata);4.3 繪制波形的實現(xiàn)過程實現(xiàn)連續(xù)波形顯示,連續(xù)波形繪制主要思想是,利用MoveTo和LineTo這兩個函數(shù),當(dāng)畫完一個新點后,要將這個新點的坐標(biāo)記錄下來,作為下一次畫線的起點,這樣就解決了連續(xù)繪制波形。繪制波形的代碼如下所示:DrawWave(CDC* pDC)/畫波形CSyssetDlg dlg;CPen pen3;pen3.CreatePen(PS_COSMETIC, 2, m_set.m_wavecolor);/創(chuàng)建波形畫筆int startx = 40;int endx =
30、 startx;int endy;int endy1;int top0 = 250-m_nVScrollPos;int top1 = 450-m_nVScrollPos;m_widthwave = 100*(int)(pDC-GetDeviceCaps(HORZRES) - 44)/100);for (float fi = 0;fi0) endy = top0 - abs(int)(m_data00*m_set.m_up*4);/得到第一道波形位置點的縱坐標(biāo)值 else endy = top0 + abs(int)(m_data00*m_set.m_up*4); pDC-MoveTo(star
31、tx,endy); continue; else if (m_data0i0) endy = top0 - abs(int)(m_data0i*m_set.m_up*4); else endy = top0 + abs(int)(m_data0i*m_set.m_up*4); pDC-SelectObject(&pen3); pDC-LineTo(endx,endy); endx = endx+; endx = startx;/第一導(dǎo)波形輸出完后把end_x的坐標(biāo)設(shè)置成初始值 for (float fii = 0;fii0) endy1 = top1 - abs(int)(m_data10*m
32、_set.m_up*4); else endy1 = top1 + abs(int)(m_data10*m_set.m_up*4); pDC-MoveTo(startx,endy1);/心電數(shù)據(jù)中的第一個點做為起點 continue; else if (m_data1ii0) endy1 = top1 - abs(int)(m_data1ii*m_set.m_up*4); else endy1 = top1 + abs(int)(m_data1ii*m_set.m_up*4); pDC-LineTo(endx,endy1); endx = endx+;圖 4-2 100.dat的兩導(dǎo)波形片段如
33、圖4-2所示的波形的采樣頻率為360HZ,走速為標(biāo)準(zhǔn)走速25mm/s,增益值為5mm/mV。背景格中每一個大格約為20個像素(5mm)。4.3.1 采用滾動條控制顯示特定時間段的波形每一個病例信息文件都是由大量的像素點組成,由于屏幕的顯示寬度是有限的,不可能一次顯示出所有的波形文件,所以通過在視圖中加入水平滾動條來控制波形的顯示,設(shè)置滑塊在水平滾動條上的位置表示波形的時間,運(yùn)行程序時調(diào)節(jié)滑塊的位置,可以顯示不同時間段的波形。如圖4-3所示為滾動條的調(diào)節(jié)過程: 設(shè)置水平滾動條的nPos的值根據(jù)nPos的值和m_v計算顯示一屏波形需要讀取的字節(jié)數(shù)根據(jù)m_v隔點取值繪制心電兩導(dǎo)波形nPos的值改變圖
34、4-3 繪制波形的過程(“nPos”為滑塊在水平滾動條上的位置,“m_v”為波形的走速)設(shè)置水平滾動條的代碼如下所示:void CHeart_viewView:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/水平滾動條 int nMin = 0;int nMax = 0;GetScrollRange(SB_HORZ, &nMin, &nMax);switch(nSBCode)case SB_LEFT:m_nHScrollPos = max(m_nHScrollPos - 1, nMin);break;case SB_RIGH
35、T:m_nHScrollPos = min(m_nHScrollPos + 1, nMax);break;case SB_LINELEFT:m_nHScrollPos = max(m_nHScrollPos - 1, nMin);break;case SB_LINERIGHT:m_nHScrollPos = min(m_nHScrollPos + 1, nMax);break;case SB_PAGELEFT:m_nHScrollPos = max(m_nHScrollPos - 1, nMin);break;case SB_PAGERIGHT:m_nHScrollPos = min(m_nH
36、ScrollPos + 1, nMax);break;case SB_THUMBTRACK:m_nHScrollPos = nPos;break;default:return; SetScrollPos(SB_HORZ,m_nHScrollPos,TRUE);Invalidate(0);CView:OnHScroll(nSBCode, nPos, pScrollBar);void CHeart_viewView:SetHScrollPos()/設(shè)置數(shù)值SCROLLINFO si;si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;si.nMin = 0;si.n
37、Page = 1;si.nMax = 1805;si.nPos = m_nHScrollPos;SetScrollInfo(SB_HORZ,&si,TRUE); 4.3.2 解決屏幕閃爍現(xiàn)象滾動條可以很好的解決波形的顯示,通過調(diào)節(jié)水平滑塊可以方便快速的查看特定時間段的波形,但同樣也帶來了一個顯示效果上的問題,由于大量GDI繪圖,快速移動滑塊的時候會造成屏幕的閃爍現(xiàn)象。解決這一問題采用了雙緩沖技術(shù)。雙緩沖技術(shù):大量GDI繪圖操作(含有擦除操作)直接輸出到屏幕DC時,造成屏幕閃爍。解決辦法:創(chuàng)建并使用后臺DC進(jìn)行繪制操作,然后將后臺DC中的內(nèi)容一次拷貝(貼圖)到屏幕DC上,即雙緩沖技術(shù)。相關(guān)實現(xiàn)代
38、碼如下圖所示:MemDC = new CDC;MemBitmap = new CBitmap;MemDC-CreateCompatibleDC(pDC); CRect rc;GetClientRect(&rc);MemBitmap-CreateCompatibleBitmap(pDC,rc.Width(),rc.Height();CBitmap *pOldBit = MemDC-SelectObject(MemBitmap);MemDC-FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(255,255,255);CHeart_viewDoc* pDoc
39、= GetDocument();ASSERT_VALID(pDoc);MemDC-SetBkMode(TRANSPARENT);MemDC-SetTextColor(m_set.m_textcolor);DrawWave(MemDC);pDC-BitBlt(0,0,rc.Width(),rc.Height(),MemDC,0,0,SRCCOPY);MemDC-DeleteDC();MemBitmap-DeleteObject();5 專家標(biāo)記文件的識讀注釋文件記錄了心電專家對相應(yīng)心電信號的診斷信息,主要有兩種格式:MIT格式和AHA格式。MIT格式是一種緊簇型格式,每一注釋的長度占用偶數(shù)個字節(jié)
40、的空間,多數(shù)情況下是占用兩個字節(jié),多用于在線的注釋文件;而AHA格式的每一注釋占用16個字節(jié)的空間,多用于交換文件的情況。在這里簡要說明一下常用的MIT格式的存儲方式,每一注釋單元的前兩個字節(jié)的第一個字節(jié)為最低有效位,16位中的最高6位表示了注釋類型代碼,剩余的10位說明了該注釋點的發(fā)生時間或為輔助信息,若為發(fā)生時間,其值為該注釋點到前一注釋點的間隔(對于第一個注釋點為從記錄的開始到該點的間隔),若為輔助信息則說明了附加信息的長度。這兩種格式的在文件中的區(qū)分決定于前兩個字節(jié)的值,判斷是MIT格式還是AHA格式的條件是:若文件的第一字節(jié)不為0或第二字節(jié)等于“”(0x5B)或“”(0x5D),則該
41、文件是以MIT格式存儲的,否則是按AHA格式存儲的。5.1 專家標(biāo)記文件的讀取下面以記錄100的注釋文件100.atr為例進(jìn)行說明,圖5-1顯示了100.atr的十六進(jìn)制內(nèi)容的一個片段。圖 5-1 注釋文件100.atr的十六進(jìn)制顯示(片段)從第一字節(jié)開始按照MIT格式進(jìn)行分析,首先讀出16位值0x7012,其高6位的值為0x1C(十進(jìn)制28),10位的值為0x12,該類型代碼為28,代表意義是節(jié)律變化,發(fā)生時間在0.05秒(18/360Hz);接著讀出后面的16位值0xFC03,其高6位的值為0x3F(十進(jìn)制63),低10位的值為0x03,該類型代碼為63,代表的意義是在該16位值后附加了3
42、個(低10位值代表的數(shù))字節(jié)的輔助信息,若字節(jié)個數(shù)為奇數(shù),則再附加一個字節(jié)的空值,在本例中就是“28 00 00 4E”;然后再從下一字節(jié)讀16位值0x043B,其高6位的值為1,低10位的值為0x3B(十進(jìn)制59),該類型碼1代表正常心搏,發(fā)生時間為0.213秒(18+59)/360Hz);依次類推即可讀出所有的注釋,當(dāng)讀到的16位值為0時,就表示到了文件尾。當(dāng)高6位為十進(jìn)制59時,讀取之后第3個16位的高6位,作為類型代碼,讀取之后第二個16位+第一個16位*216;高6位為十進(jìn)制60,61,62時,繼續(xù)讀下一個16位。讀取專家標(biāo)記文件的實現(xiàn)過程如下所示:int *mode;int *t;
43、int *f;int *sumt;int v = 1;int s;CFile fatr;CString mask;if (fatr.Open(m_Adest,CFile:modeReadWrite|CFile:typeBinary) = NULL)return; elseint filelongth = fatr.GetLength();unsigned char *pbuf = (unsigned char*)malloc(filelongth*sizeof(unsigned char);/從腳標(biāo)為0的開始存mode = (int*)malloc(filelongth*sizeof(int)
44、;t = (int*)malloc(filelongth*sizeof(int);f = (int*)malloc(filelongth*sizeof(int);sumt = (int*)malloc(filelongth*sizeof(int);fatr.Read(pbuf,filelongth);int q = 0;int u = 0;sumt0 = 0;if (pbuf0 != 0 | pbuf1 = 91 | pbuf1 = 93)for ( int k = 0;k 2;if (modev-1 0 & modev-1 = 41)int cc = (pbufk+1&3)8) + pbuf
45、k;sumtv = sumtv-1 + cc;/獲取時間點信息v+;q+; k = k + 2;continue;if (modev-1 = 59)int low_8 = pbufk+2;int heigt_8 = pbufk+38;/左移8位int first = (low_8 + heigt_8)*2)16;low_8 = pbufk+4;heigt_8 = pbufk+58;int second = low_8 + heigt_8;tq = first + second;/計算時間sumtv = sumtv-1 + tq;/獲取時間點信息v+;q+;k = k + 6;/需要獲取時間co
46、ntinue; if (modev-1 = 60|modev-1 = 61|modev-1 = 62)k = k + 2;/不獲取時間continue;if (modev-1 = 63)/需要計算輔助信息int dd = (pbufk+1&3)8) + pbufk;if (dd%2 != 0)k = k + dd + 3;elsek = k + dd + 2;u+;continue;s = v - 1;int i = 0;/時間定位相關(guān)memset(m_fix,0,sizeof(m_fix);for(v = 1;v = s;v+)if (modev-1 = m_fixmode & m_fixf
47、lag = 1)m_fixi = (int)(sumtv/360);m_fixi = i;/記錄存在的時間點的個數(shù)i+;elsereturn;5.2 專家標(biāo)記文件的顯示 每一屏波形有固定的時間間隔,但是對應(yīng)的每一屏標(biāo)記信號并沒有固定的時間間隔,也不存在發(fā)生的時間規(guī)律,但是需要與波形文件在時間上達(dá)到同步。所以在處理專家標(biāo)記文件的時候采用的篩選標(biāo)記的方法,在特定時間段中篩選出符合條件的標(biāo)記文件,具體代碼如下所示:for (v = 1;v = (m_nHScrollPos)*360 & sumtv = (maskt + m_nHScrollPos)*360)switch(modev-1)case 1: mask = N;break;case 2: mask = L;break;case 3: mask = R;break;case 4: mask = a;break;case 5: mask = V;break;case 6: mask = F;break;case 7: mask = J;break;case 8: mask = A;break;c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人員外派合同范例
- 住房裝潢合同范例
- 區(qū)塊鏈在智能電網(wǎng)中的應(yīng)用與安全性探討
- 倆兄弟合伙開店合同范例
- 供電企業(yè)合同范例
- 與物業(yè)合作簽合同范例
- 個體招聘合同范例
- 修補(bǔ)雨棚天溝合同范例
- 鄉(xiāng)里地皮出售合同范例
- 區(qū)塊鏈與供應(yīng)鏈金融深度融合的奧秘
- 《股指期貨交易》課件
- 2024-2025年全國初中化學(xué)競賽試卷及答案
- 機(jī)器可讀標(biāo)準(zhǔn) 能力等級模型 征求意見稿
- 新生兒出血性疾病處理護(hù)理課件
- 企業(yè)的經(jīng)營指標(biāo)分析報告
- 加油站安全技能競賽與實操演練
- 《六尺巷的故事》課件
- 變電站通信中斷處理經(jīng)驗分享
- 農(nóng)藝師考試試題及答案(種植業(yè)卷)
- DB4409-T 38-2023 奇楠沉香栽培技術(shù)規(guī)程
- 腸系膜上動脈壓迫綜合征演示稿件
評論
0/150
提交評論