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