用SP061A實現心電數據的FFT與壓縮
摘 要:在SP061A 單片機上實現對ECG信號的FFT、濾波和壓縮。合理組織SP061A的硬件資源,并采取數據分段長度可選、避開高頻分量的計算和簡易的數據壓縮算法,使存儲開銷、運算速度和精度滿足實用要求。
關鍵詞:ECG數據 SP061A FFT 濾波 壓縮
在遠程心電監(jiān)護系統(tǒng)中,心電信號采集器是實現心電信號的現場采集、存儲和傳輸的重要終端設備。對采集器的基本要求之一是:及時對采集到的心電信號進行濾波和壓縮等預處理,以減少存儲器占用量和數據遠程傳輸到頭端服務器的開銷。為降低成本,這些任務一般采用單片機完成。然而,限于單片機的資源、運算能力和運行速度,許多壓縮算法,如周期壓縮法、小波變換壓縮法和神經網絡方法等無法使用,一些缺乏快速算法的頻域變換法也很難達到實用的程度[3]。高性價比的心電信號采集器的研制一直是一個熱點問題。
通過研究FFT(快速傅立葉變換)的算法結構和心電信號的特點發(fā)現,采用分段FFT,保留分析心電波形需要的諧波成分,巧妙地組織單片機的片內RAM資源,可使數據運算量和RAM開銷大大減少,能實現數據濾波和壓縮,且能達到實時采集與處理所需的運算速度。
SP061A 是凌陽科技公司研制的一款16位超低功耗單片機[1],片內有2K字RAM、10位A/D轉換器,CPU時鐘高達49.152MHz,且價格低廉,還特別具有一套精簡、高效的指令系統(tǒng)和類似于DSP的硬件內積運算功能。這些特點很適合心電信號的采集和處理。圖1是作者研發(fā)的心電信號采集器中有關硬件的組成框圖:多路ECG模擬信號送SP061A進行A/D轉換,轉換數據送NVRAM DS1265W暫存;待采集完成后,由SP061A進行FFT和濾波、壓縮;壓縮結果送回DS1265W,再適時通過電話線或計算機網絡送到監(jiān)護中心處理、診斷。
圖1 硬件組成框圖
本文僅討論用SP061A實現FFT[2]、低通濾波與壓縮。設對心電信號的采樣率為500次/秒,數據精度為10位。
1 數據分段算法
設采集到的原始數據存于片外RAM中,將這些數據分為若干段,逐段讀入片內進行FFT。各段的變換結果及時送回片外RAM中保存。
按照FFT的要求,段中包含的數據個數必須為2N,N為FFT變換的層數。考慮到SP061A片內RAM為2K字,此處取N=9或N=10,即段中數據為512或1024,以保證RAM夠用。顯然,段頭和段尾的數據大小相等時,以該段作為一個周期而無限重復的波形將無跳躍點。經過“FFT變換到頻域”→“丟棄高頻成分”→“IFFT(快速傅立葉反變換,在頭端PC上進行)”一系列操作而重建的時域波形,段與段之間的結合點將是連續(xù)的。但實際上,按上述分段幾乎不能做到段頭和段尾的數據大小相等。取兩種段長的目的就是提供兩種可能的選擇——選擇首尾數據之差較小的段作FFT。盡管如此,段首尾數據之差仍存在,經處理、復原后的波形在段的結合部位仍將有間斷點。而采用加窗、延拓等辦法在單片機上又難以實現。解決問題的策略為:分段時,各段間的數據首、尾各覆蓋10個數據。頭端PC在完成重建后,應將首、尾各5個數據丟棄。
2 時域數據的整序與加載
分段后,將該段加載到SP061A的RAM中,以實施FFT。原始數據以采集的時間先后順序存放,加載時則應“整序”,即改變數據的先后順序,以保證變換后的頻域數據為正序。
設RS為指向片外RAM的、待加載的段內數據的偏移地址,RS=0…2N-1;Rd為指向片內RAM的、待寫入數據的偏移地址,如圖2。將RS按N位二進制逐位高低互換就得到Rd。例如,當N=9時,若RS為011001011B,則Rd為110100110B。為加快計算速度,將N=9時Rd的值制表存于FLASH ROM,供整序時查詢。當N=10時,取RS的B0~B9位查表獲得Rd,再將RS的B10位傳送到Rd的B15位,最后將Rd循環(huán)左移1位。
圖2 整序與數據加載操作
FFT變換是復數運算。在將原始數據加載到片內RAM的同時,應把實數轉換為復數,即令虛部為0。于是,一個原始數據加載到RAM中要占用2個字。復數的存儲格式為:實部字存于低地址,虛部字存于相鄰的高地址?,F在考察RAM需要量。N=9時,段長為512個數據,加載到RAM中要占用 512
評論