首页 > 范文大全 > 正文

通用USB脑电采集及压力状态分析系统开发

开篇:润墨网以专业的文秘视角,为您筛选了一篇通用USB脑电采集及压力状态分析系统开发范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:介绍了一种基于USB的通用脑电采集及压力状态分析系统。该系统借助当前流行的JavaFX技术实现了对一般脑电设备的数据采集和多形态可视化。可视化工作用视觉表现脑电数据,即将数据中隐含的某种有规律的特征信息转化为一个表特征模型,可以让用户不经过分析庞大的原始数据,就可以得到一个所需结果的直观图形。基于系统采集的脑电数据,对用户的压力状态进行了初步分类和分析,并在可视化系统帮助下利用生物反馈技术实现了用户的主动压力缓解。

关键词:EEG;数据可视化;usb数据采集压力状态分析;生物反馈

DOIDOI:10.11907/rjdk.161237

中图分类号:TP319

文献标识码:A文章编号:16727800(2016)010007105

0引言

大脑是人类产生行为的中枢,而脑电波形图可以反映出人们的一些生理状态。随着微电子技术、计算机技术的不断发展,许多生物医学仪器也相继问世。数据可视化与信息图形、信息可视化、科学可视化以及统计图形等关系密切。

EEG(electroencephalograph)是通过在脑的各相应区域(头皮、硬膜下等)安放电极,描记大脑神经细胞活动所产生的生物电活动,是反映大脑功能状态的电生理技术。1929年德国神经精神病学家Hans Berger首先在人类完整的头皮上安放电极,描记人类大脑的自发电活动。此后,他的研究成果不断得到电生理及神经生理学家的证实,使EEG学得到发展。随着电子科技的发展,如今脑机接口技术成为主流,NeuroSky(神念科技)将脑机接口技术带出实验室。脑电技术目前主要应用于心理学研究领域,而计算机科学领域主要进行脑机接口技术研发。不同厂商的脑电设备往往需要不同的驱动程序和操作软件才能完成数据采集和分析,例如NeuroSky的多种脑电采集设备都有自己的配套软件,且互不兼容。本文试图采用计算领域的可视化技术,实现针对一般脑电设备的数据采集可视化系统,并在此基础上实现对用户压力状态的分析和判断,以对大学生心理减压提供帮助。

1研究动机与技术基础

通过一次性电极采集不同人群的脑电波,录入分析设备将脑电波展示在电脑上。脑波仪的优点在于不需要固定头或身体,使用的感应器比较小,时间分析度高,容易使用,可控性强。人的脑电图有4种波:δ波(DELTA / δ wave)、θ波(THETA / θ wave)、α波(ALPHA / α wave)、β波(BETA / β wave),每一种脑电波都有其相对应的大脑意识状态,也可以说在不同意识状态下需要不同的脑电波才能完成好大脑工作。如果大脑在某个具体情况下不能出现相应的脑波就有麻烦了。例如,如果在想睡眠时大脑不出现δ波和θ波,这就是失眠症(INSOMNIA)。在适当的时候出现适当的脑波的人就是人们所说的天才。

通过脑波的波动变化可以分析出一个人的精神状态变化过程。将脑电波采集分析以后,根据不同的结论给予不同的治疗放松方法,例如:①容易紧张,采取深呼吸;②睡眠不足,播放低声耳语录音;③情绪低落,播放舒缓音乐。本文的研究内容主要解决从原始数据到统计结果,从统计结果到分析结论转变为从原始数据到分析结果,其研究内容包括以下几个部分:①数据采集:对原始数据的不同粒度采集;②数据分析:对采集到的数据通过某种算法筛选出所需数据,或转变为某种数据模型;③数据显示:对所需数据或数据模型进行优化显示。

软件系统开发过程:①模型分析:确认数据采集的粒度和数据类型,分析出适当的显示模型;②概要设计:分析业务逻辑,研究各部分之间的关系,将各部分模块化;③详细设计:对模块化部分进行详细设计;④进度安排:预估模块化的大致工作量,安排进度;⑤编码:确定开发环境,实现功能;⑥单元测试 :对每个模块进行测试,确保模块功能正常;⑦集成测试:将各模块组合起来,确认功能是否正常,测试是否实现了所有功能。

