李 成,郭 濤,石 帥,暢彥祥
(1.中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051;2.中國航天科技集團(tuán)有限公司中國運(yùn)載火箭技術(shù)研究院,北京 100000)
在工程領(lǐng)域發(fā)展趨勢中,如數(shù)字醫(yī)學(xué)中心電信號處理[1]、實(shí)時(shí)應(yīng)用的嵌入式系統(tǒng)[2]、軟件無線電和通信中數(shù)據(jù)大規(guī)模輸入、輸出等[3],對數(shù)字信號處理系統(tǒng)的要求越來越高。數(shù)字濾波器作為數(shù)字信號處理系統(tǒng)的主要處理部件,其性能直接決定了系統(tǒng)的信號處理能力。與無限沖激響應(yīng)濾波器相比,有限沖激響應(yīng)(Finite Impulse Response,FIR)濾波器具有很強(qiáng)的穩(wěn)定性和嚴(yán)格的線性相位特性,得到了更廣泛的應(yīng)用。但是FIR 濾波器的乘法器增加了系統(tǒng)的功耗和硬件復(fù)雜度,限制了FIR 濾波器的發(fā)展。因此,F(xiàn)IR 濾波器的低功耗設(shè)計(jì)成為提高整個系統(tǒng)信號處理效率的重點(diǎn)。目前主要的方法是降低硬件復(fù)雜度和優(yōu)化濾波器系數(shù)。對于濾波器系數(shù)優(yōu)化,文獻(xiàn)[4]中采用規(guī)范有符號數(shù)字(Canonical Signed Digit,CSD)編碼來最小化濾波器系數(shù)中非零元素的個數(shù),從而實(shí)現(xiàn)濾波器的結(jié)構(gòu)優(yōu)化。文獻(xiàn)[5]在CSD 碼的基礎(chǔ)上設(shè)計(jì)了一種轉(zhuǎn)換器,提高了二進(jìn)制數(shù)轉(zhuǎn)換為CSD 碼的速度。文獻(xiàn)[6-7]采用基于CSD 編碼的遺傳算法優(yōu)化濾波器的設(shè)計(jì),文獻(xiàn)[8]采用花粉授粉算法結(jié)合公共子表達(dá)式消除(Common Subexpression Elimination,CSE)進(jìn)一步提高了加法器的效率,實(shí)現(xiàn)了無乘法器設(shè)計(jì)。
在乘法器優(yōu)化方面,針對快速傅里葉變換中乘法運(yùn)算多、內(nèi)存占用率高,通過設(shè)計(jì)CSD 乘法器對其進(jìn)行優(yōu)化[9-11]。在圖像處理系統(tǒng)中,使用CSD 編碼優(yōu)化離散余弦系統(tǒng)中的乘法運(yùn)算[12-13]。文中基于CSE算法和CSD 編碼,提出了一種低復(fù)雜度FIR 濾波器的設(shè)計(jì)方法。
FIR 濾波器輸出Y(n)為輸入序列X(n)與單位取樣響應(yīng)h(n)的線性卷積,輸出表達(dá)式與系統(tǒng)函數(shù)分別為:
式中,N為FIR 濾波器的階數(shù),根據(jù)上式可以得出FIR 濾波器的直接型結(jié)構(gòu)[14],如1 圖所示。
根據(jù)圖1 的結(jié)構(gòu),對于N階FIR 濾波器,總共需要N個乘法運(yùn)算、N-1 個延時(shí)單元和一個N輸入的加法運(yùn)算。在通常情況下,相較于加法和移位運(yùn)算,乘法運(yùn)算會耗費(fèi)更多的硬件資源,故需要把設(shè)計(jì)中的乘法器轉(zhuǎn)換為移位加法器。
圖1 FIR濾波器直接型結(jié)構(gòu)
CSD 編碼作為一種三元編碼方式,不同于二進(jìn)制編碼,它具有{1,0,-1}三元值(文中用代替-1),其基本原理是盡量減少乘法器中的非零元素,減少移位和加法次數(shù),從而降低了乘法器的硬件復(fù)雜度。將二進(jìn)制編碼轉(zhuǎn)化為CSD 碼的具體實(shí)現(xiàn)方法:二進(jìn)制數(shù)碼從最低的有效位開始,將大于2 的1 序列全部替換為10,…,0,并將1011 替換為1 10;最后從最高有效位開始,用011 代替10[15]。最佳的CSD 編碼方式可以減少非零元素的數(shù)量,降低資源消耗,縮短計(jì)算時(shí)間。其特點(diǎn)有:
1)在一個CSD 數(shù)據(jù)里,沒有兩個連續(xù)的非零位;
2)CSD 數(shù)據(jù)是所有數(shù)字表示法里所含非零位數(shù)最少的一種;
3)二進(jìn)制數(shù)碼與CSD 碼一一對應(yīng)。
濾波器初始系數(shù)組可表示為向量組h=[h(0)h(1)…h(huán)(N)]T,將向量組h中的每個系數(shù)按照1.2 里的步驟轉(zhuǎn)化為CSD 碼,得到新的系數(shù)向量組hC,其中第i個系數(shù)向量
在系數(shù)hC(i)中,若存在與為非零量,且中間量全都為0(中間有w個0),則稱這個多項(xiàng)子式為w階2 項(xiàng)子式。如果與同號,則稱該子式為2 項(xiàng)偶子式,例如1001,00;反之,與異號,則稱該子式為2 項(xiàng)奇子式,例如100,001。若系數(shù)向量hC(i)中只含有一個非零元素,無法構(gòu)成任何2 項(xiàng)子式時(shí),如0010,則稱hC(i)為孤子。
CSE 算法的基本原理是在系數(shù)向量組(即公共表達(dá)式)中找到兩個相同階次的項(xiàng),并計(jì)算出輸入信號與公共表達(dá)式相乘的結(jié)果,使不同的位置和系數(shù)共享結(jié)果,減少運(yùn)算單元數(shù)。例如,假設(shè)13 位量化系數(shù)hC(1)=10010010000,可以看出有2 階2 項(xiàng)偶子式1001,如果使用通常的移位加法,則需要4 個加法器,如圖2(a)所示;采用CSE 算法,則需3 個加法器,如圖2(b)所示。
圖2 系數(shù)hC(1)實(shí)現(xiàn)方法
針對CSE 算法的原理,其難點(diǎn)在于如何從系數(shù)向量組中高效快速地找出公共子式,文獻(xiàn)[16]提出了一種非遞歸的帶符號共同子式消除(Non Recursive Signed Common Subexpression Elimination,NR-SCSE),具體實(shí)現(xiàn)方法如下:
子表達(dá)式表示為S1 和S2,其中S1 表示2 項(xiàng)偶子式,S2 表示2 項(xiàng)奇子式。每一個系數(shù)向量組hC對應(yīng)一個子式矩陣Pn,元素Pn(i,j)的值為j階2 項(xiàng)子式出現(xiàn)的次數(shù),i值表示該2 項(xiàng)子式類別(S1 或S2)。例如Pn(1,3)=3 表示3 階2 項(xiàng)偶子式0 001(或10 00)出現(xiàn)的次數(shù)為3。將系數(shù)向量組hC寫作系數(shù)集YCSD,假設(shè)系數(shù)向量集YCSD如下:
其對應(yīng)的子式矩陣Pn{1}為:
因Pn(2,1)=Pn(2,4)=4 為最大值,此處取01(或10)為第一個公共子式,然后將公共子式對應(yīng)在YCSD中的數(shù)字置零,得到新系數(shù)集如式(5)所示:
該濾波器系數(shù)集YCSD通過NR-SCSE 算法實(shí)現(xiàn)的結(jié)構(gòu)如圖3 所示,最終需要的加法器數(shù)量為10,相較于直接法,數(shù)量減少了4 個。
圖3 系數(shù)集YCSD的CSE實(shí)現(xiàn)
首先,利用Matlab 設(shè)計(jì)了一個15 階(長度16 位)低通線性相位FIR 濾波器。窗口函數(shù)是Blackman 窗口函數(shù)。根據(jù)要求設(shè)計(jì)了濾波器系數(shù),并在FPGA中搭建了FIR 濾波器結(jié)構(gòu)。然后在Matlab 中生成兩個不同頻率的合成輸入信號,在Modelsim 中用濾波器對輸入信號進(jìn)行仿真,對高頻分量進(jìn)行濾波,將低頻部分輸出,并用Matlab 對輸出信號進(jìn)行分析。
FPGA 在實(shí)現(xiàn)FIR 濾波器結(jié)構(gòu)時(shí),主要采用串行結(jié)構(gòu)。首先,將輸入數(shù)據(jù)的每個延遲單元串行相加并乘以相應(yīng)的系數(shù),將乘積結(jié)果累加后輸出。因此,整個設(shè)計(jì)只使用了一個乘法器單元。串行結(jié)構(gòu)有兩種形式:全串行結(jié)構(gòu)和半串行結(jié)構(gòu)。由于全串行結(jié)構(gòu)結(jié)合了加法器中的對稱量化系數(shù)運(yùn)算,與半串行結(jié)構(gòu)相比,加法器的數(shù)目可以減少一半,因此采用全串行結(jié)構(gòu)。同時(shí)根據(jù)第一節(jié)中的內(nèi)容,使用移位加法運(yùn)算取代乘法運(yùn)算,將乘法器移出設(shè)計(jì)。全串行FIR 濾波器結(jié)構(gòu)如圖4 所示。
圖4 全串行FIR濾波器結(jié)構(gòu)
從圖中可以看出,系統(tǒng)時(shí)鐘通過1/8 分頻器獲得分頻時(shí)鐘,控制數(shù)據(jù)輸入,使輸入數(shù)據(jù)以1/8系統(tǒng)時(shí)鐘頻率存儲在移位寄存器中,使一個加法器在一個系統(tǒng)時(shí)鐘周期內(nèi)完成8 次加法運(yùn)算。經(jīng)過量化、CSD 編碼和NR-SCSE 優(yōu)化后,濾波器的原始系數(shù)轉(zhuǎn)化為新系數(shù)表,然后與加法結(jié)果進(jìn)行移位相加,得到濾波輸出。
FIR濾波器主要參數(shù):截止頻率為500 Hz,采樣頻率為2 000 Hz 的16 階FIR 低通濾波器。利用Matlab工具箱設(shè)計(jì)出滿足指標(biāo)的FIR 濾波器,系數(shù)的量化位數(shù)為12 位,輸入數(shù)據(jù)位寬為12 位,輸出數(shù)據(jù)位寬為29 位,系統(tǒng)時(shí)鐘為16 kHz。將濾波器系數(shù)進(jìn)行量化取整,并轉(zhuǎn)換為CSD 碼如表1 所示。
表1 FIR濾波器系數(shù)表示
由表1 可得FIR 濾波器量化系數(shù)向量組,根據(jù)前文提出的NR-SCSE 算法,取001(或100)、1001(或00)為兩個3 階2 項(xiàng)公共子式進(jìn)行優(yōu)化,加法器數(shù)量從14 個減少至10 個,效果明顯。
采用Matlab 生成200 Hz 和800 Hz 的合成輸入信號源,在Modelsim 中使用優(yōu)化后的FIR 低通濾波器處理該信號,對800 Hz 的高頻部分進(jìn)行濾波,得到200 Hz 的低頻正弦波。利用Matlab 對輸出結(jié)果進(jìn)行了分析。最后對輸入、輸出數(shù)據(jù)進(jìn)行了頻域和時(shí)域分析,最終結(jié)果如圖5 所示。結(jié)果表明,F(xiàn)IR 低通濾波器具有良好的性能。
圖5 輸入輸出信號對比
為了更好地體現(xiàn)出CSD 編碼結(jié)合NR-SCSE 技術(shù)在優(yōu)化乘法運(yùn)算中的優(yōu)勢,分別以兩種方法設(shè)計(jì)32、64、128 階的低通FIR 濾波器,進(jìn)行對照比較,其結(jié)果如表2 所示。相較于乘法直接實(shí)現(xiàn),優(yōu)化NRSCSE 資源減少率約為30%,并隨著階數(shù)的增大,優(yōu)化效果也越好,有效降低了加法器的數(shù)量,改善了濾波器性能。
表2 FIR濾波器兩種算法性能對照
文中提出了一種無乘法器的低復(fù)雜度FIR 低通濾波器。其將公共子表達(dá)式消除與CSD 編碼相結(jié)合,用移位加法代替濾波器中的乘法單元,有效降低了設(shè)計(jì)的硬件資源。仿真結(jié)果表明,與傳統(tǒng)的FIR濾波器設(shè)計(jì)方法相比,加法器的數(shù)量可以減少約30%,濾波器的復(fù)雜度降低。