一种多人心跳的非接触式检测方法与流程

文档序号:15677129发布日期:2018-10-16 20:10阅读:3589来源:国知局
一种多人心跳的非接触式检测方法与流程

本发明属于机器智能化技术领域,特别涉及一种基于gpu的多人心跳检测技术。



背景技术:

心率,指人心脏跳动的频率,通常采用每分钟心跳的次数作为单位。心跳与人的健康状况和情绪状态密切相关。据报道,心跳状况与多种疾病,如心血管疾病及心脏疾病等密切相关,心率异常是多种心血管病的高危因素,通过测量它,可预知不少心血管病的发生,这样就能尽早开展诊治,以获得更好的疗效。人的兴奋、激动、吸烟、饮酒、喝浓茶或咖啡后,或见于感染、发热、休克、贫血、缺氧、甲亢、心力衰竭等病理状态下,心率都会发生相应变化。因而及时检测并或者心跳的速率及其变化趋势,在医学及对人的情绪行为判断方面具有重要意义。

检测心跳主要有两类方法,接触式和非接触式的。采用听诊器等方法测心跳,属于接触式的方法,特点是测试比较准确,但要求检测心跳时必须接触被测人员的身体,因而限制比较多。非接触式的检测方法,则要求在检测心跳时必须与被测人员的身体保持一定距离,通常基于人体皮肤表面对微波、红外线、可见光的反射频谱进行分析,采用信号分析的方法获取心率估计值。当心跳检测涉及多人时,需要对多个人并行地收集相应的心率样本数据,进行预处理,以便进一步进行计算,但现有预处理方法基于cpu并发性能较差。



技术实现要素:

为解决现有技术中心跳检测方法的预处理过程较慢问题,本发明提出一种多人心跳的非接触式检测方法,通过在gpu缓存里构造并发队列,能支持上百人的心跳检测过程的并发预处理。

本发明采用的技术方案:一种多人心跳的非接触式检测方法,包括:

s1、构建一个支持m个并发队列的gpu缓存;

s2、在gpu里为每一个并发队列分配一个线程;

s3、每一个gpu线程内持续采样同一检测对象的同一部位裸露皮肤的色度变化值,并将采样值加入并发队列;

s4、在gpu线程内,计算对应并发队列的中采样值的最大值与最小值,若根据最大值与最小值得到的值范围超出设定值范围,则执行步骤s5,否则执行步骤s6;

s5、从并发队列的起始位置逐一删除采样值,重新计算值范围,直到值范围小于或等于设定门限范围;

s6、按照时间等间隔对并发队列中的采样值数据进行插值处理,并进行汉明处理,完成与处理;

s7、根据步骤s6的预处理结果计算每个检测对象的心率。

进一步地,步骤s1所述每个并发队列为一个循环数组,包含三个域:id、start、n;id为人的标识,由cpu传入;n是并发队列内采样数据的个数;start为并发队列中第一个采样数据的位置。

进一步地,当步骤s3所述采样个数少于n时,则继续缓存,直至采样个数超过n。

更进一步地,当采样个数超过n时,逐一删除并发队列start位置处的采样值,然后将新的采样数据加入并发队列。

进一步地,步骤s6所述插值处理后,该并发队列中数据的总数为n。

进一步地,步骤s7具体包括以下分步骤:

s71、根据与处理结果,按并发队列进行一维dft变换,从而计算每个心率对应的频谱及其增益;

s72、将步骤s71的计算结果中的频谱进行过滤,剩下满足条件的频谱;通过对比满足条件频谱所对应的增益,找出最大增益值对应的频谱;

s73、根据步骤s72找出的频谱得到对应检测对象的估计心率值。

进一步地,步骤s72所述满足条件的频谱具体为在设定频谱范围内的频谱。

本发明的有益效果:一种多人心跳的非接触式检测方法,通过在gpu缓冲里构造并发队列,基于非接触式采集的皮肤反射信号,高效、实时地计算心率值,本发明的方法能支持上百人的心跳检测过程的并发预处理,由于减少了cpu的负担,能够高效、实时地计算多人心率值,可工作于集成了gpu的计算机或手机等设备上,为高效、实时地计算人群心率值创造条件。

附图说明

图1为本发明实施例提供的方案流程图。

具体实施方式

为便于本领域技术人员理解本发明的技术内容,下面结合附图对本发明内容进一步阐释。

为了克服现有技术中心跳检测方法的预处理过程较慢缺点,本法提出了基于gpu的一种多人心跳的非接触式检测方法,主要内容如下:

首先,基于gpu的裸露皮肤的色度变化值预处理。持续采样同一人的同一部位裸露皮肤的色度变化值,并按每n个采样值为一组进行分组,n为整数。若采样个数少于n,则持续缓存,直到采样个数超过n。每人对应一个线程,在每个线程里对采样后的数据按照时间等间隔对组内的数据进行插值处理。插值处理后,采样个数不变,然后进行汉明处理,完成预处理过程。

其次,在gpu中对每个并发队列里的采样数据进行一维dft变换。基于上一步的预处理结果,分别计算每个频率对应的频谱f(k),及其增益g(k),如下:

g(k)=fx×fx+fy×fy

再者,基于gpu频谱增益分析,估算心率值并做过滤处理。基于上一步的dft计算结果,将心率合理频谱范围外的频率值过滤掉,然后比较合理频谱范围内的各个频率分量的增益。设心率范围为[cl=40次/分钟,ch=160次/分钟],则心率范围对应的频谱下标范围为[il,ih]。

然后,对频谱下标范围内的增益值进行对比,找到增益值最大的频率下标imax,则估计的心率值为b。

最后,当只有一个队列时,直接输出b,作为心跳检测结果;否则当多于一个并发队列时,则在cpu中将各组的心率计算结果,再进一步采用取平均或kalman过滤,输出最终计算值,作为心跳检测结果。

如图1所示,本发明的一种多人心跳检测方法,包括:

s1、构建一个支持m个并发队列的gpu缓存;每个并发队列是一个循环数组,包含三个域:id、start、size。id对应人的标识,由cpu传入。size是队列内采样数据的个数。队列的最大长度设为queuesize,可配置。start对应队列中第一个采样数据的位置,(start+size-1)%queuesize对应队列中最后一个采样数据的位置。

s2、在gpu里为每一个并发队列分配一个线程,共m个线程;

s3、每一个gpu线程内持续采样同一检测对象的同一部位裸露皮肤的色度变化值,并将采样值加入并发队列;具体过程为:

基于gpu的裸露皮肤的色度变化值预处理。持续采样同一人的同一部位裸露皮肤的色度变化值,并按每n个采样值为一组进行分组(n为整数,本实施例中取值为64,即一个并发队列中可缓存64个采样数据)。若采样个数少于64,则持续缓存,直到采样个数超过64,则删除start位置处的采样数据,然后将新的采样数据加入并发队列;

裸露皮肤不限于面部,只要是同一块皮肤即可。将分组处理后的数据,提交给gpu进行计算。

s4、在gpu线程内,计算对应并发队列的中采样值的最大值与最小值,若根据最大值与最小值得到的值范围超出设定值范围spikelimit,则执行步骤s5,否则执行步骤s6;这一步骤主要用于过滤掉跳动比较大的采样值,spikelimit是一个可配置参数,默认设置为30,在实际应用中根据需要进行取值。

s5、从并发队列的起始位置逐一删除采样值,重新计算值范围,直到值范围小于或等于设定门限spikelimit;若是值范围超出spikelimit,则从并发队列的起始位置开始每次删除一个采样数据,重新计算值范围,直到值范围小于或等于设定门限spikelimit。

s6、按照时间等间隔对并发队列中的采样值数据进行插值处理,插值处理后采样个数不变,还是64个,并进行汉明处理,完成与处理;

s7、根据步骤s6的预处理结果计算每个检测对象的心率;包括以下分步骤:

s71、gpu中按队列进行一维dft变换,方法是基于上一步的预处理结果,分别计算每个频率对应的频谱f(k),及其增益g(k),如下:

g(k)=fx×fx+fy×fy,n为并发队列中的采样数据的个数,fx、fy分别为f(k)的实部和虚部,i为复数单位。

s72、gpu中,基于上一步的dft计算结果,将心率合理频谱范围外的频率值过滤掉,然后比较合理频谱范围内的各个频率分量的增益。本实施例中合理频谱范围为[cl=40次/分钟,ch=160次/分钟],则心率范围对应的频谱下标范围为[il,ih]。

设n=64,fps=30,则频谱下标范围为[il=2,ih=6]。

然后对频谱下标范围内的增益值进行对比,找到增益值最大的频率下标imax,则估计的心率值为b。

比如,假设imax=3,则b≈85次/分钟。

s73、将不做s72估计的心率值作为每个人的心率检测结果。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1