??? 摘 要: 介紹了一種基于現場可編程門陣列(FPGA)的實時心電" title="心電">心電監護系統。該系統采用FPGA為中央數字處理器,采用硬件描述語言(VHDL)進行結構化設計,實現了心電信號(ECG)的實時采集、處理和傳送。同時還在芯片內集成了數字濾波和數據壓縮存儲算法,實現心電信號的實時處理和壓縮。
??? 關鍵詞: FPGA? 心電信號? 實時監護
?
??? 近年來隨著數字信號處理技術的發展,心電監護系統得到了較快的發展。但是現有的監護系統多采用單片機作為中央處理器,不但處理速度慢,而且功耗和體積大,實時性差。針對便攜式心電監護系統需滿足的處理速度快、功耗低和微型化等要求,本系統選擇了FGPA為中央處理器,進行心電數據的采集和處理,使系統具有實時采集、處理、存儲以及發送心電數據等功能。
1 系統硬件組成
??? 系統的硬件部分以XILINX的低成本型SpartanTM-3器件XC3S400-4TQ144C[1]為核心,主要包括ECG信號濾波放大電路、QRS波檢測電路、FPGA控制系統等。其硬件構成如圖1所示。
????????????????????? 
1.1 濾波放大電路
??? 濾波放大電路的作用是從噪聲中提取心電信號,并把它放大到合適的電平以提供給A/D" title="A/D">A/D轉換電路。
??? 前置放大電路選用儀表放大器AD620,放大倍數為11。主放大電路和后置放大電路放大倍數分別設計為50、1~3。整個電路放大倍數為550~1650連續可調。
??? 高通濾波器采用無源RC濾波器;采用運放TLC2254設計了由4個二階壓控電壓源(VCVS)低通濾波器級聯構成的八階低通濾波器。
1.2? A/D轉換電路
??? 本系統對心電信號進行數字化處理的分辨率為12位。FPGA擁有豐富的I/O口,所以選擇轉換方式為并行,采樣頻率為1kHz。本系統對A/D的速度、精度都沒有特殊要求,需考慮的主要是體積、低供電電壓和功耗。經比較最終選用了MAXIM公司的并行接口A/D轉換器MAX1297。將其并行接口以及控制信號" title="控制信號">控制信號與FPGA相連,由FPGA提供芯片所要求的轉換時鐘以及控制信號。
1.3 R波檢測電路
??? R波的檢測分為硬件和軟件檢測。相對于軟件實現來說,采用硬件實現R波檢測具有速度快、實時性好、結構簡單的優點。系統中,R波檢測電路由跟隨器、QRS濾波器、整波電路、峰值保持電路和比較器組成[2]。預處理后的心電信號經R波檢測電路被轉換為方波信號,再輸入FPGA進行處理。
2 FPGA實現的主要功能
??? 如圖2所示,FPGA 內部主要有A/D控制模塊、SRAM控制模塊、FIR濾波模塊、心電數據壓縮模塊、時鐘產生模塊和串口通信模塊。
????????????????????? 
2.1 A/D控制
??? 由于選用的A/D芯片為雙通道,所以內部模塊也按照兩通道來設計,分別為outdata1和outdata2,數據為12位,CLK端口接外部時鐘接口,該模塊內部嵌入了時鐘產生模塊,輸入50MHz信號,輸出ad_clk信號為400kHz,占空比為50%。在本模塊中每400個周期對CH0和CH1通道分別取一個點,輸出到outdata1和outdata2,采樣率為400kHz/400=1kHz。該模塊的頂層圖和功能仿真如圖3所示。
?????????????????????? 
2.2 數字濾波
??? 為了進一步濾除因前置處理電路而加重的工頻干擾,本系統集成了分布式FIR數字濾波器[3]。
2.3 SRAM 控制
??? 系統中配置的是256K×16bit的SRAM、18位地址線、16位數據線,CS、OE和WE分別作為SRAM的片選信號、讀使能和寫使能信號,這三個信號均為低電平有效,由UB和LB分別控制每次讀寫的是高字節還是低字節。本文依據該芯片的功能在FPGA內部設計了SRAM控制模塊,其頂層圖如圖4所示。
???????????????????????? 
??? 該模塊中的控制信號有ram_ce、ram_full、ram_lb、ram_oe、ram_ub、ram_we。其中ram_ce用于給SRAM芯片提供片選信號,ram_full用于標示SRAM存儲器中的空間,ram_oe信號用于給外部SRAM芯片輸出使能信號;ram_we用于給外部SRAM芯片讀寫控制信號;外部SRAM芯片的I/O0-I/O15為16位數據線,模塊中用兩個信號ram_ub和ram_lb分別控制其高字節和低字節。
??? 該模塊中用到的時鐘信號有兩個,一個是SRAM寫時鐘ram_wclk,一個是SRAM讀時鐘ram_rclk,這兩個時鐘均由時鐘產生模塊生成。因為SRAM的寫入數據是A/D轉換后的數據,所以ram_wclk寫時鐘應該與AD的數據頻率一致為1kHz。從SRAM讀數據時,是讀給后面的心電數據壓縮模塊處理,系統中的心電數據處理模塊的時鐘為50MHz,所以讀數據時,采用50MHz,這樣可以最大限度地提高系統的實時性。
??? 模塊中有兩個地址信號: dsp_addr<17:0>和ram_addr<17:0>。dsp_addr<17:0>來自心電數據壓縮模塊,ram_addr<17:0>是用于給外部SRAM芯片地址信號。
??? 該模塊的數據信號有三個:ad_wdata<11:0>、dsp_rdata<11:0>和ram_data<11:0>。這三個數據信號分別與前面的AD轉換模塊、后面的心電數據壓縮模塊及FPGA外部的SRAM芯片連接。
2.4?心電數據的壓縮和通信
??? 為了能實時存儲和傳送足夠長的有用信號,對采集的ECG信號必須采取一定的壓縮處理,為此該系統還集成了LADT數據壓縮算法模塊[3]。LADT模塊的輸入端口有三個,分別為數據輸入端口dsp_data_in<11:0>、系統時鐘端口dsp_clk和全局停止信號rst;輸出端口有兩個:數據輸出端口dsp_data_out<11:0>和送給SRAM的地址信號dsp_addr<17:0>。該模塊的頂層圖和仿真結果如圖5所示。
???????????????????????????? 
??? 依據UART的通信原理在FPGA內部設計了異步通信模塊,用于最終將實時壓縮處理后的數據上傳給上位機處理。異步通信模塊的幀格式是8位數據位,一個起止位,一個停止位。其中波特率為可調,由時鐘發生模塊給予時鐘信號。
??? 發送模塊" title="發送模塊">發送模塊中,din<7:0>為并行數據輸入;clk16×為時鐘信號,由時鐘產生模塊給予,在時鐘發送模塊中該時鐘信號可調;rst為復位信號(復位信號“1”);wrn為數據傳輸控制信號(信號為下降沿時,讀入數據);sdo為串行數據" title="串行數據">串行數據輸出。并串轉換后,在傳送之前加一位起止位、停止位后,再通過對發送模塊其他一些控制信號的編寫,就完成了整個發送模塊的設計。該模塊的頂層圖和仿真結果如圖6所示。
???????????????????????????? 
??? 當系統接收到上位機通過串行通信接口發送來的串行數據時,要將其轉化為FPGA內部使用的并行數據,所以接收模塊的主要作用是用于串-并轉換。接收模塊中,clk16×為時鐘控制信號;rst為復位信號(當rst為“1”時,所有工作信號復位);rxd為串口發送來的串行數據;dout<7:0>為經接收模塊進行轉換后輸出的并行數據;framing_error為幀錯誤信號。程序的主體思想是:首先將接收到的串行數據逐位地放入移位寄存器rsr中,當8位數據放滿后輸出給緩存rbr,并暫時保存在那里;當收到發送信號時再將8位的并行信號輸出(這個過程實際上是發送模塊的逆過程,是將串行數據變為并行數據,實現串并轉換);再通過對接收模塊其他一些控制信號的編寫,就完成了整個接收模塊的設計。該模塊的頂層圖和仿真結果如圖7所示。
????????????????????????????????
??? 一個完整的串口通信應該有其協議,也就是說往往是上位機應先給下位機發送一個控制信號后,發送模塊才工作,即兩個模塊應該協同工作,所以本文將這兩個模塊連接到了一起,并加入一些控制信號,從而設計出串口通信模塊。模塊中的rxd用來接收上位機的數據,并判斷數據是“AA”或者“55”,“AA”表示開始接收數據,“55”表示停止接收數據。
2.5 時鐘模塊
??? 時鐘模塊產生其他所有模塊工作所需的時鐘,時鐘脈沖是控制信號以及系統能協調工作的基礎。根據前面幾個模塊的時鐘需求,設計了時鐘產生模塊。模塊輸入時鐘為clk,其頻率為50MHz,由外部有源晶振連接FPGA的全局時鐘管腳GCLK0提供。其余輸出時鐘為提供給幾個模塊的時鐘信號,其中ad_clk是送給A/D轉換模塊的時鐘,da_clk送給D/A轉換模塊,ram_rclk和ram_wclk分別為SRAM模塊提供讀時鐘和寫時鐘,dsp_clk為LADT模塊的工作時鐘,rxclk和txclk分別為UART模塊的接收時鐘和發送時鐘。該模塊的項層圖和仿真結果如圖8所示。?通過對FPGA芯片程序的下載,將6個功能模塊集成于芯片XC3S400中,該芯片內部有40萬門,最終頂層模塊程序的資源占用情況如表1所示。從中可以看出,資源占用率很低,僅為8%,還留有大量的剩余資源,為系統的進一步完善和增添其他功能模塊提供了可靠的保證,例如可以在FPGA芯片中增加心電數據分析模塊和無線通信模塊等。
?????????????????????????????? 
??? 本文設計了基于FPGA的集心電信號采集、存儲、處理和發送等功能于一體的實時心電傳感系統。?該系統在一片FPGA中完成了大部分實時監護功能,并可以用修改軟件的方法來改進或增加其功能,與現有的便攜式心電監護儀相比,更具智能性。
參考文獻
[1]? XILINX Corporation. Spartan-3?FPGA Family: Complete Data?Sheet. DS099 March 4,2004
[2] 費保蔚,莊天戈,程敬之,等.一種心電圖QRS波檢測方法.?北京生物醫學工程,1997,16(1):11-13.
[3] 韋建敏,楊永明,郭巧惠.基于FPGA的實時心電信號處理系統設計.電子器件, 2005,28(3):581-583.
