kaiyun官方注册
您所在的位置: 首页> 测试测量> 设计应用> 基于Android的麻醉深度检测仪设计与实现
基于Android的麻醉深度检测仪设计与实现
2016年微型机与应用第23期
王琪,徐骏,郑烇
中国科学技术大学 信息科学技术学院,安徽 合肥 230026
摘要:麻醉深度监测在手术室和重症监护病房起着非常重要的作用。为了方便医护人员在手术或重症监护过程中对患者的意识状态进行准确的评估,设计了一种简易的基于Android的麻醉深度检测系统。该系统主要包含三个部分:对前端采集的EEG信号进行放大滤波;对采集到的信号进行排列熵算法处理;Android人机接口界面的设计。在完成整体方案设计后,对整个系统进行了测试,并利用麻省理工学院的生理信号数据库的多导睡眠EEG数据进行测试,实验结果说明该系统能够反映病人的脑电意识状态。
Abstract:
Key words :

  王琪,徐骏,郑烇

  (中国科学技术大学 信息科学技术学院,安徽 合肥 230026)

摘要:麻醉深度监测在手术室和重症监护病房起着非常重要的作用。为了方便医护人员在手术或重症监护过程中对患者的意识状态进行准确的评估,设计了一种简易的基于Android的麻醉深度检测系统。该系统主要包含三个部分:对前端采集的EEG信号进行放大滤波;对采集到的信号进行排列熵算法处理;Android人机接口界面的设计。在完成整体方案设计后,对整个系统进行了测试,并利用麻省理工学院的生理信号数据库的多导睡眠EEG数据进行测试,实验结果说明该系统能够反映病人的脑电意识状态。

关键词:脑电信号;麻醉深度;排列熵;Android

中图分类号:R318;TP399文献标识码:ADOI: 10.19358/j.issn.16747720.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所示。

图像 001.png

2设计与实现

  整个系统的实现包含前端采集模块设计和后端数据处理软件设计。前端采用STM32单片机为采集核心,后端是由S5PV210为核心的Android系统。

2.1硬件设计

2.1.1前置放大器

  由于人类的脑电信号非常微弱,在μV级别,而且此处所关心的频段是1~100 Hz。要想得到理想的EEG信号,首先要克服大量噪声干扰,所以要求该前置电路具有高输入阻抗、高共模抑制比、噪声干扰低等特点[4]。本文采用的仪表放大器结构如图2所示。

图像 002.png

  2.1.2其他放大器

  其他两级放大器比较简单,其中多了一个切换放大倍数的控制端,如图3所示。

图像 003.png

  2.1.3过压报警电路

  由于人体是良好的导体,会随机产生比较高的电压,对后面的采集数据产生干扰。因此不仅要防止过压的情况,同时也要检测出过压的线路及时调整,电路如图4所示。

图像 004.png

  2.1.4AD采集电路

  本文采用STM32为AD采集芯片,它拥有3个12位逐次逼近型的ADC,最大转换速率为1 MHz,完全满足采样需求[5],部分电路如图5所示。

图像 005.png

2.2软件设计

  2.2.1算法设计

  Christoph Bandt等人提出了一种衡量一维时间序列复杂度的指数——排列熵(Permutation Entropy,PE)[6],它在反映一维时间序列复杂度的性能方面与LyaPulloy指数相似,并且与LyaPulloy指数、分形维数等复杂度参数相比具有计算简单、抗噪声干扰能力强等特点[7]。其基本过程如图6所示。

图像 006.png

  算法的基本原理如下:

  如果对一个原始信号进行离散采集得到数据序列,将其分成长度相等的子信号段。把其中的任何一子信号段定义为{x(i),i = 1,2,3,…N},N为数据的长度。按照下面的方法计算这个子信号段的排列熵:

  (1)把序列按照顺序进行m维相空间重构,其中m为嵌入的维数,L为迟滞时间:

QQ图片20170106133346.png

  (2)对重构后序列(式(1))中的元素按照递增顺序进行排列:

QQ图片20170106133350.png

  其中,当遇到两个元素相等时,即当x(i+(ji1 -1)L)=x(i+(ji2 -1) L)时,有:

QQ图片20170106133353.png

  那么x 就按照j的大小来排序,即当ji1< ji2时,则x(i+( ji1 -L))≤x(i+(ji2-L))。

  故任意一个向量Xi重构后得到一组符号序列:

QQ图片20170106133357.png

  (3)对于m维相空间,总共有m!种不同的排列,也就是说有m! 种不同的符号, F(g)只是其中的一种排列。把所有排列顺序相同的F(g)分到一组,在N-m+1 组序列中比较得出它的概率Pk, 每组序列的个数分别为NUM1, NUM2,NUM3,…, NUMk,其中,j≤m!。

QQ图片20170106133400.png

  (4)按照Shannon熵的形式,计算排列熵:

QQ图片20170106133404.png

  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说明了接口指针的组织结构。

图像 007.png

  本文自定义的算法接口函数如下:

  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所示。

图像 008.png

  最后生成一个PermuationEntropyJni.so文件,在程序开始时用System.1oadLibrary()方法加载需要的动态链接库。

  2.2.3显示界面设计

  为了有一个良好的人机接口,本文采用安卓图表引擎AChartEngine进行设计。AChartEngine是专为Android系统设计的图形库,可以用于绘制多种图表。

  本文要设计两个图表和一个数值显示窗口,图表窗口采用AChartEngine 设计,数值采用TextView控件显示。每个图表都需要一个数据集(Dataset)和渲染器集合 (Renderer)。结构如图9所示。

图像 009.png

  其中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数据采用麻省理工学院的生理信号数据库(MITBIH)中实验对象一天脑电的数据。具体实验结果如表1所示。

图像 013.png

  其中EEG信号如图10~11所示。

图像 010.png

图像 011.png

  由实验结果可以看出,当加载正弦信号时,熵值稳定在1.37左右,表明当脑电信号越有规律时,熵值越小。当加载随机信号时,熵值稳定在4.75左右,表明当脑电信号越没有规律时,熵值越大。图10是加载了一个人从12:00开始24 h内的脑电信号,表明当人在觉醒时熵值始终在4.6左右,当人逐渐进入睡眠状态时,熵值明显低于4.6,如图11所示。

  为了在实际产品中明确、及时地反映患者的觉醒状态,需要设计一个良好的人机交互界面。其包括EEG显示窗口、熵值变化趋势显示窗口、熵值显示窗口。本文的人机交互界面如图12所示。

图像 012.png

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.

此内容为AET网站原创,未经授权禁止转载。
Baidu
map