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