心臟聽診是先天性心臟病(簡稱:先心病,CHD)初診和篩查的主要手段。本文對先心病心音信號進行分析和分類識別研究,提出了一種基于卷積神經網絡的先心病分類算法。本文算法基于臨床采集的已確診先心病心音信號,首先采用心音信號預處理算法提取并組織一維時間域上心音信號的梅爾系數轉變成二維特征樣本。其次,以 1 000 個特征樣本用于訓練和優化卷積神經網絡,使用自適應矩估計(Adam)優化器,獲得了準確率 0.896、損失值 0.25 的訓練結果。最后,用卷積神經網絡對 200 個心音信號樣本進行測試,實驗結果表明準確率達 0.895,靈敏度為 0.910,特異度為 0.880。同其它算法相比,本文算法在準確率和特異度上有明顯提高,證實了本文方法有效地提高了心音信號分類的魯棒性和準確性,有望應用于機器輔助聽診。
引用本文: 譚朝文, 王威廉, 宗容, 潘家華, 楊宏波. 基于卷積神經網絡的先心病心音信號分類算法. 生物醫學工程學雜志, 2019, 36(5): 728-736, 744. doi: 10.7507/1001-5515.201806031 復制
引言
心音(heart sounds,HS)信號是由于血流使心臟瓣膜打開或關閉時振動產生的聲音信號,是人體重要的生物信號[1]。心音信號包含了大量的心臟生理、病理性信息,臨床醫生可以通過聽診識別出心音信號是否異常,從而輔助診斷心血管疾病[2]。目前,電子聽診器和心音信號數據采集設備日趨成熟,可以通過數字化分析手段,提取心音信號的病理特征,達到對心音信號分類識別的目的。這項工作對實現遠程心臟疾病的診斷和監測具有重要意義。因此對心音信號的有效去噪、分析和識別是實現遠程醫療和計算機輔助聽診的前提。
心音信號在國內外生物醫學信號實驗室一直備受關注,Abbas 等[3]首先提出了心音信號預處理的基本步驟:去噪、包絡提取、分段定位以及特征提取。近年來,研究人員重點關注的是心音信號的分類研究。心音信號的分類算法主要有:① 傳統模式識別的方法,例如:文獻[4]使用小波包分解對 59 個心音信號提取特征輸入支持向量機(support vector machine,SVM)分類器準確率可達 0.95;文獻[5]對心音信號使用梅爾頻率倒譜系數(mel frequency cepstrum coefficient,MFCC)提取特征后使用隱馬爾可夫模型(hidden markov model,HMM)進行分類,準確率超過了 0.8;文獻[6]對 392 個心音信號樣本使用 MFCC-SVM 的方法獲得了 0.86 的準確率。② 深度學習的方法,例如:Maknickas 等[7]直接將心音信號分成 4 ms 片段輸入卷積神經網絡(convolutional neural network,CNN)進行訓練并驗證,在 1 391 個心音信號樣本上驗證獲得了 0.841 的準確率。③ 人工神經網絡(artificial neural network,ANN)的方法,例如:文獻[8]采用 ANN 法進行研究,實驗樣本最小的只有 5 個,最多的只有 215 個,準確率從 0.92~0.99 不等;④ 綜合幾種不同模式識別的方法,例如 Papadaniil 等[9]采用經驗模態分解算法和 ANN 方法對心音信號進行特征提取和分類識別,準確率達到了 0.845;文獻[10]使用K最近鄰(K-nearest neighbor,KNN)算法和 HMM 算法進行心音信號的分類識別,準確率可達 0.825。
上述研究中,部分文獻報道的算法準確率較高,有的準確率高達 0.99,但離應用在遠程醫療或機器智能輔助聽診領域還有一定差距,原因是:① 預處理步驟復雜,傳統模式識別的方法需人工干預挑選有效的特征,例如文獻[4]和文獻[6]利用小波分解提取特征,但心音信號成分復雜,能否提取到有效的特征尚需探索;② 訓練樣本量過小,例如文獻[8]的 ANN 心音信號分類算法樣本數最大僅 215 個,傳統模式識別分類的文獻[6]也僅 392 個樣本,盡管這些算法準確率較高,但是無法保證心音信號分類算法的普適性和魯棒性;③ 準確率低,文獻[7]訓練樣本數達 1 391 個,但其準確率僅為 0.841,還不足以達到實際應用的要求,尚需進一步的提升。這些不足之處都極大地制約了心音信號分類算法將來的推廣實用和實時化輔助診斷決策。
基于已有算法的不足之處,本文提出了一種基于 CNN 心音信號分類算法,算法流程如圖 1 所示。該算法主要有兩個核心步驟組成:一是構建一種適于 CNN 的心音信號預處理模型,重點需闡述如何將一維(one dimension,1D)心音信號組織成二維(two dimension,2D)特征圖;二是利用預處理得到的“特征圖”,訓練優化 CNN 網絡結構,尋找最適合心音信號的 CNN 結構和參數。本文期望通過基于 CNN 的深度學習方法,有效提取心音信號的特征,從而解決以往分類算法過程復雜、分類準確率不高、普適性差的問題。

