APP下载

分布式生物雷达系统软件的设计与实现

2019-12-18李雪阳梁福来王健琪

医疗卫生装备 2019年12期
关键词:线程串口分布式

李雪阳,史 刚,焦 腾,梁福来,王健琪*

(1.空军军医大学军事生物医学工程学系,西安 710032;2.西安电子科技大学生命科学学院,西安 710126)

0 引言

生物雷达技术是一种新概念的生命体参数信号非接触探测技术,旨在通过雷达探测的方式,实现一种不用电极等介质接触人体,在一定距离内、相隔一定介质、对人体无约束的情况下,探测目标人体的体征,如呼吸、心跳等生理参数信号[1]。生物雷达技术通过不断的发展在很多领域有着良好的应用,如自然灾害救援、生命体征(如心率等)的非接触式监测、生命体目标定位、人体目标的运动状态识别[2]、人体语音信号探测[3]、医疗临床监测[4]等。但是现有的生物雷达系统存在一定不足,如单个生物雷达的探测区域有限,而多个生物雷达同时探测时数据之间无法互通互连统一进行处理。张自启等[5]对生物雷达探测时的遮蔽效应进行了研究,表明采用多个生物雷达同时进行探测可以有效改善生物雷达探测时遮蔽效应的影响。

目前,已有团队对分布式生物雷达系统进行了研究。鲁汶大学的Mercuri等[6]设计并实现了一种室内无线实时人体健康状态监测系统,该系统基于双模雷达对室内的人体进行跌倒检测和定位,且不需要人体上配有射频识别设备。明治大学的Shingu等[7]讨论了在室内环境下使用多发多收的超宽带雷达对人体的探测,并进行了仿真研究。Tian等[8]设计了用于语音通话识别的无线生物雷达网络系统,采用35.5 GHz生物雷达作为雷达终端,并向人体发射无线电波,从回波中提取语音信号。但国内外均少见针对人体生命体征的分布式生物雷达实时探测研究。

本文提出了一种无线分布式生物雷达系统,其在单生物雷达技术基础上,采用多个生物雷达同时进行组网探测,生物雷达终端位置灵活可变,探测方位、角度可根据需求实时变化,可同时采集多个生物雷达的数据并进行处理,以获得针对某一个区域多角度的探测,从而扩大系统的探测范围,提高探测效率。

1 无线分布式生物雷达系统整体结构

无线分布式生物雷达系统由生物雷达模块、无线控制终端模块、无线网络通信模块、分布式生物雷达系统软件4个部分组成。

生物雷达模块采用本课题组研制的JC123-5.0UA2连续波生物雷达,输入电压5 V,输出两路直流信号,分别为呼吸和心跳信号。JC123-5.0 UA2连续波生物雷达体积小巧、质量轻,轴向探测距离可达10 m,水平探测方位角度可达±40°,具有一定的穿透能力,是无线分布式雷达系统前端的良好选择。

无线控制终端模块是连接生物雷达前端和无线通信模块的重要环节,主要包括供电电路、AD转换电路、滤波电路以及与无线模块连接的串口电路等,可对雷达传输的直流信号进行AD转换,并在分布式生物雷达系统软件的控制下进行数据打包及与ZigBee无线模块通信。

本系统的无线网络由基于ZigBee技术的无线网络通信模块实现。该模块体积小、功耗低、传输速度快、网络稳定,具有方便快捷的自组网功能,上电后即可快速地建立起一个全联通的无线网络。Zig-Bee技术与Wi-Fi、蓝牙技术相比,具有协议简单、功耗低、传送距离远等优点,是无线分布式生物雷达系统网络通信技术的良好选择[9]。最终实现的无线分布式生物雷达系统终端硬件节点如图1所示。

图1 无线分布式生物雷达系统终端硬件节点

分布式生物雷达系统软件是无线分布式生物雷达系统的重要组成部分,是配置系统参数、控制系统监测、展示监测结果的平台。其中,配置的系统参数包括当前探测条件所需终端节点的个数、锚节点的个数、与无线通信模块通信时的波特率等;系统监测的控制包括对探测目标的呼吸频率及心跳频率进行监测和计时;监测结果的展示包括探测目标呼吸频率、心跳频率的实时波形动态显示和实时信号频率分析、处理与显示。本文主要论述分布式生物雷达系统软件(以下简称“系统软件”)的设计与实现。

