基于J2ME的脉搏波测量系统设计

2011-03-14 05:13朱智超闫钧华刘成
电子设计工程 2011年11期
关键词:脉搏蓝牙滤波

朱智超,闫钧华,刘成

(南京航空航天大学航天学院,江苏南京210016)

在我国传统医学中,脉诊在中医诊断中占有重要地位,脉诊就是从脉搏信号中感知人体的病理信息。随着现代科技的发展,特别是信号检测处理技术及计算机技术等信息技术的发展,人们对脉搏信号的检测分析进行了很多有意义的研究[1]。脉搏波可看成主要是由心脏的收缩与舒张以及血液在沿血管的流动过程中所遇到的各种阻力相互作用而形成的,其中包含了丰富的人体内各器官的生理和病理信息,具有干扰强、频率低、采集困难等特点。准确地检测脉搏信号对于预防心血管系统疾病的发生以及对诊治过程给予科学合理的指导、提高人们身心健康水平、提高人民生活质量均具有重要的科学和社会意义。

传统检测血氧脉搏信号普遍采用大型医疗设备,这类设备一般由传感器有创采集信号,有线传输显示在仪器面板上,受测者感觉痛苦并且仪器成本昂贵且携带不方便,无法做到随时随地进行监测。该系统采用无创光电容积脉搏波描记法配合J2ME开发检测程序,不仅成本低廉、便于携带,而且还开发了数据库存储功能,将血氧脉搏信号通过蓝牙技术无线传输,手机端接收并记录每次检测的脉搏数据便于用户对比判断自身一段时间内的健康状况,同时在手机端实时显示数据。其通用性和实用性以及便携性都有很大的提高。

1 系统基本原理

光电容积脉搏波描记法(Photo Plethysmo Graphy,PPG)是借光电手段在活体组织中检测血液容积变化的一种无创检测方法。当一定波长的光束照射到指端皮肤表面时,光束将通过透射或反射方式传送到光电接收器。在此过程中由于受到指端皮肤肌肉和血液的吸收衰减作用检测器检测到的光强度将减弱。其中皮肤肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液容积在心脏作用下呈搏动性变化,当心脏收缩时外周血容量最多,光吸收量也最大,检测到的光强度最小,而在心脏舒张时正好相反,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。在恒定波长的光源的照射下,通过检测透过手指的光强将可以间接测量到人体的脉搏信号。

2 系统硬件设计

系统由指端采集器和具有蓝牙传输数据功能的手机构成。指端采集器由Silicon Labs公司的C8051F330作为主控芯片,采集端使用940 nm红外发射管和光敏电阻,传输模块采用广州汇承信息科技有限公司生产的HC-05蓝牙串口通

讯模块,显示与存储设备为含有蓝牙模块的手机。整体设计结构图如图1所示。

图1 整体系统结构Fig.1The whole structure of the system

2.1 采集与放大电路设计

人体血液中的氧合血红蛋白(HbO2)和没被氧合还原血红蛋白(Hb)对于不同波长光的吸收系数是不同的。在波长600~700 nm的红光范围内,Hb的吸收系数比HbO2的大,而在波长800~1 000 nm的红外光范围内,Hb的吸收系数比HbO2的小,在805 nm处两者相同,在红光660 nm和红外光940 nm处吸收系数差异较大,目前,均采用该波长附近的红光和红外光进行双谱定量分析检测,并且在红光660 nm和红外光940 nm附近,Hb和HbO2的吸收系数变化曲线都比较平坦,受二极管发光波长误差影响也较小[2],所以系统采用940 nm光源进行脉搏波的检测。采集及放大电路如图2所示。

图2 采样及放大电路Fig.2Sampling and amplification circuit

光电传感器拾取的脉搏信号十分微弱,仅为毫伏量级,所以要求前置放大电路满足下述要求:1)高输入阻抗。光电信号是不稳定的内阻变化的微弱信号,为了减少信号源内阻的影响,必须提高放大器输入阻抗,所以要求放大器具有高的输入阻抗;2)低噪声、低漂移。可以减小信号源的影响,增强信号的拾取能力,使输出稳定[3]。R6为光敏电阻,用于接收来自红外管发射的脉搏信号。正常人体脉搏信号频率约在0.3~3.33 Hz之间,电路中C4与R8、C3与R9分别构成RC高通滤波器,高通截止频率为约为0.33 Hz,C2与R2构成低通滤波器截止频率约为3.4 Hz,将有效频率范围外的工频干扰和其他高频干扰滤除。放大器采用LM358,其内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。第一级运算放大器从LM358的第5脚输入微弱脉搏信号,在其第7脚获取放大信号,根据运算放大器公式计算可知一级放大8.5倍,然后通过0.3 Hz的高通滤波器,消除第一级放大产生的噪声,进入二级放大,可以计算出二级放大100倍,因此获取850倍的放大能力,获取到3 V之内的脉搏波信号,且其处于放大而不是截止状态。

