熊 艾,趙征鵬,楊宏波,潘家華,孫 柯,王威廉+
(1.云南大學(xué) 信息學(xué)院,云南 昆明 650500;2.云南省阜外心血管病醫(yī)院 結(jié)構(gòu)性心臟病中心,云南 昆明 650102)
先天性心臟病(congenital heart disease,CHD)是屬于心血管疾病中常見(jiàn)的一種心臟器質(zhì)類(lèi)疾病(以下簡(jiǎn)稱(chēng):先心病)。目前,心臟聽(tīng)診依然是篩查和診斷心臟健康狀態(tài)的一種有效方法[1]。在聽(tīng)診過(guò)程中,由于一些異常心音比正常心音頻率低、強(qiáng)度弱,很難通過(guò)聽(tīng)診做出判斷。因此,通過(guò)采集心音信號(hào),分析其震動(dòng)幅值與時(shí)間序列的關(guān)系組成心音圖(phonocardiogram,PCG)[2],能很好克服這些缺點(diǎn)。
目前已有多種設(shè)備用于心音數(shù)據(jù)的采集,例如文獻(xiàn)[3,4]采用低功耗芯片作為主控,在該硬件平臺(tái)上實(shí)現(xiàn)心音的采集儲(chǔ)存、顯示。文獻(xiàn)[5]使用嵌入式設(shè)計(jì)與Android平臺(tái)相結(jié)合,實(shí)現(xiàn)心音的采集、保存、回放。文獻(xiàn)[6]使用PSOC4芯片結(jié)合計(jì)算機(jī)實(shí)現(xiàn)心音的采集顯示存儲(chǔ)以及離線分析。但是,文獻(xiàn)[3-6]中所設(shè)計(jì)的采集系統(tǒng),缺少心音遠(yuǎn)程聽(tīng)診、心音實(shí)時(shí)分析的功能,并且便攜性也有待提高。本文針對(duì)上述問(wèn)題,以及遠(yuǎn)程輔助診斷的需求,設(shè)計(jì)了一套以Android平臺(tái)和嵌入式技術(shù)為基礎(chǔ)的便攜、可靠的遠(yuǎn)程心音信號(hào)采集顯示存儲(chǔ)系統(tǒng)。在此基礎(chǔ)上,添加實(shí)時(shí)心率計(jì)算功能,系統(tǒng)可根據(jù)使用需求動(dòng)態(tài)變更采集參數(shù),利用心率分析功能智能輔助采集人員判斷心音傳感器采集位置放置是否正確。為實(shí)現(xiàn)遠(yuǎn)程聽(tīng)診的功能,本文使用云服務(wù)器進(jìn)行心音數(shù)據(jù)的儲(chǔ)存,利于遠(yuǎn)程智能醫(yī)療中心的接入,為先心病的遠(yuǎn)程輔助診斷提供了用戶端的技術(shù)支撐。
心音的頻率范圍在5 Hz~600 Hz,屬于微弱低頻信號(hào)。市面上大部分手機(jī)內(nèi)置音頻采樣電路對(duì)低于50 Hz音頻有抑制,且由于不同型號(hào)手機(jī)音頻電路存在差異,直接使用手機(jī)mic口進(jìn)行心音信號(hào)采集將會(huì)導(dǎo)致音頻質(zhì)量參差不齊,無(wú)法滿足研究需求。針對(duì)此類(lèi)情形,本文設(shè)計(jì)了一套通用的無(wú)線心音記錄系統(tǒng),可以在不同的平臺(tái),如Android,IOS,Windows等通用的上位機(jī)系統(tǒng)上無(wú)損地記錄心音信號(hào)。
采集系統(tǒng)設(shè)計(jì)主要分為3個(gè)部分,下位機(jī)心音采集部分、上位機(jī)顯示部分以及云端儲(chǔ)存部分,系統(tǒng)整體框架如圖1所示。
系統(tǒng)采用的心音傳感器為美國(guó)的Thinklabs One有源心音傳感器,其硬件本身具有低頻濾波電路,傳感器采集數(shù)據(jù)不會(huì)被過(guò)多處理,保證了心音數(shù)據(jù)的完整性與原始性。模數(shù)轉(zhuǎn)換芯片采用美國(guó)ADI公司的AD7606,分辨率16 bit,采樣率可達(dá)200 Kbps。中央處理單元使用TI公司的STM32F103C8T6低功耗芯片,支持多串口傳輸。藍(lán)牙模塊采用BK3231S型芯片,最高支持16 Kbps的無(wú)損傳輸。下位機(jī)采集參數(shù)設(shè)定為采樣率5 KHz,量化精度16 bit,下位機(jī)到上位機(jī)的數(shù)據(jù)傳輸方式采用藍(lán)牙傳輸。
根據(jù)便攜式設(shè)備設(shè)計(jì)的要求,下位機(jī)采集盒使用兩節(jié)18 650鋰電池進(jìn)行供電,在重度使用的情況下,可以保持4天以上的續(xù)航,同時(shí)可為心音傳感器充電。本文設(shè)計(jì)制作的無(wú)線心音采集盒已經(jīng)獲得中國(guó)實(shí)用新型專(zhuān)利(專(zhuān)利號(hào)CN201921929240.4)[7]。
1.1.1 心音傳感器的選擇
根據(jù)此前章節(jié)的分析,心音為一種微弱低頻信號(hào),在選擇心音傳感器時(shí)應(yīng)考慮其頻率響應(yīng)范圍以及放大系數(shù)。本設(shè)計(jì)選用Thinklabs One心音傳感器,該傳感器頻率響應(yīng)范圍為20 Hz~2000 Hz,且支持最高100x的放大倍數(shù)。使用此傳感器能較好地保留心音信號(hào)的頻率特征,使本系統(tǒng)所采集的心音信號(hào)能進(jìn)一步用于心音特征提取以及心音分類(lèi)等后續(xù)研究。
1.1.2 采樣電路的設(shè)計(jì)
AD7606為16位模數(shù)轉(zhuǎn)換芯片,支持±10 V或±5 V的雙極性輸入。該AD采樣電路所有通道均支持最高200 Kbps的采樣速率,并使用5 V單電源供電。有SPI串行方式與8080并行方式兩種控制器通信模式。本文設(shè)計(jì)選用SPI通信方式,在滿足數(shù)據(jù)傳輸需求的前提下,節(jié)約了IO口資源。AD7606模塊電路設(shè)計(jì)如圖2所示。
圖2 AD7606模塊電路設(shè)計(jì)
根據(jù)Nyquist采樣定理,信號(hào)采樣頻率應(yīng)該為最高頻率的兩倍。心音信號(hào)的頻率在1000 Hz以下,采用5000 Hz的采樣率可以滿足要求。在本文中,設(shè)定STM32F103C8T6定時(shí)器的定時(shí)為200 μs,定時(shí)器每溢出一次,則對(duì)AD7606中的數(shù)據(jù)通過(guò)SPI接口進(jìn)行一次讀取,以此控制采樣率為5000 Hz。數(shù)據(jù)采集過(guò)程中,通過(guò)軟件控制的方式將OS0引腳電平拉高,OS1、OS2引腳電平拉低,進(jìn)行兩倍過(guò)采樣,以減少數(shù)據(jù)抖動(dòng)。AD7606數(shù)據(jù)讀取采用16 bit讀方式,可以防止8 bit讀方式出現(xiàn)的低字節(jié)數(shù)據(jù)丟失問(wèn)題。
1.1.3 藍(lán)牙數(shù)據(jù)傳輸
BK3231S芯片支持藍(lán)牙3.0SPP協(xié)議(serial port profile),可以在Windows、Linux、Android以及IOS等平臺(tái)進(jìn)行點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)透?jìng)?。通信接口支持UART串口模式,其SPP協(xié)議支持的最大吞吐量為16 Kbytes/s。本次系統(tǒng)設(shè)計(jì)采用的傳輸方式為透明無(wú)控制的傳輸,其每次發(fā)送的數(shù)據(jù)包含1 bit起始信號(hào)、8 bit數(shù)據(jù)以及1 bit停止信號(hào)。在傳輸過(guò)程中,每傳輸1字節(jié)的額外開(kāi)銷(xiāo)為20%。根據(jù)1.1小節(jié)中設(shè)計(jì)的采樣標(biāo)準(zhǔn),可計(jì)算出每秒需要傳輸?shù)臄?shù)據(jù)量為:10 Kbytes,滿足傳輸需求。
本設(shè)計(jì)支持多種上位機(jī)系統(tǒng),只需上位機(jī)系統(tǒng)支持藍(lán)牙SPP協(xié)議且裝有相應(yīng)配套接收程序,均可使用1.1節(jié)中心音采集盒獲得相同格式的數(shù)據(jù)。上位機(jī)接收到數(shù)據(jù)將實(shí)時(shí)顯示波形與當(dāng)前心率,并通過(guò)字節(jié)流的形式將數(shù)據(jù)寫(xiě)入文件進(jìn)行保存,實(shí)測(cè)20 s的心音數(shù)據(jù)采集的大小為 200 Kb。在采集完成后,可將數(shù)據(jù)上傳到云端存儲(chǔ),在云端實(shí)現(xiàn)人員信息與心音數(shù)據(jù)批量管理功能。上位機(jī)與云端之間通過(guò)HTTP(hyper text transfer protocol)協(xié)議連接,請(qǐng)求采用POST方式,避免了GET方式中的顯式傳輸,保證數(shù)據(jù)安全。
系統(tǒng)設(shè)計(jì)中云端儲(chǔ)存的服務(wù)器部分采用了Tomcat小型服務(wù)器與上位機(jī)程序通信,接收到數(shù)據(jù)后以壓縮文件的形式存放在數(shù)據(jù)庫(kù)中,每一例數(shù)據(jù)都將進(jìn)行完整性校驗(yàn),保證數(shù)據(jù)不被篡改。人員以及數(shù)據(jù)采樣信息等結(jié)構(gòu)化數(shù)據(jù)使用開(kāi)源的MySQL數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)管理。云服務(wù)器中數(shù)據(jù)庫(kù)部分與Tomcat應(yīng)用進(jìn)行了內(nèi)網(wǎng)分離,保障數(shù)據(jù)安全。
下位機(jī)程序以Keil uVision5為開(kāi)發(fā)平臺(tái),應(yīng)用C語(yǔ)言編寫(xiě)程序功能代碼。軟件設(shè)計(jì)流程如圖3所示。
圖3 下位機(jī)工作流程
下位機(jī)上電后首先會(huì)初始化系統(tǒng)時(shí)鐘、定時(shí)器和AD7606。進(jìn)入主程序后檢測(cè)串口接收數(shù)據(jù)緩沖區(qū)是否收到來(lái)自上位機(jī)的數(shù)據(jù),讀出數(shù)據(jù)并判斷數(shù)據(jù)是否為啟動(dòng)采集信號(hào)。如果為啟動(dòng)采集信號(hào)則啟動(dòng)定時(shí)器(定時(shí)間隔200 μs),定時(shí)器溢出標(biāo)志位被觸發(fā)后,對(duì)AD7606進(jìn)行數(shù)據(jù)讀取并開(kāi)始下一次轉(zhuǎn)換,同時(shí)將數(shù)據(jù)通過(guò)藍(lán)牙串口發(fā)送至上位機(jī)。如果為結(jié)束采集信號(hào)會(huì)停止定時(shí)器,同時(shí)停止數(shù)據(jù)采集和數(shù)據(jù)發(fā)送。系統(tǒng)進(jìn)入循環(huán)監(jiān)聽(tīng)狀態(tài),等待啟動(dòng)下一次數(shù)據(jù)采集與傳輸。
上位機(jī)軟件開(kāi)發(fā)環(huán)境為Android Studio 3.4、jre1.8.0_201(Java運(yùn)行環(huán)境)、Android9.0(應(yīng)用運(yùn)行系統(tǒng))、ndk21.0.6113669(C/C++開(kāi)發(fā)工具)、CMake3.4.1編譯工具。使用Java語(yǔ)言和C語(yǔ)言編寫(xiě)應(yīng)用程序。上位機(jī)軟件的硬件承載平臺(tái)為華為M6平板。
2.2.1 軟件設(shè)計(jì)流程
上位機(jī)軟件實(shí)現(xiàn)包含藍(lán)牙數(shù)據(jù)接收模塊、人員管理模塊、數(shù)據(jù)上傳模塊、音頻回放模塊、心率計(jì)算模塊等模塊,其中藍(lán)牙數(shù)據(jù)接收與心率計(jì)算工作在同一界面。圖4展示了上位機(jī)接收藍(lán)牙數(shù)據(jù)并顯示心音圖(M聽(tīng)診點(diǎn)[8])的界面,并在右上角顯示實(shí)時(shí)心率。上位機(jī)軟件部分模塊工作流程如下:
圖4 APP實(shí)時(shí)接收顯示心音(M聽(tīng)診點(diǎn))圖界面
數(shù)據(jù)接收顯示模塊界面工作流程:
(1)在軟件采集界面選擇需要連接的藍(lán)牙設(shè)備,連接成功后返回藍(lán)牙對(duì)象的BluetoothSocket;
(2)點(diǎn)擊預(yù)覽按鈕啟動(dòng)數(shù)據(jù)接收線程并發(fā)送開(kāi)始采集信號(hào);
(3)數(shù)據(jù)接收線程以40 ms為周期從接收緩沖區(qū)讀取數(shù)據(jù),以保證繪圖顯示的幀率大于24 Fps,防止繪圖顯示卡頓;
(4)每個(gè)周期內(nèi)接收到的數(shù)據(jù)都將轉(zhuǎn)化為int16類(lèi)型的數(shù)據(jù)進(jìn)行繪圖以及心率計(jì)算;
(5)在選擇開(kāi)始記錄后,直接將接收到的原數(shù)據(jù)通過(guò)二進(jìn)制流的方式寫(xiě)入文件中,便于后續(xù)分析;
(6)在數(shù)據(jù)接收線程接收到數(shù)據(jù)后,開(kāi)啟心率計(jì)算線程,計(jì)算實(shí)時(shí)心率。
數(shù)據(jù)上傳模塊工作流程:
(1)當(dāng)心臟的5個(gè)聽(tīng)診點(diǎn)(M、P、A、E、T)[8]采集完數(shù)據(jù)后,利用移動(dòng)網(wǎng)絡(luò)將信號(hào)上傳至云服務(wù)器進(jìn)行存儲(chǔ),用于機(jī)器輔助診斷或遠(yuǎn)程聽(tīng)診;
(2)新建一個(gè)用于數(shù)據(jù)傳輸?shù)腍ttpURLConnection連接。設(shè)置傳輸頭為“multipart/form-data”,即可以上傳json數(shù)據(jù)和數(shù)據(jù)文件;
(3)將5個(gè)位置的數(shù)據(jù)信息打包成zip壓縮包文件,并新建DataOutputStream類(lèi),將數(shù)據(jù)采樣信息(json數(shù)據(jù))和心音數(shù)據(jù)(zip文件)寫(xiě)入到傳輸流中;
(4)數(shù)據(jù)上傳成功后云服務(wù)器會(huì)將采樣信息存放至MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)文件存放至云服務(wù)器,同時(shí)向APP返回接收成功的消息。
心音回放模塊工作流程:
(1)新建繼承于Thread的子類(lèi),重寫(xiě)run方法,在run方法中新建FileInputStream文件輸入流,讀取二進(jìn)制心音數(shù)據(jù);并將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為浮點(diǎn)型(float)數(shù)據(jù);
(2)讀取完成后使用SurfaceView類(lèi)對(duì)心音數(shù)據(jù)進(jìn)行繪制顯示;
(3)通過(guò)AudioTrack音頻播放類(lèi)獲取音頻播放緩沖區(qū),并新建一個(gè)AudioTrack類(lèi)寫(xiě)入音頻格式,本系統(tǒng)采樣率為5000 Hz,單通道,16 bit;
(4)新建ByteArrayInputStream類(lèi)對(duì)音頻緩沖區(qū)同步寫(xiě)入心音數(shù)據(jù),實(shí)現(xiàn)心音播放。
在心率計(jì)算階段,本文采用了軟件包絡(luò)檢波法與峰值定位法相結(jié)合的方法計(jì)算心率。計(jì)算流程為:將經(jīng)過(guò)歸一化的心音數(shù)據(jù)進(jìn)行低通濾波,使用軟件包絡(luò)檢波提取心音信號(hào)的包絡(luò)信息,并對(duì)心音數(shù)據(jù)的S1和S2進(jìn)行峰值定位得到峰值在心音數(shù)據(jù)中的索引,通過(guò)計(jì)算奇偶位置峰值的平均間隔得到心率。
圖5顯示了實(shí)時(shí)心率計(jì)算的流程圖。心率計(jì)算線程每隔0.5 s運(yùn)行一次,每次計(jì)算數(shù)據(jù)量為5 s內(nèi)的心音數(shù)據(jù)。保證計(jì)算的實(shí)時(shí)性,心率計(jì)算的程序均由C語(yǔ)言進(jìn)行編寫(xiě),Android應(yīng)用與NDK中C實(shí)現(xiàn)的心率計(jì)算組件之間通過(guò)Java本地接口(Java native interface,JNI)進(jìn)行通信與調(diào)用。
圖5 實(shí)時(shí)心率計(jì)算流程
本文使用式(1)對(duì)數(shù)據(jù)進(jìn)行歸一化處理,將其映射到[-1,1]區(qū)間內(nèi)
(1)
式中:X表示原始心音數(shù)據(jù),X′表示歸一化后的心音數(shù)據(jù)。
采集心音信號(hào)過(guò)程中不可避免的會(huì)引入肺部雜音和環(huán)境噪音,這將會(huì)對(duì)后續(xù)的軟件包絡(luò)檢波與峰值檢測(cè)造成干擾,引起偽峰,從而出現(xiàn)心率計(jì)算錯(cuò)誤。因此需對(duì)原始的心音數(shù)據(jù)進(jìn)行濾波處理以提高后續(xù)的包絡(luò)檢測(cè)準(zhǔn)確度。正常心音的范圍大多處于5 Hz~600 Hz,其中S1和S2的頻率范圍主要集中在50 Hz~110 Hz[9]。雖然有病理性雜音的頻率超過(guò)此范圍,但在心率計(jì)算部分屬于干擾信號(hào)。本文采用一個(gè)截止頻率為200 Hz的低通濾波器濾除高頻分量以保留主要的S1和S2成分。
采用的濾波器為二階的低通巴特沃斯濾波器,其標(biāo)準(zhǔn)差分方程如式(2)所示
A(1)*Y(n)=B(1)*X′(n)+B(2)*X′(n-1)+
B(3)*X′(n-2)-A(2)*Y(n-1)-A(3)*Y(n-2)
(2)
其中,B和A為濾波器的系數(shù),Y(n)表示對(duì)第n點(diǎn)信號(hào)進(jìn)行濾波后的數(shù)據(jù)。如果A(1)≠1,將對(duì)整個(gè)濾波器系數(shù)歸一化為A(1)。
如何快速完整地進(jìn)行包絡(luò)提取是本文算法研究的重點(diǎn),希爾伯特變換(Hilbert Transform)算法可以用于提取信號(hào)的包絡(luò),其基本原理是對(duì)原始信號(hào)X進(jìn)行希爾伯特變換,其變換公式如式(3)所示
(3)
3.5 完善醫(yī)療保險(xiǎn)制度,提供社會(huì)支持 隨著我國(guó)醫(yī)療衛(wèi)生體制改革的不斷深化,人們開(kāi)始擁有不同類(lèi)型的醫(yī)療保險(xiǎn),這為緩解“看病難、看病貴”問(wèn)題起到了積極的作用。對(duì)于部分車(chē)禍患者,因其不能享受醫(yī)保,經(jīng)濟(jì)壓力也為患者本人及照顧者帶來(lái)深深的困擾。重癥顱腦外傷患者大多帶有程度不等的后遺癥,后期的康復(fù)訓(xùn)練和生活照料還需要投入大量的人力物力。責(zé)任護(hù)士在患者放棄治療時(shí),可積極調(diào)動(dòng)患者盡可能多的支持系統(tǒng),并聯(lián)系當(dāng)?shù)?級(jí)醫(yī)院或社區(qū)衛(wèi)生服務(wù)中心,為患者進(jìn)行后續(xù)治療,并請(qǐng)醫(yī)師告知對(duì)方醫(yī)護(hù)人員治療護(hù)理的重點(diǎn)。
(4)
最后將式(4)中構(gòu)造的解析信號(hào)進(jìn)行取模得到原始信號(hào)X的包絡(luò)信息。由于希爾伯特變換存在積分運(yùn)算與復(fù)數(shù)運(yùn)算,在低性能嵌入式設(shè)備上運(yùn)算時(shí)間將明顯增加,達(dá)不到實(shí)時(shí)提取包絡(luò)的要求。因此,本文借助無(wú)線通信系統(tǒng)中對(duì)調(diào)幅波信號(hào)解調(diào)的方法原理,通過(guò)專(zhuān)用的檢波電路提取調(diào)幅波中的低頻信號(hào)。文獻(xiàn)[10]給出了檢波電路的硬件實(shí)現(xiàn)原理,主要利用二極管的單向?qū)щ娦院蚏C電路的充放電特性對(duì)信號(hào)進(jìn)行處理。借助此原理,本文將檢波電路的硬件實(shí)現(xiàn)方法轉(zhuǎn)化為軟件方式進(jìn)行實(shí)現(xiàn),增加了包絡(luò)檢波的通用性,并將其用于心音信號(hào)的包絡(luò)提取,式(5)給出軟件包絡(luò)檢波法的差分方程
(5)
式中:rc為時(shí)間常數(shù),等同于硬件電路中的RC/Δτ,Yenv為信號(hào)包絡(luò)。
軟件包絡(luò)檢波是一種計(jì)算簡(jiǎn)單的包絡(luò)提取方式,相比較希爾伯特變換算法提取包絡(luò),無(wú)需進(jìn)行復(fù)雜運(yùn)算,對(duì)硬件性能需求不高。非常適用于如嵌入式平臺(tái)、移動(dòng)端等這類(lèi)性能較低設(shè)備上的實(shí)時(shí)計(jì)算。
圖6顯示了使用希爾伯特變換與軟件包絡(luò)檢波提取同一心音信號(hào)包絡(luò)的結(jié)果。通過(guò)對(duì)比發(fā)現(xiàn),兩種方法提取的包絡(luò)形狀基本一致,其中希爾伯特變換提取的包絡(luò)對(duì)于心音S1和S2的幅值還原度更好,利于心音的特征分析。但相較于軟件包絡(luò)檢波法,希爾伯特提取的心音包絡(luò)含有更多的毛刺,將會(huì)導(dǎo)致峰值檢測(cè)算法提取出大量的偽峰,不利于心音峰值檢測(cè),從而增加了其心率計(jì)算誤差。本文所采用的峰值檢測(cè)算法,其準(zhǔn)確率依賴(lài)于舒張期(S2結(jié)束至S1開(kāi)始)和收縮期(S1結(jié)束至S2開(kāi)始)的光滑程度,因此綜合各方面考慮,本文使用軟件包絡(luò)檢波法提取心音包絡(luò)。
圖6 兩種方式提取的包絡(luò)信息
完整提取出心音信號(hào)的包絡(luò)信息后,將對(duì)心音包絡(luò)進(jìn)行峰值檢測(cè)。由于心音信號(hào)為準(zhǔn)周期信號(hào),在一個(gè)完整的心動(dòng)周期中按S1、收縮期、S2、舒張期循環(huán)出現(xiàn),從當(dāng)前心動(dòng)周期S1至下一個(gè)心動(dòng)周期S1之間的間隔為心動(dòng)周期的持續(xù)時(shí)間(S2同理)?;诖颂匦?,計(jì)算得到的奇數(shù)位置或偶數(shù)位置峰值點(diǎn)之間的間隔即為心動(dòng)周期持續(xù)時(shí)間。為了更加精準(zhǔn)地獲得心動(dòng)周期持續(xù)時(shí)間,本文對(duì)包絡(luò)的奇數(shù)峰值點(diǎn)間隔與偶數(shù)峰值點(diǎn)間隔取平均值作為平均心動(dòng)周期時(shí)間,如式(6)所示
(6)
式(6)中的Fs為信號(hào)采樣頻率,Avrodd和Avreven分別代表奇偶位置的平均間隔,Hr-pcg是通過(guò)PCG信號(hào)計(jì)算出來(lái)的心率。圖7顯示了兩類(lèi)位置間隔,圖中的小圓圈表示被檢測(cè)出來(lái)的包絡(luò)峰值。
圖7 峰值點(diǎn)間隔表示
峰值檢測(cè)算法首先通過(guò)對(duì)心音包絡(luò)中存在的極大值點(diǎn)進(jìn)行遍歷查找,找到包絡(luò)中每一個(gè)極大值點(diǎn),并記錄該極大值的索引。然后將包絡(luò)分割為固定大小的幀,并找到每一幀中的最大值及其索引。本文中的分幀大小是根據(jù)S1與S2的持續(xù)時(shí)間得到的,文獻(xiàn)[11]中總結(jié)了S1與S2的持續(xù)時(shí)間為40 ms~160 ms。因此本文中分幀大小取其持續(xù)時(shí)間的最大值160 ms。圖8展示了峰值檢測(cè)的具體過(guò)程。
圖8 峰值檢測(cè)工作流程
臨床聽(tīng)診的主要內(nèi)容包括心率、心音以及心雜音等,其中成年人的心率范圍大概在60 bpm~100 bpm,典型值為80 bpm。而心音中存在的病理性雜音是用來(lái)診斷心臟是否正常的重要指標(biāo),例如二尖瓣狹窄的患者的病理性雜音主要出現(xiàn)在舒張期,動(dòng)脈導(dǎo)管未閉的患者存在持續(xù)性的雜音等[13]。這些聽(tīng)診內(nèi)容均可以用于衡量心臟健康狀態(tài)。
利用本文設(shè)計(jì)的遠(yuǎn)程心音采集系統(tǒng)(下面簡(jiǎn)稱(chēng)本系統(tǒng)),項(xiàng)目組成員每周3次至課題合作單位云南省阜外心血管病醫(yī)院對(duì)3歲~18歲的先心病患者進(jìn)行心音信號(hào)采集。采集環(huán)境為醫(yī)院病房,采集期間房間內(nèi)保持安靜,被采集人員保持平穩(wěn)呼吸狀態(tài)。為驗(yàn)證該系統(tǒng)采集心音質(zhì)量,邀請(qǐng)?jiān)颇鲜「吠庑难懿♂t(yī)院的心內(nèi)科專(zhuān)家對(duì)126名志愿者進(jìn)行現(xiàn)場(chǎng)聽(tīng)診與遠(yuǎn)程聽(tīng)診測(cè)試。聽(tīng)診測(cè)試數(shù)據(jù)見(jiàn)表1。
表1 心音采集-聽(tīng)診測(cè)試
通過(guò)對(duì)表1的測(cè)試數(shù)據(jù)分析得到,在對(duì)126名志愿者的聽(tīng)診測(cè)試中,124例的聽(tīng)診結(jié)果保持一致。通過(guò)分析其余2例心音發(fā)現(xiàn),其中1例是由于志愿者感冒造成呼吸音過(guò)重,另外1例為采集方式不標(biāo)準(zhǔn)。因?yàn)獒t(yī)生在現(xiàn)場(chǎng)聽(tīng)診中通常要求志愿者進(jìn)行憋氣等操作,而采集心音一般保持平穩(wěn)呼吸狀態(tài),因此可能出現(xiàn)聽(tīng)診結(jié)果不一致的情況。依據(jù)表1測(cè)試數(shù)據(jù),可以得出通過(guò)本系統(tǒng)所采集心音信號(hào)質(zhì)量滿足聽(tīng)診要求,可用于遠(yuǎn)程診斷場(chǎng)景。圖9展示了利用本系統(tǒng)進(jìn)行心音采集與遠(yuǎn)程結(jié)果返回的效果圖。
圖9 心音采集(左)與遠(yuǎn)程聽(tīng)診結(jié)果展示(右)
為進(jìn)一步驗(yàn)證本系統(tǒng)的采集效果,實(shí)驗(yàn)對(duì)比了本系統(tǒng)與課題組上一代心音心電采集系統(tǒng)[13]的采集效果。使用控制變量法盡可能保證其采集條件。在同一采集環(huán)境下,使用兩套系統(tǒng)對(duì)同一個(gè)體相同位置的心音信號(hào)進(jìn)行采集。分別導(dǎo)出音頻信號(hào)并繪制心音圖,由心內(nèi)科專(zhuān)家進(jìn)行回聽(tīng)及PCG波形分析。圖10展示了兩代設(shè)備采集同一個(gè)體1 s的PCG信號(hào)。
圖10 新設(shè)備(a)與舊設(shè)備(b)采集的心音信號(hào)
圖10(a)與圖10(b)分別展示了兩代設(shè)備采集的心音波形。比較發(fā)現(xiàn),圖10(b)中基線附近的噪聲更強(qiáng)。這是因?yàn)椴杉^(guò)程中舊設(shè)備由電路引入的噪聲更加明顯,從而降低了心音分析的效果。將兩類(lèi)心音轉(zhuǎn)換為wav格式的音頻文件進(jìn)行播放,發(fā)現(xiàn)舊設(shè)備采集心音帶有很低沉的電流音,新設(shè)備對(duì)應(yīng)的音頻更加清晰且無(wú)電流音。在采集的便攜性、采集參數(shù)動(dòng)態(tài)調(diào)整性以及心音信號(hào)云端存儲(chǔ)等功能上,本系統(tǒng)較上一代設(shè)備都有較大改進(jìn),適用于對(duì)貧困山區(qū)先心病兒童進(jìn)行遠(yuǎn)程篩查的場(chǎng)景。
心電圖(electrocardiogram,ECG)在評(píng)估心血管疾病的初始診斷篩選中起著至關(guān)重要的作用,它同時(shí)也是心率檢測(cè)的金標(biāo)準(zhǔn)之一。在本節(jié)中,本文對(duì)2.2.2小節(jié)中提出的軟件包絡(luò)檢波法和Hilbert變換算法計(jì)算出來(lái)的心率進(jìn)行實(shí)驗(yàn)對(duì)比。從心率計(jì)算誤差與算法運(yùn)行時(shí)間兩個(gè)維度對(duì)算法進(jìn)行考量。
心音數(shù)據(jù)來(lái)源于研究團(tuán)隊(duì)采集構(gòu)建的心音樣本庫(kù),所有數(shù)據(jù)均同步記錄心音心電信號(hào)。隨機(jī)從數(shù)據(jù)庫(kù)中抽取133例心音信號(hào),其中正常信號(hào)87例,異常信號(hào)46例。為了評(píng)估算法對(duì)于心音心率的準(zhǔn)確計(jì)算能力,使用ECG-PCG評(píng)估算法在測(cè)試數(shù)據(jù)中計(jì)算心率的誤差。測(cè)試具體實(shí)現(xiàn)方法為:從每一例同步采集的信號(hào)中,單獨(dú)提取出心電信號(hào),使用R波探測(cè)器[14]得到所有R波的位置,心率則由所有R波之間的平均長(zhǎng)度計(jì)算給出。
實(shí)驗(yàn)過(guò)程中將使用以下公式進(jìn)行數(shù)值計(jì)算與分析。從ECG中提取標(biāo)準(zhǔn)心率方式如式(7)所示
(7)
式中:Hr-ecg表示通過(guò)ECG信號(hào)計(jì)算出來(lái)的標(biāo)準(zhǔn)心率,NR表示一段ECG信號(hào)中有效R波段的數(shù)量,LR-R表示相鄰兩個(gè)R波之間的距離,單位為秒(s)。
誤差均值的計(jì)算標(biāo)準(zhǔn)由式(8)給出
(8)
式中:μe為誤差均值,N表示總的心音數(shù)量。
誤差均值的離散程度用誤差均值的樣本標(biāo)準(zhǔn)差表示,式(9)展示了其計(jì)算方式
(9)
式(9)中的計(jì)算結(jié)果Se即為誤差均值的離散程度。
實(shí)驗(yàn)步驟如下:
(1)分離信號(hào)中的心音心電數(shù)據(jù),通過(guò)R波探測(cè)器獲取心電數(shù)據(jù)的R波之間的平均長(zhǎng)度,并根據(jù)式(7)計(jì)算出標(biāo)準(zhǔn)心率;
(2)通過(guò)步驟(1)中分離得到的心音數(shù)據(jù),使用式(1)~式(6)進(jìn)行預(yù)處理、包絡(luò)提取、峰值檢測(cè)以及心率計(jì)算;
(3)對(duì)步驟(1)和步驟(2)中得到的結(jié)果,使用式(8)和式(9)進(jìn)行誤差均值計(jì)算以及誤差均值的離散程度分析,最終結(jié)果由表2~表4給出;
(4)在步驟(2)的計(jì)算過(guò)程中分別對(duì)希爾伯特算法提取包絡(luò)和軟件包絡(luò)檢波法提取包絡(luò)的運(yùn)算時(shí)間進(jìn)行統(tǒng)計(jì)。
表2~表4分別列出了ECG測(cè)出心率與PCG計(jì)算心率結(jié)果的誤差均值和誤差均值離散程度的對(duì)比結(jié)果,其絕對(duì)值越小,說(shuō)明PCG計(jì)算心率越接近ECG計(jì)算出來(lái)的心率。表2和表3分別展示了正常心音和異常心音的心率計(jì)算比較結(jié)果,表4是綜合了133例心音的一個(gè)統(tǒng)計(jì)分析結(jié)果,實(shí)驗(yàn)數(shù)據(jù)中軟件包絡(luò)檢波法的最佳時(shí)間常數(shù)rc取值為800。
表2 87例正常心音的軟件包絡(luò)檢波和Hilbert包絡(luò)計(jì)算心率
表3 46例異常心音的軟件包絡(luò)檢波和Hilbert包絡(luò)計(jì)算心率
表4 133例心音的軟件包絡(luò)檢波和Hilbert包絡(luò)計(jì)算心率
根據(jù)表4結(jié)果分析得出,使用軟件包絡(luò)檢波法計(jì)算得出的心率與Hilbert包絡(luò)計(jì)算得出心率相比,其誤差更小。本文通過(guò)實(shí)驗(yàn)記錄了提取10 s心音信號(hào)的包絡(luò)所用時(shí)間,發(fā)現(xiàn)Hilbert變換提取的包絡(luò)是軟件包絡(luò)檢波提取包絡(luò)所用時(shí)間的3.6倍。以上實(shí)驗(yàn)結(jié)果表明軟件包絡(luò)檢波法相比Hilbert變換法在提取光滑心音包絡(luò)上更有優(yōu)勢(shì),且計(jì)算復(fù)雜度更低,適合用于低性能嵌入式設(shè)備和Android設(shè)備的實(shí)時(shí)運(yùn)算。
經(jīng)過(guò)臨床實(shí)驗(yàn)測(cè)試,本系統(tǒng)各項(xiàng)性能均達(dá)到設(shè)計(jì)目標(biāo),所采集心音信號(hào)能夠滿足醫(yī)生聽(tīng)診以及后續(xù)的信號(hào)分析工作。系統(tǒng)基于Android平臺(tái)與嵌入式技術(shù),實(shí)現(xiàn)了心音的實(shí)時(shí)采集、顯示存儲(chǔ)、遠(yuǎn)程聽(tīng)診以及實(shí)時(shí)心率分析等功能,同時(shí)數(shù)據(jù)采集盒具有兼容多平臺(tái)、易擴(kuò)展、易攜帶等特點(diǎn)。文中提出的軟件包絡(luò)檢波法與峰值定位結(jié)合的算法可以在低性能設(shè)備上快速的利用PCG計(jì)算心率。該算法可以為后續(xù)的嵌入式研究提供參考,本文已將算法移植到Android設(shè)備,下一步將考慮將其移植至IOS平臺(tái)以滿足更多樣化的使用場(chǎng)景。后續(xù)研究工作中,也將進(jìn)一步增強(qiáng)心率計(jì)算算法在不同心音樣本上的精度與實(shí)時(shí)性,擴(kuò)大算法適用范圍。