任澄飛,方 明
(西安石油大學 計算機學院,西安710065)
心電信號(Electrocardiography,ECG)是心臟病學領域中廣泛采用的一種分析人體心臟狀況的方法,代表心臟的電活動,廣泛應用于心律失常的檢測和分類[1]。人類心臟進行生理活動時,通過體表電極采集所得到的時變電位信號中,包含了豐富的生物學信息,在醫學診斷和研究中具有重要意義[2]。經驗豐富的心臟病專家可以通過肉眼檢查心電圖波形來檢測心律失常。然而,心律失常在問題的早期階段容易發生間歇,因此很難在較短的心電波形時間窗內對其進行檢測。所以,日常生活中持續監測患者的心跳對心律失常的檢測至關重要。
目前,對心電信號識別分類的主要方法有統計模式分類、結構分析分類法等。文獻[3]中提出,通過高階統計量的方法,將最初波形轉換到3個累積量,然后利用一個基于粗糙集理論的決策表分類器進行分類,最終得到決策表的分類精度達到了90.2%。Desai等人先采用常規方法進行心電濾波和分割,然后采用離散余弦變換算法進行特征提取,使用主成分分析方法進行特征縮減,最后采用K近鄰算法進行分類,最終得到的總體平均準確率為98.61%[4]。Saeed等人提出了一種基于小波變換和多個長短期記憶神經網絡新的分類算法。該算法成本低,能夠滿足可穿戴設備上的時序要求,優于以往的算法[5]。在心電信號的識別分類流程中,主要是通過一些比較成熟的算法提取信號的關鍵特征值,然后通過不斷優化網絡參數進行訓練,依據訓練結果進行病理分析。在實際生活中,心電圖的識別分類算法對醫生只能起到輔助的作用,具體的診斷及治療方案需由醫生去實施,因而心電圖的理論和算法還需進一步研究。本文在支持向量機的基礎上,采用臺灣大學林智仁教授開發的libsvm工作包作為分類器對ECG信號進行分類,構建出了一個基于支持向量機的心電信號處理算法,可以有效提高心電信號分類的敏感度。
心電信號是一種微弱的生理電信號,易受噪聲干擾[6],因此在信號處理之前需要進行預處理。預處理的目標是消除噪聲,沒有噪聲的波形特征看起來更單一。在心電信號中,最顯著的特征值是QRS波群,看起來相對干凈的信號,能夠為后續特征值的提取和分類提供方便。
要完成QRS波群的定位,主要通過設置自適應閾值來實現。由于心電信號是非平穩信號,在進行檢測時,僅靠固定閾值難以滿足所有的R波,易造成誤檢和漏檢,而自適應更新閾值能較好地解決這個問題[7]。自適應的意思是能夠自動適應不同類型的記錄。自適應機制較好的算法,是能夠在各種類型的記錄下區分目標與非目標,從而達到很高的準確率和可用度。
1.1.1 自適應閾值的設計原則
(1)自適應閾值機制中的經驗參數需固定。在自適應閾值的變化機制中,有些參數需要根據經驗提前設定,對于不同的記錄,已經設定好的經驗參數不允許再改變。
(2)自適應閾值要隨著心電信號波形即時的變化。該閾值并不是只給一整條記錄計算好一個閾值后就一成不變了,而是要跟隨波形實時地變化。例如,當檢測到的QRS波振幅呈總體上升態勢時,自適應閾值也要相應地提高,反之則要相應降低。一般可以通過設定上下限的方式來限定自適應閾值,確保該閾值變化更加穩健。
(3)想要提高自適應閾值的效率,還需要設置特定的機制,防錯檢、漏檢。該機制主要是利用“不應期”的概念,在檢測到一個QRS波后,在0.24 s內不再檢出QRS波,通過回溯已經檢測過的波形信號來達到防止漏檢和錯檢的目的[8]。
1.1.2 自適應閾值的設置
(1)自適應閾值要跟隨波形信號即時變化。在連續監護過程中,心電信號的幅值、形態都會隨著時間發生變化,因此算法的2個檢測閾值不能一直固定不變[9]。為了讓閾值更加準確,采用雙閾值的方法,設置一高一低2個閾值。當信號中的某個波峰超過設定的低閾值時,就判定為一個QRS波,依據高低閾值與波峰振幅之間的聯系,調整閾值的大小。
(2)為了保持心電信號波形變化的穩健,閾值還需進行調整,調整的依據是之前檢測到的正確波峰振幅變化,保證閾值不會太高或者太低。
綜上所述,本文設計的自適應機制如式(1)、式(2)所示:

式中,THR1為高閾值;mean(peak_buffer)為峰值均值;peak為此刻檢測到的信號峰值;THR1_lim為經驗常數,代表閾值變化的上界,在本文中取值為0.3;THR2為低閾值;peak_buffer為存儲此刻峰值之前的8個連續峰值的緩沖值;THR2_lim也為經驗常數,代表閾值變化的下界,在本文中取值為0.23。
(3)防漏檢與錯檢。設計雙閾值可以在一定程度上防漏檢。因為設置高、低2個閾值,相比只有一個閾值來講,可以在很大程度上捕捉到更多層次的波峰。在防錯檢方面,采用了“不應期”的方式。當2個波峰距離較近時,只選取較大的波峰。這個“過近”指的是時間距離低于0.24 s,即不應期的長度;雙閾值的數值存在下界,也在某種程度上防止了一些噪聲被錯檢為QRS波。另外,雙閾值的初始化參數是被提前設置好的經驗系數,一旦確定就不會因記錄的不同而改變。
(1)預處理總體步驟
在對心電信號預處理時,首先使用帶通濾波器去除頻率在15~20 HZ之間的噪聲成分,采用“雙斜率”方法,獲得QRS波群的斜率信息后,將低通濾波器的截止頻率設定為5 Hz,以濾除高于截止頻率的波形,最后使用滑動窗口積分對波形信號進行平滑處理。
(2)使用“雙斜率”方法預處理濾波后的波形信號。“雙斜率”的基本算法思想是:在一個點左側的某個區間內尋找最大平均斜率和最小平均斜率,然后在這個點的右側的某個區間內尋找最大平均斜率和最小平均斜率,即可得到4個斜率值,接著求左側最大平均斜率與右側最小平均斜率之差,求右側最大平均斜率與左側最小平均斜率之差,最后再求兩個差值中的最大值[10]。“雙斜率”基本思想主要在于QRS波群的寬度相對固定[11],其基本動機主要利用QRS波兩側較陡的性質,其尖峰在經過雙斜率處理時會有很大的響應,一般設置尋找斜率的區間是左右兩側0.015~0.060 s處為經驗參數。
(3)滑動窗口積分。心電信號的波形由于受到濾波或是求斜率的影響,其幅度值會越來越小,而過小的幅值其實不利于檢測,利用滑動窗口積分[12],會讓絕對振幅的值變大,波形更加光滑,本文中設置滑動窗口寬度為17個采樣點的經驗參數。
2.2.1 SVM算法原理
(1)線性不可分問題
在現實應用中,樣本一般都是線性不可分的問題,對于給定的樣本集:

其中,yi∈Y={+1,-1}表示類標記,分別用+1和-1表示,分別對應正樣本和負樣本。支持向量機最終的優化問題可以轉化為:

其中,x為輸入向量;w是權重向量;b是偏置項;ξi是松弛變量;C為懲罰因子。
(2)對偶問題
由于上面的優化問題帶有大量不等式約束,不易求解,因而使用拉格朗日函數,將其轉化為對偶問題。構造拉格朗日函數:
事情過去兩天后,項目部副經理開始找我談話。主題是我在這件事情上欠考慮,影響了正常的生產工作。我腦子熱的已經冷靜不下來了,心里倍感委屈,覺得自己并未做錯什么,冷冷地甩下兩句話:“我履行了自己的職責,處罰通報也是經你們同意的,如果你不滿意我的工作,可以換人。”隨后奪門而出。接下來的幾天時間里,我完全沒有工作的心,每天就在辦公室做做資料,瀏覽一下網頁,再也沒去現場。

其中,α和β是拉格朗日乘子,為求得對偶問題的解,即求:

求拉格朗日函數的極小值,則對w、b、ξ求偏導數,并令其都為0。將w代回拉格朗日函數中,消除w和b,即可得到關于α和β的函數。經過一系列轉化后,等價于最大化函數為:

其約束條件為:

(3)核函數
雖然加入松弛變量和懲罰因子后可以處理線性不可分問題,但支持向量機還是一個線性分類器,只是允許錯分樣本的存在。因此,引入核函數使得支持向量機成為非線性分類器,決策邊界不再是線性的超平面,而是形狀非常復雜的曲面,從而可以將樣本從原始空間映射到更高維度的特征空間,使問題得到有效地處理。
假設φ(x)為映射后的特征向量,則在該特征空間上的討論模型即可變為:

同樣求得對偶問題:

也就是求解:

約束條件為:

假設核函數:

于是可以解得:

