0 引言
隨著人們生活節奏加快,人口逐漸老齡化,心臟疾病成為危害人類健康和生命的主要疾病之一。心電監護系統為心臟病人診斷和治療提供了一個有效的手段,對心臟疾病的防治和診斷具有重大的意義,本介紹一種基于Linux 和MiniGUI 的心電監護系統,能夠滿足患者隨時隨地對心電進行方便快捷的監測,及時地發現異常情況并采取有效的措施,從而更好地保護人們的身體健康。
1 硬件系統設計
本系統采用S3C2440 處理器作為控制中心,S3C2440 是基于ARM920T 內核的16 /32 位RISC 嵌入式處理器,最高主頻可達532MHz,提供64MSDRAM、64M Nand Flash 以及2M Nor Flash 的存儲設備,獨立的16kB 指令緩存和16kB 數據緩存,LCD 控制器,3通道的異步串口,SPI 同步串口,117 位通用的I /O 口,1個內部時鐘,8通道10 位的ADC,觸摸屏接口,以太網控制器、PCMCIA 接口、USB 接口等,具有高性能、低功耗、高性價比等特點,主要用于視頻會議、網絡監控,GPS 定位/導航儀等,特別是醫療電子設備。系統的整體硬件結構如圖1 所示,能夠實現對心電信號采集、處理、顯示、存儲等功能。
圖1 系統總體硬件結構
2 軟件系統設計
2. 1 構建嵌入式Linux
心電界面的開發是基于MiniGUI 的嵌入式Linux系統。在各種嵌入式操作系統中,Linux 以其結構清晰、源代碼公開、功能強大、又易于移植得到廣泛的使用。本系統內核采用2. 6 版本的內核,Linux 2. 6 內核在性能、模塊支持、可用性、可測量性等方面有大幅度的提高。一個完整的嵌入式Linux 系統主要包括BootLoader( 引導程序) 、內核和根文件系統3 個方面。本系統中Bootloader 采用VVi,文件系統采用Yaffs。根據目標平臺實際的需要,對引導程序、內核和文件系統進行裁減、配置,最后把編譯好的ViVi 以及生成的Linux 內核和文件系統的鏡像文件燒錄到平臺中并運行,嵌入式Linux 構建完畢。
2. 2 圖形用戶界面MiniGUI
MiniGUI 是基于Linux 的輕量級的圖形用戶界面支持系統,是由原清華大學教師魏永明主持開發,遵循GPL 公約。所支持的操作系統已不僅僅限于Linux,它還可以在uClinux、uC /OS-Ⅱ、eCos 和Vx-Works 等系統上運行。已驗證的硬件平臺包括Intelx86,ARM ( ARM/AMR9 /StrongARM/xScale ) ,Power-PC,MIPS,M68K ( DragonBall /ColdFire ) 等。對MiniGUI 移植,首先下載MiniGUI 的源代碼libminigui-1. 6. 10. tar. gz ( MiniGUI 函數庫源代碼) 和minigui-minigui-res-1. 6. 10. tar. gz( MiniGUI 所使用的資源,包括基本字體、圖標、位圖和鼠標光標) ,然后編譯安裝并將MiniGUI 的資源拷貝到目標平臺上,最后修改目標平臺的/etc /MiniGUI. cfg 文件,對目標平臺MiniGUI 的運行環境進行配置。
2. 3 心電采集界面設計
2. 3. 1 主界面
MiniGUI 中有3 種窗口類型: 主窗口、對話框和控件窗口,心電采集界面是采用對話框進行設計,對話框編程是一種快速構建用戶界面的技術,MiniGUI提供了一種基于模板的機制,利用DLGTEMPLATE和CTRLDATA 兩個結構體來表示,DLGTEMPLATE用來定義對話框本身,結構體CTRLDATA 用來定義控件。利用這兩個結構體模板,用戶可以根據需要在程序中定義自己的對話框和控件。主界面的對話框定義如下:
static DLGTEMPLATE DlgInitProgress =
{
WS_BORDER WS_CAPTION,
WS_EX_NONE,
0,0
, 240, 320,
" 歡迎使用心電信號采集系統" ,
0,0
,
10,NULL,
0
} ;
用CTRLDATA 定義對話框中所有的控件并用數組表示,對話框常常使用控件來實現提示或者設置等功能,定義控件數組模型如下:
static CTRLDATA CtrlInitProgess[]=
{
{ CTRL_STATIC,
WS_CHILD|WS_VISIBLE| SS_NOTIF
|WS_BORDER,
0,0
, 240,
30
IDC_STATIC1,
“歡迎使用心電信號采集系統”,
0
}
;
{
…
} ;
…
} ;
通過上述方法生成的心電監護儀主界如圖2 所示。心電采集界面主要有心電數據采集與顯示、存儲、分析等功能,采用多線程編程,為采集、顯示、存儲、分析各建立一個專門的線程。多線程進行數據采集可以有效地加快程序的反應速度、增加執行的效率。
圖2 電監護儀主界面
在MiniGUI 中,使用消息驅動作為應用程序的創建構架。在消息驅動的應用程序中,計算機外設發生的事件都由支持系統收集,將以事先的約定格式翻譯為特定的消息。應用程序一般包含有自己的消息隊列,系統將消息發送到應用程序的消息隊列中。從消息隊列中讀取這些消息,并由窗口過程函數來處理這些消息。本系統界面通過鼠標鍵的按擊,翻譯成特定的消息,若收到的是控件消息,則判斷ID,根據應用程序進行相應的消息處理。
2. 3. 2 心電采集與顯示
心電數據采集采用定時器進行采集和顯示,定時器使用SetTimer 函數創建,創建時需要指定定時器標識號以及定時時間,當定時時間到達時,定時器將會產生MSG _ TIMER 消息,本系統的心電采集頻率為200Hz。
從A/D 寄存器讀取三通道的數據存入數組中,并將數組中的數據在液晶顯示器上繪出。在MiniGUI 中實時繪圖采用GDI,GUI 系統的一個重要組成部分就是GDI,即圖形設備接口( Graphics Device Interface) 。通過GDI,GUI 程序就可以在計算機屏幕上,或者其它的顯示設備上進行圖形輸出,包括基本繪圖和文本輸出。所有繪圖相關的函數均需要有一個設備上下文,為了提高繪圖效率,在這里建立私有設備上下文,所建立的設備上下文在整個窗口生存期內有效,從而免除了獲取和釋放的過程。利用hdc =GetPrivateClientDC( hDlg) 可獲得私有設備上下文。然后調用MoveTo ( HDC hdc, int x, int y) 和LineTo( HDC hdc, int x, int y) 對數組中的數據進行畫線,由于采集到的心電數據較小,因此在對其進行畫線之前根據顯示區域對所有數據進行適當放大,這樣可以使心電波形在液晶顯示器上直觀顯示。
2. 3. 3 心電數據分析
在心電數據顯示和分析線程中,由于心電信號容易受到各種干擾的影響,為了濾除心電信號中的干擾成分,首先要進行數字濾波處理,采用FFT 濾波和滑動平均濾波的方法使圖像得以平滑,并采用差分方法進行R 波檢測。當采集到5 秒的數據的時候,程序啟動心電數據分析線程,對存儲在數組中的心電數據進行分析,主要進行R 波檢測,并且在液晶顯示器上顯示。
2. 3. 4 心電界面程序的編譯
心電界面程序首先是在PC 機上編寫的,為了能夠在目標平臺上運行,必須先進行交叉編譯,編譯
如下:
#arm-linux-gcc -I /home /include -L/home /lib-O2 -oxindian xindian.c -lminigui -lmgext -lm -ljpeg-lpthread-lpng
這時生成心電界面程序的可執行文件,將其下載到目標平臺中即可運行。
3 結束語
本文研制的心電監護儀采用高性能的ARM9 微處理器為核心,在其上移植Linux 操作系統,并用 MiniGUI 進行心電界面開發,能夠對心電信號進行采集、波形顯示及處理,實現心電信號的實時監護的目的。該心電監護儀結合了目前現有的心電監護儀的優點,體積小、重量輕,并且具有操作界面簡潔、可擴展性強等優點,對各種心率失常及各種心臟病變有較高的診斷價值。
分享到:QQ空間新浪微博騰訊微博人人網微信
歡迎分享本文,轉載請保留出處:http://www.eechina.com/thread-156056-1-1.html 【打印本頁】