2 系统软件的设计

2.1 设计需求

分布式生物雷达系统软件是控制整个监测系统,处理、展示监测数据的软件。根据系统功能,提出的设计需求如下:

(1)良好的可扩展性。可根据探测需求灵活更改系统配置,如终端节点的个数、锚节点的个数等。

(2)实时控制终端节点的开始、停止,进行监测计时。

(3)数据的分析、处理和显示。对各个终端节点的采集数据进行分析、处理,进行实时显示。

(4)原始数据存储。将各个终端节点的原始数据进行存储,以便后续研究。

2.2 整体结构

根据以上需求,系统软件的总体层次结构如图2所示,分为数据通信层、数据处理层、数据分析层和用户界面显示层。

图2 软件结构图

(1)数据通信层。串口是计算机与外设之间连接的基本通路,串口通信一般遵从RS232、RS485等通信协议,统一通信协议的硬件接口即可与计算机建立通信,进行数据互通。无线分布式生物雷达系统终端硬件节点中使用的无线网络通信模块(即DL-LN33 ZigBee无线通信模块)为晶体管-晶体管逻辑(transistor-transistor logic,TTL)电路,其输出经过CP2102模块转换即可实现与计算机的通信。CP2102是一款直插式USB、通用异步收发传输器(universal asynchronous receiver/transmitter,UART)转换模块,其 USB 端直接接入计算机USB插口,在计算机上安装相应驱动后,该USB端口即模拟为一个新的RS232串口,可在CP2102模块中将RS232信号转换为TTL信号,从而能与DL-LN33 ZigBee无线通信模块进行通信。

数据通信层主要对通信链路进行操作,从通信链路向无线网络中各个终端节点模块发送命令,并接收采集的数据。系统软件数据通信层需要实现的主要功能如下:

①串口的初始化。应用程序启动时,进入连接子菜单。在连接窗口打开时,系统软件自动检测当前与终端模块物理连接的端口,用户也可在此处对串口进行属性设置(如波特率等),设置完成后点击“连接”即可建立与终端无线模块的通信。

②命令发送。初始化子菜单中,系统软件发送采集命令,并遍历所有网络中的节点以及锚节点来获取每个终端节点间的接收信号强度指示(received signal strength indication,RSSI)信号衰减数据。同时,将命令发送函数设定为每25 ms发送一次以获取某2个节点间的RSSI信号衰减数据,共采集100次,为无线网络定位提供原始数据。正式开始监测时,用户点击“开始监测”按键,系统软件即向各个终端节点分别发送一次开始监测指令,停止监测时同样遍历一次,即实现了对监测的控制功能。

③数据接收。数据接收根据工作状态分为RSSI数据接收和监测数据接收2种不同的模式,一般默认为RSSI接收模式。在RSSI数据接收模式下,串口注册的接收事件在接收到1个字节时即被触发,但接收线程会休眠5 min,5 min后所有节点的RSSI数据在缓冲区中接收完成,此时将所有采集数据一并从缓冲区中取出并传递给数据处理层进行处理,同时清空缓冲区。在系统开始监测后,RSSI接收模式会转变为监测数据接收模式,此时接收事件仍在接收到1个字节时触发,但休眠时间缩短为30 s,30 s后即开启数据处理线程,从缓冲区中实时取出所接收的采集数据进行实时处理。此时缓冲区数据结构为队列结构,设置为先进先出模式,以确保监测数据的不间断接收和实时处理。

(2)数据处理层。数据处理层功能分为2个模式,分别为初始化模式和监测模式。在初始化模式下,从数据通信层接收缓存中一次性取出所有数据进行数据包的分割、RSSI数据提取及最后RSSI数据的存储和写入。在监测模式下,每隔30 s对接收缓存中的数据进行处理、分析并清空。

(3)数据分析层。根据系统实时性的要求,在进行监测数据采集时需要实时对数据进行处理、分析,以便对监测对象和区域进行直观的展示。数据经过数据处理层传递到各个雷达对象后,系统软件对呼吸和心跳数据进行信号处理分析、频率提取等过程。

(4)用户界面显示层。.NET框架因提供了大量的类库使得方便快捷地进行Windows窗体设计成为可能,其可视化的界面设计方式大大提高了界面设计效率,且控件库内丰富的控件类型降低了设计的难度。基于以上技术,根据系统软件的实际需求,本课题组设计了直观、友好、操作简便的人机交互界面,如图3所示。

