李能禾,成謝鋒
(南京郵電大學 電子科學與工程學院,江蘇 南京 210003)
心臟病是人類健康的頭號殺手,而我國每年有幾十萬人死于心臟病。目前,心臟病的發病率逐年升高,已經成為嚴重威脅人類健康的疾病之一。心音檢測和分析是了解心臟和大血管狀態的一種不可缺少的手段。心音信號是人體的重要聲音信號之一,含有關于心臟各個部分如心房、心室、大血管、心血管及各個瓣膜功能狀態的大量病理信息,是臨床評估心臟功能狀態的最基本方法,是心臟及大血管機械運動狀況的反映。當心血管疾病尚未發展到產生臨床及病理改變(如ECG變化)之前,心音中出現的雜音和畸變就是重要的診斷信息。心音信號提取在心血管疾病中具有重要價值,是心血管疾病無創性檢測的重要方法,具有心電圖、超聲心電圖不可取代的優勢。因此,運用新技術進行心音信號的提取一直是人們感興趣的研究方向[1-2]。
LabVIEW是美國國家儀器公司NI(National Instrument)的軟件產品。它是一個具有革命性的圖形化開發環境,內置信號采集、測量分析與數據顯示功能,摒棄了傳統開發工具的復雜性。用LabVIEW開發的程序稱為虛擬儀器[3]。虛擬儀器是計算機技術與儀器技術結合的完美產物,代表儀器發展的方向。
但是,對于一些需要進行大量數據運算處理的復雜應用,LabVIEW則顯得有些力不從心[4-5]。而MATLAB具有很強的工程計算功能,已經成為應用學科中的計算機輔助分析、設計、仿真等不可缺少的基礎軟件。因此,研究LabVIEW與MATLAB之間的混合編程,使它們在功能上互補,具有實用價值。
傳統的心音圖儀完全沒有量化分析功能,在心音的存儲、處理上存在著較大的局限性,故臨床應用較少。隨著數字技術的發展,國內外再次出現心音研究的熱情,研究內容包括心音信號檢測、表示形式、分析、識別和模擬以及心音信號處理的臨床應用。但是現有的心音檢測儀在功能上有很多不足,如:功能單一、體積較大、成本較高、存在較多人為誤差、測試時間太短等。
針對以上問題,本文所提出的方法利用了虛擬儀器的各種特點,將LabVIEW與MATLAB強大的數據分析功能結合,實現心音信號的采集分析。并且該方法利用PC機的聲卡進行采集,而不用市面上價格昂貴的數據采集卡,大大降低了成本,使得信號的采集更加容易實現。
(1)性能良好的普通個人臺式機或筆記本電腦,要求帶有能正常工作的聲卡。
一般地,人耳的聽力范圍在20 Hz~20 kHz之間,因此,只要采樣頻率達到 20 kHz×2=40 kHz時,就可以滿足人們的要求。現時大多數聲卡的采樣頻率都已達到44.1 kHz或48 kHz,即已達到了CD音質水平。
(2)HKY-06B心音信號傳感器:采用新型高分子聚合材料微音傳感元件采集心臟搏動和其他體表動脈搏動信號,再經過高度集成化信號處理電路處理,輸出低阻抗音頻信號。可廣泛應用于各類心音采集設備。配合HKY06B-PC適配器與計算機聲卡連接,則可通過聲卡與計算機連接進行心音信號的采集錄音處理。
1.2.1 LabVIEW8.20程序開發軟件
LabVIEW8.20是美國國家儀器有限公司推出的LabVIEW圖形化開發平臺的新版本,提高了設計、控制和測試領域工程師的效率,同時包括對LabVIEW實時模塊、LabVIEW FPGA模塊、LabVIEW PDA模塊以及LabVIEW數據記錄和監控模塊的升級[6]。LabVIEW8.20提供大量完成信號產生、信號處理、信號分析及濾波器設計的子程序,結合普通PC聲卡可以方便地采集聲音信號。
1.2.2 MATLAB 7.0語言編譯平臺
MATLAB擁有強大的科學計算功能、完整的數字信號處理及圖形圖像工具箱支持,使系統的即時性和準確性得到有力的保證。應用范圍涵蓋了工業、電子、醫療以及建筑等領域,其主要特點如下[7]:
(1)MATLAB的基本單位為矩陣,其表達式與數學、工程計算中常用的形式類似,并且矩陣的行和列無需定義,可隨時添加或修改。
(2)MATLAB語言以解釋方式工作,對每條語句進行解釋后即運行,鍵入算式即得結果,無需編譯,對錯誤可立即做出反應,大大減少了編程和調試的工作。
(3)具有非常友好的人機界面。MATLAB語言規則與人們長期以來使用的在演算紙上進行演算的書寫習慣十分相似,易學易讀適于交流。
(4)具有強大的做圖和數據可視化功能。可以把數據以多種形式加以表現,非常簡單、直觀、方便。
(5)具有很強的可擴展性。MATLAB軟件包括MATLAB主程序和許多日益增多的工具箱,工具箱實際就是用MATLAB的基本語句編寫的各種子程序集,用于解決某一方面的專門問題或實現某一類的新算法。MATLAB還提供了與其他應用語言的接口,以實現數據的共享和傳遞。
系統結構框圖如圖1所示。

