基于智能手机的人体健康监护终端开发
2023-02-20 08:37:19
论文总字数:13178字
摘 要
在当今社会,人们的所处的各种环境都在发生着剧烈的变化,因此人们对健康的关注就越来越多。在最近几年看来,心血管疾病是一种造成死亡率较高的一种疾病了,而应对这种疾病的一种预防的方法就是利用这种方便携带的终端设备监护人体健康。
这篇报告就是讲述了一种以andriod手机为平台的健康监护的设计和实现的方法。首先在手机终端通过蓝牙设备对人体信号的接收,在对接受的信号进行一些滤波处理,处理完后显示出心电波形从而判断用户的健康。
关键词:健康监护;android手机;蓝牙;心电波形
Development of human health monitoring terminal based on smart phone
Abstract
In today"s society, the environment in which people are located is undergoing dramatic changes. Therefore, people pay more and more attention to health. In the last few years, Cardiovascular disease is a disease with a high mortality rate. One way to prevent this disease is to use the portable terminal device to monitor the health of the human body.
This report is about the design and implementation of a Andriod mobile phone as a platform for health care.First of all, in the mobile phone terminal through the Bluetooth device to the human body signal reception, in the acceptance of the signal processing, after processing, the display of the heart wave shape to determine the user"s health.
Keywords:health care; Andriod mobile phone;Bluetooth; ECG waveform
目录
第一章引言 1
·1.1选题的背景和意义 1
·1.2 国内发展现状 1
·1.3本文的主要内容 1
第二章软件的设计与实现 2
·2.1软件设计与实现简介 2
·2.2蓝牙无线接入方式 2
·2.3系统的需求分析 2
2.4系统的界面设计 4
2.4.1主界面设计 4
·2.4.2蓝牙搜索界面 4
2.5系统的功能设计与实现 5
·2.5.1搜索连接蓝牙设备 5
·2.5.2接收数据的分类 6
·2.5.3心电数据处理和数据显示 6
·2.6实验结果分析 9
第三章总结与展望 10
·3.1总结 10
·3.2展望 10
第一章 引言
·1.1选题的背景和意义
社会无时无刻不在进步,人们生活也都在改善,这就令人们对健康产生了强烈的关注。心血管疾病被认为是人类社会造成死亡率最高的一种疾病,这种疾病以心律失常为特征。在当下,人们的生活压力很大,这种压抑慢慢累积,很可能就会导致心律失常。为了减少由于心血管疾病造成的死亡,恒定的诊断和监测是必不可少的。
无线移动通信技术的发展速度显然是在大步流星,可佩戴式移动医疗设备也逐渐火热了起来。现如今,手机已经非常普遍了,几乎是人手一台甚至二台。手机不仅仅成为了移动终端,更是无线接入互联网的移动平台。通过移动健康监护,人们可以不用再去医院挂号排队看病,这为弱势群体和住在偏远地区的人们带来了方便,这对我们国家来说是非常重要的。
·1.2 国内发 展现状
移动健康医疗事业最早是在美国诞生的,由于国家政策的引导,其移动健康事业蒸蒸日上。我国则算是起步较晚的一个国家了,因为我国人口众多,思想比较传统,基本上是只有生了病才回去医院看,有些小病甚至都不看医生,这就使医疗事业带来了挑战。现在医疗费用贵的让人感慨,看病难的问题难以解决。
随着时间的推移,政府和国家对健康管理事业后知后觉,直到07年发布了一个标准,从此健康管理事业渐渐地深入人心。互联网技术的发展也直接促进了移动医疗事业的发展。我国的移动医疗事业虽然发展的还算很不错的,但是所应用的产品大多都是国外产的,因为现在国产的设备还存在一点点的缺陷,比如说准确度不高,抗干扰能力不强等。
·1.3本文的主要内容
本文根据移动健康监护提出了一种以Android手机为终端的便携式健康监护软件的开发。这个软件能监测用户的心电信号,并将通过蓝牙设备将接收到的心电信号传递到手机上,接着手机根据所接收的心电信号进行实时的监控。具体的重点和难点在于如何建立起蓝牙通讯,如何通过蓝牙接收心电信号,如何对接收的信号进行一些简单的滤波处理,最后如何显示心电波形。
第二章软件的设计与实现
·2.1软件设计与实现简介
本系统采用下位机和上位机组成的体系结构,下位机(心电胸带)负责心电信号、电池电量的采集与处理,并且向上位机(Android智能手机)发送数据;上位机具有接收与显示数据的功能,能够根据不同的数据类型做出不同的响应与处理,另外可以对下位机发送控制命令。其中,心电胸带是现成的设备,虽然其设计和功能都已经完成,但是其通讯对象限于计算机。因为心电胸带是紧贴人体使用的,而计算机不便随身携带,以致其使用的空间范围十分有限,所以在智能手机上开发出与其适配的应用可以大大地增加其使用范围。
·2.2蓝牙无线接入方式
蓝牙是我们日常生活中见得蛮多的一种无线接入方式。众所周知蓝牙提供的无线数字通信技术是短距离的,并可以连接到许多个设备。而且蓝牙传输的速率很快,功耗小,辐射低,个体小,所以被广泛的运用在手机和电脑上。
·2.3系统的需求分析
本系统是一个基于Android操作系统的实时心电监测系统,它能够通过蓝牙功能实现心电等多种信号的采集、处理与显示。智能手机和心电胸带的通讯遵循心电胸带的通讯协议,保证了它们之间对接收不同的数据时做出正确的判断与处理。结合系统的主要功能需求和智能手机软件的一般特征,本系统设定了若干功能如下所述:
- 提示开启手机蓝牙
当打开软件时,如果手机没有开启蓝牙,则弹出对话框提示此应用需要使用蓝牙功能,只有允许开启蓝牙,才能进入应用;如果手机已经开启蓝牙,则不会询问,就会直接进入应用。
- 发现蓝牙设备并发起连接
扫描周边的蓝牙设备,点击对应的设备进行连接。当连接成功时,应用返回主界面在最上方的标题栏显示已连接;如果无法连接则显示未连接。
- 侧边滑出菜单放置按钮
当软件的按钮较多时,通常不都把所有按钮在主界面中显示,尤其对于智能手机的软件,由于其屏幕空间较小,而且触摸屏幕容易发生误触,把不经常使用的按钮放在侧边滑出菜单是很有必要的。
- 发送命令和判别数据
发送命令即智能手机向心电胸带发送特定的数据,数据的形式根据心电胸带通讯协议进行设定,每个命令对应一个按钮,通过点击按钮发送命令。同样的,对于手机接受的数据,也是根据通讯协议进行判别,从而做出相应处理。
- 数据的显示和警报
对于关键的数据,如心率、警报情况,在主界面上方直接显示,对于警报设置声音的提示。图形显示在心电的监测中具有重要的作用,它给出最直观的视觉信息。为了更方便的观察心电波形,在图形区域下方设置画图的暂停、模式切换、移动和缩放按钮。另外,也对接收和发送的数据直接显示,有助于判断数据收发是否正常。
- 心电数据的滤波处理
采集所得的心电数据往往包含了许多高频信号,直接绘制的心电波形不利于观察,因此可对其进行适当的低通滤波。
- 退出软件提示
当处于软件主界面点击返回时,会弹出对话框提示是否确定退出应用。
·2.4系统总体流程设计
根据需求分析,可将系统按照其功能划分模块:
蓝牙搜索连接模块:查找周边的蓝牙设备,发起连接。
数据收发与分类模块:负责向心电胸带发送命令数据,接收由心电胸带发出的数据,对接收的数据进行决断选择,并将不同的数据归类起来。
数据处理与显示模块:对心率、警报和电量的文字显示,附加警报的声音提示;对心电数据的低通滤波,心电数据的波形显示,以及暂停、缩放等功能。
综上所述,可得出系统总体工作流程,各模块间的联系如图1.1所示:
图1.1 系统总体工作流程
本系统各个功能模块之间联系紧密,软件中需要的操作较为简单,主要功能体现在对不同的数据进行分类,以不同的形式呈现不同的信息,整体实现对心电的监测功能。
2.4系统的界面设计
本系统主要包含主界面和蓝牙设备搜索界面,由于软件开发是基于Google提供的开源代码BluetoothChat,蓝牙设备搜索界面使用原有的设置,所以此处主要对主界面的设计予以介绍。
2.4.1主界面设计
主界面是用户进入系统后看到的界面,提供信息窗口和交互按钮,将除电池电压外的所有监测信息都显示在主界面中,将所有控制命令按钮都放置于侧边滑出菜单栏。
主界面的类ServiceActivity继承ActionBarActivity,ActionBar(导航栏)位于Android应用界面的顶端,使得重要的操作更为便捷,它的下面可以分为四个小类,分别是AppIcon(应用标识、向主界面导航)、ViewControl(视图切换,或者显示一些描述信息)、ActionButtons(显示应用程序中最重要的动作、长按图标会提示该动作的描述)、ActionOverflow(溢出菜单,相对不太常用的动作),而且可以对这些部分进行选择性编辑。本系统主界面的ActionBar包括了AppIcon用于显示应用图标,ViewControl用于显示蓝牙连接状态,ActionOverflow用于蓝牙设备搜索界面和设置设备自身可被发现。
线性布局是很实用的一种方式,所以在导航栏下方我们就是运用这种方式,在水平方向上放置两个线性布局,分别作为侧边菜单栏和主界面布局,虽然两者在同一个layout文件中,但是侧边菜单栏在用户打开软件时是不可见的,需要通过点击可见界面上的按钮或者向右滑动拉出菜单栏。在上述两个线性布局中,分别嵌套横向或竖向的线性布局,在这些嵌套的线性布局中还可以根据需要继续嵌套,在最后嵌套的线性布局中放置按钮、文本框等组件。
侧边滑出菜单包括的组件有Button(按钮)、TextView(文本框)、ToggleButton(开关按钮)和ViewStub(“占位符”)。其中,ToggleButton与Button的区别在于它可以对应两个命令,而Button只对于一个命令。ViewStub是可初始化为不可见,只是相当于在某个地方占好了位置,ViewStub可以绑定一个布局文件,在主界面类中通过findViewById方法将其与一个按钮联系在一起,当点击按钮时即可加载出该ViewStub绑定的布局文件布局。绑定的布局文件包含了EditText(编辑文本框)和Button,编辑文本框用于输入命令数据,输入完成后点击按钮发送命令。
主界面布局中竖向有四个线性布局,第一个布局横向放置了弹出侧边菜单栏按钮,心率显示文本框,警报显示文本框;第二个布局是一个SurfaceView,用于绘制心电波形;紧贴SurfaceView的是一排横向的按钮,用于控制绘图;最下方是一个ListView,这是一个可在竖直方向上滑动的列表,用于显示收发数据。
·2.4.2蓝牙搜索界面
蓝牙搜索界面拥有继承自Activity的类DeviceList,其布局相对简单,其组成部分分为两个TextView,两个ListView,另外还有一个Button,TextView用来显示列表ListView名称,ListView是蓝牙设备列表,Button用于触发设备扫描。这里之所以有两个列表,是因为将配对的设备和新发现的设备分别罗列。列表中的组成元素实际上是TextView,每个蓝牙设备名称对应一个TextView,而每个TextView都设置了点击事件(setOnItemClickListener)。
从主界面进入蓝牙搜索界面时,使用了Intent类来实现两个活动(Activity)的切换。Intent的作用就是传输媒介,是用来提供组件相互调用的相关信息,它主要是讲述应用中的操作的动作、动作设计的数据和附加数据。在这里结合了Intent类和startActivityForResult方法,该方法的功能可描述为从一个活动转到另一个活动中获取数据后返回结果,在此处表现为调用DeviceList类以获取蓝牙设备的名称和地址,获取的行为通过点击列表中的设备名称将信息传递跟Intent类,得到该数据后自动返回主界面。
2.5系统的功能设计与实现
本系统的功能包括搜索连接蓝牙设备、接收数据的分类、心电数据处理和数据显示。以下依次叙述各个功能的设计和实现。
·2.5.1搜索连接蓝牙设备
本系统的通讯采用的是蓝牙功能,要使用手机的蓝牙功能首先需要获得相应权限。在Android系统的应用中,使用权限的获取在AndroidManifest.mxl配置文件中进行设置,蓝牙功能使用权限需要添加如下语句:
lt;uses-permission android:name="android.permission.BLUETOOTH" /gt;
lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /gt;
Android系统中的API(Application Programming Interface,应用程序编程接口)功能各异且数量繁多,其中BluetoothAdapter和BluetoothDevice是最常用的两个与蓝牙挂钩的API。BluetoothAdapter类的对象可以看做是手机里的蓝牙适配器,代表了本地的蓝牙设备。BluetoothDevice类的对象可以看做是心电胸带里的蓝牙适配器,代表的是远程的蓝牙设备。应用这两个API的搜索获取蓝牙设备的关键代码如下:
private BluetoothAdaptermBluetoothAdapter; //定义蓝牙适配器
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙适配器
mBluetoothAdapter.startDiscovery(); //开始查找蓝牙设备
mBluetoothAdapter.cancelDiscovery(); //取消查找
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //获取设备
查找设备需要使用startDiscovery()方法,每当发现一个设备时会有ACTION_FOUN动作,需要注册一个BoardcastReceiver(广播接收器)来接收扫描到的信息,代码如下:
// 注册BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
//扫描完成后注销BroadcastReceiver
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, filter);
获取了蓝牙设备信息后,下一步是实现两台设备的连接,将心电胸带作为服务端,手机作为客户端,服务端开启服务准备接收手机端发送的连接请求,客户端则直接发送连接请求。两者已经连接的依据是它们的蓝牙套接字在一个虚拟蓝牙串口上。服务端和客户端获取蓝牙套接字的方式不同。当客户端发送连接请求时,服务端就获取到蓝牙套接字。当客户可打开一个虚拟蓝牙串口信道给服务器端的时候,同样客户端也就获取到蓝牙套接字[1]。下面分别叙述服务端和客户端的连接:
服务端的连接:首先服务器端发送一个连接配对命令到服务器连接配对线程,然后其反馈连接结果。连接错误则从后台Service发送出连接发生错误的广播。当连接成功时数据也会传送至后台Service。数据包含一个key为DATA的参数。服务器端由后台Service发送数据实体到蓝牙通讯线程与客户端进行数据通讯[2]。
客户端的连接:为了能和服务器端能顺利的对接,需要先获取代表该设备的一个BluetoothDevice对象。通过BluetoothDevice对象来获取BluetoothSocket并初始化连接,具体步骤如下:客户端蓝牙主控制器发送一个连接配对命令,然后客户端连接配对线程反馈一个命令信息,提供连接结果,数据包含一个key为DEVICE的参数,该参数类型为BluetoothDevice(蓝牙设备类)。用户需要从搜索到的蓝牙设备中选择服务器设备,选择设备后发送Broadcast,告知后台Service选择的蓝牙设备。
当服务器端和客户端连接好了之后,每个设备都拥有各自的BluetoothSocket,可以实现设备之间数据的共享,通过调用getInputStream()和getOutputStream()方法来获取输入输出流,通过调用read(byte[]) 和write(byte[])方法来读取或者写数据[3]。
·2.5.2接收数据的分类
根据通讯协议,手机端接收到的数据有8个类型,数据包格式为Header Length DataType Data CRC,其中:
Header 为包头,一个字节,为0xaa;
Length:为数据包长度,一个字节,为DataType、Data、CRC的字节数。
DataType:为命令,1个字节。
Data:数据,数据类型,数据长度不同。
CRC:为校验字节,CCITT 16bit CRC,CRC输入数据包括Header Length DataType Data的所有数据,不包括CRC本身。发送时高字节在前,低字节在后。
当获取了完整的数据包后,先对其进行CRC校验,如果数据正确,则按照DateType对其进行划分;如果数据有误,则忽略这个数据。
·2.5.3心电数据处理和数据显示
对接受到的数据完成分类后,根据不同的数据类型做出相应的处理。对于心电数据,首先将其保存于一个数组中,截取数组中的一段数据对其进行低通滤波,再使用滤波后所得的数据绘制出心电波形。
低通滤波使用的是FIR滤波器,因为FIR滤波器很容易获得严格的线性相位,这样就避免了被处理的信号产生相位失真,可以得到多带幅频特性,而且产生的误差会比较小。FIR滤波器的单位抽样响应是有限长的,因此滤波器肯定处于稳定状态,只要经过一定的时延,任何非因果的有限长序列都变成因果的有限序列[4]。
剩余内容已隐藏,请支付后下载全文,论文总字数:13178字