东北大学学报:自然科学版   2016, Vol. 37 Issue (2): 174-178   PDF (459 KB)    
基于鉴相器的手机瞬时心率监测软件设计
李晗, 赵海, 陈星池, 李大舟    
东北大学 计算机科学与工程学院, 辽宁 沈阳 110819
摘要:目前用手机摄像头监测心率的手机软件无法检测瞬时心率,因为手机上资源有限,而占用资源较少的主要检测方法差分阈值法需要根据一段时间的结果来设定阈值才能准确检测出心率,不适于瞬时心率的检测.针对以上问题提出了一种基于鉴相器的瞬时心率检测算法,通过手机摄像头检测出的脉搏波信号先与正弦参考信号相乘,再经过低通滤波器提取心率成分,根据相位的变化逐拍检测心率的变化.在Android智能手机上的实验结果表明,与ECG方法相比,计算精度能满足要求.与差分阈值法和滤波器组法相比,本文提出的方法能较快地检测出瞬时心率.
关键词脉搏波监测     摄像头     安卓智能手机     瞬时心率     鉴相器    
Software Design of Instantaneous Heart Rate Detection Based on Phase Demodulator for Smart Phones
LI Han, ZHAO Hai,CHEN Xing-chi,LI Da-zhou    
School of Computer Science & Engineering, Northeastern University, Shenyang 110819, China.
Corresponding author: LI Han, E-mail: lih_neu@163.com
Abstract: Rarely software in the smart phone market can detect instantaneous heart rate quickly and precisely, because a threshold calculated based on a period of measurement is always necessary when using a derivative based algorithm. A phase demodulator based method was proposed to improve the performance of Android software. The pulse wave detected by cell phone camera was multiplied by a sine wave reference signal and then processed by a low pass filter to extract phase. The phase could be used to calculate the frequency beat to beat. Experimental results on an Android smart phone indicated that there was no obvious difference of instantaneous heart rate between the new method and the ECG method. Compared with derivative based and filter bank based algorithms, less phone resources was needed for the new algorithm and instantaneous heart rate could be obtained more quickly.
Key words: pulse wave detect     camera     Android smart phone     instantaneous heart rate     phase demodulator    

随着智能手机的发展,利用手机来测量人体生理参数成为一种趋势.许多研究表明心率可以用来评估心脏功能[1],利用安卓智能手机设计一种心率检测软件可以帮助人们随时了解自己的心脏状况和运动强度.手机检测心率的原理是:让用户将其手指指尖覆盖手机摄像头,运用手机摄像头中的图像传感器拍摄用户手指指尖血液颜色变化的周期,根据颜色变化和心跳的关系计算心率.这个检测过程中,手机图像传感器拍摄出来的是一段由很多帧图像构成的视频,手机对每帧图像进行量化判断并计算平均灰度值,然后绘制灰度曲线,计算色彩变化的周期;每一个周期代表一次心跳.因为每次心跳导致一次血液到毛细血管的波形流动,当毛细血管充血时,血液含氧量增加,血液变成暗红色[2].血红蛋白对绿光有较好的吸收特性,所以绿光的光强信息被提取出来,因此只需借助手机拍摄手指的图像即可完成心率的检测.目前市面上的一些心率检测软件只能检测平均心率,即15s或1min内的心率平均值,无法检测瞬时心率.瞬时心率(每一心电周期的倒数值)在反映心搏快慢的同时可以反映心率是否均齐,是监护心律紊乱或进行加荷运动试验的病人所必需的指标[3].用手机检测瞬时心率需要实时根据1~2s内采样得到的帧图像计算出瞬时心率,因此对于算法的精简性有更高的要求.

基于差分阈值的特征点检测方法及心率计算方法都必须设定阈值,而阈值需根据一段时间的脉搏变化才能更准确地设定.使用以上方法测量瞬时心率一般需要根据5~10s的平均值设定阈值或者自适应测量阈值,这段决定阈值的时间可能会让应用失去一部分客户;而采用其他方法如滤波器组法[4]和小波法[5]在手机上计算瞬时心率时实时性不好.所以本文提出一种基于鉴相器的检测瞬时心率的方法并通过安卓手机实现.鉴相器一般作为锁相环中的组成部件,是一个相位比较装置,用来检测输入信号相位与反馈信号相位之间的相位差[6],从而反映输入信号的即时频率.

1 算法设计