圖1 系統結構框圖
心音信號采集功能的實現是由LabVIEW控制計算機聲卡將傳感器得到的模擬信號轉換為數字信號并存儲在計算機中。從數據采集的角度,PC聲卡本身就是一個優秀的數據采集系統,它同時具有A/D和D/A轉換功能,不僅價格低廉,而且兼容性好、性能穩定、靈活通用,特別是軟件驅動程序升級方便。如果測量對象的頻率在音頻范圍(20 Hz~20 kHz)內,而且對采樣頻率等指標又沒有太高要求,就可以考慮使用聲卡。
LabVIEW中提供了一系列使用Windows底層函數編寫的與聲卡有關的函數,這些函數集中在Functions、All Function、Graphics&Sound、Sound下。由于使用 Windows底層函數直接與聲卡驅動程序打交道,因而封裝層次低、速度快,而且可以訪問、采集緩沖區中任意位置的數據,具有很大的靈活性,能夠滿足實時不間斷采集的需要。
如圖2所示,利用LabVIEW的函數控件和聲卡對語音信號進行采樣。圖中,SI Configure設置聲卡中與數據采集相關的硬件參數,將device設置為0,采樣位數為單聲道16位,采樣頻率為11 025 Hz,緩沖區長度為默認值8 192字節;SI Start通知聲卡開始采集外部數據;SI Read將數據緩沖區中的內容讀取到用戶程序的數組中,1次可讀取緩沖區長度的一半(4096字節);SIStop通知聲卡停止采集外部數據;SI Clear完成最終的清理工作。

圖2 聲音信號采集流程
2.2.1 小波分析理論
非平穩信號的表示方法除了短時Fourier變換和直接在聯合時頻平面上表征該信號外,也可以將頻率域的表征改為另外一個域 (如尺度域),而用聯合的時間和尺度平面來描述信號,這正是小波分析的基本思想。小波分析利用多種小波基函數對原始信號進行分解,運用小波基可以提取信號中的指定時間和指定頻率的變化。
信號小波變換的基本含義[8]是:將一個基本小波做尺度變換和時移后與待分析的信號進行內積。小波變換的最基本形式是連續小波變換。信號x(t)的連續小波變換 CWTx(a,b)定義為:


小波函數ψa,b(t)還可以定義為:


信號x(t)的連續小波變換 CWTx(a,b)還可以寫成:

式中,<x(t),ψa,b(t)> 表示信號x(t)和小波函數ψa,b(t)的內積。信號與小波函數內積示意圖如圖3所示。

圖3 信號與小波函數內積示意圖
可見,連續小波變換定量地表示了信號和小波系數中各個小波函數的相關程度。
對于平方可積的小波函數,如果將小波看成是L2(R)空間的基函數系,則連續小波變換定義為信號在該基函數系上的分解或投影。小波分解示意圖如圖4所示。
連續小波變換在頻域上還可以定義為:

