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