本研究開發一種基于Android系統的遠程肌力康復評定系統。該系統由下位機與智能移動終端組成,下位機的壓力傳感器采集肌力參數,通過藍牙串口無線傳輸至Android設備,并經互聯網傳輸至醫生監護平臺。該系統實現了肌力參數的計算與分析并實時顯示,經初步測試,運行效果良好。該系統實現了肌力參數的遠程傳輸,為臨床醫生對肌肉功能障礙患者的診療提供了極大的便利。
引用本文: 徐秀林, 姚曉明, 徐奚嬌, 胡曉輝. 基于移動平臺的肌力康復評定系統的開發. 生物醫學工程學雜志, 2015, 32(4): 808-814. doi: 10.7507/1001-5515.20150146 復制
版權信息: ?四川大學華西醫院華西期刊社《生物醫學工程學雜志》版權所有,未經授權不得轉載、改編
引言
肌無力是腦卒中后常見的損害,肌肉無力和肌肉痙攣是影響腦卒中后患者運動功能恢復的主要因素[1]。Morris等[2]的研究表明,強化肌肉訓練對腦卒中患者運動功能恢復有積極作用。為了針對性地進行康復訓練,有必要對肌肉功能進行檢測和評定。肌力評定是測定受試者主動運動時肌肉或肌群的收縮力量藉以評估肌力大小,確定肌力障礙程度,制定康復治療方案,評定康復療效[3]。臨床上常用的肌力測試方法是徒手肌力評定法,該評定法存在操作者主觀評價的誤差,較難準確地反映受檢者肌力的水平[4]。近年來,隨著計算機科學的不斷進步,國內外已開發出了數字化肌力測試儀器,比如美國的BiodexSystem4型肌力測試訓練系統,可評定患者動態下的關節及肌肉群的功能且定量分析康復進程[5];德國的Isomed2000等速肌力測試訓練系統對肩、肘、腕、膝、踝六大關節測試或訓練并能測出肌力、耐力、做功能力、爆發力等多種參數[6];美國HOGGAN公司生產的MicroFet 3便攜式肌力測試儀是一款手持式數字測力計,能從多個平面來測試肌肉力量并且能傳輸至計算機進行數字化圖形分析[7]。這些肌力測試訓練系統雖然功能較全面,但不能實現移動遠程康復功能且價格昂貴,結構復雜,操作繁瑣,不能在臨床上廣泛應用[8]。因此,開發一種基于手機、平板電腦等移動平臺的智能化肌力康復評定系統尤為重要。
隨著醫療信息化建設的不斷完善,將通訊與計算機功能融合在一起的智能移動終端正不斷滲透到醫療衛生行業。目前,市場上已開發出的基于Android移動終端用于醫療行業中的產品,有把醫用傳感器連接到Android終端,可以檢測患者的血壓、血糖等生理參數[9];有將安裝在Android移動終端上的醫用軟件結合內置傳感器,可測定運動訓練的參數,讓使用者有計劃地進行減肥[10];有使用無線網絡技術,通過Android終端分析患者定向能力,能有效幫助癡呆患者,減輕了護理者的負擔[11]。
本研究開發了一種基于Android系統的遠程肌力康復評定系統,該系統采用藍牙通信技術,將Android智能設備(如手機或平板電腦等)與便攜式肌力測試儀無線通訊。從便攜式肌力測試儀上測得的數據通過無線藍牙傳輸到Android設備上,Android移動測試軟件能定量分析患者的肌力參數,經互聯網發送到醫生端,為醫生對患者的肌力康復治療效果的評定提供便利。
1 系統硬件設計
系統總體結構如圖 1所示,由便攜式肌力測試儀和Android設備組成。便攜式肌力測試儀主要由單片機模塊、傳感器模塊、信號調理放大模塊、藍牙傳輸模塊組成。傳感器模塊獲取肌力信號,通過調理放大后,由單片機模塊控制A/D轉換進行肌力數值的采集,并通過無線藍牙模塊與帶有Android系統的設備之間進行串口通訊,由Android設備對數據進行處理,最終發送至醫生監護平臺,系統實物如圖 2所示。
 圖1
				系統構架
			
												
				Figure1.
				System framework
						
				圖1
				系統構架
			
												
				Figure1.
				System framework
			
								 圖2
				便攜式肌力測試系統
			
												
				Figure2.
				Portable muscle strength evaluating device
						
				圖2
				便攜式肌力測試系統
			
												
				Figure2.
				Portable muscle strength evaluating device
			
								便攜式肌力測試儀與Android設備之間的藍牙模塊采用藍牙串口協議,實現了模塊間的數據傳輸。藍牙模塊是集成有射頻收發、基帶控制和管理、藍牙主控制器接口協議HCI的單一芯片,核心工作電壓為1.8 V,輸出端口工作電壓3.3 V。藍牙模塊將數據轉變為特殊的藍牙RF信號通過藍牙串口無線發送給Android設備。藍牙協議棧中的SPP協議(藍牙串行服務)能在藍牙設備之間創建仿真串口進行數據傳輸。藍牙串口服務由全球唯一標識符(Universally Unique IDentifier,UUID)表示,為00001101-0000-1000-8000-00805F9B34FB。