手机摄像头以20帧/s的速度对采集到的图像取平均灰度值.连续的图像灰度值可以形成一条曲线,这条曲线可以反映脉搏的变化,与压力脉搏波和光电容积脉搏波类似.

鉴相器可以通过乘法器实现.假设输入信号的心跳频率成分为

信号随即被分为两路分别进入参考信号为正弦和余弦的乘法器.两路参考信号只有π/2的相位差别.正弦与余弦信号有相同的幅值与频率ωr.ωr为上一拍计算的心率.

假设余弦参考信号为


与参考信号相乘得到新的信号:

通过低通滤波器可以将式(3)中的高频成分滤掉,则鉴相器的输出为


其中Kd=(1/2)U1U2.脉搏波信号其他频率成分通过与参考信号相乘也同样发生了变化,但只要合理设置低通滤波器的截止频率,可以将这些频率成分滤掉.

为了消除幅值的影响,另一路鉴相器得到KdcosΔθ,结合式(4)可得到Δθθ可以用来计算当前的瞬时心率:

计算出的瞬时心率的频率也将作为下一周期参考信号的频率.脉搏波的处理过程如图 1所示.

图 1 鉴相器检测瞬时心率原理框图 Fig. 1 Block diagram of phase demodulator method for instantaneous heart rate detection
2 安卓手机实现 2.1 摄像头检测脉搏波原理

安卓手机客户端采用Eclipse(Helios Service Release 2)与Android-SDK开发.信号采集即通过手机摄像头录制手指的血液变化情况,测量时测试者需要将手指紧贴在手机摄像头上.参考信号的采样频率需要和摄像头采样频率保持一致,人的心率一般在1~2Hz之间,所以摄像头的采样频率采用20帧/s,可以满足要求.摄像头的帧采样频率增大会造成计算量的增加,本文只测量瞬时心率,过高的采样频率没有必要.因为血红蛋白对绿光有较好的吸收特性,所以绿光的光强信息被提取出来.

在一个安卓应用中,摄像头的Activity通过PreviewCallback接口控制.通过其中的方法public void onPreviewFrame(byte[] data,camera),获得实时的预览帧视频.这里获得的data数据是YUV420格式,需要将其转换成RGB格式,方便以后处理.取出每一帧每一个像素点的RGB值color[i][j]=bmp.getPixel(i,j),然后分别求每帧的RGB的平均值:colorR_avg,colorG_avg,colorB_avg,将每个avg画在坐标系里,其中colorG_avg最为明显,以其作为脉搏波的纵坐标.三角函数用java.lang.Math类中的相关函数实现.

2.2 低通滤波器的实现

数字滤波器有两种:无限脉冲响应数字滤波器(IIR)和有限脉冲响应数字滤波器(FIR),公式如下:


式中ak为滤波器系数.IIR滤波器是一个反馈系统;FIR滤波器需要更大的N值来得到一个尖锐的截止频率,所以在相同输出响应的情况下,FIR滤波器需要更长的运算时间,消耗更多的资源.本文算法采用FIR滤波器基于以下3点原因:①FIR滤波器有线性的相位响应,不会造成相位失真,而IIR的相位响应是非线性的;②在用有限数字位表达滤波器时IIR可能会出现严重的参数量化等问题,这对FIR滤波器的影响相对要小;③现在智能手机有足够的资源,可以忽略FIR相对较高的资源消耗.由于逐拍脉搏之间的差别一般不会大于0.4Hz[7],所以低通滤波器的截止频率设为0.5Hz.

因为低通滤波及相位的计算依赖于每一计算时间段的起始位置,所以为了使每一拍的计算时间段和采集脉搏波的起始位置相同,采用了如下的时间段分割算法:信号的分割时间为上一拍的心率周期,心率计算时间段的起始时间为上一周期计算时间段的结束时间加上补偿相位所对应的时间;补偿相位为上一周期计算时间段参考信号与测量信号的相位差. 通过对每一时间段进行相位补偿,分割时间段随着计算的进行不断调整,以使计算时间段和新的心率周期差值最小;所以对于测量的脉搏波在时间段分割上并不连续.

3 算法测试 3.1 算法概述

算法在三星Note2 7108上实现,分辨率为1280×720,主频1946MHz,内存2GB.差分阈值法[8, 9, 10]与滤波器组法[3, 4]是常用的心率计算方法,对这2种方法和本文方法在手机上实现的效率及准确性进行了分析比较.图 2是信号采集流程.