2.2 主控电路和蓝牙模块电路设计

主控芯片采用PDIP-20封装的C8051F330单片机,易于焊接,其使用Silicon Labs的专利CIP-51微控制器内核。CIP-51与MCS-51TM指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。CIP-51内核具有标准8052的所有外设部件,包括4个16位计数器/定时器、一个具有增强波特率配置的全双工UART、一个增强型SPI端口、768字节内部RAM、128字节特殊功能寄存器(SFR)地址空间,仅使用简单的外部电路便可以搭建系统。

HC-05模块采用的是CSR BC417143B蓝牙芯片,同时内置8 M Flash。具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)3种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行AT命令。通过控制模块外部引脚(PIO11)输入电平,可以实现模块工作状态的动态转换。

这里使用其P0.4与P0.5口作为UART传输口,与蓝牙模块的UART口通信。

Sout为经过采集和放大电路输出的脉搏信号,输入到C8051F330的P1.7进行A/D转换,C8051F330与HC05的UART口对接,将采样和滤波以后的信号传输给蓝牙模块。开关S1用于蓝牙模块复位,二极管D2用于显示蓝牙模块状态。当没有数据传输时D2熄灭,当有数据传输时D2闪烁。电路如图3所示。

图3 控制与通信电路Fig.3Control and communication circuit

3 系统软件设计

整体系统软件设计包括单片机端的输入信号采样滤波和蓝牙程序、手机端的J2ME蓝牙客户端程序设计两大部分。

3.1 单片机端滤波设计

由于人体呼吸、电极移动会产生脉搏信号中的基线漂移干扰,频率较低,一般在0.7 Hz以下,属于低频干扰,为了获取较好的效果必须尽量消除其影响。人体脉搏波信号为准周期的时间序列,在不同周期的同一相位,其脉搏波的幅值近似不变[4]。如果局部脉搏波在某一时刻发生突变,则这一时刻其幅度必不等于其临近脉搏波同一相位幅度,根据这一思路,中值滤波的方法处理效果比较好。中值滤波法能有效克服因偶然因素引起的波动干扰,对温度、液位变化缓慢的被测参数有良好的滤波效果,因此首先采用中值滤波法尽量消除突发扰动。其基本方法是连续采样N次(N取奇数),把N次采样值按大小排列然后取中间值为本次有效值。

移动平均滤波对快速周期性运动干扰有较强的抵御能力[5],是对模拟滤波补充的低通滤波器,用于实时检测,只要采样率足够高,就能得到较为理想的测量结果。因此系统在中值滤波后再加一级移动平均滤波对数据进行二次滤波。

具体算法是:

式中,y(k)表示第k次采样时刻的滤波输出,各y(i)表示第i次采样时刻的信号输入,括号中的数字i代表第i次采样时刻,c1、c2、…、cm是加权系数。

上式意义是将本次输入数据连同以前共m次的数据进行加权平均。如果各ci值相同且等于1/m时,就成为m项算术平均运算。

3.2 蓝牙设计

蓝牙协议栈提供了一组高层协议和API以完成发现服务和模拟串行I/O,还有一个关于包分割和重组的低层协议以及多路技术协议和质量服务。蓝牙协议栈如图4所示。

图4 蓝牙协议栈Fig.4Bluetooth protocol stack

应用层(Application):这一层运行的是蓝牙通信的J2ME通信程序,通过调用蓝牙无线层的API,就可以直接书写相应的通信功能的程序。

蓝牙无线层(JSR-082):所有开发的API均在该层调用,与下层交互。

服务发现协议层(SDP):用于在远程蓝牙设备上寻找服务。服务器维护一张服务记录列表,每个服务记录都包含服务器上一个服务的信息,每个服务对应一个服务记录。客户端访问服务器时,首先要获得服务器的访问记录,然后通过服务记录建立连接。

逻辑链接控制器适配层协议(L2CAP):为上层协议提供面向连接和无连接的数据服务,并提供多协议功能和分割重组操作,可传输和接收最大长度64 KB的L2CAP数据包。

