基于FPGA的非接触式人体心率测量系统
2019-11-16吴涵陈龙陈子为吴正正
文/吴涵 陈龙 陈子为 吴正正
人体健康体征监测是当前智能硬件的研发趋势之一。传统的心率检测需要直接与被测者皮肤进行接触,对被测者束缚性较大,长时间测试易引起被测者的不舒适感,在这种情况下,研究非接触式的体征监测方法极具吸引力。人的心脏每跳动一次,会有很多的血液经过你的面部。由于心跳引起的血液体积的变化使得人体皮肤对反射光颜色发生变化,并且反射光颜色变化的幅度与光源的强度成正比。血液在量上的增加会导致有更多的光被吸收,因而面部反射的光线也随之减少。通过摄像头捕捉到这些变化,并进行一定的处理后,就能够计算出心率值。
1 系统构成
本心率测量系统由心率测量硬件装置与手机APP组成。其中心率测量硬件装置由OV7725摄像头模块、EGO1-FPGA开发板、蓝牙模块、OLED显示模块共同组成。其系统构成框图如图1所示。在摄像头采集模式下,由摄像头模块进行实时的图像信息采集,并将信息传输到FPGA进行数据处理,其后将采集到的图像数据以一帧为单位存放在FPGA片内存储器中,同时在FPGA中处理数据,经过心率检测算法处理后提取有效心率信息,并通过手机APP及OLED模块显示当前心率值。VGA显示模块仅用于系统调试使用,调试时可以将摄像头捕捉到的实时图像通过VGA接口传输给显示器。
2 算法设计
在基于视频的心率(HR)测量方法中,具有红色(R)、绿色(G)和蓝色(B)成分的RGB颜色模型都在实验中尝试。结果表明,与R和B信号相比,G信号对HR测量最有效。
因此我们采用G通道数据作为心率计算的数据来源,摄像头采集32秒的数据,做FFT变换,找到有效频谱内的幅值最高频点,随后通过一个5秒的时域滤波(取5秒内的中值),输出结果。其中心率计算模块又分为以下几个子模块:G值数据缓存模块、FFT计算模块、Z值计算模块、Z值时域滤波模块。算法流程如图2所示。
2.1 G值数据缓存
根据G通道信号计算平均值,并将其保存在最近数据量中。由于G值数据采样频率较低,只有4Hz,而FFT工作时钟需要尽可能高,所以为了数据的跨时钟域处理,采用数据缓存模块,一秒更新一次缓存里的数据,并采用FIFO的思想,实现了数据窗口的滚动。
2.2 FFT变换与Z值计算
在观察时间中,我们对G信号数据应用快速傅立叶变换(FFT)。FFT变换采用VIVADO自带的IP核,计算点数为128点,工作时钟100MHz。
然后将FFT的结果按照(1)式计算Z值:
其中X为频谱幅值,m为X均值,σ为X的标准方差。
考虑到人的心率一般在40-120 BPM范围内,我们将(1)式中X的频带范围作了窗口截取,使得截取的频率范围在0.67Hz和2.0Hz之间。只将该频率区间内的傅立叶谱用于Z值计算。
2.3 Z值时域滤波
找出每次计算得到的Z值数组中Z最高值的两个谱峰所对应的频点,然后按照如下规则确定最终的心率值:
(1)具有最大z值的频谱(最高峰)和具有第二大z值的频谱(次高峰)如相邻,则我们使用这两个峰值对应的心率的中间值来计算心率。例如最高峰对应60BPM,次高峰对应63BPM,则取其间的中间值61BPM、62BPM。
(2)从中间值中再选择靠近z值较大(最高峰)的一个,例如对于中间值61 BPM和62 BPM,如果61BPM对应的Z值更靠近最高峰,我们选择61 BPM作为最终结果。
图1:系统构成框图
图2:算法流程图
图3:APP界面设计
图4:“搜索蓝牙”模块设计
图5:“连接蓝牙”模块设计
(3)如果两个最突出的频谱(最高峰与次高峰)不是彼此相邻的,我们只使用具有最大Z值(最高峰)的单谱对应的心率。
3 APP设计
图6:“开始测量”模块设计
图7:系统测试图
图8:系统测试结果图
采用AppInventor开发平台设计手机APP。界面部分通过一定的素材进行搭建。APP中设计蓝牙搜索、连接、测量等按键,APP界面如图3所示。AppInventor采用图形化编程,拼接所需模块,即可完成APP程序设计。
3.1 “搜算蓝牙”模块设计
设计一列表框ListPicker1,用于记录手机匹配过的蓝牙设备,如图4所示。本设计采用的蓝牙模块为HC-06。
3.2 “连接蓝牙”模块设计
点击“连接蓝牙”键后,手机将与列表选择的设备连接,若设备未打开,则显示告警信息。如果在之前手机已经与设备连接,则点击按键后断开该连接。确定连接后,界面更新当前时间信息,等待测量的开始。
3.3 “开始测量”模块设计
点击“开始测量”后,手机APP通过连接在FPGA上的蓝牙模块HC-06向FPGA发送启动测量的指令,等待一个测量周期后,手机APP再接收FPGA返送回来的心率测量结果值,并显示于手机屏幕上。
4 系统测试
将心率测量硬件装置安装在原子镜(单向透光镜)的背后,并通过FPGA上的VGA接口与电脑显示器相连。摄像头透过镜子采集信息,将图像显示在显示器上。心率测量结果通过OLED模块显示在原子镜上,并同步显示在手机APP上。系统上电测试后结果如图7所示。
我们找来10位志愿者(5男5女)参与到我们的测试中,将本设计测得的心率和小米手环测得的数据进行对比。测试结果如图8所示。
通过测试发现本系统能清晰的获取图像,成像稳定,质量高。在光线充足时,测量误差在±5%以内,准确率可达90%以上;在弱光条件下准确率也达75%以上。而且经观察对于皮肤较白的参与者测试的结果更加符合手环给出的真实值。
5 结论
本系统以FPGA为平台,采用OV7725摄像头采集人脸图像,采用HC-06蓝牙模块进行无线收发,采用OLED模块及手机APP进行控制与结果显示,并创新性的首次将心率测量与原子镜相结合,实现了人体心率的非接触式实时连续监测。该系统工作稳定可靠,具备很强的实用性与工程应用价值。
本设计在智能家居领域具有很强的应用价值。用户在照镜子时,系统同时开始测试工作,测试的结果能直接显示在镜子上,同时也能被配套的APP接收,用户可在手机上看到自己的心率测试结果,并能查阅历史数据。因此,本系统可搭载在更多的智能家居产品中。