在搜索連接藍牙設備后,由藍牙設備的UUID提供服務選擇,使Android智能終端通過BluetoothSocket類建立通訊連接。
2 系統軟件設計
移動設備以Android為軟件框架平臺,采用堆層的架構,底層以Linux內核工作為基礎,由C語言開發,提供基本功能;中間層包括函數庫和虛擬機,由C++開發;第二層是應用框架層,它提供了Android應用程序使用的系統API;最上層是各種應用軟件涉及用戶界面和用戶交互,包括通話程序,短信程序等,以Java作為編程。
開發環境建立如下:利用Android SDK和 Eclipse并安裝其插件,啟用Eclipse后選擇Help>Install new software,然后在窗口中選擇Add,輸入站點名及地址進入下一步安裝ADT[12],配置完成開發環境就可開發肌力評定軟件。
2.1 Android設備軟件界面設計
在新建的Android Project中,主程序代碼放置在“\src”,布局文件(\layout)則存放在“\res”內。Android應用開發采用Java程序語言,肌力評定軟件新建的第一個程序類繼承Activity類,在類中重新寫了onCreate()方法,在方法內以setContentView()函數來設置這個Activity要顯示的布局(R.layout.main),布局文件是以XML格式編寫的。
肌力評定軟件設定的藍牙配對界面如圖 3所示,布局文件中的控件采用從上到下的線性格式,布局配置中設置了圖片插件、ListView控件及Button控件。對于在布局文件中設置的列表和按鈕這兩個控件需要在程序代碼中編寫觸發監聽處理,當用戶點擊該控件后即可完成相應的事件處理。當用戶在此界面上與肌力測試儀完成藍牙配對連接后,肌力評定測試軟件由上述界面跳轉至肌力功能評定分析界面。在這個界面中設置了SurfaceView控件、Button控件及TextView控件。在肌力功能評定分析界面中用戶可以實現肌力信號的采集、數據轉換處理、控制信號的接收和發送以及生成肌力圖形顯示等。
 圖3
				移動平臺的肌力評定軟件界面
			
												
				Figure3.
				Interface of muscle strength evaluating software
						
				圖3
				移動平臺的肌力評定軟件界面
			
												
				Figure3.
				Interface of muscle strength evaluating software
			
								2.2 藍牙配對模塊
程序開啟后首先運行藍牙配對模塊,該模塊為藍牙配對提供圖形化界面。為了豐富人機互動功能,藍牙配對模塊還可以劃分成多個不同的功能子模塊,主要包括“設置藍牙開關”、“搜索設備”、“列表顯示地址”、“提示對話框”、“提示信息”、“菜單使用”等。在開發中每個控件設計為Android的一個組件并且根據需求利用不同控件編寫相應的執行命令。藍牙配對模塊流程如圖 4所示,包含了發現周圍藍牙設備、地址顯示及與其配對連接成功跳轉的過程:
(1)使用registerReceiver注冊BroadcastReceiver來獲取藍牙狀態、搜索設備等消息。
(2)當用戶將藍牙開關打開后,即可使用BluetoothAdapter的搜索。
(3)將BroadcastReceiver的onReceive()搜索所得的藍牙設備信息(如名稱、MAC硬件地址)顯示在列表中,用戶點擊列表顯示的信息后詢問用戶是否要連接或斷開該藍牙設備。
(4)當用戶點擊繼續連接后,通過設備的地址來建立一個BluetoothDevice對象,由BluetoothDevice衍生出BluetoothSocket準備SOCKET來讀寫設備,Android設備藍牙端即可與肌力測試評定儀藍牙模塊建立連接。
(5)BluetoothSocket建立通訊連接則需要選擇其通訊協議/服務,用于便攜式肌力測試儀的藍牙適配器和Android設備藍牙模塊連接的UUID屬于串口服務類[13],其值為:SPP(00001101-0000-1000-8000-00805F9B34FB),Connect之后使用BluetoothSocket的getInputStream()和getOutputStream()來讀寫藍牙設備。
藍牙配對模塊程序關鍵代碼如下:
public void connect(BluetoothDevice btDev){
?……
?UUID uuid=UUID.fromString(SPP_UUID);
?try{
? ?btSocket=btDev.createRfcommSocketToServiceRecord(uuid);
? ?btSocket.connect();
? ?Intent intent=new Intent();
? ?intent.setClass(testBlueTooth.this,WaveDiagram.class);
? ?startActivity(intent); //藍牙連接后,界面跳轉
? ?} catch (IOException e) {
? ? ?e.printStackTrace();}
? ?……
}
 圖4
				藍牙配對模塊流程圖
			
												
				Figure4.
				Bluetooth pairing module flowchart
						
				圖4
				藍牙配對模塊流程圖
			
												
				Figure4.
				Bluetooth pairing module flowchart
			
								2.3 藍牙通訊模塊