虚拟串口协议(RFCOMM):基于L2CAP协议的虚拟串口协议,因为它允许蓝牙设备模拟串口的功能,所以采用它进行数据传输。

对象交换(OBEX):可以用来传输文件或者交换对象数据,OBEX协议是基于RFCOMM实现的。

主机控制器接口(HCI)层:这一层是主机和控制器之间的接口,其他所有的层都要经过HCI。

3.2.1 单片机蓝牙设计

单片机使用UART接口和蓝牙模块进行通信。HC-05为蓝牙透明传输模块,专为具有异步串口的用户提供快捷蓝牙点对点通讯。用户不需任何协议,就像有线电缆连接一样,只需对串口写入数据,就可以将数据传输到远端用户设备。上电后蓝牙主机模块复位、读蓝牙模块地址、设置状态参数和初始化模块,与远端的手机连接成功后,可以通过UART异步串口与从机通信。这里将HC-05设置为主机模式,经过初始化后提供蓝牙服务,等待手机端蓝牙客户端连接。

3.2.2 手机端J2ME设计

J2ME(Java2 Platform,Micro Edition)是Sun专门为小型的资源受限的消费性电子设备的应用程序开发所提供新的Java版本,它广泛的使用于移动电话、PDA(个人数字助理以及电视机顶盒等众多小型资源受限设备中。对于J2ME来说,由于其得天独厚的跨平台性与良好的可移植性,使得其在设备繁多、平台异常混乱的手机与PDA市场更显得如鱼得水[6]。

J2ME平台是由配置(Configurations)和简表(Profile)构成的。配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机(JVM)。简表是针对一系列设备提供的开发包集合。在J2ME中还有一个重要的概念:可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能,J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持[7]。程序流程图如图5所示。

图5 程序流程图Fig.5Flow chart of the program

设计过程如下:

1)构建基于MIDLet的Mobile主类,实现按钮监听,在其监听消息中响应手机左控制键退出(Cmd_Exit)和右控制键显示脉搏波(Cmd_Show)的命令。部分代码如下:

public class Pulse extends MIDlet implements CommandListener

