阮志毅 張云龍 陳建福 姚振楊 李家銳
奧佳華智能健康科技集團股份有限公司福建省智能健康按摩器具重點實驗室,福建廈門 361015
根據美國國立醫學圖書館編制的《醫學主題詞表》,心沖擊描記術(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在內的相關數據,并從中檢測心沖擊信號,估計實時心率,以在一定程度上實現對心臟健康的無感監護。
本文使用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所示。
很早之前,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所示。
如圖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間隔對實時心率進行估計。
本文使用Python對上述數據采集、心沖擊信號檢測、實時心率估計等內容進行編程實現,并據此進行對照實驗,以測試本文所研究方法的檢測,估計準確度。
實驗所對照的實時心率值(以下稱為對照值)是由魚躍醫療的指夾式脈搏血氧儀(YUWELL YX306)測得的,其采用的光電容積描記術(Photoplethysmography)是一種應用于脈搏/心率監測和血氧飽和度測量的光學技術。
實驗隨機選取了20個成年受測人員。測試時,將脈搏血氧儀夾于受測者的食指,并讓受測者無感、非接觸式地坐在壓電薄膜傳感器上,通過本文所研究的方法估計出實時心率值(以下稱為估計值)。對于估計值與對照值,每10秒同步各記錄1個實時結果,每個受測者各記錄10個結果。
在對這20個受測人員進行測試后,對應的實時心率估計值與對照值分別如表1所示。

表1 20個受測人員實時心率估計值與對照值的結果對比
從表1的結果數據可見,估計值與對照值之間基本上都很接近,這一點也可以從統計量上得到:表中總體的均方根誤差(Root mean square error,RMSE)為1.52,各受測人員組內(表1中的一列)均方根誤差的最小值為0.71,而最大值也僅為2.28。其中,誤差為所記錄的估計值與對照值之間的偏差值(用Δht表示);均方誤差為統計范圍內所有誤差的平方和與其總個數的比值,公式為:

所用的“均方根誤差”統計量為均方誤差的平方根,即RMSE=MSE1/2。均方根誤差越小,則表明估計值與對照值越接近。
進一步觀察不難發現,估計值與對照值之間較大偏差主要來自于心率波動時。其一,可能對照所使用的指夾式脈搏血氧儀的計算時間窗大小、心率估計公式等與本文的有所差異。具體地:計算時間窗越大則心率的時序結果越平滑,尤其是在心率較大波動時,勢必會因為時間窗的大小不同而引起實時估計結果的差異化;心率值越大時,由心跳周期的同等波動所引起的心率波動越大。因此,使用不同的心率估計公式(如上所述的,先計算時間窗內平均心跳周期再估計心率,或者先估計時間窗內每個心跳周期對應的心率再計算平均值)也會造成實時估計結果存在一定差異性。其二,本文是將ESP32所采集的數據通過WiFi發布出來,再在個人電腦或者服務器上進行心率的估計處理,盡管記錄之時是實時的結果,但極可能由于網絡等原因產生一定的時間偏差,而這在心率波動較大時也會更為突顯。
綜上,本文所研究的方法還是可以較為靈敏地對心率的波動及振蕩進行恰當跟蹤的,從而在一定程度上實現對心臟健康的無感監護。
下一步工作,將本文的心率估計方法編寫成嵌入式程序,在ESP32開發板上直接對所采集的數據進行心率的估計處理。同時,將針對實時心率的估計結果,嘗試使用卡爾曼濾波器(Kalman filter)做一次濾波處理,并且繼續基于壓電薄膜傳感器估計實時呼吸率及其臥式檢測,進一步實現對心肺健康、睡眠質量的無感監護。