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