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