式中,X(ω)、ψ(ω)分別為 x(t)、ψ(t)的傅里葉變換。

圖4 小波分解示意圖
可見,如果ψ(ω)具有帶通的幅頻特性,則連續小波變換可表示信號x(t)的局部頻域特性。采用不同的a值時,ψ(aω)的中心頻率和帶寬各不相同,但是品質因素 Q(Q=中心頻率/帶寬)卻保持不變。因此,不同尺度下的小波變換還可以理解為用一組品質因素相同的帶通濾波器對信號進行分析。
可見a越大(對應于頻率越低的情況)時,頻率分辨率越高,時間分辨率越差;反之,a越小(對應于頻率越低的情況)時,時間分辨率越高,頻率分辨率越差。小波變換的這種“變焦距”性質正好與信號的自然特征相吻合,這是小波變換適應于非平穩信號處理的一個主要原因[9]。
2.2.2 LabVIEW 中調用 MATLAB Script節點
LabVIEW使用ActiveX技術來實現MATLAB腳本節點。ActiveX是由Microsoft公司定義的用于Internet的一種對象鏈接與嵌入技術,它滿足了網絡上不同應用程序間交換信息的需求。LabVIEW中提供了各種與其他應用程序進行相互調用的方法,如ActiveX、DDE等事實上的標準接口方式。雖然可以通過這些方式實現在LabVIEW中調用MATLAB,但是過程相對繁瑣。NI公司為此提供了一種相對容易的方式,即MATLAB Script節點方式。這種方式是LabVIEW開發組推薦使用的方式。通過這種方式,用戶可以在LabVIEW中使用MATLAB強大的數值運算功能。
MATLAB Script節點如圖5所示,使用戶可以將MATLAB程序導入到流程圖中,又可以在流程圖中根據MATLAB程序的語法編輯MATLAB程序。選擇該節點的操作為:Functions>>Mathematics>>Formula Palette, 即從框圖窗口Function選項板的Mathematics/Formula子選項板上訪問MATLAB腳本節點,在將該節點添加到流程圖中后,選擇對應的腳本服務器。本文即選擇MATLAB Script。從選擇菜單中可以看出與其有關的菜單項。通過這些菜單可以將MATLAB程序導入到該節點并且可以給節點增加輸入輸出變量。添加節點后就可以按照MATLAB的語法要求在節點中編寫MATLAB程序,完成后通過單擊Export將程序保存到選定的目錄中。如果已經將MATLAB程序編好,則可以通過單擊Import直接將其導入到節點中。還可以對節點增加輸入、輸出變量,這些變量在程序運行時,起到在LabVIEW和MATLAB間傳遞參數的作用。MATLAB腳本節點與其外部LabVIEW框圖程序依靠腳本節點的輸入輸出來連接。可以在腳本節點的快捷菜單中選擇Add Input/Add Output添加輸入輸出。
在LabVIEW中調用MATLAB時有幾點必須注意[10]:
(1)LabVIEW使用ActiveX技術來實現MATLAB腳本節點,因此,MATLAB腳本節點只能用于Windows平臺上。
(2)MATLAB Script節點方式要求計算機上必須安裝MATLAB 5.0及以上版本,因為執行腳本節點時要調用MATLAB腳本服務器。
(3)因為LabVIEW和MATLAB是兩種不同的編程語言,有各自的數據類型定義,所以結合應用時必須注意MATLAB腳本節點內外數據類型的匹配,否則LabVIEW運行時將產生錯誤或錯誤的信息。可以為腳本點的輸入輸出端子從其快捷菜單上Choose Data Type中選擇合適的數據類型[11]。