對比以往研究,本文創新之處在于:① 訓練樣本數量較大,網絡訓練使用了 1 200 個樣本,較以往算法數據量明顯增大,增強了算法的普適性,保證了算法的有效性;② 準確率有較大提高,本文算法在大樣本量的前提下,算法準確率可達 0.895,對比文獻[7]使用的也是深度學習算法,樣本量大,本文算法同其相比有較大提升。
綜上所述,本文基于 CNN 心音信號分類算法,訓練樣本量大,保證了算法的魯棒性,提高了心音信號分類準確率,為心音信號的研究做出了積極有意義的探索,旨在推動心音信號分類算法能應用于先心病臨床診斷和篩查。
1 預處理方法
1.1 數據來源
本文研究的心音信號數據來源于云南省阜外心血管病醫院和昆明醫科大學第一附屬醫院臨床采集的數據,以及在云南省各地州參加先心病篩查時采集所建立的心音信號樣本庫。該心音信號樣本庫中,志愿者年齡在 6 個月到 18 歲之間,所有志愿者均簽署知情同意書,并經過云南大學醫學院倫理委員會審查同意后,授權可以使用志愿者的心音信號數據。樣本庫所有心音信號數據所屬分類疾病,均經過便攜式超聲心動儀(Acuson Cypress,西門子股份有限公司/德國)確診。本實驗室(云南大學信息學院生物信號處理實驗室)自行研發了一套心音信號采集設備用于處理經心音信號傳感器(THE ONE,ThinkLabs 公司/美國)采集的模擬信號,采樣頻率為 5 000 Hz,采集時長為 30 s,該電路能夠將模擬信號轉變為數字信號,便于存儲和處理。
1.2 去噪
心音信號在采集過程中不可避免地存在一些噪聲干擾,干擾由多種原因造成,例如皮膚與傳感器的摩擦音、采集環境的背景噪聲、患者的呼吸擾動音等噪聲干擾,故需對心音信號進行去噪處理,得到噪聲較少的心音信號。去噪的方法有高通濾波、低通濾波、切比雪夫濾波、卡爾曼濾波等,而目前廣泛應用在心音信號去噪處理的是小波去噪[11]。文獻[11]在小波基選擇、小波分解層數、閾值確定方面做了大量的研究工作,指出如果選擇 db6 小波,將分解層數設置為 5 層或 6 層,閾值選擇為每一層細節分量最大值的 10%,可得到較好的去噪效果。采用小波去噪的方法是為了獲得最好的包絡效果,利于心音信號分段定位,但未關心去噪后心音信號的有效性信息。去噪過程中,分解層數直接影響去噪后心音信號的有效成分,最終影響分類的準確率,過多的分解層數會對原始心音信號產生變形,不利于保留心音信號的信息量,選擇合適的小波分解層數是本文的一個研究內容。
小波去噪算法基本思想是根據信號頻率按層分解,每層分解是從原始信號的起始頻率到信號的二分之一頻率。心音信號小波去噪算法分解示意圖如圖 2 所示。

圖 2 中心音圖(phonocardiogram,PCG)(以符號PCG表示)表示原始心音信號,ai(i = 1,2,,n)表示分解層數第i層的近似分量,di(i = 1,2,
,n)表示分解層數第i層的細節分量。正常心音信號的頻率在 5~600 Hz 范圍內,心音信號中的某些病理性雜音頻率可以到 1 500 Hz。通常認為 2 000 Hz 以上基本不包含有效信息,信號重構中可以直接置零,結合圖 2,n的求解滿足如式(1)所示:
![]() |
其中,fs表示心音信號的采樣頻率,由于本文實驗數據采樣頻率為 5 000 Hz,由式(1)可知,分解層數n為 4,信號重構可以表示為如式(2)所示:
![]() |
任意選取一例心音信號樣本數據,按照 db6 小波基、分解層數 4 層、軟閾值(閾值等于每一層細節分量最大值的 10%)進行去噪實驗,其去噪效果如圖 3 所示。

從圖 3 可知,4 層小波已能夠將大部分心音信號的噪聲信息濾除,且去噪后的心音信號在外觀形態上同原始心音信號基本相似,即最大程度地保留了有效信息,因此本文選擇小波軟閾值去噪,具體參數是:db6 小波基、4 層小波、軟閾值 10%。
1.3 數據截取
數據截取的目的是將長時間的心音信號截斷成若干個片段,將質量比較好(采集時噪聲較小)的數據片段標記為 CNN 方法的輸入樣本。數據截取應考慮兩個問題:從何處開始截取和心音信號應截取的時間長度。
CNN 在識別過程中是將圖片分割成若干個像素,通過卷積核依次對這些像素做卷積操作[12]。圖片中相鄰像素具有相似性質,且同一類 CNN 樣本圖片中的起始位置也相同。當 CNN 在語音信號中做語義分析時,為了排除起始位置不同的干擾,其樣本語音均需具有相同的句首。那么,由于心音信號的病理雜音通常發生在心臟的收縮期,即主要病理信息包含在第一心音(S1)到第二心音(S2)時間片段內,因此可以選擇 S1 的起始位置作為數據截取的起始點。
S1 的起點可以通過心電信號來確定,心電信號中 R 波波峰的位置是 S1 的起始位置,T 波結束的位置為 S2 結束位置。S1~S2 的時間間隔小于 S2~S1 的時間間隔,根據心音信號這兩個特性可以確定 S1 的起始位置,也就確定了數據截取的起始位置。數據截取時間的長短受 MFCC 變換過程影響,本文在 1.4 節中給出具體推導公式。
1.4 維度變換
心音信號是 1D 數據,而卷積樣本(圖像)是 x 軸和 y 軸上一系列像素值的排列,尤其是彩色圖像的紅、綠、藍色彩模式(red green blue,RGB)值可以被視為三幅的 2D 灰度圖,即 CNN 進行模式識別時必須將輸入樣本組織為 2D 數據。CNN 在樣本訓練和識別時都是在輸入的“圖像”上運行一個“窗口”,在“窗口”內學習特征參數,進行全連接權重共享。因此可以通過提取心音信號特征參數,并將這些特征參數適當組織,實現從 1D 到 2D 的變換,從而滿足 CNN 識別需求。
心音信號同語音信號具有共性特點:① 兩者都是音頻信號,這兩個信號都是通過人耳對音高的變化傳遞信息;② 兩者在短時間內都可以看作是平穩準周期信號。目前,MFCC 已廣泛應用在語音和語義識別等信號處理中,心音信號也常使用 MFCC 來提取特征,進行分類識別[13]。考慮到 CNN 帶來的一些新特性,本文采用梅爾對數頻率系數(log Mel-frequency spectral coefficients,MFSC)[14]來替代 MFCC 提取心音信號特征,并組織 MFSC 成“特征圖”,作為后期 CNN 的輸入樣本。
1.4.1 梅爾頻率系數
MFCC 中的梅爾刻度是一種基于人耳對等距的音高變化的感官判斷而制定的非線性頻率刻度,能較好地反映人耳對聲音的特點。MFSC 是省略離散余弦變換步驟的 MFCC 的特殊形式,即直接對 MFCC 取對數能量。MFSC 相比較 MFCC 光譜能量能保持局部特性,MFSC 提取的特征與原始心音信號具有高度相關,在頻譜上更為平滑,少量的 MFSC 特征即可代表絕大部分信號的信息。
MFSC 處理的基本步驟如下:
(1)預加重。將信號 x(n)通過一個高通濾波器,其目的是補償高頻部分,突顯在高頻的共振峰。
(2)分幀、加窗。心音信號是一種短時非平穩信號,研究起來困難,分幀可以使信號近似為平穩信號,加窗可以防止信號相鄰兩幀之間變化過大,使相鄰兩幀有重疊部分,克服頻譜泄露現象。分幀時,信號交疊一般為 50%,以提高時間分辨率。心音信號分幀后的幀數M的計算如式(3)所示:
![]() |
式(3)中,t為截取的心音信號時間長度,Fl為幀長,Fm為幀移,fs為采樣頻率。
(3)頻域變換。信號在時域上的變化很難觀察信號的能量特性,通常將它轉換成頻域上的能量分布來觀察,不同的能量分布,代表不同心音信號的特性。本文使用傅里葉變換,其計算公式如式(4)所示:
![]() |
其中 X(k)表示頻域信號,N 是幀長所包含的點數。
(4)梅爾刻度轉換。經傅里葉變換之后的信號尚需經過梅爾濾波器組和梅爾刻度轉換,其原因是頻域信號有很多冗余,梅爾濾波器組可以對頻域的幅值進行精簡,每一個頻段用一個值來表示,一個濾波器產生一個頻段值,而梅爾刻度則與人耳的聽覺特性相符。CNN 識別的樣本一般要求為方圖,因此濾波器個數N和幀數M的關系應當滿足如式(5)所示:
![]() |
式(5)中,M的取值一般在 24~80 之間,故由式(3)和(5)可以大致確定數據截取的長度。
(5)能量值取對數。人耳對聲音的感知并非線性關系,以取對數的這種非線性關系可以更好地描述人耳對聲音感知的特性。
(6)差分。由于心音信號是時域連續的,分幀提取的特征信息只反映了本幀心音信號的特性,為了使特征更能體現時域連續性,故在特征維度增加前后幀信息的維度,即常用一階差分(?)和二階差分(???)實現。
1.4.2 特征數據的組織
本節介紹的是如何將 MFSC 組織成 CNN 所需要的特征圖。每一個 MFSC 是一段信號在分幀加窗之后的時間段(幀)內在某一頻率段上的系數總和,即心音信號經過 MFSC 后,從 1D 變換到 2D。MFSC 取一階和二階差分,即可描述心音信號的時域連續性,因此一段心音信號將會得到 3 幅 M × N 的“特征圖”,即時間段取 M 幀,頻率系數取 N 個。CNN 提取特征時,將沿著時間和頻率方向執行三維卷積。數據組織方式如圖 4 所示,3 幅 2D 特征圖分別對應圖像中 RGB 的三個通道,構成一幅彩色“特征圖”。CNN 根據 MFSC 組成的彩色“特征圖”進行深層次學習,調整網絡參數,完成心音信號分類任務。這種數據組織方式既最大限度地結合了心音信號時域特性和頻域特性,又實現了數據的維度變化,滿足了 CNN 輸入樣本要求。

