基于压电薄膜传感器的心冲击信号检测与实时心率估计
2022-11-24阮志毅张云龙陈建福姚振杨李家锐
阮志毅 张云龙 陈建福 姚振杨 李家锐
奥佳华智能健康科技集团股份有限公司福建省智能健康按摩器具重点实验室,福建厦门 361015
0 前言
根据美国国立医学图书馆编制的《医学主题词表》,心冲击描记术(Ballistocardiography)可概述为对由心脏产生的弹道力(Ballistic forces)的一种度量技术[1],通常称这种度量为心冲击信号(Ballistocardiogram,BCG)。它是一种由心脏搏动和大动脉血液循环引起人体对外压力变化而产生的微弱振动信号[2-3]。文献[2]通过心冲击信号和心电信号(Electrocardiogram,ECG)的对照实验,说明BCG和ECG在心率的计算方面无显著差异,并且认为BCG可作为一种准确度很高的心率监测方法。文献[3]则通过分析对照实验,认为BCG和ECG的心动周期间隔基本一致。再基于卷积神经网络,由BCG重构出新信号,并与ECG对比后,发现由BCG重构的新信号能够有效反映ECG的特征。压电薄膜(Electromechanical film,EMFi)是一种受到外力作用会产生压电效应的塑料薄膜,且兼具有柔性、轻质、高韧性等良好特性。因此,对于心冲击信号的采集,一般情况下都会优先考虑使用压电薄膜传感器。此外,相较于目前研究、应用更为广泛的心电信号,这种仅使用了压电薄膜传感器即可采集到的心冲击信号,还不要求传感器直接接触于人体皮肤,也无需穿戴或捆绑任何测量设备。
本文将在无接触式环境下使用压电薄膜传感器采集包括BCG在内的相关数据,并从中检测心冲击信号,估计实时心率,以在一定程度上实现对心脏健康的无感监护。
1 数据采集与预处理
本文使用Espressif ESP32开发板,以100 Hz的频率通过12位的模拟数字转换器(Analog-to-Digital Converter)采集压电薄膜传感器的电信号数据。ESP32开发板可通过WiFi模块,再经由消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)客户端以一定频率发布传感器即时数据包,如每秒将上一次发布至今缓存中即时的100个数据点打包发布一次。
再在个人电脑或者服务器上,通过MQTT客户端订阅ESP32开发板发布的话题,以时间窗的方式滑动处理数据,如使用5秒的时间窗,每秒滑动处理一次。
除了心冲击信号外,由于所采集到的数据可能还包括低频的呼吸、较低频的体动、高频的交流市电(50 Hz左右)、其他高低频噪声等的波动信号,因此,本文使用数字带通滤波器(Digital bandpass filter)进行预处理,以在时间窗内获取包含BCG在内的振动波形,如图1所示。
2 心冲击信号检测
很早之前,THOMPSON W等人[4]就根据不同阶段将BCG划分成弹道F、G、H、I、J、K、L、M、N波(Ballistic wave),并指出F波在心率较快时可能被之前信号复合掉,弹道L和M波也可能会消失在波形上。从图1可见,它共有6个完整的BCG,其中左起第一个BCG如标注的有G到N的8个弹道波,而第5个BCG就缺失了L和M波。
据此,本文使用6个弹道波(仍由G、H、I、J、K、L表示)的模板检测BCG:先针对振动波形提取出波峰(极大值)、波谷(极小值);再按照紧接着的“谷-峰-谷-峰-谷-峰”组成一个个检测模板;基于模板匹配方法,从中检测出心冲击信号。
根据检测结果,标记出上述时间窗内BCG的弹道J波(称之为J峰),如图2所示。
3 实时心率估计
如图2所示,对于心冲击信号,将相邻2个J峰的时间间隔简称为“JJ间隔(J-J interval)”,用T表示心跳周期(单位为秒),那么,实时心率hr的估计公式为:
即每分钟的心跳次数(beats per minute,bpm)。静息心率通常介于60 bpm到100 bpm之间[5]。
由于连续心跳的时间间隔存在着振荡现象,即心率变异性(Heart rate variability),为避免其估计值在短时间内出现过于急剧的波动,可取时间窗内所有JJ间隔的加权平均值,再估计实时心率,如:
其中,αi为非负的权重值,且满足α1+……+αn=1,一般取均等值或者时间越近,取值越大;也可取时间窗内所有JJ间隔,先逐一估计出实时心率,再计算加权平均值,如:
但是,在心冲击信号的检测中,或多或少都可能存在着J峰的错检和漏检情况,其中错检为检测到了错误的“J峰”(可视为假负例,即False negative),漏检为未能检测到正确的J峰(可视为假正例,即False positive)[2]。因此,在估计实时心率时,并不能直接对上述所检测到的J峰(即心冲击信号)序列做差分运算,获取JJ间隔。
若是存在漏检,则对应的JJ间隔与其他真正的JJ间隔相比,必然存在显著的倍数关系;而对于错检,其对应的JJ间隔、J峰幅值也都会与其他的有着显著的差异性。因此,本文还借助于JJ间隔和J峰幅值的特性,协同识别心冲击信号检测时的错检和漏检情况,在尽可能地去除错检的“J峰”与增补漏检的J峰之后,才对修正了的J峰序列做差分运算,进而,根据所获取的JJ间隔对实时心率进行估计。
4 对照实验测试
本文使用Python对上述数据采集、心冲击信号检测、实时心率估计等内容进行编程实现,并据此进行对照实验,以测试本文所研究方法的检测,估计准确度。
实验所对照的实时心率值(以下称为对照值)是由鱼跃医疗的指夹式脉搏血氧仪(YUWELL YX306)测得的,其采用的光电容积描记术(Photoplethysmography)是一种应用于脉搏/心率监测和血氧饱和度测量的光学技术。
实验随机选取了20个成年受测人员。测试时,将脉搏血氧仪夹于受测者的食指,并让受测者无感、非接触式地坐在压电薄膜传感器上,通过本文所研究的方法估计出实时心率值(以下称为估计值)。对于估计值与对照值,每10秒同步各记录1个实时结果,每个受测者各记录10个结果。
在对这20个受测人员进行测试后,对应的实时心率估计值与对照值分别如表1所示。
表1 20个受测人员实时心率估计值与对照值的结果对比
5 测试结果分析
从表1的结果数据可见,估计值与对照值之间基本上都很接近,这一点也可以从统计量上得到:表中总体的均方根误差(Root mean square error,RMSE)为1.52,各受测人员组内(表1中的一列)均方根误差的最小值为0.71,而最大值也仅为2.28。其中,误差为所记录的估计值与对照值之间的偏差值(用Δht表示);均方误差为统计范围内所有误差的平方和与其总个数的比值,公式为:
所用的“均方根误差”统计量为均方误差的平方根,即RMSE=MSE1/2。均方根误差越小,则表明估计值与对照值越接近。
进一步观察不难发现,估计值与对照值之间较大偏差主要来自于心率波动时。其一,可能对照所使用的指夹式脉搏血氧仪的计算时间窗大小、心率估计公式等与本文的有所差异。具体地:计算时间窗越大则心率的时序结果越平滑,尤其是在心率较大波动时,势必会因为时间窗的大小不同而引起实时估计结果的差异化;心率值越大时,由心跳周期的同等波动所引起的心率波动越大。因此,使用不同的心率估计公式(如上所述的,先计算时间窗内平均心跳周期再估计心率,或者先估计时间窗内每个心跳周期对应的心率再计算平均值)也会造成实时估计结果存在一定差异性。其二,本文是将ESP32所采集的数据通过WiFi发布出来,再在个人电脑或者服务器上进行心率的估计处理,尽管记录之时是实时的结果,但极可能由于网络等原因产生一定的时间偏差,而这在心率波动较大时也会更为突显。
6 结论与展望
综上,本文所研究的方法还是可以较为灵敏地对心率的波动及振荡进行恰当跟踪的,从而在一定程度上实现对心脏健康的无感监护。
下一步工作,将本文的心率估计方法编写成嵌入式程序,在ESP32开发板上直接对所采集的数据进行心率的估计处理。同时,将针对实时心率的估计结果,尝试使用卡尔曼滤波器(Kalman filter)做一次滤波处理,并且继续基于压电薄膜传感器估计实时呼吸率及其卧式检测,进一步实现对心肺健康、睡眠质量的无感监护。