文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)12-0018-04
隨著我國人口老齡化的加快以及生活水平的提高,預(yù)計在今后的20年內(nèi),心血管疾病發(fā)病率將超過50%,如不加以控制,到2030年我國心血管疾病患者將增加2 000萬人以上,與之有關(guān)的死亡人數(shù)將增加700多萬人[1]。心臟聽診往往作為心血管疾病早期診斷的主要手段,但是采用傳統(tǒng)的聽診方式存在許多問題,比如難以捕捉和分辨微弱的生理信號,長時間聽診易造成聽力疲勞,診斷結(jié)果易受聽診者的主觀影響。近幾年來隨著科技的進(jìn)步興起了一些電子聽診器,比如美國BIOPAC公司生產(chǎn)的MP150型16通道生理信號記錄分析儀、日本OLYMPUS公司生產(chǎn)的單道心音數(shù)字錄音筆等。前者可以采集多個聽診部位的信號,數(shù)據(jù)更全面但是價格昂貴,且體積較大;后者的價格便宜,但波形顯示效果不好,不能同時提供多瓣膜病例信息。因此,如何通過工程技術(shù)手段實(shí)現(xiàn)設(shè)備的高效率、低成本以及便于使用等成為研究的熱點(diǎn)。
隨著嵌入式技術(shù)的不斷發(fā)展,特別是處理器運(yùn)算能力的不斷提升以及一些優(yōu)秀的圖形用戶界面軟件(如國產(chǎn)MiniGUI、Trolltech公司出品的Qt等)的出現(xiàn),使醫(yī)療設(shè)備更加小型化,使用也變得更加容易。本文以三星公司生產(chǎn)的基于ARM920T內(nèi)核的S3C2440A作為主控制器,以Linux為操作系統(tǒng),開發(fā)了四導(dǎo)心音采集顯示系統(tǒng)。
1 系統(tǒng)總體設(shè)計
系統(tǒng)總體結(jié)構(gòu)如圖1所示,包括以下幾個模塊:
(1)信號采集調(diào)理模塊,完成對主動脈、肺動脈、二尖瓣、三尖瓣心音信號的采集以及放大與去噪;(2)數(shù)字信號處理模塊,選用高性能的A/D芯片再配合CPLD的控制進(jìn)行模/數(shù)轉(zhuǎn)換,CPLD通過模擬SPI接口將數(shù)據(jù)傳給ARM9;(3)ARM9核心處理模塊,核心模塊主要由S3C2440A、64 MB SDRAM以及512 MB Nandflash 組成,完成對數(shù)據(jù)的接收保存,并通過10英寸液晶屏顯示心音波形,在Nandflash中單獨(dú)劃分出400 MB的空間來保存心音文件,通過移植USB Gadget驅(qū)動實(shí)現(xiàn)當(dāng)采集板通過USB接口插上電腦后能像U盤一樣讀取這400 MB空間中的內(nèi)容。
2 系統(tǒng)硬件設(shè)計
2.1 信號調(diào)理模塊設(shè)計
系統(tǒng)使用了美國3M公司生產(chǎn)的Littmann和ClassicIISE聽診頭,另外,在聽診頭上加入了一種新型的貼膜,不僅有利于粘住身體所測部位,而且能保證采集的音質(zhì)不變。心音傳感器模塊能將心臟搏動信號轉(zhuǎn)化為低阻抗音頻信號[2]。針對心音信號具有的信號微弱、易受干擾等特點(diǎn),首先要進(jìn)行初級放大以滿足后面濾波的需求,在經(jīng)過帶通濾波電路濾去不屬于心音信號頻帶的部分后,再經(jīng)工頻陷波電路,最后經(jīng)過主放大電路。
(1)前置放大電路采用了TI公司生產(chǎn)的一款低功耗、低噪聲、高輸入阻抗的運(yùn)算放大器TLC2252。電路如圖2所示,C1和R2組成的電路起到兩個作用:(1)阻止C1左端的直流電流通過;(2)允許心音傳感器輸出的交流小信號通過并傳遞給后面的放大器,C2、R3、R4、R5構(gòu)成同相放大電路,其具有輸入阻抗很高、輸出電阻很低的特點(diǎn),非常適合于前置放大電路。
(2)前置放大電路輸出的信號并不是純粹的心音信號,里面還含有一部分低頻信號,比如傳感器與皮膚的摩擦、呼吸噪音等[3]。當(dāng)采集時遇到咳嗽聲音、器件掉落的聲音可能會引入高頻噪聲。為了不影響心音信號的分析,必須將其濾除。在此設(shè)計了帶通濾波器,前面為二階壓控電壓源低通濾波器,低通濾波電路主要濾掉信號中高于心音信號頻率范圍的信號,低通濾波器的上限設(shè)為800 Hz。由于心音頻率的下線為2~5 Hz,為了不損失低頻分量,后面高通濾波器的截止頻率設(shè)置為2 Hz[4]。采用二階壓控電壓源低通濾波器,電路如圖3所示。
(3)系統(tǒng)采用電源適配器來供電,不可避免地引入了50 Hz的工頻干擾,而它正好落在心音信號的頻帶范圍內(nèi),因此需要采用50 Hz工頻陷波電路將其濾除。目前廣泛使用的對稱型雙T有源濾波陷波器,但是對稱型雙T有源陷波器對電路元件的對稱性要求較高,如不能滿足對稱性要求則會極大影響陷波器的中心頻率和Q值。因此,本系統(tǒng)采用二階無限增益多級反饋有源陷波器[5],如圖4所示,其中C7=C8=C,中心頻率的計算可參考式(1),Q值的計算可參考式(2)。
2.2 數(shù)字電路設(shè)計
考慮到轉(zhuǎn)化精度和采樣頻率,沒有采用S3C2440自帶的A/D,而是選用了Maxim公司的四通道、16位量化精度芯片MAX11044。它具有固定的轉(zhuǎn)換時間,能同時對四個通道采樣,采樣頻率最高可達(dá)250 kHz,可保證對心音信號進(jìn)行無失真采集。MAX11044輸入電壓范圍為-5 V~+5 V,輸入阻抗高達(dá)1 GΩ,對于適當(dāng)放大后的心音信號無需電平抬升及外圍阻抗匹配電路,可直接進(jìn)行采用量化,從而簡化外圍電路。
通過控制MAX11044的CONVST引腳拉低持續(xù)時間來達(dá)到對采樣頻率的設(shè)置。當(dāng)CONVST引腳為低時對模擬信號進(jìn)行捕捉;當(dāng)CONVST引腳為高時進(jìn)行轉(zhuǎn)換。由于心音信號的頻帶范圍在20~800 Hz以內(nèi),并依據(jù)耐奎斯特采樣定理和實(shí)際的硬件處理能力,A/D的采樣率設(shè)定為10 kHz。由于MAX11044數(shù)據(jù)輸出為并口,而且還需要多根控制線,在此選用Altera公司的CPLD芯片EPM570T144C5N作為數(shù)字電路控制核心,通過編寫Verilog程序來控制,主要功能包括:(1)接收ARM9發(fā)來的命令控制A/D開啟與關(guān)閉;(2)設(shè)置A/D的采樣頻率;(3)獲取A/D轉(zhuǎn)換的數(shù)據(jù);(4)模擬SPI接口將數(shù)據(jù)通過SPI接口傳送給ARM9。
3 系統(tǒng)軟件設(shè)計
3.1 驅(qū)動程序的設(shè)計
驅(qū)動程序是操作系統(tǒng)與硬件的直接接口,驅(qū)動程序屏蔽了硬件的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣對硬件進(jìn)行操作。在系統(tǒng)中S3C2440利用SPI接口來接收CPLD發(fā)來的數(shù)據(jù)。SPI是一種高速、全雙工、同步的通信總線,并且在芯片的管腳上只占用4根線, S3C2440芯片上集成了兩個SPI控制器,通過配置相關(guān)寄存器可以設(shè)置SPI的工作方式、主從關(guān)系、接收數(shù)據(jù)模式等??紤]到接收到的數(shù)據(jù)量大以及減少CPU的使用率,在此采用了DMA的數(shù)據(jù)接收方式,CPLD有數(shù)據(jù)就會自動發(fā)送過來,所以選擇讓ARM9做從設(shè)備。
驅(qū)動程序的接口用來描述驅(qū)動程序與設(shè)備的交互,當(dāng)應(yīng)用程序操作設(shè)備文件時調(diào)用open、read、write、close等函數(shù),最終會調(diào)用對應(yīng)的接口函數(shù),這些接口函數(shù)封裝在file_operations結(jié)構(gòu)中,其結(jié)構(gòu)如下:
static const struct file_operations spi_fops =
{ .owner= THIS_MODULE,//指向擁有該結(jié)構(gòu)的模塊
.open= spi_open,//打開設(shè)備接口函數(shù)
.read= spi_read,//讀接口函數(shù)
.release=spi_release,//釋放設(shè)備接口函數(shù)
};
(1)spi_open函數(shù)主要完成硬件的初始化工作,使用s3c2410_gpio_cfgpin()函數(shù)將所用到的引腳設(shè)置為SPI功能;開啟SPI時鐘,并且配置SPI有關(guān)的寄存器,主要包括讀寫模式、工作方式、主從關(guān)系等;由于使用了DMA的讀寫模式,因此需要配置相關(guān)的操作,包括設(shè)置DMA源和目的物理地址以及所在總線、緩存大小、傳輸模式;最后開啟DMA。
(2)當(dāng)應(yīng)用程序調(diào)用read時,spi_read函數(shù)將被執(zhí)行,在spi_read函數(shù)外,需要初始化等待隊列dma_waitq和全局變量ev_dma,在spi_read函數(shù)中首先調(diào)用wait_event_interruputible(dma_waitq, ev_dma)函數(shù)。ev_dma為等待條件,當(dāng)它為0時進(jìn)程將休眠;當(dāng)它為1時函數(shù)返回0,不休眠。當(dāng)DMA的緩存達(dá)到了設(shè)定的值時,將產(chǎn)生DMA中斷進(jìn)入中斷處理函數(shù)irqreturn_t DMA_irq(int irq,void *devid),在中斷函數(shù)中將全局變量ev_dma設(shè)置為1,并且調(diào)用wake_up_interruptible(&dma_waitq)函數(shù),它將喚醒dma_waitq等待隊列上休眠的進(jìn)程,然后在 spi_read函數(shù)中調(diào)用copy_to_user()函數(shù)把DMA緩存的數(shù)據(jù)拷貝到用戶空間。
(3)當(dāng)應(yīng)用程序調(diào)用close函數(shù)時,相當(dāng)于調(diào)用驅(qū)動程序中的spi_release函數(shù),主要是關(guān)閉DMA通道。
3.2 Qt程序的設(shè)計
Qt是一個跨平臺的C++圖形用戶界面程序開發(fā)框架,Qt開發(fā)的軟件移植性非常好,編寫好的代碼只需使用不同平臺的編譯器編譯,而不用修改代碼,即可運(yùn)行在不同的平臺。軟件使用了Qt/Embeded4.7以及擴(kuò)展庫Qwt來開發(fā)的,Qwt是一個基于Qt的擴(kuò)展類庫,包含了大量用于工程開發(fā)編程的GUI部件和輔助工具。除了二維繪圖控件類外,它還提供了諸如刻度、滑塊、轉(zhuǎn)盤等控件類供開發(fā)使用[6]。采用的Qwt版本是qwt-6.0.1。程序流程如圖6所示。
系統(tǒng)以Qt Creator為IDE,首先將Qwt導(dǎo)入Qt Creator中,利用交叉編譯工具進(jìn)行編譯生成ARM版本的動態(tài)鏈接庫,將這些鏈接庫拷貝到采集板文件系統(tǒng)的“/lib”目錄下。
3.2.1 界面布局及設(shè)置坐標(biāo)軸及背景網(wǎng)格
在布局界面中使用了Qt中的布局管理器生成一個.ui的文件,通過拖拉左邊的控件進(jìn)行布局,非常方便。
網(wǎng)格主要是描述畫布中X和Y軸的刻度劃分和網(wǎng)格線的顏色,用到了類庫中的QwtPlotGrid類;坐標(biāo)軸的設(shè)置主要是對橫軸、縱軸的刻度及其所代表的意思進(jìn)行設(shè)置。使用到的相關(guān)函數(shù)如下:
void QwtPlot::setAxisTitle(int axisTd, const QwtTex &);
void QwtPlot::setAxisScale(int axisId, double min,
double max, double step=0);
void QwtPlot::setBackgroundRole(QPalette::colorRole);
3.2.2 繪制波形
首先使用類庫中的QwtPlotCurve類生成4個繪圖工具,然后設(shè)置這4個繪圖工具的畫筆顏色以及依附的畫布,相關(guān)函數(shù)如下:
void QwtPlotCurve::setPen(const Qpen &);
void QwtPlotCurve::attach(QwtPlot *plot);
在點(diǎn)擊開始按鈕后就啟動了一個定時器,每過5 ms就會自動觸發(fā)一次timerEvent事件,在事件中通過調(diào)用read函數(shù)接收CPLD傳來的數(shù)據(jù)。由于一次接收到的數(shù)據(jù)是4個通道的64位二進(jìn)制數(shù),因此需要將它提取出來,對應(yīng)于每個通道轉(zhuǎn)換為十進(jìn)制,然后存放到y(tǒng)Data數(shù)組中。有了繪圖數(shù)據(jù),就可以通過調(diào)用QwtPlotCurve類的繪圖函數(shù)實(shí)現(xiàn)繪圖,關(guān)鍵函數(shù)是:void QwtPlotCurve::setRawSamples(const double *xData, const double *yData, int size);函數(shù)中xData和yData指針分別指向一個一維數(shù)組,size表示要在畫布上畫多少個點(diǎn)。在沒有外部中斷的情況下將循環(huán)畫圖,屏幕上會出現(xiàn)連續(xù)的波形。
3.2.3 按鍵事件
在本系統(tǒng)中有3個按鍵,分別是開始、停止、保存。當(dāng)點(diǎn)擊開始按鈕時將通過open函數(shù)打開spi_slave設(shè)備文件代碼為:fd = ::open(“/dev/spi_slave”, O_RDWR); O_RDWR表示以只讀方式打開文件,fd為open函數(shù)返回的文件描述符。點(diǎn)擊停止按鈕時將調(diào)用close函數(shù)停止接收數(shù)據(jù)并對屏幕清屏。當(dāng)點(diǎn)擊屏幕上的保存按鈕時將彈出一個軟件盤,提示輸入要保存文件的名字,點(diǎn)擊確認(rèn)之后文件將以txt格式被保存在“/mnt/udisk”目錄中,最后將接收到的全部數(shù)據(jù)寫入剛才創(chuàng)建的文件中。
本文設(shè)計了四導(dǎo)心音采集顯示系統(tǒng),采用4個聽診頭同時檢測臨床4個聽診部位(主動脈瓣、肺動脈瓣、三尖瓣和二尖瓣)的心音信號。從硬軟兩方面詳細(xì)闡述了系統(tǒng)的設(shè)計流程。通過觸摸屏來操作硬件非常方便,性價比高。本設(shè)計為后續(xù)的心音分析提供了可靠的數(shù)據(jù)。
參考文獻(xiàn)
[1] 周婷玉,施元雪.新華網(wǎng).我國成立“國家心血管病中心” [N/OL].(2010-08-13)[2013-4-20].http://news.xinhuanet. com/2010-08/13/c_13444113.htm.
[2] 周紅標(biāo),蔣鼎國,柯永斌,等.基于STC單片機(jī)和LabVIEW的心音信號檢測系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(1):31-33.
[3] 王曉燕,曾慶寧,栗秀尹.基于FPGA的心音信號采集[J].微型機(jī)與應(yīng)用,2012,31(11):28-30.
[4] 邢素霞,陳天華.基于DSP的心音信號采集與分析[J].生物醫(yī)學(xué)工程學(xué)雜志,2011,28(2):273-276.
[5] 史志懷,萬遂人.腦電信號采集中工頻陷波電路的設(shè)計[J]. 醫(yī)療裝備,2009,22(11):12-13.
[6] 盧華偉.基于Qt/Qwt的操作監(jiān)控系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].微計算機(jī)信息,2010,26(1):72-74.