2 CNN 分類識別模型
2.1 數據準備
心音信號預處理方法,如圖 5 所示。提取 MFSC 時,選擇Fl為 2 048 點,Fm為 512 點,梅爾濾波器個數 N = 34,由式(3)和(5)可知,信號截取長度t = 4 s。因此心音信號“樣本圖”(下文簡稱樣本)大小為 34 × 34 × 3。根據第 1 節中心音信號預處理方法,本文預處理了 1 200 個心音信號樣本,1 000 個樣本用于 CNN 訓練,200 個用于單獨測試,其中正樣本 600 個,負樣本 600 個。

2.2 訓練環境
(1)軟件環境。本文使用的 CNN 在深度學習開源軟件 Keras 2.0.9(Google,美國)中實現。Keras 由純 Python 語言編寫而成,具有高度模塊化、極簡和可擴充特性,可以在中央處理器(central processing unit,CPU)和圖形處理器(graphics processing unit,GPU)中無縫切換,用戶界面友好,可以快速搭建網絡模型。因此選擇 Keras 作為心音信號分類識別開發工具。
(2)硬件環境。所有訓練和測試都在桌面電腦中完成,其中,CPU(Core i5 @3.4 GHz,Intel,美國),內存(DDR4 16 GB,宇瞻,中國),顯卡(NVIDIA 1060 6 GB,英偉達,美國)。
2.3 CNN 結構
網絡架構如圖 6 所示,采用遞增型網絡結構。該網絡共 6 層,其中包含 3 層卷積層,2 層全連接層,1 層歸一化指數函數柔性最大(softmax)分類層。網絡架構的輸入樣本是預處理后的心音信號樣本,大小是 34 × 34 × 3。圖 6 所示網絡架構是已經訓練和優化之后的 CNN 架構圖,每層網絡參數如下:第 1 層卷積層使用了 128 個過濾器,卷積核大小為 3 × 3,步長為 1 × 1;池化為最大池化(max pool),大小為 2 × 2,步長為 1 × 1;采用修正線性單元(rectified linear unit,ReLU)激活函數,隨機失活(dropout)率為 0.5。第 2 層和第 3 層卷積層分別使用了 128、256 個濾波器,卷積核大小均 3 × 3,步長 1 × 1;池化操作、激活函數和 dropout 概率均與上一層相同。2 個全連接層,輸出維度分別為 512、256,采用 ReLU 激活函數,中間使用 dropout(概率 0.5)進行連接。最后分類器為 softmax 分類器。