圖5 MATLAB Script節點
2.2.3 使用 MATLAB進行小波降噪
采用小波變換對心音信號進行去噪時,需要考慮幾個因素:選用何種小波母函數、分解的層數和閉值的選取方法等。但在以上的3個步驟中,最關鍵的就是如何選取閾值和如何進行閾值的量化,它直接關系到信號消噪的質量。
MATLAB小波工具箱(Wavelet Toolbox)提供了許多小波分析功能函數,其中對一維信號提取的小波函數是wden函數,該函數最簡單的用法為:Sd=wden(s,tptr,sorh,scal,n,wav),它的返回值是經過對原始信號 s進行處理后的信號 Sd。另外,sorh指定軟閾值(sorh=‘s’)或硬閾值(sorh=‘h’)的選擇;scal定義了閾值是否需要調整:(scal=‘one’)時表示不需要調整,(scal=‘sln’)時表示根據第1層的系數進行1次噪聲層的估計來調整閾值,(scal=‘mln’)時表示在不同層估計噪聲層,以此來調整閾值;n為小波分解的層數;wav指定分解時所用的小波;tptr指定閾值選取規則:tptr=‘rigrsure’時,采用無偏估計原則進行適應性閾值選擇。tptr=‘heursure’時選用首次選擇的啟發式變量作為閾值。tptr=‘sqtwolog’時,選用 sqrt(2*log(length(x)))作為閾值;當 tptr=‘mini maxi’時,極大極小原理選擇閾值。
使用MATLAB小波工具箱只需要根據采集信號的特點選擇合適的函數和命令,就可以實現信號的降噪處理。經過對小波母函數的選擇、分解層數和閾值的選擇規則進行分析[12],經過多次實驗,提出采用coif5小波進行5層分解,選擇固定閾值處理心音信號效果最佳。降噪后的波形圖如圖6所示。

圖6 小波降噪前后心音對比
從仿真結果可以看出,利用LabVIEW與MATLAB小波工具箱結合進行編程能有效采集心音信號并且降低心音信號中的噪聲。對MATLAB程序的改進及開發將成為后續研究中分析聲音信號的重點。
在工程領域中,LabVIEW和MATLAB是風靡世界的2種語言,其中LabVIEW備受工程應用人員的青睞,被認為是圖形化編程語言的最優秀的代表;而MATLAB被稱為是最強大的工程計算語言。在醫學領域結合2種語言的特點,利用LabVIEW和MATLAB混合編程,實現了一個簡單的心音檢測分析系統,該系統編程方便、計算簡單、便于實現,是檢測分析心音的一條有效途徑。
[1]GEDDES L A.Birth of the stethoscope[J].Engineering in Medicine and Biology Magazine, 2005,24:84-86.
[2]KARNATH B,THORNTON W.Auscultation of the heart[J].Hospital Physician, 2002(9):39-43.
[3]XIANG Xue Jun, XIA Ping, YANG Sheng, et al.Realtime digital simulation of control system with LabVIEW simulation interface toolkit[C].Proceedings of the 26th Chinese Control Conference, July 26-31 2007:318-322.
[4]劉君華,郭會軍,趙向陽,等.基于LabVIEW的虛擬儀器設計[M].北京:電子工業出版社,2003.
[5]楊樂平,李海濤,趙勇,等.LabVIEW高級程序設計[M].北京:清華大學出版社,2003.
[6]劉剛,王立香,張連俊.LabVIEW8.20中文版編程及應用[M].北京:電子工業出版社,2008.
[7]初秀琴,何蕾,李玉山.MATLAB外部接口的研究與實現[J].計算機仿真,2002(1):107-109.
[8]汪源源.現代信號處理理論和方法[M].上海:復旦大學出版社,2002.
[9]岳宇.生物雷達檢測技術中心跳與呼吸信號分離技術的研究[D].西安:第四軍醫大學,2007.
[10]石博強.LabVIEW 6.1編程技術實用教程[M].北京:中國鐵道出版社,2002.
[11]ROBERT H.Bishop LabVIEW 6.1實用教程[M].喬瑞萍,譯.北京:電子工業出版社,2002.
[12]楊艷妮.基于MATLAB的心音信號分析比較研究[D].西安:陜西師范大學,2007.