图 2 信号采集框图 Fig. 2 Block diagram of the signal acquisition
3.1.1 差分阈值法

差分阈值法的关键在于合理地设定阈值,要求先采集一段时间的信号来设定阈值,再开始瞬时心率的采集.差分阈值法是利用容积脉搏波形态上具有陡峭下降沿的特点,采用差分运算将其突出出来.设S是经过滤波去噪后的光电容积脉搏波信号,S1是对S的一次差分值,S2是对S1进行阈值处理后的值,S3是对S2进行阈值处理后的值,H为阈值,计算公式如下:

S2由以下公式得出:


其中H=0.选择H=0是为了消除上升沿的数据,仅保留下降沿,将所求目标的所在范围尽量缩小.为了消除重搏波对心率计算造成的干扰,可以进行二次差分,也需要设定阈值,则S3由以下公式得出


其中H的取值视情况而定,通常选取H=.N为待采样点的个数.

3.1.2 滤波器组法

滤波器组法是在频域提取心率的一种方法.通过几组等带宽的带通滤波器将原始信号分割成不同的频率成分,能量最高的即为当时的瞬时心率.实验的具体参数如下:滤波器组范围0.5~4Hz,滤波器组频率递增值为0.05Hz.每隔1s计算1次瞬时心率值.

3.2 实验结果 3.2.1 平均延时

为了对算法进行测试,对10名志愿者(全部为男性,年龄22~30岁,标准差 3岁),采用手机和三导联ECG同时测试瞬时心率.志愿者在测量前需要做1min踏跳运动,目的是使测量过程中心率发生明显变化.右手用手机摄像头测试的同时,双手及右脚通过三导联心电极夹测试.手机测量的瞬时心率记录在手机中.心电极夹得到的模拟信号通过atm128单片机传送到上位机,进而分析出瞬时心率.连续测量2min.平均延时被定义为,采集时间内心电信号R峰产生时间与相应手机完成瞬时心率计算时间的差值的平均值,通过上位机的分析得出.图 3反映了三种算法在不同帧采样频率下的每拍心跳平均延时.

图 3 三种算法的平均延时时间 Fig. 3 Average delay of the three algorithms

从图中可以看到三种算法的延时都随着时间逐渐增大,较高的帧采样频率会造成更大的延时.差分阈值法因为需要一段时间训练以产生阈值,所以有一段时间的固定延时,导致每一拍心率计算结果都会滞后.鉴相器法与滤波器组法在测试开始阶段都可以即时地完成瞬时心率的测量,但滤波器组法由于需要进行傅里叶变换及能量谱的选择而消耗大量系统资源,延时时间逐渐增大;鉴相器法的延时虽然也有逐渐增大的趋势,但是在接近2min时也可以保持在1s以内.

较高的分辨率会更准确地表示血液当前的浓度,较高的帧频率会更好地显示血液的变化情况,但更细致的脉搏波描述会导致更高的系统资源消耗.分辨率由手机摄像头决定,而帧采样频率可以通过软件改变.上述实验在分辨率为1280×720,帧采样频率为20帧/s条件下进行.实验发现,采用更低的帧采样频率(5,10,15帧/s),三种方法的平均延时会降低,滤波器组法也可以实现在测试60s内的平均延时保持在可以接受的范围内.更高的帧频率会导致三种方法平均延时增大,平均延时最小的鉴相器法也无法在60s内实现心率的即时计算.所以为了区分算法的效率,帧采样频率选择为20帧/s.

3.2.2 准确性

采用Bland-Altman 比值法对鉴相器法与心电极法进行比对.Bland-Altman方法的基本思想是计算出两种测量结果的一致性界限,并用图形法直观地反映这个一致性界限[11].鉴相器法与三导联心电极法测量的Bland-Altman图如图 4所示;XY分别表示鉴相器法与三导联心电极法每次测得的瞬时心率.图中上下两条水平实线代表 95%一致性界限的上下限.从图中可以看到本文提出的方法与样本实际的瞬时心率具有较好的一致性.Pearson相关系数为0.94.归一化均方根为2.25%.

图 4 鉴相器法与心电极法测量瞬时心率的Bland-Altman图 Fig. 4 Bland-Altman plot of phase demodulator and ECG for instantaneous heart rate measurement
3.2.3 讨 论

