王琪,徐駿,鄭烇
(中國科學技術大學 信息科學技術學院,安徽 合肥 230026)
摘要:麻醉深度監測在手術室和重癥監護病房起著非常重要的作用。為了方便醫護人員在手術或重癥監護過程中對患者的意識狀態進行準確的評估,設計了一種簡易的基于Android的麻醉深度檢測系統。該系統主要包含三個部分:對前端采集的EEG信號進行放大濾波;對采集到的信號進行排列熵算法處理;Android人機接口界面的設計。在完成整體方案設計后,對整個系統進行了測試,并利用麻省理工學院的生理信號數據庫的多導睡眠EEG數據進行測試,實驗結果說明該系統能夠反映病人的腦電意識狀態。
關鍵詞:腦電信號;麻醉深度;排列熵;Android
中圖分類號:R318;TP399文獻標識碼:ADOI: 10.19358/j.issn.16747720.2016.23.022
引用格式:王琪,徐駿,鄭烇. 基于Android的麻醉深度檢測儀設計與實現[J].微型機與應用,2016,35(23):76-79,82.
0引言
適當的麻醉深度是保證患者生命安全、創造良好手術條件的關鍵因素之一[1]。如何有效、準確地檢測病患的腦電意識狀態,使患者可以在沒有痛苦的環境下進行手術,已經成為各種臨床手術的基礎。目前生產的麻醉深度監測儀主要是通過監測腦電雙頻譜指數(BIS)[2]、腦狀態指數(CSI)、聽覺誘發電位(AEP)、熵(Entropy)[3]等指標來監測病人的意識狀態。而目前醫院使用的設備基本都是國外進口,價格昂貴且實行技術保密,國內的產品在精度和可靠性上始終難以達到國外同類產品標準。
本文以熵為最終顯示指標,通過前端電路設計、算法處理、界面顯示三部分,設計了一整套軟硬件結合的麻醉深度檢測系統。
1系統結構
整個系統工作流程如下:3個前端電極分別貼在病人的前額中間、左邊和左側乳突部位,一路接地作參考電極,其他兩路做差分輸入。差分輸入信號經過多級放大、濾波得到1~100 Hz波段可檢測的信號,再經過STM32單片機的AD采集,把數據經過串口或藍牙發送給上端Android接口,通過排列熵算法處理后,最終Android的APP實時顯示當前EEG、熵趨勢、熵值的變換情況。其系統結構如圖1所示。
2設計與實現
整個系統的實現包含前端采集模塊設計和后端數據處理軟件設計。前端采用STM32單片機為采集核心,后端是由S5PV210為核心的Android系統。
2.1硬件設計
2.1.1前置放大器
由于人類的腦電信號非常微弱,在μV級別,而且此處所關心的頻段是1~100 Hz。要想得到理想的EEG信號,首先要克服大量噪聲干擾,所以要求該前置電路具有高輸入阻抗、高共模抑制比、噪聲干擾低等特點[4]。本文采用的儀表放大器結構如圖2所示。
2.1.2其他放大器
其他兩級放大器比較簡單,其中多了一個切換放大倍數的控制端,如圖3所示。
2.1.3過壓報警電路
由于人體是良好的導體,會隨機產生比較高的電壓,對后面的采集數據產生干擾。因此不僅要防止過壓的情況,同時也要檢測出過壓的線路及時調整,電路如圖4所示。
2.1.4AD采集電路
本文采用STM32為AD采集芯片,它擁有3個12位逐次逼近型的ADC,最大轉換速率為1 MHz,完全滿足采樣需求[5],部分電路如圖5所示。
2.2軟件設計
2.2.1算法設計
Christoph Bandt等人提出了一種衡量一維時間序列復雜度的指數——排列熵(Permutation Entropy,PE)[6],它在反映一維時間序列復雜度的性能方面與LyaPulloy指數相似,并且與LyaPulloy指數、分形維數等復雜度參數相比具有計算簡單、抗噪聲干擾能力強等特點[7]。其基本過程如圖6所示。
算法的基本原理如下:
如果對一個原始信號進行離散采集得到數據序列,將其分成長度相等的子信號段。把其中的任何一子信號段定義為{x(i),i = 1,2,3,…N},N為數據的長度。按照下面的方法計算這個子信號段的排列熵:
(1)把序列按照順序進行m維相空間重構,其中m為嵌入的維數,L為遲滯時間:
(2)對重構后序列(式(1))中的元素按照遞增順序進行排列:
其中,當遇到兩個元素相等時,即當x(i+(ji1 -1)L)=x(i+(ji2 -1) L)時,有:
那么x 就按照j的大小來排序,即當ji1< ji2時,則x(i+( ji1 -L))≤x(i+(ji2-L))。
故任意一個向量Xi重構后得到一組符號序列:
(3)對于m維相空間,總共有m!種不同的排列,也就是說有m! 種不同的符號, F(g)只是其中的一種排列。把所有排列順序相同的F(g)分到一組,在N-m+1 組序列中比較得出它的概率Pk, 每組序列的個數分別為NUM1, NUM2,NUM3,…, NUMk,其中,j≤m!。
(4)按照Shannon熵的形式,計算排列熵:
Hp反映時間序列的隨機程度。Hp值越小,時間序列越規律,換句話說就是Hp越小麻醉程度越深。為了使算法具有統計學的意義,N的大小要合適,一般N取1 000~10 000;m取3~15。為了保證仿真盡可能地減小誤差,遲滯時間L一般取1或2。
2.2.2算法JNI設計
由于本文算法要在Android平臺下實現,而其APP開發是以Java為基礎。Java語言很容易被反匯編后拿到源代碼文件,為了保證核心參數不被竊取,可以在重要的交互功能使用C代碼代替[8],而且C比起Java來說效率要高出很多。
排列熵的算法實現是通過調用 JNI[9]函數來訪問底層C代碼。JNI 函數是通過接口指針來獲得。接口的指針指向JNI函數指針數組,而且指針數組中的每個元素又指向一個定義好的接口函數。圖7說明了接口指針的組織結構。
本文自定義的算法接口函數如下:
private native double permutationEntropyJNI(int data[],int lenth,int per_len);
它的實現為:
JNIEXPORT jdouble JNICALL Java_com_wqeeg_MainActivity_permutationEntropyJNI(JNIEnv *env, jobject obj, jintArray intArray, jint lenth , jint per_len){…};
其具體實現流程如圖8所示。
最后生成一個PermuationEntropyJni.so文件,在程序開始時用System.1oadLibrary()方法加載需要的動態鏈接庫。
2.2.3顯示界面設計
為了有一個良好的人機接口,本文采用安卓圖表引擎AChartEngine進行設計。AChartEngine是專為Android系統設計的圖形庫,可以用于繪制多種圖表。
本文要設計兩個圖表和一個數值顯示窗口,圖表窗口采用AChartEngine 設計,數值采用TextView控件顯示。每個圖表都需要一個數據集(Dataset)和渲染器集合 (Renderer)。結構如圖9所示。
其中AChartEngine 相關類說明如下 :
ChartFactory : 圖表生成工廠類,傳入數據集和渲染器,生成 GraphicalView 或者GraphicalActivity;
XYMultipleSeriesDataset :封裝圖表所需的數據;
XYSeries : 屬于圖表數據集的一部分,每個都代表了一個數據集合;
XYMultipleSeriesRenderer :圖表中多個曲線的渲染器;
XYSeriesRenderer :圖表中可能會有多條曲線或柱狀圖等,所有渲染器放在一起就是渲染器集合。
Android中使用TextView控件比較簡單:首先在XML布局,初始化時采用text = (TextView)findView ById(R.id.income_data)獲得text對象;最后用text.set Text(""+f1)方法顯示所需要的熵值f1(當然要經過一些處理,比如非法值檢測,保留固定位小數等)。
3實驗測試
分別通過MATLAB仿真和實際數據測試與已有結果對比來驗證本文提出的麻醉深度設計的有效性。其中對正弦信號、隨機信號、睡眠EEG信號三種信號分別做了MATLAB測試。正弦信號是幅度為100 mV,頻率為100 Hz的信號;隨機信號的最大值也為100 mV;真實的睡眠EEG數據采用麻省理工學院的生理信號數據庫(MITBIH)中實驗對象一天腦電的數據。具體實驗結果如表1所示。
其中EEG信號如圖10~11所示。
由實驗結果可以看出,當加載正弦信號時,熵值穩定在1.37左右,表明當腦電信號越有規律時,熵值越小。當加載隨機信號時,熵值穩定在4.75左右,表明當腦電信號越沒有規律時,熵值越大。圖10是加載了一個人從12:00開始24 h內的腦電信號,表明當人在覺醒時熵值始終在4.6左右,當人逐漸進入睡眠狀態時,熵值明顯低于4.6,如圖11所示。
為了在實際產品中明確、及時地反映患者的覺醒狀態,需要設計一個良好的人機交互界面。其包括EEG顯示窗口、熵值變化趨勢顯示窗口、熵值顯示窗口。本文的人機交互界面如圖12所示。
4結論
人在覺醒和睡眠或麻醉狀態下的腦電信號是有明顯區別的,當人越清醒,腦電信號越活躍,而且顯得雜亂無章;當人在睡眠或麻醉狀態下,其腦電信號越是顯得有序。本文正是基于這種基本區別,采用排列熵算法對腦電信號進行分析處理,并對其進行仿真實驗,驗證了腦電信號的特性,進一步說明采用排序熵算法對患者進行麻醉監測是可行的。
為了更好地監測患者的麻醉狀態,本文還要作進一步的研究,比如算法參數的自適應選擇問題,因為不同階段的EEG數據,參數選擇對最終結果有一定的影響;其次由于信號中存在較大隨機性,且受噪聲干擾,直接采用排序熵可能會影響檢測效果。未來可以采用遺傳算法等優化算法對參數進行自適應確定,采用小波降噪、神經網絡等排除異常信號的干擾。
參考文獻
[1] MYLES P S. Prevention of awareness during anaesthesia[J]. Best Practical & Research Clinical Anaesthesiology, 2007, 21(3): 345-355.
[2] 沈民奮,沈鳳麟,許崇濤,等. 不同狀態下的腦電信號的雙譜分析[J].生物物理學報, 1998, 14(1): 51-56.
[3] 梁振虎. EEG熵算法及麻醉狀態監測應用研究[D]. 秦皇島:燕山大學, 2012.
[4] 陳丹, 文宇橋, 譚希,等. 基于排序熵算法的麻醉深度檢測系統設計[J]. 電子器件, 2015(2):429-435.
[5] 鐘文華. 基于ARM的腦電信號采集系統[J]. 電子設計工程, 2008(2):13-15.
[6] BANDT C,POMPE B.Pemutation entropy:a natural complexity measure for time series[J]. Phys. Rev. Lett.,2002,17(88):21-24.
[7] PINCUS S M, SINGER B H. Randomness and degree of irregularity[J]. Proceedings of the National Academy of Sciences,1996,93(5):2083-2088.
[8] 李寧.Android 深度探索(HAL與驅動開發)[M].北京:人民郵電出版社, 2013.
[9] 任俊偉,林東岱.JNI技術實現跨平臺開發的研究[J].計算機應用研究,2005,22(7):180-184.