{

public void commandAction(Command c,Displayable d){

if(c==cmd_Exit){

try{

destroyApp(false);//响应退出命令

notifyDestroyed();

}catch(MIDletStateChangeException e){

e.printStackTrace();}}

if(c==cmd_Show){

Sh=new Show(this);//显示脉搏波}}

}

2)建立派生于GameCanvas实现按钮监听的Show类,画脉搏的函数名为DrawPulse用于将接收到的脉搏数据动态显示在屏幕上。部分代码如下:

public class Show extends GameCanvas implements CommandListener{

public void DrawPulse(int x0,int y0,int x1,int y1){

Graphics g=getGraphics();

g.setColor(255,0,0);

g.drawLine(x0,y0,x1,y1);//画出脉搏波

flushGraphics();//刷新屏幕}

}

3)建立Record类,通过RecordStore的方法addRecord,deleteRecord,getRecord存储,删除和显示收到的脉搏数据。至此整个J2ME的界面搭建完成。部分代码如下:

public class Record implements CommandListener{public RecordStore rs;

public int AddRec(String str){//将形参添加到记录中rs.addRecord(data,0,data.length);}

public int DelRec(int i){//删除第i条记录

rs.deleteRecord(i);}

public String GetRec(int i){//得到第i条记录的内容

size=rs.getRecordSize(i);

rs.getRecord(i,data,0);

rec2=new String(data,0,size);}

}

4)建立新类使其实现Runnable(多线程)。由于需要发送连接请求和接收数据,必须要将发送和接收过程使用多线程实现。导入输入输出数据流包循环接收数据。部分代码如下:public class BlueTooth implements Runnable,CommandListener{

public void init(){

try{

localDevice=LocalDevice.getLocalDevice();

//获得本地设备

discoveryAgent=localDevice.getDiscoveryA-gent();//获得本地设备代理

discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);

}catch(Exception e){

System.out.println(“初始化失败........”);

}

}

public void deviceDiscovered(RemoteDevice btDevice,DeviceClass cod){//设备发现

devices.addElement(btDevice);

}

public void inquiryCompleted(int disType){//搜索完毕

chooseBt();//选择连接服务器

try{

Stringdevice_address=btDevice.getBluetoothAddress();//取得蓝牙设备地址

String conURL=“btspp://”+device_address+“:1”;

streamConnection=(StreamConnection)Connector.open(conURL);//打开连接

isConn=true;//设置连接状态为已连接

dis=streamConnection.openDataInputStream();//打开输入流

dos=streamConnection.openDataOutputStream();//打开输出流

new Thread(this).start();//启动线程

}catch(Exception e){

e.printStackTrace();

}

}

public void run(){

while(isRunning){

try{

if(dis.available()!=0){

rec_package=new byte[dis.available()];

dis.read(rec_package);//接收数据}

}catch(Exception e){

e.printStackTrace();

}}}

}

4 数据显示与结果分析

考虑到自然光对测量的影响,将整个电路放置在不透光的小型圆柱形密封容器内(直径约5 cm,高度约5 cm),中间打1.5 cm直径的孔,用于固定受测者手指姿态,顶部打0.5 cm的孔用于反向放置光敏电阻。分别将采集电路板、蓝牙传输电路板叠放并用泡沫固定。测试时用手指的指尖按住光敏电阻的表面,受测者可以较长时间保持稳定的姿态。受测过程中有时出现部分毛刺和基线漂移现象,但是不影响整体测量效果。测量结果为:脉搏波形平滑,噪声抑制良好,长时间观测达到稳定后能提供使用者健康状态评价参数,如图6所示。

图6 数据显示Fig.6Data display

5 结论

系统采用C8051F330单片机和J2ME蓝牙研制便携式脉搏波测量仪,相比传统的检测设备,采取了光电容积脉搏波描计法,结果误差控制在10%以内、成本降低了50%以上、体积减少50%以上,配合J2ME可方便地进行二次开发。同时系统在部分细节还有待提高,比如采用更加有效的滤波方法滤除脉搏波中的基线漂移等噪声、构建更加人性化的手机界面等等。在系统基础上使用J2ME二次开发邮件系统或者GPRS,构建远程社区医疗保健系统,将人体生理信号使用手机发送给医生进行远程诊断,会给用户带来极大的便利,显示出良好的使用前景。

[1]郭世富,马树元,吴平东,等.基于ZigBee无线传感器网络的脉搏信号测试系统[J].计算机应用研究,2007,24(4):258-259.GUO Shi-fu,MA Shu-yuan,WU Ping-dong,et al.Pulse wave measurement system based on ZigBee wireless sensor network[J].Application Research of Computers,2007,24(4):258-259.

[2]李景文,龙村,张保洲,等.反射式血氧饱和度监测仪的设计与应用[J].生物医学工程与临床,2003,7(1):3-4.LI Jing-wen,LONG Cun,ZHANG Bao-zhou,et al.The design and application of reflecting oximeter[J].BME&Clin Med,2003,7(1):3-4.

[3]徐诚,董圣男,刘成.基于蓝牙技术的脉搏波检测系统设计[J].电子测量技术,2009,32(10):88-89.XUCheng,DONGSheng-nan,LIUCheng.Designofpulsewave measuring system based on Bluetooth[J].Electronic Measurement Technology,2009,32(10):88-89.

[4]Kim B S,Yoo S K.Motion artifact reduction in photoplethysmography using independent component analysis[J].IEEE Transactions on Biomedical Engineering,2006,53(3):566-567.

[5]李庆波,聂鑫,张广军,等.分段滤波用于消除脉搏血氧检测中多种运动干扰的研究[J].光谱学与光谱分析,2009,29(11):2995-2996.LI Qing-bo,NIE Xin,ZHANG Guang-jun,et al.Study on resistance to motion artifact in pulse oximetry measurement using segment filter method[J].Spectroscopy and Spectral Analysis,2009,29(11):2995-2996.

[6]张威.基于J2ME与蓝牙技术的电子处方系统的设计与实现[D].大连:大连理工大学,2007.

[7]王景辉.基于蓝牙传输的脉搏信号检测系统的设计与实现[D].兰州:兰州理工大学,2009.

猜你喜欢
脉搏蓝牙滤波
蓝牙音箱的直线之美
用心感受狗狗的脉搏
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
《今日评说》评今日浙江 说时代脉搏
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
基于51系列单片机的穿戴式脉搏仪的设计
紧急:蓝牙指尖陀螺自燃!安全隐患频出
近红外可穿戴设备中脉搏波的呼吸率检测
RTS平滑滤波在事后姿态确定中的应用
基于线性正则变换的 LMS 自适应滤波