高效FIR濾波器的設計與仿真-基于FPGA
摘要:該文在介紹有限沖激響應(FIR)數字濾波器理論及常見(jiàn)實(shí)現方法的基礎上,提出了一種基于FPGA的高效實(shí)現方案。該方案采用對稱(chēng)結構、加法和移位代替乘法運算、優(yōu)化的CSD編碼、流水線(xiàn)和級聯(lián)技術(shù)等方面對傳統的設計方法進(jìn)行了改進(jìn),并借助FPGA濾波器芯片和Quartus II軟件、Matlab軟件對該方案進(jìn)行了仿真驗證。仿真實(shí)驗結果表明:此種FIR濾波器的實(shí)現方法運算速度快、實(shí)時(shí)性好、節省硬件資源,其性能優(yōu)于傳統的FIR濾波器設計方法。
隨著(zhù)信息時(shí)代和數字世界的到來(lái),數字信號處理已成為當今一門(mén)極其重要的學(xué)科。作為數字信號處理分支之一的數字濾波器,也受到了人們越來(lái)越多的關(guān)注。它是通信、語(yǔ)音、圖像、自動(dòng)控制、雷達、航空航天、醫療等領(lǐng)域中的一種基本處理部件,具有穩定性好、精度高、靈活性大等突出優(yōu)點(diǎn)。
數字濾波器包括有限沖激響應(Finite impulse response,簡(jiǎn)稱(chēng)FIR)濾波器和無(wú)限沖激響應(Infinite impulse response,簡(jiǎn)稱(chēng)IIR)濾波器兩大類(lèi),其中的FIR濾波器因可以得到嚴格的線(xiàn)性相位、有限精度的計算不會(huì )產(chǎn)生振蕩、運算速度快等優(yōu)點(diǎn)受到了人們更多的青睞。在非實(shí)時(shí)或低速系統中,FIR算法可以在DSP或CPU上用軟件實(shí)現,但是在一些實(shí)時(shí)性要求較高的系統(如雷達控制、無(wú)線(xiàn)通訊系統等)中,由于受到乘法器和加法器電路的限制,該實(shí)現方法則不能滿(mǎn)足速度的要求。近幾年來(lái),隨著(zhù)微電子技術(shù)與工藝的迅猛發(fā)展,現場(chǎng)可編程門(mén)陣列(Field programmable gate array,簡(jiǎn)稱(chēng)FPGA)以其可編程性、低成本性、高邏輯密度和高可靠性,得到了越來(lái)越廣泛的應用。本文借助Ahera公司的FPGA芯片和Quartus II軟件、Matlab軟件,介紹了一種高效FIR濾波器的設計與實(shí)現方案。
1 基于FPGA的高效FIR濾波器的設計思路
一個(gè)Ⅳ階的FIR數字濾波器可由差分方程
或轉移函數:
來(lái)描述。式中: x(n)是濾波器的輸入信號,y(n)是濾波器的輸出信號,h(n)是濾波器系數。從以上的表達形式可以看出,FIR濾波器是通過(guò)加法器、移位器和乘法器組合而實(shí)現的,乘法器和加法器的效率及速度等特性對整個(gè)濾波器的性能起著(zhù)決定性的作用。
1.1 采用對稱(chēng)結構
在很多應用場(chǎng)合,濾波器都是線(xiàn)性時(shí)間不變量(Linear time-invariant,簡(jiǎn)稱(chēng)LTI)濾波器,也就是帶有常系數的濾波器。對于具有線(xiàn)性相位的FIR濾波器,其輸出表達式(1)變成了如下的形式:
由此可見(jiàn),利用它的對稱(chēng)形式比直接實(shí)現少用了一倍的乘法器,大大節省了硬件資源,而且可以提高速度。
1.2 用加法和移位代替乘法運算
乘法器是FIR濾波器中比較重要的部件,它的結構直接影響了濾波器的性能。傳統的濾波器中的乘法器采用BOOTH乘法器結構,它主要
包括3個(gè)模塊:BOOTH編碼、部分積加法器陣列及進(jìn)位加法器。在這種結構中,隨著(zhù)濾波器的階數的增加,電路的規模勢必迅速增加。
因為在實(shí)際應用的大多數情況下,濾波器的系數是固定的值,所以濾波器中所有的乘法都是固定系數乘法。實(shí)現固定系數乘法的一種常用方法是用移位和加法運算來(lái)代替并行乘法。這樣一方面可以提高硬件實(shí)現的速度,另一方面可以減少所需的硬件資源。
1.3 采用優(yōu)化的CSD編碼
眾所周知,二進(jìn)制數在實(shí)現乘法或加法時(shí),數值為0的位是不參與運算的。因此,對輸入信號進(jìn)行編碼時(shí),如果能使0位的數量最多,則完成相應的運算所需要的硬件將會(huì )大大減少,運算的速度也會(huì )相應地提高很多。正則有符號數字量(Canonic signed digit,簡(jiǎn)稱(chēng)CSD)正是基于此思想而提出來(lái)的一種新型編碼方法,它是具有最少非0元素的表示法。
CSD碼的特性是最終表達式在兩個(gè)數位之間至少有一個(gè)0。它的算法是從最低有效位開(kāi)始,用10…01取代所有大于2的一序列,用1101
取代1011;然后從最高有效位開(kāi)始,用011代替101。例如十進(jìn)制數231的CSD碼為100101001,可以看出,在實(shí)現其乘法時(shí),只需要4個(gè)加法器(如圖1所示)。若采用普通的二進(jìn)制代碼實(shí)現,因(231)10=(11100111)2,需要5個(gè)加法器??梢?jiàn),采用CSD碼節省了加法器的數量。
為了進(jìn)一步提高效率,對于某些數據,還可以采用優(yōu)化的CSD編碼,即首先將系數拆分成幾個(gè)因子,再實(shí)現每一個(gè)因子。如對231,首先拆分成7×33,然后分別實(shí)現因子7和33。7和33每個(gè)因子都只需要1個(gè)加法器(如圖2所示),即實(shí)現231的乘法時(shí)只需要2個(gè)加法器,因此效率得到了更大的提高。
圖1 231的CSD碼的實(shí)現
圖2 231的優(yōu)化CSD碼的實(shí)現
1.4 采用流水線(xiàn)技術(shù)
在濾波器的加法運算中,根據內部的數據流規則,可以采用流水線(xiàn)技術(shù)將一個(gè)運算操作分解成一些小規模的基本操作,將進(jìn)位和中間值存儲在寄存器中,并在下一個(gè)時(shí)鐘周期內繼續運算。對于FPGA器件來(lái)說(shuō),采用流水線(xiàn)式的設計,可以在不增加電路成本和規模的基礎上提高運算處理的實(shí)時(shí)性。
1.5 采用級聯(lián)技術(shù)
設計高階的濾波器時(shí),可以采用多個(gè)低階濾波器級聯(lián)而成,如n個(gè)10階的FIR濾波器可以級聯(lián)成一個(gè)10n階的濾波器,級聯(lián)后的濾波器可以
是對稱(chēng)的,也可以是非對稱(chēng)的。實(shí)踐證明,采用分布式算法,級聯(lián)后的濾波器不會(huì )因為長(cháng)度的增加而使性能明顯下降。
評論