摘 要: 研制一款便攜式心電監(jiān)護系統(tǒng)對于預(yù)防老年人群的心腦血管疾病有著十分重要的意義,。本文設(shè)計中使用了當(dāng)前比較流行的三星公司ARM11系列的低功耗,、功能強大的S3C6410作為心電監(jiān)護系統(tǒng)的核心控制單元,并在ARM平臺上設(shè)計擴展一塊心電信號采集及處理板,,剪切并移植打包了開源的Linux操作系統(tǒng),。在嵌入式Linux系統(tǒng)平臺上構(gòu)建的便攜式心電監(jiān)護系統(tǒng),能夠?qū)崿F(xiàn)人體心電信號的實時采集,、實時心率計算,、實時交互的GUI界面顯示等功能。測試結(jié)果表明,,便攜式心電監(jiān)護系統(tǒng)的各功能正常,,性能良好,,工作性能達到系統(tǒng)設(shè)計要求。
關(guān)鍵詞: ARM,;心電監(jiān)護,;便攜式;嵌入式Linux
0 引言
隨著中國人口老齡化逐漸嚴重,,心腦血管疾病的發(fā)病率大大提升,研制一款便攜式心電監(jiān)護系統(tǒng)對于預(yù)防老年人群的心腦血管疾病有著十分重要的意義[1],。本文結(jié)合飛速發(fā)展的嵌入式Linux系統(tǒng),,使用當(dāng)前比較流行的三星公司ARM11系列的低功耗、功能強大的S3C6410作為心電監(jiān)護系統(tǒng)的核心控制單元,,在ARM平臺上移植了嵌入式Linux系統(tǒng),,在該平臺上開發(fā)便攜式心電監(jiān)護系統(tǒng),實現(xiàn)對人體心電信號的實時采集,、實時心率計算,、實時交互的GUI界面顯示等功能。主要介紹了便攜式心電監(jiān)護系統(tǒng)的軟硬件設(shè)計與實現(xiàn),。
1 系統(tǒng)硬件設(shè)計與實現(xiàn)
嵌入式系統(tǒng)硬件由心電信號調(diào)理電路和嵌入式系統(tǒng)兩部分構(gòu)成,。這兩部分既相互獨立又緊密聯(lián)系,兩者協(xié)同工作,。嵌入式系統(tǒng)是整個硬件的核心,,它控制整個系統(tǒng)外圍設(shè)備進行工作,而心電調(diào)理電路則為后端的嵌入式系統(tǒng)提供純凈的心電信號,。
1.1 心電采集與調(diào)理電路設(shè)計
通過人體電極采集人體的心電信號,,信號由導(dǎo)聯(lián)線傳送給儀表放大電路進行一級放大,從儀表放大電路輸出兩路信號分別傳送至左腿驅(qū)動電路和高通濾波電路,,左腿驅(qū)動電路輸出的信號反饋到左腿電極進一步消除共模信號,,高通濾波器將信號中的超低頻信號濾除,然后將信號傳送到主放大電路進行二級放大,。放大后的信號傳送到低通濾波器濾除信號中的高頻噪聲,,從低通濾波器輸出的信號傳送入工頻陷波電路,去除信號中交流電產(chǎn)生的50 Hz干擾,,最后信號被送入電平提升電路,。這個電路主要是給心電信號加入一個直流分量,使信號被ADC采樣后不會失真,。圖1是心電信號調(diào)理電路的模塊圖,,主要由以下幾個模塊組成:
(1)人體電極,,采用一次性黏貼型傳導(dǎo)電極,。
?。?)心電導(dǎo)聯(lián)線,采用自編三絞線,,編織成三角形狀的導(dǎo)聯(lián)線可以消除部分干擾,,減小心電信號的失真。
?。?)儀表放大電路,,采用亞諾德半導(dǎo)體(AD)公司生產(chǎn)的單電源儀表放大器AD620。AD620在電源供電為±5 V時,,允許的最大輸出電壓范圍是±3.8 V,,而心電信號的幅值在±5 mV之間,加上體表和心電電極產(chǎn)生的±300 mV共模直流偏移電壓,,所以AD620可以設(shè)置最大的增益為12.88[2],。本設(shè)計將增益設(shè)置為10,RG設(shè)置為5 k,。
?。?)左腿驅(qū)動電路,采用方向放大電路,,兩個輸入端電壓相等并等于0,,故沒有共模輸入信號[3]。因此,,左腿驅(qū)動電路對共模抑制沒有要求,,在放大器選擇上也沒有嚴格要求,本設(shè)計采用的是AD公司生產(chǎn)的常用運算放大器OP07,。
?。?)高通濾波器,高通濾波電路仍沿用左腿驅(qū)動電路中使用過的運算放大器OP07作為放大器件,,高通濾波部分采用帶內(nèi)幅頻特性曲線平坦的一階有源巴特沃思濾波器,。
(6)主運算放大電路,,ADC轉(zhuǎn)換器采用ARM自帶的10位AD,。實際電路中,將前后兩級放大電路的增益設(shè)定為1 000倍,。
?。?)低通濾波電路,采用OP07運算放大器,,采用二階有源巴特沃思低通濾波器,,以提高濾波器幅頻曲線的下降速度。
?。?)工頻陷波電路,,濾除對心電信號影響嚴重的交流電50 Hz工頻干擾,。
(9)電平提升電路,,將從前面電路輸出的心電信號提升一個直流分量,,使得心電信號的負值部分全部轉(zhuǎn)換成正電平信號。這樣就解決了因ADC采樣而造成的信號丟失,,避免了ADC采樣后心電信號的失真,。
1.2 數(shù)字電路設(shè)計
數(shù)字電路部分是便攜式心電監(jiān)護系統(tǒng)后期對信號處理并實現(xiàn)與用戶交互的核心部分。心電信號由模擬電路的輸出端送入ADC轉(zhuǎn)換器后,,實現(xiàn)了從模擬信號處理到數(shù)字信號處理的轉(zhuǎn)換,。這一轉(zhuǎn)換方便了后期對心電信號的實時采集、實時心率計算,、實時傳輸以及實時顯示,。數(shù)字部分由OK6410的核心板構(gòu)成的嵌入式最小系統(tǒng),,以及底板上的ADC電路,、LCD控制電路、SD卡接口電路和以太網(wǎng)接口電路等組成,。數(shù)字電路部分組成框圖如圖2所示,。
(1)嵌入式最小系統(tǒng),,以內(nèi)核為ARM11 76JZF-S的S3C6410微處理器為中心,,周圍有與之相配接的復(fù)位電路、時鐘電路,、輔助電源,、SDRAM電路以及Flash電路等,保證嵌入式微處理器能夠正常運行系統(tǒng),。OK6410核心板提供了四個不同的晶振源,,復(fù)位電路使用了專業(yè)的復(fù)位芯片Max811,S3C6410微處理器需要多種電源供電,,所以核心板每一路電源輸入由電源芯片單獨供電,。同時,S3C6410外擴了一個256 MB的DAND Flash存儲器和一個128 MB的Mobile DDR內(nèi)存,。
?。?)ADC電路,S3C6410處理器內(nèi)置了一個參考電壓為3.3 V的10位A/D,,這個內(nèi)置的A/D可以滿足心電信號采樣對A/D分辨率的要求,,同時A/D的電壓與S3C6410的電源電壓相匹配,使A/D的位數(shù)得到充分的利用,。將從信號預(yù)處理模塊輸出的心電信號接入S3C6410的ADC輸入引腳,,再通過相應(yīng)的軟件處理,,就可以將模擬信號轉(zhuǎn)換為數(shù)字信號。本設(shè)計使用一路A/D,,所以將模擬電路輸出的信號接入S3C6410的ADCIN0引腳即可,。
(3)LCD控制電路,,由MAX202E和RS232 DB-9針母座構(gòu)成串口電路,。串口電路的驅(qū)動選用MAXIM公司專為苛刻環(huán)境下進行RS-232通信設(shè)計的MAX202E線驅(qū)動/接收器芯片。其中,,MAX202E的兩個驅(qū)動器T1O,、T2O分別與RS-232的接收數(shù)據(jù)端RXD和允許發(fā)送端CTS相連;兩個接收器R1IN和R2IN分別與發(fā)送數(shù)據(jù)端TXD和請求發(fā)送端RTS相連,。
?。?)以太網(wǎng)口電路,采用Davicom公司生產(chǎn)的10/100 M以太網(wǎng)控制器DM9000芯片,,DM9000的SD0~SD15與S3C6410的數(shù)據(jù)總線DATA0~DATA15相連,,DM9000的命令/數(shù)據(jù)使能端CMD與S3C6410的共同地址線ADDR2相連。
?。?)SD卡接口電路,,OK6410開發(fā)板集成了一個SD卡座CON2。本設(shè)計使用SD卡啟動S3C6410處理器,,將U-boot放入SD卡中,,由SD卡啟動從而引導(dǎo)加載Linux內(nèi)核。
2 系統(tǒng)軟件設(shè)計與實現(xiàn)
2.1 嵌入式Linux系統(tǒng)的移植
嵌入式Linux系統(tǒng)是在Linux系統(tǒng)基礎(chǔ)上針對嵌入式系統(tǒng)進行內(nèi)核裁減和優(yōu)化后形成的一種小型操作系統(tǒng)[4-5],。本設(shè)計采用嵌入式Linux作為操作系統(tǒng),,選用Linux3.01內(nèi)核在嵌入式S3C6410上移植。具體的移植過程如下:
?。?)配置開發(fā)環(huán)境,。使用安裝Ubuntu12.10操作系統(tǒng)的PC作為主機,安裝GNU Tools跨平臺開發(fā)工具鏈以及arm-linux-gcc,、arm-linux-ld等交叉編譯工具,。
(2)建立引導(dǎo)加載程序Boorloader,,采用DAND Flash方式啟動U-boot,。
(3)解壓內(nèi)核源碼,,然后進到內(nèi)核源碼修改Makefile文件,,添加對arm的支持:將“arch=”和“CROSS_COMPILE=”改為“arch=arm”和“CROSS_COMPILE=arm”[6]。
?。?)配置內(nèi)核,。通過命令“make menuconfig”進入配置欄進行配置,。本設(shè)計需針對A/D轉(zhuǎn)換驅(qū)動、觸摸屏驅(qū)動進行配置,。
?。?)執(zhí)行“make zImage”命令,進行內(nèi)核編譯,。將編譯后在“arch/arm/boot/”目錄下生成的U-boot格式的內(nèi)核映像文件“zImage”下載到目標(biāo)板上,。
(6)編譯并安裝BusyBox,,建立根文件系統(tǒng),。執(zhí)行命令:./mkyaffsimage sdrootfs/rootfs.yaffs2生成yaffs2鏡像文件并下載到目標(biāo)板上。
2.2 應(yīng)用程序的設(shè)計與實現(xiàn)
本系統(tǒng)所實現(xiàn)的應(yīng)用程序模塊有心電采集模塊,、心率計算模塊及GUI用戶界面模塊,。這些應(yīng)用程序在嵌入式操作系統(tǒng)環(huán)境下運行,通過驅(qū)動設(shè)備程序提供的接口來控制ADC,、LCD,、蜂鳴器等設(shè)備。
?。?)心電采集模塊,。通過控制ADC進行采樣,,將模擬信號轉(zhuǎn)換得到的數(shù)字信號讀入數(shù)據(jù)緩存區(qū),,方便后面的模塊對數(shù)據(jù)進行下一步的處理。本設(shè)計采用給PWM定時器和A/D采樣分別建立一個單獨的線程的方法,,在需要進行采樣時由PWM定時器線程通過pthread_cond_sigal()函數(shù)喚醒A/D采樣線程,。心電監(jiān)護開始后,由主程序建立PWM定時器和A/D采樣線程,,在開始采樣之前,,首先對ADC進行初始化并啟動ADC和PWM定時器,PWM功能是由Timer0和Timer提供,。為了保證系統(tǒng)工作的實時性和可靠性,,本設(shè)計采集模塊采用兩個數(shù)據(jù)緩存交替存儲數(shù)據(jù),避免了采集的新數(shù)據(jù)將其他模塊沒有處理完的數(shù)據(jù)覆蓋,。心電采集模塊流程如圖3所示,。
(2)心率計算模塊,。心率在標(biāo)準(zhǔn)心電信號中表現(xiàn)為每分鐘出現(xiàn)R波的次數(shù),。心率計算模塊根據(jù)采集的心電信號計算出用戶的實時心率。式(1)為計算實時心率的公式,。
X=(NR-1)/(PLR-PFR)×(60×fs)(1)
其中,,X為所求心率,;fs為心電信號采集頻率;NR為某段時間內(nèi)心電信號R波的個數(shù),;PLR為該段時間內(nèi)最后一個R波的位置,;PFR為該段時間內(nèi)第一個R波的位置。
因此,,只要檢測出一分鐘里R波的個數(shù)就可以算出心率值,。目前,較為流行的檢測算法是閾值差分算法,。這種算法實現(xiàn)簡單,,檢測率高而且速度很快,但缺點是一旦確定了一個閾值后就不再更新閾值,,如果閾值在計算過程中出現(xiàn)錯誤,,將導(dǎo)致整個R波檢測過程的可靠性下降。為此,,本文在該算法基礎(chǔ)上提出了一種改進的R波檢測差分閾值算法,。
該算法涉及了ADC采樣問題。本文在A/D采樣時,,對采樣值做了一個滑動平均濾波處理,,即利用A/D底層驅(qū)動在read函數(shù)中進行十次A/D采樣并取平均值,這樣ADC的采樣頻率就相當(dāng)于1 000 Hz,。由于正常人的心率范圍是60~100次/min,,一個心跳周期的采樣點為60~100點,取其上限,,所以100個采樣點至少包含一個心跳周期,。若在此期間沒有檢測到R波,則可判斷心率存在問題,。在計算閾值時,,取4 s內(nèi)的400個點,以100個點作為一小段,,分成4段,,根據(jù)二階差分公式(2)計算出4段的最小值平均值,將這個值的0.6倍與當(dāng)前閾值進行加權(quán)求和即可得到閾值的計算公式,,如式(3),。
y(n)=x(n+2)-2x(n)+x(n-2)(2)
th2=(1-a)×th2′+0.6a×ymin (3)
式中,x(n)表示原始心電數(shù)據(jù)序列,;y(n)為對應(yīng)的二階差分序列,;ymin是4段最小值的平均值;th2′是當(dāng)前二階差分閾值;th2為更新后的二階差分閾值,;a是加權(quán)系數(shù),,滿足a<1。
計算出閾值后,,將這些二階差分數(shù)據(jù)每L個作為一組,,當(dāng)連續(xù)的四個數(shù)據(jù)滿足前兩個數(shù)據(jù)大于th2,后兩個數(shù)據(jù)小于th2,,則建立一個以首個數(shù)據(jù)為區(qū)間起點的長度為5的檢測區(qū)間,。在檢測區(qū)間對應(yīng)的原始心電信號數(shù)據(jù)中找到最大值,這個值所對應(yīng)的位置即為R波的位置,。
這種改進的檢測R波差分閾值算法可以避免因為某次二階差分閾值計算不準(zhǔn)確而導(dǎo)致檢測結(jié)果錯誤,。同時,在閾值計算時取最近4 s的400個點來計算閾值避免了頻繁的閾值更新,。心率計算模塊的軟件流程圖如圖4所示,。
(3)GUI用戶界面模塊,。采用宿主機/目標(biāo)板交叉模式開發(fā)基于Qt的嵌入式GUI用戶界面[7],。開發(fā)的主要流程是:
①把Qt4.8.5移植到宿主機上,,并將波形圖生成插件QWT(Qt Widgets for Technical Applications)移植到Ubuntu上,。
②將Qt源碼解壓到目標(biāo)板上,,配置“configure”文件,,完成Qt的交叉編譯。
?、墼谒拗鳈C上的Qt里建立一個名為“ecgdemo”的工程文件,,并在該文件中添加一個名為“mainwindow.cpp”的文件,,在這里可以對顯示界面的字體,、調(diào)色板、畫刷,、窗口里的字體顏色進行設(shè)置[8],。
④通過panel的構(gòu)造函數(shù)對一些面板內(nèi)部部件進行初始化,,增加Value,、Plot、Canvas,、Curve和Tools 5個標(biāo)簽,,定義信號與槽的連接,實現(xiàn)panel與plot的交互,即實現(xiàn)了面板和繪圖組件的交互,。
3 測試結(jié)果
將心電導(dǎo)聯(lián)線黏貼在人體左手,、右手和左腿的電極上,通過電極采集的心電信號由導(dǎo)聯(lián)線傳送到預(yù)處理模塊,,再經(jīng)過ARM系統(tǒng)板處理,,最后在LCD上顯示。使用系統(tǒng)測試一個正常人的實時心電信號及實時心率如圖5和圖6所示,。
經(jīng)測試,,獲取的心電信號比較穩(wěn)定,噪聲很小,,而且能夠?qū)崟r計算出心率,,基本實現(xiàn)了設(shè)計要求。
參考文獻
[1] 張嘯飛,,胡大一,,丁榮晶,等.中國心腦血管疾病死亡現(xiàn)況及流行趨勢[J].中國心血管病雜志,,2012,,40(3):179-187.
[2] 李奧偉,尚煥亮,,夏雪珩.基于AD620的簡易心電圖儀的設(shè)計[J].電子設(shè)計技術(shù),,2013(10):32-33.
[3] WINTER B B, WEBSTER J G. Driven-right-leg circuit design[J]. IEEE Transactions on Biomedical Engineering,, 1983,, 30(1):62-66.
[4] 李亞峰,歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通[M].北京,,清華大學(xué)出版社,,2007.
[5] 王小寧,王振臣,,張少兵.Linux操作系統(tǒng)在ARM9處理器上的移植[J].化工自動化及儀表,,2010,37(2):67-69.
[6] 陳鐵軍,,魏超,,賈東明.基于ARM9的心電監(jiān)護系統(tǒng)[J].中國組織工程研究與臨床康復(fù),2011,,15(17):3156-3159.
[7] 游燕珍,,趙國鋒,徐川.基于Qt/E的嵌入式GUI的研究及其移植[J].微計算機信息,,2008(5):61-63.
[8] Liu Ting,, DASIEWICZ P. Incorporating a contract-based test facility to the GUI framework[C]. IEEE Canadian Conference, Canadian, 2004,,1(5),,405-408.