值得特別注意的是,該網絡架構包括網絡的層數、核函數的選擇、核函數大小以及數目均是該心音信號樣本下的網絡訓練調整后的最優結果。需指出的是,只有使用 ReLU 激活函數時,網絡才會收斂,這與大部分深度學習所提及的激活函數選擇是一致的。文獻[15]指出 ReLU 激活函數相比傳統的雙曲正切函數(tanh)、S 型(sigmoid)函數的輸出更具備稀疏性,沒有梯度消失的問題,使得收斂速度更快。選擇 2D 卷積濾波器的理由是,心音信號正常和異常在時間和頻率上都有所表現,2D 卷積濾波器能更好地在時間和頻率兩個維度上提取相關特征。dropout 是以隨機的方式刪除隱層節點數目,可以有效減輕過擬合,一定程度上達到正則化的目的,一般 dropout 概率設置為 0.5 或者 0.3[16]。softmax 函數是 sigmoid 函數在多分類問題上的一個推廣,常用在 CNN 網絡分類器上。
3 CNN 訓練及結果
網絡訓練是指,向網絡輸入一定量的樣本,在一定算法的調節下,不斷優化網絡的權值,使網絡的輸出與預期值相符。訓練神經網絡主要包括:網絡架構的調整、各層激活函數的選擇、模型編譯優化器的選擇。準則是使訓練樣本損失值不斷減少,以提高訓練精度,并使驗證集準確率隨之提高,防止模型過擬合。本文訓練時使用了 Keras 提供的早停法(EarlyStopping)函數以尋求迭代中的最佳模型,防止模型過擬合。前文給出了網絡架構的層數、核函數的選擇和大小的最終結果,此處給出模型編譯優化器的選擇,展示 CNN 的訓練過程,顯示網絡訓練的一些最終結果,期望最終能從優化器的選擇中尋找到神經網絡訓練的一般步驟和規律。
訓練前,首先將訓練數據進行劃分,對 1 000 個訓練樣本按照 0.7 概率隨機劃分,即每次迭代過程中 700 個樣本用于訓練,而 300 個樣本用于監督學習,并采用交叉驗證的方式進行驗證。訓練中,塊的大小為 32,該 CNN 模型有 2 600 065 個參數需要學習,采用對數損失函數對模型進行監督,用 Keras 提供的 EarlyStopping 函數尋求迭代中的最佳模型,防止過擬合,考慮不同優化器函數對準確率的影響。不同優化器函數模型的損失函數和模型準確率如圖 7 所示。

訓練不同的優化器函數對模型的訓練結果有很大的影響,本文只展示了訓練中的 4 種優化器結果。從圖 7 來看,遞歸神經網絡中經典的均方根反向傳播(root mean square prop,RMSprop)優化器對本文心音信號樣本并不適用,反而在所有的優化器函數中表現最差,采用該優化器時,訓練結果不收斂;其次效果較差的優化器是梯度下降法(stochastic gradient descent,SGD),損失值下降速度很快,但是準確率較低,模型迭代第 11 次時,已經沒有改善趨勢,損失值為 0.56,準確率為 0.773;采用自適應矩估計(adaptive moment estimation,Adam)優化器時,模型精度有明顯提高,在訓練迭代 31 次后,獲得了最佳值,損失值為 0.25,準確率為 0.896;使用 Adam 的改進型優化器最大自適應矩估計(max adaptive moment estimation,Adamax)優化器,模型收斂速度更快(迭代 28 次),損失值為 0.28,準確率為 0.882。Adamax 相比較 Adam 梯度下降時,更平穩,可以較快獲得一個最小值,但是容易陷入鞍部[17]。本文選擇的優化器函數是 Adam,模型訓練 31 次,可獲得損失值 0.25,準確率 0.896。
4 實驗結果及討論
本節重點對比討論本文的心音信號分類算法和其它分類算法,使用本文心音信號采集樣本庫中大小為 200 個的測試樣本集進行對比測試,該測試集中有正樣本 100 個,負樣本 100 個。二分類算法常采用靈敏度(sensitivity)(符號記為:se)、特異度(specificity)(符號記為:sp)和準確率(accuracy)(符號記為:acc)作為算法評價指標。其中表示正確分類的異常心音信號為真陽性(true positive,TP)(符號記為:TP);表示錯誤分類的異常心音信號為假陽性(false positive,FP)(符號記為:FP);表示正確分類的正常心音信號為真陰性(true negative,TN)(符號記為:TN);表示錯誤分類的正常心音信號為假陰性(false negative,FN)(符號記為:FN)。se、sp和acc的計算如式(6)~式(8)所示:
![]() |
![]() |
![]() |
根據模型預測結果和式(6)~式(8)計算結果顯示,se = 0.910,sp = 0.880,acc = 0.895,同其它算法的對比結果如表 1 所示。