系统开发采用JavaFx平台,综合使用FXML、LibusbJavaX等开发工具。JavaFx平台在Java技术上构建,非常容易创建和部署。在JavaFx API基础上,可以开发用户的JavaFx代码,它包括JavaFx的高性能图形引擎――Prism、低系统资源占用且高效的窗口系统Glass,以及一个媒体引擎和一个Web引擎。

FXML是JavaFx 2.0提供的一种新技术。FXML是一种在JavaFx应用程序中定义用户界面且基于XML的声明性标记语言,非常适合用来静态布局,如表单、控件和表格。使用FXML技术还可以通过脚本动态构建布局。作为用Java代码创建事件处理以外的替代方案,可以使用任何兼容JSR223脚本引擎的脚本语言来创建处理程序,例如JavaScript、Groovy、Jython和Clojure。

通常情U下,使用Java 语言要访问一个 USB 设备,需要写C/C++代码实现一个中间件,然后用Java访问这些中间件才能控制USB设备,但是开源组件Libusb做好了访问USB设备的封装(包括Windows、Mac OS、Linux等平台)。用 Java 访问 USB设备时,通过访问 Libusb组件提供的接口即可。

2脑电数据采集及可视化系统开发

2.1需求分析

系统非功能需求主要体现在以下几个方面:①性能需求:本系统要求在2G内存电脑和低配显卡上不卡;②可靠性和可用性需求:本系统要保证原始数据不丢失,且尽可能还原原始数据并显示;③出错处理需求:本系统对未接入USB外设、硬盘的用户操作均作异常处理;④接口需求:需要有USB接口;⑤约束:需要有可发送数据的USB外设接入,需要硬盘有空闲可写入空间;⑥界面需求:窗口大小可移动,可在不同平台上扩展,支持可选设备以及可选图表,如图1所示。

原始数据获取模块负责从USB端口获取序列化数据;数据分析中间件负责将原始数据转变为可识别的数据类型并自动化分析整理数据;显示生成数据模块将分析中间件生成的数据发送到事件总线上,并让数据传递组件传递数据;事件总线负责各个组件之间的消息与数据传递;数据显示负责显示事件总线上传递的数据;数据读取模块包括数据记录以及数据恢复,其中数据记录是和数据显示一样获取事件总线上的数据,数据恢复则是从硬盘上获取历史数据并发送到事件总线上。

2.2系统设计

2.2.1系统业务流程

业务流程图是软件行业比较规范且被广泛使用的分析工具,可较直观和准确描述系统业务流程。系统业务流程图和基本算法流程见图2。

2.2.2系统MVC设计

JavaFx的MVC架构将视图放在FXML和CSS文件中,将控制放在Control类中,将数据模型放在JavaBean中。FXML中的组件可通过fx:id=”xxx”的形式标记为外部引用,Control控制类可通过@FXML的方式获得引用进行控制,JavaBean中的数据主要通过接口或监听进行传递。本系统设计如下(包):Model:date包;View:ui包;Control:event包、log包、util包。

2.2.3功能模块设计

系统分为显示子系统和后台子系统两个部分。显示部分又分为如下几个模块:①显示数据图子模块:显示原始数据,便于对比不同数据,或者单独研究某种数据波动;②雨点图子模块:融合原始数据之间的关系与时间关系,将时间概念融入到二维坐标,使得二维坐标可以显示复数数据;③饼状图子模块:显示总计的数据比例,可以通过比例的变化分析当前的数据状态。

后台模块有:①数据记录子模块:用于记录界面信息或后台数据信息;②数据恢复子模块:用于恢复后台数据信息并用显示模块显示;③设备获取子模块:获取外设信息以及外设数据切换;④设备数据转换中间件:可以根据不同情况或不同设备定制特殊中间件,此处提供中间件接口,可在中间件中获取序列化USB数据,可以定义如何转换数据、分析数据、何时生成数据等操作;⑤数据发送子模块:此模块负责通过事件总线直接与显示模块打交道。系统层次结构如图4所示。

