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