用360手机卫士测试手机软件占用内存情况,可以看到鉴相器法占用的内存为32.6MB,而差分阈值法占用的内存为12.5MB,滤波器组法占用的内存为68.5MB.虽然三种方法都需要对信号进行分割,但是差分阈值法在一个分割时间段里只相当于做了减法运算,计算的代价较小.鉴相器法虽然每一拍心率的计算基于前一拍心率计算的结果,但仍然需要全部采集点与参考信号相乘;滤波器组法由于傅里叶变换而消耗比较多的内存.三种方法的性能如表 1,其中N为待采样点的个数.

表 1 测量方法效率比较 Table 1 Efficiency comparison of different methods

基于鉴相器的测量方法可以准确测量出瞬时心率,与心电参考信号比较可得到归一后的均方根差为2.25%,稍逊于滤波器组法的1.8%,但好于差分阈值法的3.4%.鉴相器法如果不进行相位补偿,瞬时心率测量的准确率将大幅下降.差分阈值法在测量瞬时心率时需要将计算窗口与人的脉动保持基本一致,而窗口很小的代价是无法准确分析出阈值从而导致错误的心率计算.三种算法的效果差异会因不同性能的嵌入式设备而不同,对系统资源、实时性及心率准确性的要求都将成为算法选择的依据.用手机摄像头测量瞬时心率需要充分考虑算法的效率,以适应嵌入式系统上的有限资源.

本文提出的算法及实验具有一定局限性:①只在一种手机及平台下进行了实验,平台改变后算法的性能(比如延时)可能会发生改变,还需要进一步研究;②理论上算法可以检测出心率不齐等心脏问题,但并没有进行临床实验;③所有测试都是在静止状态下进行的,以减小基线漂移和噪声等的影响.去除噪声需要消耗系统资源,加大了瞬时心率计算的难度.

4 结 论

本文设计的基于鉴相器的瞬时心率计算方法,逐拍地测量心率,避免了差分阈值等方法根据经验值或是自适应寻找阈值的过程,缩短了首次测量瞬时心率的时间.在三星Note2上的实验结果表明,该方法可以有效测量瞬时心率,误差及延时可以满足要求,是一种在手机等嵌入式设备上可行的瞬时心率检测算法.

参考文献
[1] Liu S H,Chang K M,Fu T H.Heart rate extraction from photoplethysmogram on fuzzy logic discriminator[J].Engineering Applications of Artificial Intelligence,2010,23(6):968-977.(1)
[2] Wei L,Tian Y H,Wang Y W,et al.Automatic Webcam-based human heart rate measurements using Laplacian eigenmap[C]//11th Asian Conference on Computer Vision.Berlin:Springer-Verlag,2012:281-292.(1)
[3] Yu Y P.Heart rate estimation from facial images using filter bank[C]//2014 6th International Symposium on Communications,Control and Signal Processing.San Bernardino,CA:International Academy of Computer Technology,2014:69-72.(2)
[4] Keselbrener L,Keselbrener M,Akselrod S.Nonlinear high pass filter for R-wave detection in ECG signal[J].Medical Engineering & Physics,1997,30(19):481-484.(2)
[5] Szi W C, Hsiao C C, Chanb H L.A real-time QRS detection method based on moving-averaging incorporating with wavelet denoising[J].Computer Methods and Programs in Biomedicine,2006,82(3):187-195.(1)
[6] Deng M L,Yi X W,Yu Z M,et al.Constant envelope modulation enabled fiber nonlinearity mitigation for CO-OFDM transmissions[C]// 2013 12th International Conference on Optical Communications and Networks.New York:IEEE,2013:1-4.(1)
[7] Mika P,Tarvainena J P,Jukka A,et al.HRV-heart rate variability analysis software[J].Computer Methods and Programs in Biomedicine,2014,113(1):210-220.(1)
[8] Ahlstrom M L,Tompkins W J.Automated high-speed analysis of holter tapes with microcomputers[J].Transactions on Biomedical Engineering,1983,30(10):651-657.(1)
[9] Fraden J,Neumann M R.QRS wave detection[J].Medical & Biological Engineering & Computing,1980,18(1):125-132.(1)
[10] Kohler B,Hennig C,Orglmeister R.The principles of software QRS detection[J].IEEE Engineering in Medicine and Biology Magazine,2002,21(1):42-57.(1)
[11] Dewittel K,Fierensl C,Stöckl D,et al.Application of the Bland-Altman plot for interpretation of method—comparison studies:a critical investigation of its practice[J].Clinical Chemistry,2002,48(5):799-801.(1)