图3 分布式生物雷达系统软件用户界面

用户界面主要分为3个部分:目标参数显示区、控制区和菜单栏。其中目标参数显示区按照系统软件初始化时设定的当次监测所使用的终端节点个数n划分为n个显示区域。每个区域拥有2个显示窗格,分别显示呼吸和心跳信号;2个文本显示框显示经过处理分析后提取的信号频率数据。

3 系统软件的技术要点

3.1 雷达类的设计

面向对象编程是常用的编程规范,其对象可以是研究的具体事物,如数字、物体等,也可以是抽象的计划、事件。对象中包括对象的描述、对象的方法、对象的操作等内容,将这些内容封装在一起即称为对象。类是面向对象编程思想的基础实现,是一种对象的集合。终端节点是无线分布式生物雷达系统的基本组成部分。为了在系统软件中对各个终端节点进行更好的管理,在数据处理的同时体现系统软件良好的可扩展性,本课题组设计了终端节点类以实现所需功能。在添加终端节点时,系统软件即可自动生成配置系统参数时所需要的个数的对象实体,各个对象实体对对应的数据及方法可以同时操作,相互独立、互不干扰,大大地提升了系统软件的灵活性。终端节点类的结构如图4所示。

图4 终端节点类的结构图

雷达类的成员包括基本数据成员和基本方法。基本数据成员包括终端节点编号、该节点到其他节点以及锚节点的RSSI数据、该节点采集到的呼吸/心跳数据、用于快速傅里叶变换(fastFouriertransformation,FFT)处理和分析的呼吸/心跳队列、采样频率、经过分析后得出的体动频率等数据。基本方法包括:(1)构造函数。通过调用构造函数对雷达对象基本数据成员进行初始化,包括设置终端节点编号、初始化采集数中存储的数组成员和队列成员及调用滤波器实例化函数对所需要的滤波器进行实例化。(2)滤波器初始化方法。调用Math.Net类库对所需的滤波器进行初始化。(3)队列更新。包括数据队列、显示队列、FFT队列的数据更新。(4)FFT算法分析方法。包括N点FFT与频域累计FFT算法实现程序。(5)频率提取方法。从FFT队列中提取呼吸和心跳频率。

3.2 数据的接收及处理

无线网络通信模块将终端节点采集到的数据传送到系统软件进行处理,模块采用的ZigBee协议包含自动重传以及循环冗余校验码(cyclic redundancy check,CRC)校验,确保数据包传输准确,系统软件从串口读取数据并进行分析。C#语言的.NET环境的强大类库提供的串口类包含了很多针对串口的操作,在系统初始化时,实例化串口对象即可设置相应的串口参数并调用对应方法进行操作。数据处理及存储由串口类配合设计的数据处理类以及数据存储类进行。具体的类成员方法结构框图如图5所示。

图5 DataProcess类、DataSave类以及SerialPort类结构框图

串口类对象实例化时,触发初始化接收事件的字节数为1,同时挂载数据接收事件,当接收到的数据大于1个字节时,即触发该事件并开启新线程,执行数据处理类的Process方法对接收到的数据进行处理,处理时调用数据存储类下的对应方法进行数据文件的创建、写入等操作。处理线程启动后,根据设置的处理模式进入RSSI数据处理模式或呼吸、心跳数据处理模式。在RSSI数据处理模式下,串口类将所有RSSI数据一次性传入,根据RSSI数据包格式(如图6所示),将RSSI数据存入第k个雷达对象的RSSI数组的第m个队列中,即为k节点和m节点之间的RSSI数据。

图6 RSSI数据包格式及转义字符说明

在呼吸、心跳数据处理模式下,Process线程每间隔一定时间后被唤醒,唤醒后采用.NET框架自带的链表数据格式将串口缓冲区的数据进行提取处理,根据转义原则将数据包中的数据进行反转义,然后再提取所有包头、包尾位置,判定对应包头、包尾间数据组成的数据包长度是否正确。若该长度和数据包内信息长度不相等,则将此包丢弃,以确保接收到的数据为正确的数据包。根据数据包格式将呼吸、心跳数据分别提取出来。由于数据包将一个数据分成了2个字节进行传送,设该次采集数据为a、b、c、d,则相对应的呼吸数据r和心跳数据h的计算公式为