表中所列出的幾種對比算法,來源于最近兩年發表的文章,其測試數據均來源于本文數據庫中相同的 200 個心音信號樣本。
從表中數據來看,本文提出的算法,在準確率、靈敏度、特異性方面都有競爭優勢,準確率同訓練時候的驗證集準確率也基本相符。然而,文獻[4]使用 SVM 作為心音信號分類器,算法準確率 0.820 比本文準確率低,同引言中使用的 SVM 算法實驗數據相差較大,說明 SVM 算法對樣本的適應性較差,算法的普適性和魯棒性差,不具備推廣應用的條件。文獻[6]、[18]其準確率不如本文算法準確率理想,同時使用的這些傳統模式識別的分類方法,需要人工干預挑選有效特征,數據預處理工作較為復雜,這在一定程度上制約了其樣本集大小,樣本集增大將增加樣本特征有效性的不確定性。人工挑選特征難以驗證其有效性,本文的 CNN 心音信號分類方法,網絡自動提取相關特征,并優化網絡結構,因此其準確率提升明顯。
文獻[7]用 CNN 作為分類器,本文方法與之相比準確率有所提升,分析原因有:① 本文預處理算法,采用 MFSC 代替 MFCC,MFSC 相比較 MFCC 光譜能量能保持局部特性,具有高度相關,在頻譜上較為平滑,少量的 MFSC 特征即可代表絕大部分信號的信息,MFSC 系數得到的“樣本圖”更加精簡,利于 CNN 識別;② 本文預處理中數據截取的起始位置使得“樣本圖”更符合網絡的需求,且截取的心音信號長度,包含了 5 個心動周期(文獻[7]中樣本未包含一個完整的心動周期);③ 本文心音信號采集更為規范,都是 6 個月到 18 歲的先心病患者,有利于 CNN 提取到統一的特征。
本文算法準確率,是在大樣本測試下獲得的,訓練時驗證集樣本 300 個,單獨測試集樣本 200 個,準確率均在 0.895。表明實驗的準確率并不是偶然的,同時相比較一些傳統的小樣本算法魯棒性強,為將來應用于實際起到了助力作用。
5 結論
本文提出基于 CNN 的心音信號分類算法,首先利用本文預處理算法將帶有大量背景噪聲的一維心音信號轉換成干凈的二維的“樣本圖”,以適合 CNN 分類器的需求。這些特征圖作為 CNN 的輸入用來優化和訓練網絡架構,實驗發現 5 層 CNN 模型,Adam 優化器具有較高的準確率,訓練結果顯示,有模型訓練準確率為 0.896,損失值為 0.25。該算法在測試集上達到了 se = 0.910,sp = 0.880,acc = 0.895。本文準確率同其他算法有一定競爭力,模型是在大樣本條件下優化而得,普適性和魯棒性有一定的保證。相比傳統的算法,預處理方法相對簡便,本文算法,可以為以后應用于機器輔助聽診和遠程醫療提供一種較好的選擇。今后,課題組將致力于算法準確率提升以及實際應用的開展。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。
引言
心音(heart sounds,HS)信號是由于血流使心臟瓣膜打開或關閉時振動產生的聲音信號,是人體重要的生物信號[1]。心音信號包含了大量的心臟生理、病理性信息,臨床醫生可以通過聽診識別出心音信號是否異常,從而輔助診斷心血管疾病[2]。目前,電子聽診器和心音信號數據采集設備日趨成熟,可以通過數字化分析手段,提取心音信號的病理特征,達到對心音信號分類識別的目的。這項工作對實現遠程心臟疾病的診斷和監測具有重要意義。因此對心音信號的有效去噪、分析和識別是實現遠程醫療和計算機輔助聽診的前提。
心音信號在國內外生物醫學信號實驗室一直備受關注,Abbas 等[3]首先提出了心音信號預處理的基本步驟:去噪、包絡提取、分段定位以及特征提取。近年來,研究人員重點關注的是心音信號的分類研究。心音信號的分類算法主要有:① 傳統模式識別的方法,例如:文獻[4]使用小波包分解對 59 個心音信號提取特征輸入支持向量機(support vector machine,SVM)分類器準確率可達 0.95;文獻[5]對心音信號使用梅爾頻率倒譜系數(mel frequency cepstrum coefficient,MFCC)提取特征后使用隱馬爾可夫模型(hidden markov model,HMM)進行分類,準確率超過了 0.8;文獻[6]對 392 個心音信號樣本使用 MFCC-SVM 的方法獲得了 0.86 的準確率。② 深度學習的方法,例如:Maknickas 等[7]直接將心音信號分成 4 ms 片段輸入卷積神經網絡(convolutional neural network,CNN)進行訓練并驗證,在 1 391 個心音信號樣本上驗證獲得了 0.841 的準確率。③ 人工神經網絡(artificial neural network,ANN)的方法,例如:文獻[8]采用 ANN 法進行研究,實驗樣本最小的只有 5 個,最多的只有 215 個,準確率從 0.92~0.99 不等;④ 綜合幾種不同模式識別的方法,例如 Papadaniil 等[9]采用經驗模態分解算法和 ANN 方法對心音信號進行特征提取和分類識別,準確率達到了 0.845;文獻[10]使用K最近鄰(K-nearest neighbor,KNN)算法和 HMM 算法進行心音信號的分類識別,準確率可達 0.825。
上述研究中,部分文獻報道的算法準確率較高,有的準確率高達 0.99,但離應用在遠程醫療或機器智能輔助聽診領域還有一定差距,原因是:① 預處理步驟復雜,傳統模式識別的方法需人工干預挑選有效的特征,例如文獻[4]和文獻[6]利用小波分解提取特征,但心音信號成分復雜,能否提取到有效的特征尚需探索;② 訓練樣本量過小,例如文獻[8]的 ANN 心音信號分類算法樣本數最大僅 215 個,傳統模式識別分類的文獻[6]也僅 392 個樣本,盡管這些算法準確率較高,但是無法保證心音信號分類算法的普適性和魯棒性;③ 準確率低,文獻[7]訓練樣本數達 1 391 個,但其準確率僅為 0.841,還不足以達到實際應用的要求,尚需進一步的提升。這些不足之處都極大地制約了心音信號分類算法將來的推廣實用和實時化輔助診斷決策。
基于已有算法的不足之處,本文提出了一種基于 CNN 心音信號分類算法,算法流程如圖 1 所示。該算法主要有兩個核心步驟組成:一是構建一種適于 CNN 的心音信號預處理模型,重點需闡述如何將一維(one dimension,1D)心音信號組織成二維(two dimension,2D)特征圖;二是利用預處理得到的“特征圖”,訓練優化 CNN 網絡結構,尋找最適合心音信號的 CNN 結構和參數。本文期望通過基于 CNN 的深度學習方法,有效提取心音信號的特征,從而解決以往分類算法過程復雜、分類準確率不高、普適性差的問題。

對比以往研究,本文創新之處在于:① 訓練樣本數量較大,網絡訓練使用了 1 200 個樣本,較以往算法數據量明顯增大,增強了算法的普適性,保證了算法的有效性;② 準確率有較大提高,本文算法在大樣本量的前提下,算法準確率可達 0.895,對比文獻[7]使用的也是深度學習算法,樣本量大,本文算法同其相比有較大提升。
綜上所述,本文基于 CNN 心音信號分類算法,訓練樣本量大,保證了算法的魯棒性,提高了心音信號分類準確率,為心音信號的研究做出了積極有意義的探索,旨在推動心音信號分類算法能應用于先心病臨床診斷和篩查。
1 預處理方法
1.1 數據來源
本文研究的心音信號數據來源于云南省阜外心血管病醫院和昆明醫科大學第一附屬醫院臨床采集的數據,以及在云南省各地州參加先心病篩查時采集所建立的心音信號樣本庫。該心音信號樣本庫中,志愿者年齡在 6 個月到 18 歲之間,所有志愿者均簽署知情同意書,并經過云南大學醫學院倫理委員會審查同意后,授權可以使用志愿者的心音信號數據。樣本庫所有心音信號數據所屬分類疾病,均經過便攜式超聲心動儀(Acuson Cypress,西門子股份有限公司/德國)確診。本實驗室(云南大學信息學院生物信號處理實驗室)自行研發了一套心音信號采集設備用于處理經心音信號傳感器(THE ONE,ThinkLabs 公司/美國)采集的模擬信號,采樣頻率為 5 000 Hz,采集時長為 30 s,該電路能夠將模擬信號轉變為數字信號,便于存儲和處理。
1.2 去噪
心音信號在采集過程中不可避免地存在一些噪聲干擾,干擾由多種原因造成,例如皮膚與傳感器的摩擦音、采集環境的背景噪聲、患者的呼吸擾動音等噪聲干擾,故需對心音信號進行去噪處理,得到噪聲較少的心音信號。去噪的方法有高通濾波、低通濾波、切比雪夫濾波、卡爾曼濾波等,而目前廣泛應用在心音信號去噪處理的是小波去噪[11]。文獻[11]在小波基選擇、小波分解層數、閾值確定方面做了大量的研究工作,指出如果選擇 db6 小波,將分解層數設置為 5 層或 6 層,閾值選擇為每一層細節分量最大值的 10%,可得到較好的去噪效果。采用小波去噪的方法是為了獲得最好的包絡效果,利于心音信號分段定位,但未關心去噪后心音信號的有效性信息。去噪過程中,分解層數直接影響去噪后心音信號的有效成分,最終影響分類的準確率,過多的分解層數會對原始心音信號產生變形,不利于保留心音信號的信息量,選擇合適的小波分解層數是本文的一個研究內容。
小波去噪算法基本思想是根據信號頻率按層分解,每層分解是從原始信號的起始頻率到信號的二分之一頻率。心音信號小波去噪算法分解示意圖如圖 2 所示。