2.2.4数据格式设计

(1)界面数据:包括窗口大小、窗口位置、窗口状态等,界面数据存储于注册表中,位置为“HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs”,写入注册表的好处是比存储文件或数据库读写方便。此外,为了方便对注册表的操作,会有一个注册表管理控制类负责提供读写位置。

(2)后台数据:后台数据指用于显示的原始后台数据,目的在于恢复数据,此处设计为写入文件中。此设计目的:①比数据库轻量化;②数据生成一个片段化形式,数据总是一片一片的,只要指定起点终点就行,不需要查询,不采用数据库形式;③数据量大时存入注册表会显得很冗余,对注册表读写压力会很大,故不考虑注册表形式。后台数据设计的形式为“Long类型的时间+原始数据”,其存储形式如表1所示。

2.2.5消息传递设计

实时数据可视化是本系统的主要功能,在数据传递、处理、显示等操作中存在很多异步操作,为了解决异步操作,本文采用了事件总线方式。

如图5所示,系统设计了如下几种事件:①注册设备事件:在设备初始化阶段,通过注册设备事件将设备显示在界面上;②设备变更事件:界面变更设备时,通过设备变更事件改变后台获取数据;③中间件事件:中间件事件主要指将分析后的数据发送给控制组件,由控制组件发送给显示组件,通过这种中间的方式实现新数据与恢复数据兼容;④刷新事件:通过获取控制组件的新数据刷新当前页面;⑤窗口关闭事件:因为本项目设计了很多异步操作,同时也涉及了复数线程,比如说界面线程、生成数据线程等,所以通过一个窗口关闭事件即关闭所有的线程。这些事件通过事件总线实现数据的共享、交互以及同步异步操作。

2.3系统实现

系统开发环境:Windows 7,开发版本JDK:Java(TM) SE Runtime Environment (build 1.8.0_20-b26) Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23,mixed mode),显卡:GT550T内存:4G,硬盘空闲容量:10G。

开发的重点与难点:①数据获取:通过USB接口获取数据需要调用第三方接口LibusbJavaX;②数据类型:为了方便USB设备扩展,数据转换以及数据分析均采用中间件方式;③数据显示:数据通过JavaFx组件显示, API开发不是很完善。此外,虽然是客户端,但因为JavaFx拥有良好的MCV架构,所以可以实现嵌套FXML和CSS两种方法;④数据存储:包括对注册表的操作以及对文件的直接读写;⑤数据交互:各个模块间的交互一定是异步的,所以采用事件总线的方式注册监听和触发事件。

原始数据见图6,此图的设计角度是为了对比两种数据或者直观观察单一数据的波动情况,设计思路类似于心电图形式,右下角显示了数据生成的起始时间和当前时间,横坐标是横向滚动的,后台设计的缓存数据为50条记录,超过50条会默认删除最早的数据(此图中横坐标是时间,所以删除的数据位于最左面)。

最新数据分布图(雨点图)见图7。雨点图的设计思路是:通过二维坐标显示两种数据之间的关系,难点在于在二维坐标上显示3种数据:开始设计为每个点上加一个标签,但是当点密集度很高时效果很差,之后设计为用2D显示3D坐标,但这种方法如果不用切片式(山峰切片)会在显示上有歧义,最终以颜色来标明时间特性,如果还有第4种特性,预留的方案是设计成图形变换(例如或),实现方案是通过SVGPath画一个任意形状的封闭图形即可。

饼状频率分布图(见图8)可以直观看到当前用户各个频段脑电的持续状态,如果用户的14Hz以上的高频脑波所占的比例过大,表示用户持续处于压力较大的紧张状态。反之若α占较大比例,则表明用户精神状态较好,注意力集中。

前端的多样化显示基于后台的复杂处理。本系统在后台事件总线的支持下,通过两重缓存实现了实时动态数据读写和显示。后台数据的生命周期如图9所示。

