摘 要: 主要介紹了一種基于心電圖采樣模塊與智能手機的心電圖服務系統設計方法。 首先給出了系統的基本框架, 然后重點給出了具有藍牙接口的心電圖機設計方案以及手機終端軟件設計方法, 其中采用專用的心電圖模塊AIKD812-256 與藍牙模塊HC-06 設計心電圖機, 采用J2ME 平臺編程實現藍牙通信、心電數據存儲、心電數據發送至服務器的功能, 并對實現過程中的關鍵代碼進行分析, 最后給出了心電圖機運行的測試結果。 測試結果表明本文設計的心電圖機可用于遠程醫療監護。
近幾年來, 心腦血管疾病成為了危及人類健康的主要疾病之一。 心電信號是進行病理診斷的依據, 現有心電監護系統主要包括2 種: (1)記錄病人心電數據的Holter 系統; (2)病房的心電監護系統。 前者攜帶方便, 但不能進行實時診斷; 后者可以用于診斷, 但只能在醫院使用。
隨著人們生活節奏的加快, 需要一種攜帶方便, 又能實時供醫生診斷的便攜式心電監護系統。 如文獻[2,3]分別介紹了一種基于智能手機的心電實時監護系統,系統由測量節點、智能手機節點和監護中心端組成,智能手機節點通過藍牙實時接收由心電采集節點傳來的心電數據, 并將監護情況通過GPRS 網絡傳輸到監護中心, 但均未給出具有藍牙功能心電圖機節點的設計方法。 文獻[4]提出了一種基于ZigBee 的多功能心電信號的測量方法, 可用于連接計算機系統實現病人長期監測。 文獻[5]中提出了一個基于Linux 的12 導聯心電信號便攜式監測系統, 具有交互式液晶觸摸功能,可用于互聯網遠程診斷系統。
本文以AIKD812-256 心電圖采樣模塊與智能手機為核心設計一種具有藍牙通信接口的便攜式心電監護系統。 該心電圖監護系統將心電圖機采集到的心電數據通過藍牙接口傳輸至手機, 手機可以實時存儲心電數據, 并能根據需要將心電數據通過GPRS/3G 網絡傳輸至醫療中心服務器, 供專業人員診斷。 文章安排如下: 第1 部分給出具有藍牙接口的心電圖機設計方案;第2 部分為手機軟件設計方法, 包括藍牙通信、心電數據存儲、心電數據發送至服務器, 并對其實現過程中的關鍵代碼進行分析; 第3 部分為測試情況與小結。
1 心電圖機設計方案
1.1 系統簡介
心電圖是一門較為深奧的學科, 一般情況下, 基層醫療單位醫生、心血管患者不可能都是心電圖方面的專家。 本文提出的系統以具有優質資源的醫療機構為服務中心, 通過Internet 網絡與多個位于鄉鎮或農村、重點監護病人的心電圖機終端互連, 在一定程度上解決“看病難”問題。 本系統主要由如下4 部分組成: 心電圖機、安裝有專用軟件的手機、專家診斷終端、1 個醫療中心服務器, 系統結構框圖如圖1 所示。
圖1 系統結構框圖。
其中, 心電圖機與手機一一對應, 其數量m 為系統中需要心電監測的用戶數; 專家診斷終端數n 是系統中專家為用戶進行診斷操作的計算機數。
在該系統中,心電圖機采集人體的心電數據, 并通過藍牙將測得的心電圖數據傳送至手機, 實時地顯示在手機屏幕上,根據用戶設置可以將心電數據存儲在手機中或通過GPRS/3G 網絡傳輸至醫療中心服務器。
專業人員可以在專家診斷終端上對上傳的心電數據進行診斷,并利用電子郵件或短信將診斷完成的消息通知對應用戶, 以便用戶通過手機軟件提取診斷結果。
限于文章篇幅, 本文重點介紹系統中心電圖機與手機軟件的設計方法。
1.2 AIKD812-256 模塊及其應用
本文心電圖機設計以AIKD812-256 模塊為核心。
該模塊是專用于心電信號采樣的產品[6], 采用同步12導聯采樣, 單5V 電源供電。 它有八個差分信號輸入通道, 使用精密運算放大器、24 位模數轉換器和高速處理器, 整個電路被封裝在1.5×1.5×0.381 英寸的模塊內, 并在處理器上安裝了有效的數字濾波器算法, 使得本產品非常容易在強噪聲背景、高輸出阻抗環境下獲取微小的心電圖信號。
該模塊以UART 串行方式輸入輸出數據, 3.3V 的TTL 電平, 波特率為115200bps, 數據格式為8 位數據位、1 位停止位、非校驗。 對心電圖采樣模塊的控制操作采用一定格式的命令幀, 命令幀均由20 字節組成。
如表1 所示, 其中幀頭的4 個字節固定為“AIKD”字符串, 校驗和為幀前面19 字節的異或結果, 具體的命令和附加字節表示的含義可參考資料[6], 在此只給出本文用到的命令字節, 如表2 所示, 其中開始命令的附加字節為1、2 時, 模塊輸出數據類型分別為Wilson導聯、Frank 導聯; 模塊收到握手命令后, 會回送15字節的應答幀。
表1 模塊的控制幀格式
表2 模塊的控制命令字節
模塊收到開始命令后, 開始每2ms 輸出一個心電數據幀, 每幀16 字節, 當輸出為Wilson 體系時, 數據包內包括II、III、V1~V6 導聯的數據(分別記為DII、DIII、DV1~DV6), 手機終端接收到數據幀后可以計算出I、avR、avL 和avF 導聯的數據(分別記為DI、DavR、DavL、DavF), 計算方法如下:
DI = DII-DIII
DavR = DIII/2-DIII
DavL = DII/2-DIII
DavF = (DII+DIII)/2
1.3 藍牙接口設計
在模塊的硬件連接上, 心電圖采樣模塊的輸入端串聯10K 電阻后可直接連接導聯線, 如圖2 所示。 圖中藍牙模塊采用HC-06, 該模塊采用CSR 藍牙芯片,遵循藍牙V2.0 協議標準, 模塊尺寸為3.57×1.52cm,利用串口的TXD、RXD 信號腳與心電圖采樣模塊直接相連, 波特率設置為115200bps。由于心電圖采樣模塊與藍牙模塊尺寸小, 因此整個心電圖機體積小巧,便于攜帶。
圖2 心電圖機主要電路的連接圖
2 手機軟件設計
為了實現整個系統目標, 在手機終端中必須安裝心電數據存儲與收發軟件。 該軟件具有如下功能: 通過藍牙實現心電數據接收、心電數據的存儲、通過GPRS/3G 向中心服務器發送心電數據。
本文手機終端軟件采用J2ME 進行編程, 下面對這些功能實現過程中的關鍵代碼進行分析。
2.1 藍牙通信
(1) 藍牙查尋連接
系統設計時將手機作為客戶端、藍牙模塊作為服務端, 即利用手機去搜索并連接藍牙模塊。 需要注意的是, 用手機與藍牙模塊連接, 首先得保證手機具有藍牙功能。
整個藍牙連接過程包括客戶端搜索附近藍牙設備、在搜索到的指定藍牙設備上搜索藍牙服務、連接搜索到的藍牙服務, 最后實現數據的互通,具體的關鍵代碼如下:
LocalDevicelocalDevice=LocalDevice.getLocalDevice(); // 取得本地藍牙設備
discoveryAgent = localDevice.getDiscoveryAgent();// 取得藍牙代理
上面兩步通過后, 就可以確定本設備帶有藍牙接口, 并同時啟動藍牙功能。 通過上述步驟后, 利用
discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);
開始搜索附近藍牙設備, 搜索到設備后自動調用deviceDiscovered()回調方法, 在deviceDiscovered()方法里添加設備。 本系統中每次只連接一個設備,所以一旦搜到一個設備后就通過discoveryAgent.
cancelInquiry() 方法取消設備搜索, 自動調用inquiryCompleted()回調方法, 在inquiryCompleted()中添加discoveryAgent.searchServices()程序搜索在設備上服務, 每發現一個服務時都會自動調用servicesDiscovered(), 完成全部搜索服務后自動調用serviceSearchCompleted()方法。
在搜索到藍牙設備, 并在藍牙設備上搜索到串口服務器后, 通過:
url = sr.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
conn = (StreamConnection) Connector.open(url);
實現藍牙的連接。
(2) 手機與心電圖模塊通信。
藍牙連接成功后利用conn.openDataInputStream()打開輸入流、 conn.openDataOutputStream()打開輸出流,通過read()或write()方法進行數據通信。 在通信過程中主要實現2 個功能: 手機控制心電圖模塊、手機接收來自心電圖模塊的數據, 其中手機控制心電圖模塊主要包括握手信號的發送、開始命令和停止命令的發送。
為了實現手機與心電圖機的數據通信連接, 手機首先發送握手信號到藍牙模塊。 根據表2, 可以知道發送握手信號的格式以及發送代碼為:
同樣, 還可以采用上述方法發送不同控制命令的字節數組到心電圖模塊, 控制心電圖機進行相應的操作, 如開始命令和停止命令, 限于文章篇幅, 在此不作贅述。
手機接收到應答幀后發送開始傳輸命令幀, 接著開始接收心電圖數據。 手機接收心電圖數據的關鍵程序代碼結構如下:
2.2 心電數據存儲
手機終端一個重要功能就是心電數據的存儲。 在J2ME 程序中, RMS(Record Management Store 的縮寫)記錄庫是一個小型的簡單數據庫管理系統, 可以用來保存應用程序中的數據。
RMS 具體的存儲方式由各設備廠商自己實現, 存儲的位置也會因為設備廠商的不同而不同。 在RMS 中,每一條數據被稱為一條記錄, 記錄庫實際是記錄的集合。 本文將一個心電數據作為一個記錄存入記錄庫。
一個記錄格式如表3 所示。
表3 心電數據記錄格式
其中, 頭部信息包含預設的用戶信息以及心電數據的保存時間, 校驗和為前面80127 個字節的異或和。
從一個記錄格式可知, 由于心電圖機每2ms 輸出16 個字節的數據, 所以一個保存的心電圖時間長度為(8126-127+1)×2/16=10000ms, 即10s.
記錄中頭部信息的時間信息為心電數據保存時手機的系統時間, 可以利用如下代碼得到:
Calendar c = Calendar.getInstance();
Date d = c.getTime();
然后從d 中提取年月日以及時分的具體數據, 并與上述接收到的心電數據一起存入記錄庫中。
對于記錄庫的操作, 先要打開記錄庫, 然后對記錄庫進行操作, 其中包括記錄的增加、刪除、修改等,最后將記錄庫關閉。 具體主要通過以下方法實現記錄庫的操作:
penRecordStore(rsName,true); //打開名為rsName 的記錄庫
deleteRecordStore(rsName); //刪除名為rsName 的記錄庫
addRecord(b, 0, b.length); //添加數組b 到記錄庫
getRecord(id); //讀取第id 條記錄
setRecord(id,b,0,b.length); //將第id 條記錄設置成字節數組b
2.3 心電數據發送至服務器
本設計中采用TCP Socket 方式與中心服務器進行數據通信, MIDP2.0 中定義了SocketConnection 和ServerSocketConnection 接口用于實現TCP Socket 編程。
由于本系統中手機端作為客戶端, 所以只用到了SocketConnection 接口。
為了實現Socket 通信, 必須先建立連接sc=(SocketConnection)Connector.open(url);
其中url 為服務器的地址, 本系統中url=Socket://61.
153.1.12:5000, 即服務器IP 地址為61.153.1.12.
為了防止因服務器未開而導致的長時間連接, 程序中設置了一個定時器, 在經過設定的時間后仍未連接成功, 給出提示, 并終止連接。 如果成功建立連接,則打開輸出流和輸入流:
dos=new DataOutputStream(sc.openOutputStream());
dis=new DataInputStream(sc.openInputStream());
同時, 為了防止傳輸過程中出現數據差錯, 本設計中單幀心電圖數據采用固定長度的格式傳輸, 具體格式參見表3, 實際傳輸時在該表的格式前增加一個幀頭“A1A2A3”。 當中心服務器收到此幀頭時, 就認為幀頭后續的數據為表3 格式的心電圖數據。 一幀數據接收完后對其中校驗和進行核查, 如果核查結果正確, 發送“OK”字符串至手機終端; 反之, 發送“ER”字符串, 以便提示手機終端重傳心電圖數據。
另外, 為了便于中心服務器存儲心電數據, 上傳至服務器的心電數據包括預設的用戶信息以及心電記錄的保存時間。 專家診斷完成后, 根據用戶信息(如電子郵件或手機號碼)通知用戶提取診斷結論。
?
3 測試與小結
本文的設計調試包括2 部分: 心電圖機電路、手機軟件。 手機軟件采用JBuilder2006 開發平臺, 調試成功后, 將軟件打包, 并下載到具有藍牙功能的手機中進行運行測試。 圖3 是軟件在NOKIA 6300 上運行的情況, 其中圖(a)為軟件的主界面, 圖(b)為藍牙連接過程的界面, 圖(c)為有關參數設置的界面, 圖(d)為心電數據接收時心電圖動態顯示情況, 圖(e)為心電數據的記錄庫列表, 圖(f)為心電數據上傳服務器時的界面。
圖3 手機軟件運行界面。
經測試, 本文設計的心電圖機達到了預定目標,并具有攜帶方便、使用簡便的特點, 可實現小型醫療機構與重點監護病人遠程醫療監護的功能, 對提高全民健康水平, 有著積極的意義。
評論
查看更多