藍牙通訊模塊的目的是在兩個不同設備之間保證一條完整的通信路徑并在它們之間保持一通信段。為了在藍牙無線鏈路上實現串行通信,藍牙協議棧定義了一個稱為RFCOMM 的串行端口抽象,它為各種應用提供了一個虛擬的串行端口[14]。兩個設備能夠通過藍牙提供的仿真串口進行串口通信,其中包括數據、文件的傳輸。Android設備通過輸入輸出流程序來讀寫該串口,設定的串口協議如表 1所示,Android設備發送下表顯示的控制指令給便攜式肌力測試儀后,即可無線控制便攜式肌力測試儀開始或停止發送肌力數據[15]。
 表1
                串口通信協議
		 	
		 			 				Table1.
    			Serial communication protocol
			
						表1
                串口通信協議
		 	
		 			 				Table1.
    			Serial communication protocol
       		
       				程序代碼中定義的控制指令數組的數據類型是有符號字節類型(signed byte),其表示范圍在-128~127之間。串口通信協議數據幀中的0xAA不在-128~127內,需要對其進行轉換,0xAA經過補碼運算后顯示結果為-86,在要求范圍內才可被系統識別。由此,Android應用程序代碼中對便攜式肌力測試儀發送的開始或停止指令定義為:
byte [] start={0x55,-86,03,01,01,01,01,6};
byte [] stop={0x55,-86,03,01,01,01,02,7};
根據該數組命令,在應用程序中編寫OutputStream輸出流:btOutput.write(start); btOutput.write(stop),將命令通過藍牙串口發送至便攜式肌力測試儀。
用戶操作Android設備來控制便攜式肌力測試儀工作,點擊開始按鈕使其開始測試傳輸肌力信號;點擊停止按鈕后使該儀器立即停止測試傳輸數據;點擊返回按鈕則跳轉回藍牙配對界面。
2.4 肌力評定模塊
肌力評定模塊實現肌力信號的讀取、存儲和圖形分析功能,使用多線程處理技術實現一個線程做肌力曲線圖的繪制,同時另一個線程完成讀取便攜式肌力測試儀發送的肌力數據。程序代碼中編寫多線程程序能夠使程序的響應速度更快,提高繪制肌力曲線圖的效率。便攜式肌力測試儀是一幀一幀將肌力數據傳輸給Android設備,這一幀數據中包含幀頭、設備號、通道號、效驗號等除肌力信號以外的數據,如表 2所示。在一幀數據中,程序所需要顯示的肌力信號是位于數據序列的12位肌力數據,在程序中將肌力信號從每一幀數據中解析出來并將其存入一個新的數組中。
 表2
                便攜式肌力測試儀傳輸一幀數據格式
		 	
		 			 				Table2.
    			A frame data format sent by portable muscle strength device
			
						表2
                便攜式肌力測試儀傳輸一幀數據格式
		 	
		 			 				Table2.
    			A frame data format sent by portable muscle strength device
       		
       				解析數據的方法是首先判斷便攜式肌力測試儀發送一幀數據串是否有9個數據,如果是則繼續讀取這一幀數據,接著比較幀頭的兩個數據是否是0x55、0xAA,若符合則繼續判斷校驗值是否正確。校驗值是一幀數據串前8個幀頭、設備號等數據之和。如果校驗值也是相等,則這一幀數據是有效的。程序將滿足上述條件的數據解析出來并存入一個新的數組,根據存儲的數據進行肌力曲線的繪制,繪圖程序的流程如圖 5所示。
 圖5
				繪圖程序流程圖
			
												
				Figure5.
				Flow diagram of drawing program
						
				圖5
				繪圖程序流程圖
			
												
				Figure5.
				Flow diagram of drawing program
			
								在Android手機屏幕中,系統默認左上角為起始點0點,從0點往右為X軸的正方向,從0點往下為Y軸的正方向。12位的肌力數據最大值為fff,轉換成十進制為4 095,根據程序中設定的底線與肌力的最大值,通過 y=baseLine-dataBuf[i] *baseLine/4 095(baseline換成surfaceView的高度),此函數可將Y軸顯示的肌力值翻轉,繪制出的圖形效果如圖 6所示。
 圖6
				移動平臺上的肌力評定手機運行圖
			
												
				Figure6.
				Effect of muscle strength evaluated graphic
						
				圖6
				移動平臺上的肌力評定手機運行圖
			
												
				Figure6.
				Effect of muscle strength evaluated graphic
			
								測試停止后,將測試者個人信息輸入移動平臺中,用戶點擊“顯示結果”按鈕,Android設備就根據其力臂長度及體重計算評價獲得肌力參數,如峰力矩、峰力矩體重比、平均力矩等,如圖 7所示。這些評估肌力的參數值可經互聯網發送至醫生監護平臺作為其指導治療的參考依據。
 圖7
				肌力參數顯示結果圖
			
												
				Figure7.
				Result of muscle strength parameters
						
				圖7
				肌力參數顯示結果圖
			
												
				Figure7.
				Result of muscle strength parameters
			
								肌力評定模塊程序關鍵代碼如下:
void simpleDraw(int start,byte[] inputBuf,int baseLine)
{if (start==0)
……
System.arraycopy(inputBuf,0,buffer,0,inputBuf.length);
int tmp=buffer.length/9;
int[] dataBuf=new int[tmp]; //解析肌力數據
?if ((buffer.length >=9) && (buffer[0]==0x55) && (buffer[1]==-86))
? ?{……
? ? {byte jiaoyan=(buffer[9*i-3]);
? ? jiaoyan+=(buffer[9*i-2]);
? ? if ((jiaoyan & 0xff)==((buffer[9*i-1]- 0x8) & 0xff)) //判斷解析數據
? ? {……}}
?Canvas canvas=sfv.getHolder().lockCanvas(
new Rect((int)oldX,0,(int)oldX+buffer.length,sfv.getHeight())); //獲取畫布
?canvas.drawColor(Color.BLACK); //清除背景
?……
3 系統可靠性測試結果
使用該系統對三組不同年齡組的60名正常人進行手部肌力功能測試實驗,每個年齡組測試者中男女比例均衡,各位10人。第一組為年輕人群,其中男性受試者的年齡為(24±1)歲、身高(173.70±1.35) cm、體重(65.50±2.27) kg;女性受試者的年齡為(23±1)歲、身高(161.6±1.14) cm、體重(55.9±3.33) kg。第二組為中年人群,其中男性受試者的年齡為(45±1)歲、身高(172.70±2.46) cm、體重(73.70±2.77) kg;女性受試者的年齡為(43±1)歲、身高(161.1±1.31) cm、體重(65.1±4.36)。第三組為老年人群,其中男性受試者的年齡為(65±1)歲、身高(168.50±1.65) cm、體重(65.60±2.32) kg;女性受試者的年齡為(65±2)歲、身高(158.1±1.00) cm、體重(52.7±2.75) kg。測試的肌肉分別為指淺屈肌、指深屈肌、尺側腕屈肌、尺側腕伸肌。所有測試者的慣用手都是右手且都進行兩次測試,測試時間間隔2 d。兩次測試時測試環境明亮,透風,基本視為無環境影響因素。測試者做肌力測試的試驗時間均為10 s。測試過程中,測試者先將其測試肌肉放松,當被提示用力時就用力,從而測得收縮肌力值。
通過兩次的測試數據對測試者使用該裝置前后進行一致性檢驗,使用SPSS 17.0軟件計算組內相關系數(ICC)。ICC是衡量和評價測試儀器的信度的系數指標,等于個體的變異度除以總的變異度,其值在0~1之間,0表示不可信,1表示完全可信。一般認為ICC小于0.4表示信度較差,0.6~0.75之間表示信度較好,大于0.75表示信度極好[16]。測試結果顯示,該儀器的峰力矩、平均力矩、峰力矩體重比的ICC值均大于0.6,表明儀器具有良好的可靠性,結果如表 3~5所示。
 表3
                左右手肌力測試部位峰力矩可靠性
		 	
		 			 				Table3.
    			Repeatability of peak torque in hands’ testing parts
			
						表3
                左右手肌力測試部位峰力矩可靠性
		 	
		 			 				Table3.
    			Repeatability of peak torque in hands’ testing parts
       		
       				 表4
                左右手肌力測試部位平均力矩可靠性
		 	
		 			 				Table4.
    			Repeatability of average torque in hands’ testing parts
			
						表4
                左右手肌力測試部位平均力矩可靠性
		 	
		 			 				Table4.
    			Repeatability of average torque in hands’ testing parts
       		
       				 表5
                左右手肌力測試部位峰力矩體重比可靠性
		 	
		 			 				Table5.
    			Repeatability of peak torque/weight ratio in hands’ testing parts
			
						表5
                左右手肌力測試部位峰力矩體重比可靠性
		 	
		 			 				Table5.
    			Repeatability of peak torque/weight ratio in hands’ testing parts
       		
       				4 討論
肌力測試對于評定腦卒中所致的肌力低下患者的治療效果具有重要的意義。隨著科學技術的不斷發展,手機移動智能終端正不斷滲透到醫療領域中并具有廣闊的應用前景。在針對肌無力患者的移動遠程醫療中,對于肌力信號的檢測非常重要,因此該項研究對康復移動醫療的發展具有重要的參考意義。本研究開發的基于移動平臺的肌力康復測試評定系統將便攜式肌力測試儀與具有Android系統的移動終端組合在一起,并通過互聯網為患者提供一套基于移動通信技術的遠程肌力測試系統。患者通過便攜式肌力測試儀將肌力信號透過藍牙傳到Android設備終端,再通過互聯網傳輸至遠程醫生監護平臺。醫生根據獲得的肌力數據,對患者制定下一步的康復治療方案。
國外對應用于康復的肌力測試儀的研發已有一些成果,多家公司的肌力測試產品已經上市,如美國的BiodexSystem肌力測試訓練儀器和德國D&R公司的Isomed2000等速肌力測試訓練[5-6]。這些肌力測試儀雖功能綜合性強,但結構復雜,所占空間較大,不夠簡潔、便攜。近年來,國外臨床上多采用手持式肌力測試儀,在徒手肌力測量過程中使用,能客觀地評價肌力大小、力矩及持續時間,與計算機軟件連接使用可生成測試數據表[17]。但此測試儀單獨使用時,僅顯示肌力值,功能較為單一;而配有計算機就無法達到便攜式的要求。與移動智能終端相結合便能凸顯其方便性,使用靈巧便捷的智能終端能夠全面方便地評估肌力大小,更可能在康復醫療社區中,甚至家庭中得到應用。
本項研究的移動肌力測試儀因其測量及使用范圍受限的原因,對于0~2級的肌力測量誤差較大,不夠精確,存在缺陷。在使用范圍方面,此便攜式肌力測試裝置對人體下肢小腿收縮肌力評估有測試限制,需要進一步研究開發。
引言
肌無力是腦卒中后常見的損害,肌肉無力和肌肉痙攣是影響腦卒中后患者運動功能恢復的主要因素[1]。Morris等[2]的研究表明,強化肌肉訓練對腦卒中患者運動功能恢復有積極作用。為了針對性地進行康復訓練,有必要對肌肉功能進行檢測和評定。肌力評定是測定受試者主動運動時肌肉或肌群的收縮力量藉以評估肌力大小,確定肌力障礙程度,制定康復治療方案,評定康復療效[3]。臨床上常用的肌力測試方法是徒手肌力評定法,該評定法存在操作者主觀評價的誤差,較難準確地反映受檢者肌力的水平[4]。近年來,隨著計算機科學的不斷進步,國內外已開發出了數字化肌力測試儀器,比如美國的BiodexSystem4型肌力測試訓練系統,可評定患者動態下的關節及肌肉群的功能且定量分析康復進程[5];德國的Isomed2000等速肌力測試訓練系統對肩、肘、腕、膝、踝六大關節測試或訓練并能測出肌力、耐力、做功能力、爆發力等多種參數[6];美國HOGGAN公司生產的MicroFet 3便攜式肌力測試儀是一款手持式數字測力計,能從多個平面來測試肌肉力量并且能傳輸至計算機進行數字化圖形分析[7]。這些肌力測試訓練系統雖然功能較全面,但不能實現移動遠程康復功能且價格昂貴,結構復雜,操作繁瑣,不能在臨床上廣泛應用[8]。因此,開發一種基于手機、平板電腦等移動平臺的智能化肌力康復評定系統尤為重要。
隨著醫療信息化建設的不斷完善,將通訊與計算機功能融合在一起的智能移動終端正不斷滲透到醫療衛生行業。目前,市場上已開發出的基于Android移動終端用于醫療行業中的產品,有把醫用傳感器連接到Android終端,可以檢測患者的血壓、血糖等生理參數[9];有將安裝在Android移動終端上的醫用軟件結合內置傳感器,可測定運動訓練的參數,讓使用者有計劃地進行減肥[10];有使用無線網絡技術,通過Android終端分析患者定向能力,能有效幫助癡呆患者,減輕了護理者的負擔[11]。
本研究開發了一種基于Android系統的遠程肌力康復評定系統,該系統采用藍牙通信技術,將Android智能設備(如手機或平板電腦等)與便攜式肌力測試儀無線通訊。從便攜式肌力測試儀上測得的數據通過無線藍牙傳輸到Android設備上,Android移動測試軟件能定量分析患者的肌力參數,經互聯網發送到醫生端,為醫生對患者的肌力康復治療效果的評定提供便利。
1 系統硬件設計
系統總體結構如圖 1所示,由便攜式肌力測試儀和Android設備組成。便攜式肌力測試儀主要由單片機模塊、傳感器模塊、信號調理放大模塊、藍牙傳輸模塊組成。傳感器模塊獲取肌力信號,通過調理放大后,由單片機模塊控制A/D轉換進行肌力數值的采集,并通過無線藍牙模塊與帶有Android系統的設備之間進行串口通訊,由Android設備對數據進行處理,最終發送至醫生監護平臺,系統實物如圖 2所示。
 圖1
				系統構架
			
												
				Figure1.
				System framework
						
				圖1
				系統構架
			
												
				Figure1.
				System framework
			
								 圖2
				便攜式肌力測試系統
			
												
				Figure2.
				Portable muscle strength evaluating device
						
				圖2
				便攜式肌力測試系統
			
												
				Figure2.
				Portable muscle strength evaluating device
			
								便攜式肌力測試儀與Android設備之間的藍牙模塊采用藍牙串口協議,實現了模塊間的數據傳輸。藍牙模塊是集成有射頻收發、基帶控制和管理、藍牙主控制器接口協議HCI的單一芯片,核心工作電壓為1.8 V,輸出端口工作電壓3.3 V。藍牙模塊將數據轉變為特殊的藍牙RF信號通過藍牙串口無線發送給Android設備。藍牙協議棧中的SPP協議(藍牙串行服務)能在藍牙設備之間創建仿真串口進行數據傳輸。藍牙串口服務由全球唯一標識符(Universally Unique IDentifier,UUID)表示,為00001101-0000-1000-8000-00805F9B34FB。
在搜索連接藍牙設備后,由藍牙設備的UUID提供服務選擇,使Android智能終端通過BluetoothSocket類建立通訊連接。
2 系統軟件設計
移動設備以Android為軟件框架平臺,采用堆層的架構,底層以Linux內核工作為基礎,由C語言開發,提供基本功能;中間層包括函數庫和虛擬機,由C++開發;第二層是應用框架層,它提供了Android應用程序使用的系統API;最上層是各種應用軟件涉及用戶界面和用戶交互,包括通話程序,短信程序等,以Java作為編程。
開發環境建立如下:利用Android SDK和 Eclipse并安裝其插件,啟用Eclipse后選擇Help>Install new software,然后在窗口中選擇Add,輸入站點名及地址進入下一步安裝ADT[12],配置完成開發環境就可開發肌力評定軟件。
2.1 Android設備軟件界面設計
在新建的Android Project中,主程序代碼放置在“\src”,布局文件(\layout)則存放在“\res”內。Android應用開發采用Java程序語言,肌力評定軟件新建的第一個程序類繼承Activity類,在類中重新寫了onCreate()方法,在方法內以setContentView()函數來設置這個Activity要顯示的布局(R.layout.main),布局文件是以XML格式編寫的。
肌力評定軟件設定的藍牙配對界面如圖 3所示,布局文件中的控件采用從上到下的線性格式,布局配置中設置了圖片插件、ListView控件及Button控件。對于在布局文件中設置的列表和按鈕這兩個控件需要在程序代碼中編寫觸發監聽處理,當用戶點擊該控件后即可完成相應的事件處理。當用戶在此界面上與肌力測試儀完成藍牙配對連接后,肌力評定測試軟件由上述界面跳轉至肌力功能評定分析界面。在這個界面中設置了SurfaceView控件、Button控件及TextView控件。在肌力功能評定分析界面中用戶可以實現肌力信號的采集、數據轉換處理、控制信號的接收和發送以及生成肌力圖形顯示等。
 圖3
				移動平臺的肌力評定軟件界面
			
												
				Figure3.
				Interface of muscle strength evaluating software
						
				圖3
				移動平臺的肌力評定軟件界面
			
												
				Figure3.
				Interface of muscle strength evaluating software
			
								2.2 藍牙配對模塊
程序開啟后首先運行藍牙配對模塊,該模塊為藍牙配對提供圖形化界面。為了豐富人機互動功能,藍牙配對模塊還可以劃分成多個不同的功能子模塊,主要包括“設置藍牙開關”、“搜索設備”、“列表顯示地址”、“提示對話框”、“提示信息”、“菜單使用”等。在開發中每個控件設計為Android的一個組件并且根據需求利用不同控件編寫相應的執行命令。藍牙配對模塊流程如圖 4所示,包含了發現周圍藍牙設備、地址顯示及與其配對連接成功跳轉的過程:
(1)使用registerReceiver注冊BroadcastReceiver來獲取藍牙狀態、搜索設備等消息。
(2)當用戶將藍牙開關打開后,即可使用BluetoothAdapter的搜索。
(3)將BroadcastReceiver的onReceive()搜索所得的藍牙設備信息(如名稱、MAC硬件地址)顯示在列表中,用戶點擊列表顯示的信息后詢問用戶是否要連接或斷開該藍牙設備。
(4)當用戶點擊繼續連接后,通過設備的地址來建立一個BluetoothDevice對象,由BluetoothDevice衍生出BluetoothSocket準備SOCKET來讀寫設備,Android設備藍牙端即可與肌力測試評定儀藍牙模塊建立連接。
(5)BluetoothSocket建立通訊連接則需要選擇其通訊協議/服務,用于便攜式肌力測試儀的藍牙適配器和Android設備藍牙模塊連接的UUID屬于串口服務類[13],其值為:SPP(00001101-0000-1000-8000-00805F9B34FB),Connect之后使用BluetoothSocket的getInputStream()和getOutputStream()來讀寫藍牙設備。
藍牙配對模塊程序關鍵代碼如下:
public void connect(BluetoothDevice btDev){
?……
?UUID uuid=UUID.fromString(SPP_UUID);
?try{
? ?btSocket=btDev.createRfcommSocketToServiceRecord(uuid);
? ?btSocket.connect();
? ?Intent intent=new Intent();
? ?intent.setClass(testBlueTooth.this,WaveDiagram.class);
? ?startActivity(intent); //藍牙連接后,界面跳轉
? ?} catch (IOException e) {
? ? ?e.printStackTrace();}
? ?……
}
 圖4
				藍牙配對模塊流程圖
			
												
				Figure4.
				Bluetooth pairing module flowchart
						
				圖4
				藍牙配對模塊流程圖
			
												
				Figure4.
				Bluetooth pairing module flowchart
			
								2.3 藍牙通訊模塊
藍牙通訊模塊的目的是在兩個不同設備之間保證一條完整的通信路徑并在它們之間保持一通信段。為了在藍牙無線鏈路上實現串行通信,藍牙協議棧定義了一個稱為RFCOMM 的串行端口抽象,它為各種應用提供了一個虛擬的串行端口[14]。兩個設備能夠通過藍牙提供的仿真串口進行串口通信,其中包括數據、文件的傳輸。Android設備通過輸入輸出流程序來讀寫該串口,設定的串口協議如表 1所示,Android設備發送下表顯示的控制指令給便攜式肌力測試儀后,即可無線控制便攜式肌力測試儀開始或停止發送肌力數據[15]。
 表1
                串口通信協議
		 	
		 			 				Table1.
    			Serial communication protocol
			
						表1
                串口通信協議
		 	
		 			 				Table1.
    			Serial communication protocol
       		
       				程序代碼中定義的控制指令數組的數據類型是有符號字節類型(signed byte),其表示范圍在-128~127之間。串口通信協議數據幀中的0xAA不在-128~127內,需要對其進行轉換,0xAA經過補碼運算后顯示結果為-86,在要求范圍內才可被系統識別。由此,Android應用程序代碼中對便攜式肌力測試儀發送的開始或停止指令定義為:
byte [] start={0x55,-86,03,01,01,01,01,6};
byte [] stop={0x55,-86,03,01,01,01,02,7};
根據該數組命令,在應用程序中編寫OutputStream輸出流:btOutput.write(start); btOutput.write(stop),將命令通過藍牙串口發送至便攜式肌力測試儀。
用戶操作Android設備來控制便攜式肌力測試儀工作,點擊開始按鈕使其開始測試傳輸肌力信號;點擊停止按鈕后使該儀器立即停止測試傳輸數據;點擊返回按鈕則跳轉回藍牙配對界面。
2.4 肌力評定模塊
肌力評定模塊實現肌力信號的讀取、存儲和圖形分析功能,使用多線程處理技術實現一個線程做肌力曲線圖的繪制,同時另一個線程完成讀取便攜式肌力測試儀發送的肌力數據。程序代碼中編寫多線程程序能夠使程序的響應速度更快,提高繪制肌力曲線圖的效率。便攜式肌力測試儀是一幀一幀將肌力數據傳輸給Android設備,這一幀數據中包含幀頭、設備號、通道號、效驗號等除肌力信號以外的數據,如表 2所示。在一幀數據中,程序所需要顯示的肌力信號是位于數據序列的12位肌力數據,在程序中將肌力信號從每一幀數據中解析出來并將其存入一個新的數組中。
 表2
                便攜式肌力測試儀傳輸一幀數據格式
		 	
		 			 				Table2.
    			A frame data format sent by portable muscle strength device
			
						表2
                便攜式肌力測試儀傳輸一幀數據格式
		 	
		 			 				Table2.
    			A frame data format sent by portable muscle strength device
       		
       				解析數據的方法是首先判斷便攜式肌力測試儀發送一幀數據串是否有9個數據,如果是則繼續讀取這一幀數據,接著比較幀頭的兩個數據是否是0x55、0xAA,若符合則繼續判斷校驗值是否正確。校驗值是一幀數據串前8個幀頭、設備號等數據之和。如果校驗值也是相等,則這一幀數據是有效的。程序將滿足上述條件的數據解析出來并存入一個新的數組,根據存儲的數據進行肌力曲線的繪制,繪圖程序的流程如圖 5所示。
 圖5
				繪圖程序流程圖
			
												
				Figure5.
				Flow diagram of drawing program
						
				圖5
				繪圖程序流程圖
			
												
				Figure5.
				Flow diagram of drawing program
			
								在Android手機屏幕中,系統默認左上角為起始點0點,從0點往右為X軸的正方向,從0點往下為Y軸的正方向。12位的肌力數據最大值為fff,轉換成十進制為4 095,根據程序中設定的底線與肌力的最大值,通過 y=baseLine-dataBuf[i] *baseLine/4 095(baseline換成surfaceView的高度),此函數可將Y軸顯示的肌力值翻轉,繪制出的圖形效果如圖 6所示。
 圖6
				移動平臺上的肌力評定手機運行圖
			
												
				Figure6.
				Effect of muscle strength evaluated graphic
						
				圖6
				移動平臺上的肌力評定手機運行圖
			
												
				Figure6.
				Effect of muscle strength evaluated graphic
			
								測試停止后,將測試者個人信息輸入移動平臺中,用戶點擊“顯示結果”按鈕,Android設備就根據其力臂長度及體重計算評價獲得肌力參數,如峰力矩、峰力矩體重比、平均力矩等,如圖 7所示。這些評估肌力的參數值可經互聯網發送至醫生監護平臺作為其指導治療的參考依據。
 圖7
				肌力參數顯示結果圖
			
												
				Figure7.
				Result of muscle strength parameters
						
				圖7
				肌力參數顯示結果圖
			
												
				Figure7.
				Result of muscle strength parameters
			
								肌力評定模塊程序關鍵代碼如下:
void simpleDraw(int start,byte[] inputBuf,int baseLine)
{if (start==0)
……
System.arraycopy(inputBuf,0,buffer,0,inputBuf.length);
int tmp=buffer.length/9;
int[] dataBuf=new int[tmp]; //解析肌力數據
?if ((buffer.length >=9) && (buffer[0]==0x55) && (buffer[1]==-86))
? ?{……
? ? {byte jiaoyan=(buffer[9*i-3]);
? ? jiaoyan+=(buffer[9*i-2]);
? ? if ((jiaoyan & 0xff)==((buffer[9*i-1]- 0x8) & 0xff)) //判斷解析數據
? ? {……}}
?Canvas canvas=sfv.getHolder().lockCanvas(
new Rect((int)oldX,0,(int)oldX+buffer.length,sfv.getHeight())); //獲取畫布
?canvas.drawColor(Color.BLACK); //清除背景
?……
3 系統可靠性測試結果
使用該系統對三組不同年齡組的60名正常人進行手部肌力功能測試實驗,每個年齡組測試者中男女比例均衡,各位10人。第一組為年輕人群,其中男性受試者的年齡為(24±1)歲、身高(173.70±1.35) cm、體重(65.50±2.27) kg;女性受試者的年齡為(23±1)歲、身高(161.6±1.14) cm、體重(55.9±3.33) kg。第二組為中年人群,其中男性受試者的年齡為(45±1)歲、身高(172.70±2.46) cm、體重(73.70±2.77) kg;女性受試者的年齡為(43±1)歲、身高(161.1±1.31) cm、體重(65.1±4.36)。第三組為老年人群,其中男性受試者的年齡為(65±1)歲、身高(168.50±1.65) cm、體重(65.60±2.32) kg;女性受試者的年齡為(65±2)歲、身高(158.1±1.00) cm、體重(52.7±2.75) kg。測試的肌肉分別為指淺屈肌、指深屈肌、尺側腕屈肌、尺側腕伸肌。所有測試者的慣用手都是右手且都進行兩次測試,測試時間間隔2 d。兩次測試時測試環境明亮,透風,基本視為無環境影響因素。測試者做肌力測試的試驗時間均為10 s。測試過程中,測試者先將其測試肌肉放松,當被提示用力時就用力,從而測得收縮肌力值。
通過兩次的測試數據對測試者使用該裝置前后進行一致性檢驗,使用SPSS 17.0軟件計算組內相關系數(ICC)。ICC是衡量和評價測試儀器的信度的系數指標,等于個體的變異度除以總的變異度,其值在0~1之間,0表示不可信,1表示完全可信。一般認為ICC小于0.4表示信度較差,0.6~0.75之間表示信度較好,大于0.75表示信度極好[16]。測試結果顯示,該儀器的峰力矩、平均力矩、峰力矩體重比的ICC值均大于0.6,表明儀器具有良好的可靠性,結果如表 3~5所示。
 表3
                左右手肌力測試部位峰力矩可靠性
		 	
		 			 				Table3.
    			Repeatability of peak torque in hands’ testing parts
			
						表3
                左右手肌力測試部位峰力矩可靠性
		 	
		 			 				Table3.
    			Repeatability of peak torque in hands’ testing parts
       		
       				 表4
                左右手肌力測試部位平均力矩可靠性
		 	
		 			 				Table4.
    			Repeatability of average torque in hands’ testing parts
			
						表4
                左右手肌力測試部位平均力矩可靠性
		 	
		 			 				Table4.
    			Repeatability of average torque in hands’ testing parts
       		
       				 表5
                左右手肌力測試部位峰力矩體重比可靠性
		 	
		 			 				Table5.
    			Repeatability of peak torque/weight ratio in hands’ testing parts
			
						表5
                左右手肌力測試部位峰力矩體重比可靠性
		 	
		 			 				Table5.
    			Repeatability of peak torque/weight ratio in hands’ testing parts
       		
       				4 討論
肌力測試對于評定腦卒中所致的肌力低下患者的治療效果具有重要的意義。隨著科學技術的不斷發展,手機移動智能終端正不斷滲透到醫療領域中并具有廣闊的應用前景。在針對肌無力患者的移動遠程醫療中,對于肌力信號的檢測非常重要,因此該項研究對康復移動醫療的發展具有重要的參考意義。本研究開發的基于移動平臺的肌力康復測試評定系統將便攜式肌力測試儀與具有Android系統的移動終端組合在一起,并通過互聯網為患者提供一套基于移動通信技術的遠程肌力測試系統。患者通過便攜式肌力測試儀將肌力信號透過藍牙傳到Android設備終端,再通過互聯網傳輸至遠程醫生監護平臺。醫生根據獲得的肌力數據,對患者制定下一步的康復治療方案。
國外對應用于康復的肌力測試儀的研發已有一些成果,多家公司的肌力測試產品已經上市,如美國的BiodexSystem肌力測試訓練儀器和德國D&R公司的Isomed2000等速肌力測試訓練[5-6]。這些肌力測試儀雖功能綜合性強,但結構復雜,所占空間較大,不夠簡潔、便攜。近年來,國外臨床上多采用手持式肌力測試儀,在徒手肌力測量過程中使用,能客觀地評價肌力大小、力矩及持續時間,與計算機軟件連接使用可生成測試數據表[17]。但此測試儀單獨使用時,僅顯示肌力值,功能較為單一;而配有計算機就無法達到便攜式的要求。與移動智能終端相結合便能凸顯其方便性,使用靈巧便捷的智能終端能夠全面方便地評估肌力大小,更可能在康復醫療社區中,甚至家庭中得到應用。
本項研究的移動肌力測試儀因其測量及使用范圍受限的原因,對于0~2級的肌力測量誤差較大,不夠精確,存在缺陷。在使用范圍方面,此便攜式肌力測試裝置對人體下肢小腿收縮肌力評估有測試限制,需要進一步研究開發。
 
        

 
                 
				 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	 
                                                                    
                                                                        
                                                                        
                                                                         
																   	
                                                                    
                                                                    
																	 
																   	
                                                                    
                                                                    
																	