显示模块缓存由一个HashMap构成,其Key值是时间,时间通过ArrayList存储,已经添加显示的数据会删除Key值,而HashMap的重置则在切换其它图表后。设置二重缓存模式,即显示模块缓存和显示组件缓存,是为了解决数据获取与显示中的时间差问题。采用二级缓存显示的动画过程较为自然,没有断续现象,同时二重缓存的数据也更便于管理。

3实验数据分析

自发脑电信号在不同的意识状态下活动状态各异。按照所在频段的不同分类,一般采用希腊字母(α,β,γ,δ,θ)来表示不同的自发EEG信号节律。

从表3可以看出,当被测用户β波占主导时,用户处于较为紧张的状态,压力大,需要进行减压干预,建议通过舒缓的音乐或者通过能吸引用户的有趣事物转移其注意力[4];当被测用户α脑波占主导时,用户身心能量耗费最少,相对脑部所获得的能量较高,运作会更加快速、顺畅,灵感及直觉敏锐,脑的活动十分活跃,建议通过一些训练,如听一些古典音乐、读一些轻松的文字让自己处在α波;当被测用户θ脑波占主导时,θ波与脑部边缘系统有很直接的关系,对于触发深层记忆、强化长期记忆(LTP)等帮助极大。但是未经过训练者一旦脑电波降到这么低的频率,会很快进入睡眠状态,对于失眠或者睡不着的用户建议:可以看书、沐浴、数羊、穿戴一些助睡眠设备让脑波进入到θ波;当被测用户δ脑波占主导时,用户在睡眠过程中出现大脑慢活动状态,此时人脑波频率一般在1Hz~3Hz之间,该频率只有在深度睡眠时才会出现。用户要进入此状态,建议在睡前听些催眠曲,让自己进入深度睡眠状态[1]。

本文给出了一种在当前系统辅助下采用基于生物反馈技术辅助用户减压的方法。生物反馈疗法(Biofeedback therapy)是一种利用生理科学仪器,通过人体内生理或病理信息的自身反馈,使患者经过特殊训练后,进行有意识的“意念”控制和心理训练,从而消除病理过程、恢复身心健康的新型心理治疗方法[5]。USB脑电数据可视化系统能将用户脑电数据以波形或图谱的形式显示出来[6],用户可以实时观察自己的脑电波形,依据系统数据判断自身压力状态,进而选择对应的减压方案[3]。当减压方案有效时,系统会给用户以正反馈,即用户会看到自己的脑电波型趋于平缓。生物反馈减压流程如图10所示。

基于生物反馈技术的系统辅助减压步骤:①采集用户脑电数据可视化显示为波型或其它形态;②用户通过观察脑电波型判断自身压力状态;③用户采取预设减压方案,同时观察脑电变化,若脑电趋于压力减缓状态(获得正反馈),则证明减压方案对该用户有效,继续实施,直至压力状态明显减轻或消失。对于有效方案可以反复实施以巩固效果;④若脑电波型显示压力状态未得到减缓,则表示当前减压方案对该用户无效,此时应采用其它备选减压方案,直至获得正反馈,得到有效的减压方案。

4结语

本文介绍了一种基于USB的通用脑电采集及压力状态分析系统。该系统借助当前流行的JavaFX技术实现了对一般脑电设备的数据采集和多形态可视化。基于系统采集的脑电数据,对用户的压力状态进行了初步分类和分析,并在可视化系统帮助下,利用生物反馈技术实现了用户主动缓解自身压力。

参考文献参考文献:

[1]陈芳容.大学生学业压力源与睡眠质量的特点及其关系[D].福州:福建师范大学,2010.

[2]仇道滨.英国高校心理咨询职业化发展及其启示[J].山东社会科学,2009(9):155159.

[3]丁宝玺.脑电图数据相关性分析的研究[D].大连:大连交通大学,2007.

[4]陈曾,刘光远.脑电信号在情感识别中的应用[J].计算机工程,2010(9):26312637.

[5]李米.生物反馈训练效率及模式的实验研究[D].西安:第四军医大学,2008 .

[6]包君康,张 .基于USB 数据采集便携式心电监护仪的设计[J].工业控制计算机,2011(5):265268.