徐煥章, 羅嘉蕙, 陳志堅
(浙江大學(xué) 電氣工程學(xué)院,浙江 杭州 310027)
心電(electrocardio,ECG)壓縮技術(shù)可以降低ECG信號傳輸?shù)墓腫1]。具有時頻局部化和多分辨率特性的小波變換法[2]可獲得較高的壓縮率,廣泛應(yīng)用于ECG壓縮領(lǐng)域。但由于小波變換是基于傅里葉變換的卷積運算[3],計算復(fù)雜度高,對存儲空間的要求也很高,硬件實現(xiàn)成本與功耗均較大。
鑒于此,Daubechies和Sweldens提出了提升格式小波變換[4],擺脫了基于傅里葉變換的卷積運算,簡單快捷。在量化編碼上,Shapiro提出了嵌入式零樹小波(embedded zerotree wavelet,EZW)編碼。該編碼方式利用小波變換各級系數(shù)具有方向性的特點進(jìn)行漸進(jìn)式編碼[5],相對于其他編碼方式,計算相對簡單且壓縮能力強(qiáng),目前主要用于二維圖像[6]壓縮領(lǐng)域。
針對現(xiàn)有ECG壓縮專用集成電路(application specific IC,ASIC)實現(xiàn)成本較大且壓縮率不穩(wěn)定的問題,本文提出了基于提升小波的編碼精度自調(diào)節(jié)的ECG壓縮ASIC,利用小波變換得到各級高頻系數(shù)和以初始編碼閾值為依據(jù)動態(tài)調(diào)節(jié)電路的編碼精度;在硬件編碼中,將傳統(tǒng)的自頂向下掃描方式改進(jìn)為自底向上,擺脫了EZW編碼中大量出現(xiàn)的遞歸運算[7,8],大幅減少掃描次數(shù),并降低硬件運算復(fù)雜度和動態(tài)功耗。
本文在算法上,主要對EZW編碼進(jìn)行了改進(jìn),并在壓縮過程增加了動態(tài)調(diào)節(jié)編碼精度的部分。
“5”和“3”代表該小波變換的高通和低通分解濾波器的長度。分解過程分為分裂、預(yù)測和更新,如圖1所示。
5/3提升小波變換的算法公式為
(1)
式中x(n)為原始信號,d(n),c(n)分別為高、低頻系數(shù)。
圖1 提升小波變換
1.2.1 傳統(tǒng)編碼方法
傳統(tǒng)EZW編碼算法如下:經(jīng)過n級小波變換后,高頻系數(shù)被分解為n層的二叉樹結(jié)構(gòu),稱為零樹。每個粗尺度(第i級)系數(shù)對應(yīng)2個較細(xì)尺度(第i-1級)系數(shù),對應(yīng)關(guān)系可用父節(jié)點和子節(jié)點的關(guān)系描述,如圖2所示。EZW算法中,對于一個零樹,掃描順序按照編號順序進(jìn)行掃描編碼。
圖2 零樹的構(gòu)成
1.2.2 逆向掃描編碼
本文設(shè)計的算法對傳統(tǒng)編碼進(jìn)行改進(jìn),將每個節(jié)點的遍歷次數(shù)由多次變?yōu)閮H需要1次,使得運算復(fù)雜度成倍減少。先確定子節(jié)點的編碼,再確定父節(jié)點的編碼,因此在判斷子節(jié)點均編碼T(零樹根)過程中只需遍歷其2個子節(jié)點即可。當(dāng)?shù)玫搅銟涓鶗r,將其子節(jié)點的編碼刪除,從而實現(xiàn)零樹根的子孫不編碼。
通過對比可以看出:當(dāng)零樹深度為N時,傳統(tǒng)編碼方法的運算復(fù)雜度為O(2N×N);采用逆向掃描的方式后,運算復(fù)雜度降低為O(2N),例如采用5級小波變換時,零樹深度為5,則運算次數(shù)由160(32×5)次減少為32次。
自調(diào)節(jié)的依據(jù)在于,壓縮率和重要系數(shù)的分布有關(guān),而重要系數(shù)的分布又反映了信號的抖動程度。當(dāng)一個信號的抖動幅度越大,在同樣編碼精度下,其壓縮率就會越低。為了保持較為穩(wěn)定的壓縮率,需要針對不同信號使用不同的編碼精度??紤]到硬件實現(xiàn)開銷,提出了一種低復(fù)雜度的編碼精度自適應(yīng)調(diào)節(jié)算法:1)對于5級小波變換,選取了第4級和第5級的誤差序列均值作為參考用于預(yù)測此時信號的抖動誤差因子G0。2)考慮到初始閾值T0,引入相對誤差因子g0=G0/T0,g0的值很大程度上體現(xiàn)了初始閾值T0確定的情況下,重要系數(shù)的占比和EZW的編碼效率。設(shè)S0為精度參數(shù),表示精度增加的比特數(shù),即編碼總輪數(shù)。當(dāng)g0處于不同范圍時,S0的取值為
(2)
通過簡單的線性運算和比較,實現(xiàn)了樣本編碼精度的自調(diào)節(jié)。提高了低壓縮率樣本的壓縮率,從而提高了整體壓縮率。
本文處理的數(shù)據(jù)為以128個點為1幀的數(shù)字心電信號,輸出這一幀數(shù)據(jù)的編碼。整體結(jié)構(gòu)框架如圖3所示。
圖3 整體硬件結(jié)構(gòu)
由圖3可知,硬件主要由小波變換模塊、精度調(diào)節(jié)模塊和EZW編碼模塊構(gòu)成。除此之外,由塊深度為128 bit,寬度為16 bit的靜態(tài)隨機(jī)存儲器(static random access memory,SRAM)用于存儲原始數(shù)據(jù),以及小波變換后的高頻、低頻系數(shù);總控制模塊用于控制不同階段下各個模塊對SRAM的訪問,同時也控制各個階段之間的切換并廣播給各個模塊。
小波變換模塊可以實現(xiàn)同址運算, SRAM中的奇序列和偶序列被高頻和低頻系數(shù)取代,這樣的同址運算所消耗的運算資源以及額外的存儲資源最優(yōu)。由式(1)可以看出,每得到3個原始信號點x(2n),x(2n+1)和x(2n+2),就可以計算出d(n),進(jìn)而通過d(n)和d(n+1)計算出r(n)。據(jù)此,需要一個深度為3的先入先出(first in,first out,FIFO)存儲原始信號,且需要2個寄存器D和R分別存儲d(n)和r(n)的值。才能保證d(n)和d(n-1)能夠同時存在,在每次計算r(n)時,d(n)的值通過組合邏輯得到,d(n-1)的值從寄存器D中獲得,最終將d(n)更新到寄存器D中,如圖4所示。
圖4 小波變換模塊電路
每次得到d(n)和r(n)會寫入SRAM中x(2n)和x(2n+1)原本所在的位置。然后將x(2n+3),x(2n+4)讀入FIFO中,進(jìn)行下一組系數(shù)運算,直到一級小波變換完成,再將r(n)作為新一級變換原信號序列。
該模塊的主要功能是計算初始閾值,進(jìn)一步計算精度參數(shù)。求閾值時,首先暫存絕對值最大的高頻系數(shù),當(dāng)出現(xiàn)高頻系數(shù)d(n)比當(dāng)前最大值大時,將最大值更新為新的高頻系數(shù)d(n)。根據(jù)式(2)求解精度參數(shù)。
編碼模塊由兩個狀態(tài)機(jī)進(jìn)行維護(hù),主狀態(tài)機(jī)為有限狀態(tài)機(jī)(finite state machine,FSM1)主要根據(jù)精度參數(shù)來控制多輪的編碼。副狀態(tài)機(jī)FSM2負(fù)責(zé)每一輪編碼時對零樹進(jìn)行主掃描和輔掃描。編碼模塊的兩個狀態(tài)機(jī)的協(xié)同工作狀態(tài)如圖5所示。
圖5 編碼模塊狀態(tài)
1)在FSM1中,開始編碼之后,各狀態(tài)如下所述:
a.掃描(SCAN):開始編碼,激活FSM2,監(jiān)測到一輪編碼結(jié)束之后進(jìn)入重復(fù)(REPEAT)狀態(tài)。
b.REPEAT:檢查是否編碼精度已經(jīng)達(dá)到由精度調(diào)節(jié)模塊設(shè)定的精度參數(shù):若是,進(jìn)入輸出(OUTPUT)狀態(tài);否則,將閾值減半,回到SCAN狀態(tài)編碼。
c.OUTPUT:將一棵零樹的編碼逐點輸出。
d.重新載入(RELOAD):將閾值重置為初始閾值,檢查是否已經(jīng)完成了一幀的掃描。
2)在FSM2中,接收來自FSM1的激活信號之后,開始掃描,各個狀態(tài)如下所述:
a.讀取(READ):從SRAM中讀取系數(shù),讀取順序自底向上。
b.編碼(CODE):根據(jù)改進(jìn)后的方法進(jìn)行編碼。
c.CNT:確定正在掃描哪一級的系數(shù),從而確定讀取和編碼時的索引,如果最頂級已經(jīng)掃描完成,則發(fā)送完成信號給FSM1,使其從SCAN狀態(tài)進(jìn)入REPEAT狀態(tài)。
壓縮率是ECG壓縮ASIC的關(guān)鍵指標(biāo)之一,本文以MIT-BIH數(shù)據(jù)庫的心電信號為測試樣本,采用壓縮率(compression ratio,CR)和失真度計算方法是百分比均方根誤差(percent root mean square difference,PRD)來衡量該算法的壓縮性能。本文添加了編碼精度自調(diào)節(jié)功能,表1為編碼精度固定為4時的壓縮率和編碼精度自調(diào)節(jié)后的壓縮率對比。
表1 編碼精度固定和自調(diào)節(jié)的壓縮率對比
可以看出:選取的幾個樣本,在固定的編碼精度下,CR波動較大,其中樣本102,104,109,203的CR較低,經(jīng)過編碼精度自調(diào)節(jié)之后,各樣本的CR都保持在高水平。
壓縮性能如表2所示,從表中可以看出,相對于其他算法,本文算法在失真度低的情況下,壓縮率高,有利于減少傳輸功耗和存儲資源。
表2 測試樣本的壓縮性能
采用SMIC 40 nm工藝,電路面積僅有7 387 μm,折合成9 885個等效門。選取1 MHz作為系統(tǒng)頻率,在1.1 V供電電壓下,電路總功耗為7.11 μW,其中,4.97 μW為靜態(tài)功耗,主要來自SRAM的漏電功耗。本文設(shè)計的ASIC和文獻(xiàn)[11]的電路參數(shù)對比,在2種設(shè)計都采用EZW編碼進(jìn)行壓縮的情況下,本文通過降低電路的復(fù)雜度極大地減少資源,等效門數(shù)減少了3倍,又通過工藝尺寸的減小,使得整體電路面積縮小了32.3倍。雖然本文設(shè)計頻率略低于文獻(xiàn)[11](250 MHz),但其總功耗比文獻(xiàn)[11](64.39 μW)小3個數(shù)量級。
本文將5/3提升小波變換和EZW編碼算法應(yīng)用于心電信號壓縮,成本小且壓縮效果良好。硬件電路可以根據(jù)信號的抖動程度自適應(yīng)地調(diào)節(jié)編碼精度,提升了壓縮率的穩(wěn)定性。通過改進(jìn)了編碼算法極大地降低了計算復(fù)雜度,從而節(jié)約了資源和功耗。實驗結(jié)果表明:提出的算法不僅壓縮性能好,且資源小、功耗低,符合便攜設(shè)備面積小、功耗低的需求。