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