圖 2 中心音圖(phonocardiogram,PCG)(以符號PCG表示)表示原始心音信號,ai(i = 1,2,,n)表示分解層數第i層的近似分量,di(i = 1,2,
,n)表示分解層數第i層的細節分量。正常心音信號的頻率在 5~600 Hz 范圍內,心音信號中的某些病理性雜音頻率可以到 1 500 Hz。通常認為 2 000 Hz 以上基本不包含有效信息,信號重構中可以直接置零,結合圖 2,n的求解滿足如式(1)所示:
![]() |
其中,fs表示心音信號的采樣頻率,由于本文實驗數據采樣頻率為 5 000 Hz,由式(1)可知,分解層數n為 4,信號重構可以表示為如式(2)所示:
![]() |
任意選取一例心音信號樣本數據,按照 db6 小波基、分解層數 4 層、軟閾值(閾值等于每一層細節分量最大值的 10%)進行去噪實驗,其去噪效果如圖 3 所示。

從圖 3 可知,4 層小波已能夠將大部分心音信號的噪聲信息濾除,且去噪后的心音信號在外觀形態上同原始心音信號基本相似,即最大程度地保留了有效信息,因此本文選擇小波軟閾值去噪,具體參數是:db6 小波基、4 層小波、軟閾值 10%。
1.3 數據截取
數據截取的目的是將長時間的心音信號截斷成若干個片段,將質量比較好(采集時噪聲較小)的數據片段標記為 CNN 方法的輸入樣本。數據截取應考慮兩個問題:從何處開始截取和心音信號應截取的時間長度。
CNN 在識別過程中是將圖片分割成若干個像素,通過卷積核依次對這些像素做卷積操作[12]。圖片中相鄰像素具有相似性質,且同一類 CNN 樣本圖片中的起始位置也相同。當 CNN 在語音信號中做語義分析時,為了排除起始位置不同的干擾,其樣本語音均需具有相同的句首。那么,由于心音信號的病理雜音通常發生在心臟的收縮期,即主要病理信息包含在第一心音(S1)到第二心音(S2)時間片段內,因此可以選擇 S1 的起始位置作為數據截取的起始點。
S1 的起點可以通過心電信號來確定,心電信號中 R 波波峰的位置是 S1 的起始位置,T 波結束的位置為 S2 結束位置。S1~S2 的時間間隔小于 S2~S1 的時間間隔,根據心音信號這兩個特性可以確定 S1 的起始位置,也就確定了數據截取的起始位置。數據截取時間的長短受 MFCC 變換過程影響,本文在 1.4 節中給出具體推導公式。
1.4 維度變換
心音信號是 1D 數據,而卷積樣本(圖像)是 x 軸和 y 軸上一系列像素值的排列,尤其是彩色圖像的紅、綠、藍色彩模式(red green blue,RGB)值可以被視為三幅的 2D 灰度圖,即 CNN 進行模式識別時必須將輸入樣本組織為 2D 數據。CNN 在樣本訓練和識別時都是在輸入的“圖像”上運行一個“窗口”,在“窗口”內學習特征參數,進行全連接權重共享。因此可以通過提取心音信號特征參數,并將這些特征參數適當組織,實現從 1D 到 2D 的變換,從而滿足 CNN 識別需求。
心音信號同語音信號具有共性特點:① 兩者都是音頻信號,這兩個信號都是通過人耳對音高的變化傳遞信息;② 兩者在短時間內都可以看作是平穩準周期信號。目前,MFCC 已廣泛應用在語音和語義識別等信號處理中,心音信號也常使用 MFCC 來提取特征,進行分類識別[13]。考慮到 CNN 帶來的一些新特性,本文采用梅爾對數頻率系數(log Mel-frequency spectral coefficients,MFSC)[14]來替代 MFCC 提取心音信號特征,并組織 MFSC 成“特征圖”,作為后期 CNN 的輸入樣本。
1.4.1 梅爾頻率系數
MFCC 中的梅爾刻度是一種基于人耳對等距的音高變化的感官判斷而制定的非線性頻率刻度,能較好地反映人耳對聲音的特點。MFSC 是省略離散余弦變換步驟的 MFCC 的特殊形式,即直接對 MFCC 取對數能量。MFSC 相比較 MFCC 光譜能量能保持局部特性,MFSC 提取的特征與原始心音信號具有高度相關,在頻譜上更為平滑,少量的 MFSC 特征即可代表絕大部分信號的信息。
MFSC 處理的基本步驟如下:
(1)預加重。將信號 x(n)通過一個高通濾波器,其目的是補償高頻部分,突顯在高頻的共振峰。
(2)分幀、加窗。心音信號是一種短時非平穩信號,研究起來困難,分幀可以使信號近似為平穩信號,加窗可以防止信號相鄰兩幀之間變化過大,使相鄰兩幀有重疊部分,克服頻譜泄露現象。分幀時,信號交疊一般為 50%,以提高時間分辨率。心音信號分幀后的幀數M的計算如式(3)所示:
![]() |
式(3)中,t為截取的心音信號時間長度,Fl為幀長,Fm為幀移,fs為采樣頻率。
(3)頻域變換。信號在時域上的變化很難觀察信號的能量特性,通常將它轉換成頻域上的能量分布來觀察,不同的能量分布,代表不同心音信號的特性。本文使用傅里葉變換,其計算公式如式(4)所示:
![]() |
其中 X(k)表示頻域信號,N 是幀長所包含的點數。
(4)梅爾刻度轉換。經傅里葉變換之后的信號尚需經過梅爾濾波器組和梅爾刻度轉換,其原因是頻域信號有很多冗余,梅爾濾波器組可以對頻域的幅值進行精簡,每一個頻段用一個值來表示,一個濾波器產生一個頻段值,而梅爾刻度則與人耳的聽覺特性相符。CNN 識別的樣本一般要求為方圖,因此濾波器個數N和幀數M的關系應當滿足如式(5)所示:
![]() |
式(5)中,M的取值一般在 24~80 之間,故由式(3)和(5)可以大致確定數據截取的長度。
(5)能量值取對數。人耳對聲音的感知并非線性關系,以取對數的這種非線性關系可以更好地描述人耳對聲音感知的特性。
(6)差分。由于心音信號是時域連續的,分幀提取的特征信息只反映了本幀心音信號的特性,為了使特征更能體現時域連續性,故在特征維度增加前后幀信息的維度,即常用一階差分(?)和二階差分(???)實現。
1.4.2 特征數據的組織
本節介紹的是如何將 MFSC 組織成 CNN 所需要的特征圖。每一個 MFSC 是一段信號在分幀加窗之后的時間段(幀)內在某一頻率段上的系數總和,即心音信號經過 MFSC 后,從 1D 變換到 2D。MFSC 取一階和二階差分,即可描述心音信號的時域連續性,因此一段心音信號將會得到 3 幅 M × N 的“特征圖”,即時間段取 M 幀,頻率系數取 N 個。CNN 提取特征時,將沿著時間和頻率方向執行三維卷積。數據組織方式如圖 4 所示,3 幅 2D 特征圖分別對應圖像中 RGB 的三個通道,構成一幅彩色“特征圖”。CNN 根據 MFSC 組成的彩色“特征圖”進行深層次學習,調整網絡參數,完成心音信號分類任務。這種數據組織方式既最大限度地結合了心音信號時域特性和頻域特性,又實現了數據的維度變化,滿足了 CNN 輸入樣本要求。