常見的核函數有線性核、多項式核、高斯核、sigmoid核等。
2.2.2 基于SVM在心電信號中的應用
(1)心電信號特征提取。首先加載ECG信號數據集,然后對數據集中的每個心拍進行5階的小波分解,小波函數利用db6小波[14]。經過5階小波分解和2倍下采樣后,取小波變換系數中原信號的“近似”系數,即5階分解后的a系數,選取這些系數作為每個心拍的特征值。
(2)數據集選取與劃分。對于數據集,隨機劃分訓練集和測試集,即訓練集和測試集各有10 000個樣本。隨機選取可通過立建randperm函數隨機打亂樣本索引,然后截取前10 000個索引對應的樣本作為訓練集,剩余的作為測試集來實現。
(3)特征歸一化。為了加快SVM的收斂,對數據進行了特征歸一化處理。實際操作時,先使用歸一化函數的正常模式,對訓練集特征歸一化到0~1之間,得到歸一化后的訓練集和歸一化信息后,使用歸一化函數的apply模式,將訓練集得到的歸一化信息應用至測試集,完成測試集的歸一化。
(4)模型訓練與測試。調用libsvmtrain函數和libsvmpredict函數訓練和測試模型。libsvmtrain函數訓練的默認核函數為RBF核函數,需要人為設定2個超參數——懲罰因子系數c和核函數參數g,分別將其設定為2和1。不同取值的c和g可能會導致差異較大的結果,如果想要取得更好的效果,必須進行“調參”,減輕欠擬合與過擬合問題。常用的調參方法除了手動調整,還有網格搜索、隨機搜索、啟發式尋優等方法[15]。
本實驗使用的心電信號均來自于MIT-BIH Arrhythmia Database數據庫。該數據庫是PhysioBank項目的子數據庫,是一套用于評估心律失常檢測器的通用標準測試數據。其中包括48條雙導聯ECG記錄,約65萬個采樣點。實驗平臺為Core i7-8700、8GB內存的64位Windows10操作系統;代碼基于matlab語言編寫,每條記錄對應3個文件:
(1).atr標記文件。記錄人工標注的心拍位置和類型,格式為二進制數。
(2).dat:數據文件。記錄所需要的心電信號。
(3).hea頭文件。存儲記錄的附加信息。如,記錄編號、信號通道、導聯數、采樣率、采樣點數、文件的格式編碼等。
首先讀取了編號為100的記錄,指定讀取的點數為1024,繪制出的2個導聯的信號如圖1所示。在命令行輸入plot(M(:,1));grid on;之后即可單獨繪制出第一個導聯的信號圖,如圖2所示。

圖1 記錄號為100的心電信號Fig.1 ECG signal recorded as 100

圖2 第一個導聯的信號Fig.2 Signal diagram of the first lead
經過雙斜率處理后,波形模式更為單一,QRS波的變化更為突出。但是,心電信號波形出現了雙峰現象,從某個角度來看,檢測的精準度不夠高。
因此在雙斜率處理之后,須采用低通濾波方法以使波形變得非常光滑,雜波基本消失,模式也非常單一,基本上達到了進一步閾值處理的要求。
滑動窗口積分后的波形如圖3所示。

圖3 滑動窗口積分后波形圖Fig.3 Waveform after sliding window integration
為了評估所提出方法的性能,采用QRS波檢測算法的2個慣用指標:敏感度(Sensitivity,SE)和正預測率(P+)。其敏感度和正預測率指標定義如下:

其中,TP(true positive,TP)代表正樣本中被分類器判定為正確的心拍個數;FP(false positive,FP)代表檢測錯誤的心拍個數;FN(false negative,FN)代表正樣本中被分類器檢測為漏檢的心拍個數。對整個數據庫的實驗結果見表1。
從表1中可以看出,共錯檢出648個心拍,漏檢了380個心拍,總體Se達到了99.65%,P+達到了99.41%。

表1 數據庫的實驗結果Tab.1 Database experiment results
經典的pan_tompkin算法開發了一種QRS波群檢測算法。該算法采用了帶通濾波器,利用坡度、振幅和寬度檢測了QRS波群,最終檢測的正預測率達到了99.3%。而本文不僅采用了自適應閾值算法、雙斜率算法,還設置了漏檢和錯檢機制,最終檢測到的正預測率為99.38%。本文實現的算法與經典的pan_tompkin的99.3%相比,正預測率提高了約0.08%,具有較高的準確率和可用度。
基于高效的QRS波算法,本文采用支持向量機對心電信號進行了分類。經過特征提取、選取與劃分數據集、特征歸一化、訓練與測試等操作后,可以看出:在本次實驗中,SVM模型的總體預測準確率為96.69%。其中4類目標類型的準確率分別為:正常(N)99.68%,室性早搏(V)90.90%,右束支阻滯(R)97.58%,左束支阻滯(L)98.49%.
本文通過對MIT-BIH數據庫進行預處理后,使用自適應閾值對心電信號進行波形處理,最后使用敏感度以及正預測率對算法進行了評估,實驗表明其結果優于傳統的pan_tompkin算法。總體而言,本文提出的算法為心電信號的預處理和精確特征提取進行了拓展。在未來的工作中,還需要進一步改進算法,減少計算時間,提高魯棒性。