李能禾,成謝鋒
(南京郵電大學(xué) 電子科學(xué)與工程學(xué)院,江蘇 南京 210003)
心臟病是人類健康的頭號(hào)殺手,而我國每年有幾十萬人死于心臟病。目前,心臟病的發(fā)病率逐年升高,已經(jīng)成為嚴(yán)重威脅人類健康的疾病之一。心音檢測(cè)和分析是了解心臟和大血管狀態(tài)的一種不可缺少的手段。心音信號(hào)是人體的重要聲音信號(hào)之一,含有關(guān)于心臟各個(gè)部分如心房、心室、大血管、心血管及各個(gè)瓣膜功能狀態(tài)的大量病理信息,是臨床評(píng)估心臟功能狀態(tài)的最基本方法,是心臟及大血管機(jī)械運(yùn)動(dòng)狀況的反映。當(dāng)心血管疾病尚未發(fā)展到產(chǎn)生臨床及病理改變(如ECG變化)之前,心音中出現(xiàn)的雜音和畸變就是重要的診斷信息。心音信號(hào)提取在心血管疾病中具有重要價(jià)值,是心血管疾病無創(chuàng)性檢測(cè)的重要方法,具有心電圖、超聲心電圖不可取代的優(yōu)勢(shì)。因此,運(yùn)用新技術(shù)進(jìn)行心音信號(hào)的提取一直是人們感興趣的研究方向[1-2]。
LabVIEW是美國國家儀器公司NI(National Instrument)的軟件產(chǎn)品。它是一個(gè)具有革命性的圖形化開發(fā)環(huán)境,內(nèi)置信號(hào)采集、測(cè)量分析與數(shù)據(jù)顯示功能,摒棄了傳統(tǒng)開發(fā)工具的復(fù)雜性。用LabVIEW開發(fā)的程序稱為虛擬儀器[3]。虛擬儀器是計(jì)算機(jī)技術(shù)與儀器技術(shù)結(jié)合的完美產(chǎn)物,代表儀器發(fā)展的方向。
但是,對(duì)于一些需要進(jìn)行大量數(shù)據(jù)運(yùn)算處理的復(fù)雜應(yīng)用,LabVIEW則顯得有些力不從心[4-5]。而MATLAB具有很強(qiáng)的工程計(jì)算功能,已經(jīng)成為應(yīng)用學(xué)科中的計(jì)算機(jī)輔助分析、設(shè)計(jì)、仿真等不可缺少的基礎(chǔ)軟件。因此,研究LabVIEW與MATLAB之間的混合編程,使它們?cè)诠δ苌匣パa(bǔ),具有實(shí)用價(jià)值。
傳統(tǒng)的心音圖儀完全沒有量化分析功能,在心音的存儲(chǔ)、處理上存在著較大的局限性,故臨床應(yīng)用較少。隨著數(shù)字技術(shù)的發(fā)展,國內(nèi)外再次出現(xiàn)心音研究的熱情,研究?jī)?nèi)容包括心音信號(hào)檢測(cè)、表示形式、分析、識(shí)別和模擬以及心音信號(hào)處理的臨床應(yīng)用。但是現(xiàn)有的心音檢測(cè)儀在功能上有很多不足,如:功能單一、體積較大、成本較高、存在較多人為誤差、測(cè)試時(shí)間太短等。
針對(duì)以上問題,本文所提出的方法利用了虛擬儀器的各種特點(diǎn),將LabVIEW與MATLAB強(qiáng)大的數(shù)據(jù)分析功能結(jié)合,實(shí)現(xiàn)心音信號(hào)的采集分析。并且該方法利用PC機(jī)的聲卡進(jìn)行采集,而不用市面上價(jià)格昂貴的數(shù)據(jù)采集卡,大大降低了成本,使得信號(hào)的采集更加容易實(shí)現(xiàn)。
(1)性能良好的普通個(gè)人臺(tái)式機(jī)或筆記本電腦,要求帶有能正常工作的聲卡。
一般地,人耳的聽力范圍在20 Hz~20 kHz之間,因此,只要采樣頻率達(dá)到 20 kHz×2=40 kHz時(shí),就可以滿足人們的要求?,F(xiàn)時(shí)大多數(shù)聲卡的采樣頻率都已達(dá)到44.1 kHz或48 kHz,即已達(dá)到了CD音質(zhì)水平。
(2)HKY-06B心音信號(hào)傳感器:采用新型高分子聚合材料微音傳感元件采集心臟搏動(dòng)和其他體表動(dòng)脈搏動(dòng)信號(hào),再經(jīng)過高度集成化信號(hào)處理電路處理,輸出低阻抗音頻信號(hào)。可廣泛應(yīng)用于各類心音采集設(shè)備。配合HKY06B-PC適配器與計(jì)算機(jī)聲卡連接,則可通過聲卡與計(jì)算機(jī)連接進(jìn)行心音信號(hào)的采集錄音處理。
1.2.1 LabVIEW8.20程序開發(fā)軟件
LabVIEW8.20是美國國家儀器有限公司推出的LabVIEW圖形化開發(fā)平臺(tái)的新版本,提高了設(shè)計(jì)、控制和測(cè)試領(lǐng)域工程師的效率,同時(shí)包括對(duì)LabVIEW實(shí)時(shí)模塊、LabVIEW FPGA模塊、LabVIEW PDA模塊以及LabVIEW數(shù)據(jù)記錄和監(jiān)控模塊的升級(jí)[6]。LabVIEW8.20提供大量完成信號(hào)產(chǎn)生、信號(hào)處理、信號(hào)分析及濾波器設(shè)計(jì)的子程序,結(jié)合普通PC聲卡可以方便地采集聲音信號(hào)。
1.2.2 MATLAB 7.0語言編譯平臺(tái)
MATLAB擁有強(qiáng)大的科學(xué)計(jì)算功能、完整的數(shù)字信號(hào)處理及圖形圖像工具箱支持,使系統(tǒng)的即時(shí)性和準(zhǔn)確性得到有力的保證。應(yīng)用范圍涵蓋了工業(yè)、電子、醫(yī)療以及建筑等領(lǐng)域,其主要特點(diǎn)如下[7]:
(1)MATLAB的基本單位為矩陣,其表達(dá)式與數(shù)學(xué)、工程計(jì)算中常用的形式類似,并且矩陣的行和列無需定義,可隨時(shí)添加或修改。
(2)MATLAB語言以解釋方式工作,對(duì)每條語句進(jìn)行解釋后即運(yùn)行,鍵入算式即得結(jié)果,無需編譯,對(duì)錯(cuò)誤可立即做出反應(yīng),大大減少了編程和調(diào)試的工作。
(3)具有非常友好的人機(jī)界面。MATLAB語言規(guī)則與人們長(zhǎng)期以來使用的在演算紙上進(jìn)行演算的書寫習(xí)慣十分相似,易學(xué)易讀適于交流。
(4)具有強(qiáng)大的做圖和數(shù)據(jù)可視化功能??梢园褦?shù)據(jù)以多種形式加以表現(xiàn),非常簡(jiǎn)單、直觀、方便。
(5)具有很強(qiáng)的可擴(kuò)展性。MATLAB軟件包括MATLAB主程序和許多日益增多的工具箱,工具箱實(shí)際就是用MATLAB的基本語句編寫的各種子程序集,用于解決某一方面的專門問題或?qū)崿F(xiàn)某一類的新算法。MATLAB還提供了與其他應(yīng)用語言的接口,以實(shí)現(xiàn)數(shù)據(jù)的共享和傳遞。
系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
心音信號(hào)采集功能的實(shí)現(xiàn)是由LabVIEW控制計(jì)算機(jī)聲卡將傳感器得到的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)并存儲(chǔ)在計(jì)算機(jī)中。從數(shù)據(jù)采集的角度,PC聲卡本身就是一個(gè)優(yōu)秀的數(shù)據(jù)采集系統(tǒng),它同時(shí)具有A/D和D/A轉(zhuǎn)換功能,不僅價(jià)格低廉,而且兼容性好、性能穩(wěn)定、靈活通用,特別是軟件驅(qū)動(dòng)程序升級(jí)方便。如果測(cè)量對(duì)象的頻率在音頻范圍(20 Hz~20 kHz)內(nèi),而且對(duì)采樣頻率等指標(biāo)又沒有太高要求,就可以考慮使用聲卡。
LabVIEW中提供了一系列使用Windows底層函數(shù)編寫的與聲卡有關(guān)的函數(shù),這些函數(shù)集中在Functions、All Function、Graphics&Sound、Sound下。由于使用 Windows底層函數(shù)直接與聲卡驅(qū)動(dòng)程序打交道,因而封裝層次低、速度快,而且可以訪問、采集緩沖區(qū)中任意位置的數(shù)據(jù),具有很大的靈活性,能夠滿足實(shí)時(shí)不間斷采集的需要。
如圖2所示,利用LabVIEW的函數(shù)控件和聲卡對(duì)語音信號(hào)進(jìn)行采樣。圖中,SI Configure設(shè)置聲卡中與數(shù)據(jù)采集相關(guān)的硬件參數(shù),將device設(shè)置為0,采樣位數(shù)為單聲道16位,采樣頻率為11 025 Hz,緩沖區(qū)長(zhǎng)度為默認(rèn)值8 192字節(jié);SI Start通知聲卡開始采集外部數(shù)據(jù);SI Read將數(shù)據(jù)緩沖區(qū)中的內(nèi)容讀取到用戶程序的數(shù)組中,1次可讀取緩沖區(qū)長(zhǎng)度的一半(4096字節(jié));SIStop通知聲卡停止采集外部數(shù)據(jù);SI Clear完成最終的清理工作。
圖2 聲音信號(hào)采集流程
2.2.1 小波分析理論
非平穩(wěn)信號(hào)的表示方法除了短時(shí)Fourier變換和直接在聯(lián)合時(shí)頻平面上表征該信號(hào)外,也可以將頻率域的表征改為另外一個(gè)域 (如尺度域),而用聯(lián)合的時(shí)間和尺度平面來描述信號(hào),這正是小波分析的基本思想。小波分析利用多種小波基函數(shù)對(duì)原始信號(hào)進(jìn)行分解,運(yùn)用小波基可以提取信號(hào)中的指定時(shí)間和指定頻率的變化。
信號(hào)小波變換的基本含義[8]是:將一個(gè)基本小波做尺度變換和時(shí)移后與待分析的信號(hào)進(jìn)行內(nèi)積。小波變換的最基本形式是連續(xù)小波變換。信號(hào)x(t)的連續(xù)小波變換 CWTx(a,b)定義為:
小波函數(shù)ψa,b(t)還可以定義為:
信號(hào)x(t)的連續(xù)小波變換 CWTx(a,b)還可以寫成:
式中,<x(t),ψa,b(t)> 表示信號(hào)x(t)和小波函數(shù)ψa,b(t)的內(nèi)積。信號(hào)與小波函數(shù)內(nèi)積示意圖如圖3所示。
圖3 信號(hào)與小波函數(shù)內(nèi)積示意圖
可見,連續(xù)小波變換定量地表示了信號(hào)和小波系數(shù)中各個(gè)小波函數(shù)的相關(guān)程度。
對(duì)于平方可積的小波函數(shù),如果將小波看成是L2(R)空間的基函數(shù)系,則連續(xù)小波變換定義為信號(hào)在該基函數(shù)系上的分解或投影。小波分解示意圖如圖4所示。
連續(xù)小波變換在頻域上還可以定義為:
式中,X(ω)、ψ(ω)分別為 x(t)、ψ(t)的傅里葉變換。
圖4 小波分解示意圖
可見,如果ψ(ω)具有帶通的幅頻特性,則連續(xù)小波變換可表示信號(hào)x(t)的局部頻域特性。采用不同的a值時(shí),ψ(aω)的中心頻率和帶寬各不相同,但是品質(zhì)因素 Q(Q=中心頻率/帶寬)卻保持不變。因此,不同尺度下的小波變換還可以理解為用一組品質(zhì)因素相同的帶通濾波器對(duì)信號(hào)進(jìn)行分析。
可見a越大(對(duì)應(yīng)于頻率越低的情況)時(shí),頻率分辨率越高,時(shí)間分辨率越差;反之,a越小(對(duì)應(yīng)于頻率越低的情況)時(shí),時(shí)間分辨率越高,頻率分辨率越差。小波變換的這種“變焦距”性質(zhì)正好與信號(hào)的自然特征相吻合,這是小波變換適應(yīng)于非平穩(wěn)信號(hào)處理的一個(gè)主要原因[9]。
2.2.2 LabVIEW 中調(diào)用 MATLAB Script節(jié)點(diǎn)
LabVIEW使用ActiveX技術(shù)來實(shí)現(xiàn)MATLAB腳本節(jié)點(diǎn)。ActiveX是由Microsoft公司定義的用于Internet的一種對(duì)象鏈接與嵌入技術(shù),它滿足了網(wǎng)絡(luò)上不同應(yīng)用程序間交換信息的需求。LabVIEW中提供了各種與其他應(yīng)用程序進(jìn)行相互調(diào)用的方法,如ActiveX、DDE等事實(shí)上的標(biāo)準(zhǔn)接口方式。雖然可以通過這些方式實(shí)現(xiàn)在LabVIEW中調(diào)用MATLAB,但是過程相對(duì)繁瑣。NI公司為此提供了一種相對(duì)容易的方式,即MATLAB Script節(jié)點(diǎn)方式。這種方式是LabVIEW開發(fā)組推薦使用的方式。通過這種方式,用戶可以在LabVIEW中使用MATLAB強(qiáng)大的數(shù)值運(yùn)算功能。
MATLAB Script節(jié)點(diǎn)如圖5所示,使用戶可以將MATLAB程序?qū)氲搅鞒虉D中,又可以在流程圖中根據(jù)MATLAB程序的語法編輯MATLAB程序。選擇該節(jié)點(diǎn)的操作為:Functions>>Mathematics>>Formula Palette, 即從框圖窗口Function選項(xiàng)板的Mathematics/Formula子選項(xiàng)板上訪問MATLAB腳本節(jié)點(diǎn),在將該節(jié)點(diǎn)添加到流程圖中后,選擇對(duì)應(yīng)的腳本服務(wù)器。本文即選擇MATLAB Script。從選擇菜單中可以看出與其有關(guān)的菜單項(xiàng)。通過這些菜單可以將MATLAB程序?qū)氲皆摴?jié)點(diǎn)并且可以給節(jié)點(diǎn)增加輸入輸出變量。添加節(jié)點(diǎn)后就可以按照MATLAB的語法要求在節(jié)點(diǎn)中編寫MATLAB程序,完成后通過單擊Export將程序保存到選定的目錄中。如果已經(jīng)將MATLAB程序編好,則可以通過單擊Import直接將其導(dǎo)入到節(jié)點(diǎn)中。還可以對(duì)節(jié)點(diǎn)增加輸入、輸出變量,這些變量在程序運(yùn)行時(shí),起到在LabVIEW和MATLAB間傳遞參數(shù)的作用。MATLAB腳本節(jié)點(diǎn)與其外部LabVIEW框圖程序依靠腳本節(jié)點(diǎn)的輸入輸出來連接。可以在腳本節(jié)點(diǎn)的快捷菜單中選擇Add Input/Add Output添加輸入輸出。
在LabVIEW中調(diào)用MATLAB時(shí)有幾點(diǎn)必須注意[10]:
(1)LabVIEW使用ActiveX技術(shù)來實(shí)現(xiàn)MATLAB腳本節(jié)點(diǎn),因此,MATLAB腳本節(jié)點(diǎn)只能用于Windows平臺(tái)上。
(2)MATLAB Script節(jié)點(diǎn)方式要求計(jì)算機(jī)上必須安裝MATLAB 5.0及以上版本,因?yàn)閳?zhí)行腳本節(jié)點(diǎn)時(shí)要調(diào)用MATLAB腳本服務(wù)器。
(3)因?yàn)長(zhǎng)abVIEW和MATLAB是兩種不同的編程語言,有各自的數(shù)據(jù)類型定義,所以結(jié)合應(yīng)用時(shí)必須注意MATLAB腳本節(jié)點(diǎn)內(nèi)外數(shù)據(jù)類型的匹配,否則LabVIEW運(yùn)行時(shí)將產(chǎn)生錯(cuò)誤或錯(cuò)誤的信息??梢詾槟_本點(diǎn)的輸入輸出端子從其快捷菜單上Choose Data Type中選擇合適的數(shù)據(jù)類型[11]。
圖5 MATLAB Script節(jié)點(diǎn)
2.2.3 使用 MATLAB進(jìn)行小波降噪
采用小波變換對(duì)心音信號(hào)進(jìn)行去噪時(shí),需要考慮幾個(gè)因素:選用何種小波母函數(shù)、分解的層數(shù)和閉值的選取方法等。但在以上的3個(gè)步驟中,最關(guān)鍵的就是如何選取閾值和如何進(jìn)行閾值的量化,它直接關(guān)系到信號(hào)消噪的質(zhì)量。
MATLAB小波工具箱(Wavelet Toolbox)提供了許多小波分析功能函數(shù),其中對(duì)一維信號(hào)提取的小波函數(shù)是wden函數(shù),該函數(shù)最簡(jiǎn)單的用法為:Sd=wden(s,tptr,sorh,scal,n,wav),它的返回值是經(jīng)過對(duì)原始信號(hào) s進(jìn)行處理后的信號(hào) Sd。另外,sorh指定軟閾值(sorh=‘s’)或硬閾值(sorh=‘h’)的選擇;scal定義了閾值是否需要調(diào)整:(scal=‘one’)時(shí)表示不需要調(diào)整,(scal=‘sln’)時(shí)表示根據(jù)第1層的系數(shù)進(jìn)行1次噪聲層的估計(jì)來調(diào)整閾值,(scal=‘mln’)時(shí)表示在不同層估計(jì)噪聲層,以此來調(diào)整閾值;n為小波分解的層數(shù);wav指定分解時(shí)所用的小波;tptr指定閾值選取規(guī)則:tptr=‘rigrsure’時(shí),采用無偏估計(jì)原則進(jìn)行適應(yīng)性閾值選擇。tptr=‘heursure’時(shí)選用首次選擇的啟發(fā)式變量作為閾值。tptr=‘sqtwolog’時(shí),選用 sqrt(2*log(length(x)))作為閾值;當(dāng) tptr=‘mini maxi’時(shí),極大極小原理選擇閾值。
使用MATLAB小波工具箱只需要根據(jù)采集信號(hào)的特點(diǎn)選擇合適的函數(shù)和命令,就可以實(shí)現(xiàn)信號(hào)的降噪處理。經(jīng)過對(duì)小波母函數(shù)的選擇、分解層數(shù)和閾值的選擇規(guī)則進(jìn)行分析[12],經(jīng)過多次實(shí)驗(yàn),提出采用coif5小波進(jìn)行5層分解,選擇固定閾值處理心音信號(hào)效果最佳。降噪后的波形圖如圖6所示。
圖6 小波降噪前后心音對(duì)比
從仿真結(jié)果可以看出,利用LabVIEW與MATLAB小波工具箱結(jié)合進(jìn)行編程能有效采集心音信號(hào)并且降低心音信號(hào)中的噪聲。對(duì)MATLAB程序的改進(jìn)及開發(fā)將成為后續(xù)研究中分析聲音信號(hào)的重點(diǎn)。
在工程領(lǐng)域中,LabVIEW和MATLAB是風(fēng)靡世界的2種語言,其中LabVIEW備受工程應(yīng)用人員的青睞,被認(rèn)為是圖形化編程語言的最優(yōu)秀的代表;而MATLAB被稱為是最強(qiáng)大的工程計(jì)算語言。在醫(yī)學(xué)領(lǐng)域結(jié)合2種語言的特點(diǎn),利用LabVIEW和MATLAB混合編程,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的心音檢測(cè)分析系統(tǒng),該系統(tǒng)編程方便、計(jì)算簡(jiǎn)單、便于實(shí)現(xiàn),是檢測(cè)分析心音的一條有效途徑。
[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]劉君華,郭會(huì)軍,趙向陽,等.基于LabVIEW的虛擬儀器設(shè)計(jì)[M].北京:電子工業(yè)出版社,2003.
[5]楊樂平,李海濤,趙勇,等.LabVIEW高級(jí)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.
[6]劉剛,王立香,張連俊.LabVIEW8.20中文版編程及應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[7]初秀琴,何蕾,李玉山.MATLAB外部接口的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)仿真,2002(1):107-109.
[8]汪源源.現(xiàn)代信號(hào)處理理論和方法[M].上海:復(fù)旦大學(xué)出版社,2002.
[9]岳宇.生物雷達(dá)檢測(cè)技術(shù)中心跳與呼吸信號(hào)分離技術(shù)的研究[D].西安:第四軍醫(yī)大學(xué),2007.
[10]石博強(qiáng).LabVIEW 6.1編程技術(shù)實(shí)用教程[M].北京:中國鐵道出版社,2002.
[11]ROBERT H.Bishop LabVIEW 6.1實(shí)用教程[M].喬瑞萍,譯.北京:電子工業(yè)出版社,2002.
[12]楊艷妮.基于MATLAB的心音信號(hào)分析比較研究[D].西安:陜西師范大學(xué),2007.