2 CNN 分類識別模型
2.1 數據準備
心音信號預處理方法,如圖 5 所示。提取 MFSC 時,選擇Fl為 2 048 點,Fm為 512 點,梅爾濾波器個數 N = 34,由式(3)和(5)可知,信號截取長度t = 4 s。因此心音信號“樣本圖”(下文簡稱樣本)大小為 34 × 34 × 3。根據第 1 節中心音信號預處理方法,本文預處理了 1 200 個心音信號樣本,1 000 個樣本用于 CNN 訓練,200 個用于單獨測試,其中正樣本 600 個,負樣本 600 個。

2.2 訓練環境
(1)軟件環境。本文使用的 CNN 在深度學習開源軟件 Keras 2.0.9(Google,美國)中實現。Keras 由純 Python 語言編寫而成,具有高度模塊化、極簡和可擴充特性,可以在中央處理器(central processing unit,CPU)和圖形處理器(graphics processing unit,GPU)中無縫切換,用戶界面友好,可以快速搭建網絡模型。因此選擇 Keras 作為心音信號分類識別開發工具。
(2)硬件環境。所有訓練和測試都在桌面電腦中完成,其中,CPU(Core i5 @3.4 GHz,Intel,美國),內存(DDR4 16 GB,宇瞻,中國),顯卡(NVIDIA 1060 6 GB,英偉達,美國)。
2.3 CNN 結構
網絡架構如圖 6 所示,采用遞增型網絡結構。該網絡共 6 層,其中包含 3 層卷積層,2 層全連接層,1 層歸一化指數函數柔性最大(softmax)分類層。網絡架構的輸入樣本是預處理后的心音信號樣本,大小是 34 × 34 × 3。圖 6 所示網絡架構是已經訓練和優化之后的 CNN 架構圖,每層網絡參數如下:第 1 層卷積層使用了 128 個過濾器,卷積核大小為 3 × 3,步長為 1 × 1;池化為最大池化(max pool),大小為 2 × 2,步長為 1 × 1;采用修正線性單元(rectified linear unit,ReLU)激活函數,隨機失活(dropout)率為 0.5。第 2 層和第 3 層卷積層分別使用了 128、256 個濾波器,卷積核大小均 3 × 3,步長 1 × 1;池化操作、激活函數和 dropout 概率均與上一層相同。2 個全連接層,輸出維度分別為 512、256,采用 ReLU 激活函數,中間使用 dropout(概率 0.5)進行連接。最后分類器為 softmax 分類器。

值得特別注意的是,該網絡架構包括網絡的層數、核函數的選擇、核函數大小以及數目均是該心音信號樣本下的網絡訓練調整后的最優結果。需指出的是,只有使用 ReLU 激活函數時,網絡才會收斂,這與大部分深度學習所提及的激活函數選擇是一致的。文獻[15]指出 ReLU 激活函數相比傳統的雙曲正切函數(tanh)、S 型(sigmoid)函數的輸出更具備稀疏性,沒有梯度消失的問題,使得收斂速度更快。選擇 2D 卷積濾波器的理由是,心音信號正常和異常在時間和頻率上都有所表現,2D 卷積濾波器能更好地在時間和頻率兩個維度上提取相關特征。dropout 是以隨機的方式刪除隱層節點數目,可以有效減輕過擬合,一定程度上達到正則化的目的,一般 dropout 概率設置為 0.5 或者 0.3[16]。softmax 函數是 sigmoid 函數在多分類問題上的一個推廣,常用在 CNN 網絡分類器上。
3 CNN 訓練及結果
網絡訓練是指,向網絡輸入一定量的樣本,在一定算法的調節下,不斷優化網絡的權值,使網絡的輸出與預期值相符。訓練神經網絡主要包括:網絡架構的調整、各層激活函數的選擇、模型編譯優化器的選擇。準則是使訓練樣本損失值不斷減少,以提高訓練精度,并使驗證集準確率隨之提高,防止模型過擬合。本文訓練時使用了 Keras 提供的早停法(EarlyStopping)函數以尋求迭代中的最佳模型,防止模型過擬合。前文給出了網絡架構的層數、核函數的選擇和大小的最終結果,此處給出模型編譯優化器的選擇,展示 CNN 的訓練過程,顯示網絡訓練的一些最終結果,期望最終能從優化器的選擇中尋找到神經網絡訓練的一般步驟和規律。
訓練前,首先將訓練數據進行劃分,對 1 000 個訓練樣本按照 0.7 概率隨機劃分,即每次迭代過程中 700 個樣本用于訓練,而 300 個樣本用于監督學習,并采用交叉驗證的方式進行驗證。訓練中,塊的大小為 32,該 CNN 模型有 2 600 065 個參數需要學習,采用對數損失函數對模型進行監督,用 Keras 提供的 EarlyStopping 函數尋求迭代中的最佳模型,防止過擬合,考慮不同優化器函數對準確率的影響。不同優化器函數模型的損失函數和模型準確率如圖 7 所示。