公式(1)、(2)将数据还原为实际采集到的电压值,即为雷达传感器所采集到的原始电压数据。一个数据包包含14组呼吸和心跳数据,在解析完一个数据包后,调用DataSave类的RadarSave方法将数据存入txt文件中。DataSave类初始化时开启2个文件流和写入流。文件流在硬盘中创建txt文件,命名为“雷达ID-Respiratory(Heartrate)-月-日-时-分”。写入流分别将对应的呼吸和心跳原始数据写入文件。至此完成了数据从串口接收处理并最终存储在文件中的过程。

3.3 数据分析处理

无线网络环境下数据的传输不可避免地会受到噪声的影响,所以需要对接收到的数据进行滤波处理。而抑制噪声的同时,为了获得呼吸、心跳频率则需要在频域对信号数据进行分析处理。

(1)信号预处理。张杨等[10]提出对非接触生命检测信号的滤波预处理方法,本文采用其算法对采集到的原始数据进行预处理。在MATLAB环境下使用FIRtool工具进行FIR线性滤波器的设计,采用120阶汉明窗0.1 Hz高通滤波器和120阶汉明窗0.5 Hz低通滤波器对呼吸信号进行滤波处理,采用120阶汉明窗0.5 Hz高通滤波器对心跳信号进行滤波处理。

在C#语言的.NET环境下进行数字信号处理与MATLAB环境下进行数字信号处理相比,其复杂程度增加,而在Math.Net类库的帮助下可以大大提高设计效率。Math.Net类库是一个强大的、开源的、C#语言的.NET环境下的数学运算类库,囊括了统计、计算、数字信号滤波、几何等运算功能,并且在持续地更新,为数学运算提供了强有力的辅助工具。同时,其使用方法也较为简单,在C#语言的.NET环境下配置Math.Net工具箱,使用时添加相对应的命名空间即可。Math.Net类库实现汉明窗滤波器的方法如下:

①根据MATLAB设计的滤波器属性采样频率Fs、截止频率以及阶数调用FirCoefficients方法计算滤波器系数;

②汉明窗长度设置为滤波器系数长度;

③计算采用的汉明窗FIR滤波器系数=汉明窗系数×滤波器系数;

④调用滤波器生成方法,根据最后生成的滤波器系数生成对应的滤波器。

(2)频域分析。倪安胜等[11]对基于FFT频域累积的非接触生命信号检测进行了研究,对可变点数FFT频域累积算法与固定点数FFT频域累积算法在非接触生命信号检测中的效果进行了分析,发现这2种分析方法对提高生命信号频谱信噪比有着很好的效果。本系统在C#语言的.NET环境下实现了这2种算法,并进行了频域分析。可变点数FFT频域累积算法如下:

其中,X(k)为经过算法处理后的频域信号序列,x(n)为原始信号序列,N为采样点个数。根据FFT自身的性能,在一定的采样频率条件下,增加序列长度就可以达到频率分量累积的效果,从而提高信噪比。可变点数FFT分析法可按照不同情况改变FFT的采样点数,从而达到更好的FFT分析效果。固定点数FFT频域累积算法如下:

其中,N=M×L,M为累积次数,L为单次FFT点数,xm(l)是长度为N的待处理序列。

Math.Net类库中Numeric.IntergralTransforms命名的空间下提供了大量FFT的相关函数供频域分析使用。本系统软件提供可变点数FFT和固定点数FFT 2种算法对经过预处理后的信号进行频域分析。FFTreal为Math.Net提供的实信号FFT方法可以方便地实现数字信号的FFT。可变点数FFT频域累积算法根据所选FFT点数的不同对信号序列进行FFT,固定点数FFT频域累积算法对信号按照L个FFT进行变换。经过FFT频域累积算法处理后的信号序列X(k)调用FrequencScale函数,按照40 Hz/s的采样频率取得频谱中能量最高点信号频率,即为最后提取出的呼吸、心跳频率数据。

3.4 实时波形/数据显示

实时波形/数据的显示依托于C#语言的.NET环境下强大的控件库实现。Chart控件是其提供的图表显示控件。系统初始化时根据设置的终端节点数量n,在界面上出现n×2个Chart控件,分别为各个终端节点的呼吸和心跳波形显示控件。Chart控件设置为一次显示1 250个数据,原始数据开始存入雷达类的数据队列成员中后,开启显示线程,显示线程开始将数据队列添加至Chart的显示队列,该线程间隔150 ms刷新一次显示队列,从而实现了系统监控数据的实时监测显示。当队列数据超过1 250个后,在刷新的同时清除前150个数据,即每次更新150个数据到显示波形中。同时,在数据量达到1 250个后,系统开始对数据进行频域分析处理来提取生命体征信息,实时波形旁的textlable控件间隔1 s即可显示实时提取的频率结果。

由于数据处理分析等工作需在另一个线程实时进行,而直接的跨线程UI调动十分容易引起线程间拥堵,出现UI线程卡死等情况,大大影响了系统的使用。常用的跨线程UI更新方法有委托事件、后台工作异步操作等,本系统采用UI线程的SynchronizationContext(线程间同步上下文协议)中Post/Send方法更新。在工作线程工作时,向主界面中的UI控件传递数据不会再直接更新UI控件的数据,而是工作线程通过UI线程的Post方法将数据以异步消息的形式发送到UI线程的消息队列,UI线程接收到消息后,通过调用SetTextSafePost方法来更新UI显示控件。实际上,UI线程接收到的数据已经不是直接的数据,而是一条用来调用委托的命令。实现显示功能的方法集中在Display类下,Display类的结构如图7所示。其中ChartDisplay和FFT_Display为波形数据更新和频率提取结果更新的主要方法,通过循环体对N个雷达节点模块对应的Chart和TextLable调用SetTextSafePost方法来传递数据。ChartControl等其余方法用来对具体的UI控件进行操作。

图7 Display类结构图

3.5 多线程处理

由于系统软件功能繁多,且多个功能需要同时进行操作,如串口通信、数据处理分析、实时波形显示等,故多线程的设计和管理也是系统软件设计的重要部分。本系统软件的多线程处理流程如图8所示。

图8 多线程处理流程图

主界面显示线程作为系统软件的核心线程,时刻保持在前台运行。系统软件初始化开始后,串口类自动开启后台线程进行串口通信相关操作(如数据的接收),数据自处理分析线程由串口接收事件开启,数据存储线程由串口数据处理线程开启。而波形数据显示线程由主界面开始按钮控制,该线程开启的同时开启监测定时器线程。

线程之间经常会出现多个线程共同对同一组数据进行操作的情况,这是典型的生产者、消费者问题。容易产生这类问题的原因之一就是线程重入,针对同一个数组同时开启多个后续线程进行处理,从而导致线程错乱、数据错乱。故本文采用线程锁的信号/等待消息通知机制对线程间通信唤醒进行处理:在线程间设置准入标志位,新线程在启动时检测标志位,若准入标志位为1,则线程开启并进行提取数据的操作。

4 实验结果

在实验室环境下设计实验进行系统软件性能的测试。试验区域为4m×4m的方形区域,分别在四周布置4个终端节点对目标进行探测,实验对象为25岁男性,静止坐姿,面向第一个终端节点平静呼吸。实验结果如图9所示,系统软件目标参数显示区良好地显示了各个终端节点采集到的实时呼吸波形和心跳信号波形,同时还实时显示了信号的频率信息。

图9 分布式生物雷达系统软件实验结果

5 结语

分布式生物雷达系统软件具有良好的可扩展性,不仅可以根据系统需求实时改变终端节点个数,进行对应的数据处理工作,还可以实时显示采集到的呼吸及心跳数据。同时,通过Math.Net类库实现了C#语言的.NET环境下的数字信号处理,相较于传统的添加MATLAB环境下的.dll文件的数字信号处理方法,降低了系统软件的设计及应用复杂度,提升了运行效率。在实际探测实践中,结合多种探测策略,分布式生物雷达系统软件可以从多角度同时对目标区域进行组网探测,提升了探测效率,改善了单个或单通道生物雷达系统的局限性,为生物雷达探测提供了新的探测角度及思路。

猜你喜欢

线程串口分布式
基于C#线程实验探究
浅谈AB PLC串口跟RFID传感器的通讯应用
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
分布式光伏热钱汹涌
分布式光伏:爆发还是徘徊
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式
基于DDS的分布式三维协同仿真研究