訓練不同的優化器函數對模型的訓練結果有很大的影響,本文只展示了訓練中的 4 種優化器結果。從圖 7 來看,遞歸神經網絡中經典的均方根反向傳播(root mean square prop,RMSprop)優化器對本文心音信號樣本并不適用,反而在所有的優化器函數中表現最差,采用該優化器時,訓練結果不收斂;其次效果較差的優化器是梯度下降法(stochastic gradient descent,SGD),損失值下降速度很快,但是準確率較低,模型迭代第 11 次時,已經沒有改善趨勢,損失值為 0.56,準確率為 0.773;采用自適應矩估計(adaptive moment estimation,Adam)優化器時,模型精度有明顯提高,在訓練迭代 31 次后,獲得了最佳值,損失值為 0.25,準確率為 0.896;使用 Adam 的改進型優化器最大自適應矩估計(max adaptive moment estimation,Adamax)優化器,模型收斂速度更快(迭代 28 次),損失值為 0.28,準確率為 0.882。Adamax 相比較 Adam 梯度下降時,更平穩,可以較快獲得一個最小值,但是容易陷入鞍部[17]。本文選擇的優化器函數是 Adam,模型訓練 31 次,可獲得損失值 0.25,準確率 0.896。
4 實驗結果及討論
本節重點對比討論本文的心音信號分類算法和其它分類算法,使用本文心音信號采集樣本庫中大小為 200 個的測試樣本集進行對比測試,該測試集中有正樣本 100 個,負樣本 100 個。二分類算法常采用靈敏度(sensitivity)(符號記為:se)、特異度(specificity)(符號記為:sp)和準確率(accuracy)(符號記為:acc)作為算法評價指標。其中表示正確分類的異常心音信號為真陽性(true positive,TP)(符號記為:TP);表示錯誤分類的異常心音信號為假陽性(false positive,FP)(符號記為:FP);表示正確分類的正常心音信號為真陰性(true negative,TN)(符號記為:TN);表示錯誤分類的正常心音信號為假陰性(false negative,FN)(符號記為:FN)。se、sp和acc的計算如式(6)~式(8)所示:
![]() |
![]() |
![]() |
根據模型預測結果和式(6)~式(8)計算結果顯示,se = 0.910,sp = 0.880,acc = 0.895,同其它算法的對比結果如表 1 所示。

表中所列出的幾種對比算法,來源于最近兩年發表的文章,其測試數據均來源于本文數據庫中相同的 200 個心音信號樣本。
從表中數據來看,本文提出的算法,在準確率、靈敏度、特異性方面都有競爭優勢,準確率同訓練時候的驗證集準確率也基本相符。然而,文獻[4]使用 SVM 作為心音信號分類器,算法準確率 0.820 比本文準確率低,同引言中使用的 SVM 算法實驗數據相差較大,說明 SVM 算法對樣本的適應性較差,算法的普適性和魯棒性差,不具備推廣應用的條件。文獻[6]、[18]其準確率不如本文算法準確率理想,同時使用的這些傳統模式識別的分類方法,需要人工干預挑選有效特征,數據預處理工作較為復雜,這在一定程度上制約了其樣本集大小,樣本集增大將增加樣本特征有效性的不確定性。人工挑選特征難以驗證其有效性,本文的 CNN 心音信號分類方法,網絡自動提取相關特征,并優化網絡結構,因此其準確率提升明顯。
文獻[7]用 CNN 作為分類器,本文方法與之相比準確率有所提升,分析原因有:① 本文預處理算法,采用 MFSC 代替 MFCC,MFSC 相比較 MFCC 光譜能量能保持局部特性,具有高度相關,在頻譜上較為平滑,少量的 MFSC 特征即可代表絕大部分信號的信息,MFSC 系數得到的“樣本圖”更加精簡,利于 CNN 識別;② 本文預處理中數據截取的起始位置使得“樣本圖”更符合網絡的需求,且截取的心音信號長度,包含了 5 個心動周期(文獻[7]中樣本未包含一個完整的心動周期);③ 本文心音信號采集更為規范,都是 6 個月到 18 歲的先心病患者,有利于 CNN 提取到統一的特征。
本文算法準確率,是在大樣本測試下獲得的,訓練時驗證集樣本 300 個,單獨測試集樣本 200 個,準確率均在 0.895。表明實驗的準確率并不是偶然的,同時相比較一些傳統的小樣本算法魯棒性強,為將來應用于實際起到了助力作用。
5 結論
本文提出基于 CNN 的心音信號分類算法,首先利用本文預處理算法將帶有大量背景噪聲的一維心音信號轉換成干凈的二維的“樣本圖”,以適合 CNN 分類器的需求。這些特征圖作為 CNN 的輸入用來優化和訓練網絡架構,實驗發現 5 層 CNN 模型,Adam 優化器具有較高的準確率,訓練結果顯示,有模型訓練準確率為 0.896,損失值為 0.25。該算法在測試集上達到了 se = 0.910,sp = 0.880,acc = 0.895。本文準確率同其他算法有一定競爭力,模型是在大樣本條件下優化而得,普適性和魯棒性有一定的保證。相比傳統的算法,預處理方法相對簡便,本文算法,可以為以后應用于機器輔助聽診和遠程醫療提供一種較好的選擇。今后,課題組將致力于算法準確率提升以及實際應用的開展。
利益沖突聲明:本文全體作者均聲明不存在利益沖突。