用FPGA實現(xiàn)FIR濾波器
基礎(chǔ)和主要參數(shù)
也許你在聽FIR濾波器課時不夠?qū)W?。這里做一個快速的復(fù)習(xí),最簡單的形式是, FIR 濾波器的輸出 y(n)是求采樣數(shù)據(jù)x(n) 的N個輸入的平均值。 存儲的每個采樣稱為抽頭。 當(dāng)然大多數(shù)設(shè)計都比這個復(fù)雜, 要提供優(yōu)化的濾波器 特性,要用系數(shù)乘 每個抽頭, 或者對 h(i) 進(jìn)行加權(quán)。
本文引用地址:http://m.butianyuan.cn/article/201706/349407.htm
圖1 典型的FIR濾波器結(jié)構(gòu)(完全并行)
用于FIR濾波器的主要參數(shù)是通帶、阻帶、阻帶衰減和通帶波紋。對于某些應(yīng)用,阻帶波紋也許是重要的和規(guī)定的。然而對大多數(shù)應(yīng)用,阻帶衰減是適當(dāng)?shù)摹_€有輸入采樣率,以及與輸入數(shù)據(jù)分辨率一起的所要求的輸出采樣率。
圖2 低通濾波器規(guī)范
你也許只是接受任務(wù),而由你自己選擇設(shè)計規(guī)范。當(dāng)然應(yīng)用項目定義了許多規(guī)范。這里有一些指導(dǎo)意見,幫助你縮小各種可能性,評估權(quán)衡設(shè)計。
通常通帶越接近阻帶,設(shè)計就越具挑戰(zhàn)性。同樣,指定通帶很低的波紋,或者很高的阻帶衰減增加了設(shè)計的復(fù)雜性。必須牢記,指定波紋和衰減為數(shù)據(jù)的分辨率,你必須滿足設(shè)計要求。指定衰減的要點是小于輸入數(shù)據(jù)的最低位。同樣在滿標(biāo)度中指定小于1位的通帶波紋是不必要的。如同其它的濾波器,F(xiàn)IR濾波器可構(gòu)成低通、高通和帶通濾波器。
表1 數(shù)據(jù)寬度相對于阻帶衰減和通帶波紋
輸入至輸出的采樣率也會影響你的設(shè)計。在簡單的設(shè)計中,輸入速率和輸出速率是相等的。然而,在許多低通濾波器設(shè)計中,輸出以輸入的速率運行是不經(jīng)濟(jì)的,因為傳輸信息不要求高的輸出率。取十分之一速率的FIR是合適的。其它要求較高輸出率的設(shè)計,則采樣內(nèi)插FIR。
進(jìn)行設(shè)計
選擇FIR濾波器的系數(shù)有兩種方法。Parks-McClellan方法(執(zhí)行Remez算法)和進(jìn)行沖擊響應(yīng)的窗口操作。窗口方法依賴于一個事實,要求頻率響應(yīng)的離散Fourier反變換代表FIR濾波器的系數(shù)。理想的頻率響應(yīng)用作起始點,于是應(yīng)用窗功能減少系數(shù)的數(shù)目,成形頻率響應(yīng)。通用的窗功能包括矩形、三角、Hanning、Hamming、Kaiser 和Blackman。
沒有必要對數(shù)學(xué)進(jìn)行深究,有許多免費的低成本工具幫助你進(jìn)行設(shè)計。如果使用MATLAB,MathWorks有各種工具可用于FIR設(shè)計。如果你不用這些包,用Internet搜索“FIR濾波器設(shè)計工具”將展現(xiàn)一些免費的低成本工具。
首先應(yīng)做出采用哪種設(shè)計方法的決策。大多數(shù)設(shè)計者采用Park-McClellan 方法,因為設(shè)計輸入是濾波器的要求,這個方法通常滿足具有最少抽頭的濾波器要求。假設(shè)采用這個方法,你可以簡便地把要求輸入至所選的工具中。大多數(shù)設(shè)計工具會給出頻率響應(yīng)、沖擊響應(yīng)和濾波器系數(shù)。如果選擇窗口方法,只要做些實驗。要輸入截止頻率、窗口方法和抽頭數(shù)目至設(shè)計工具。于是設(shè)計工具會給出頻率響應(yīng)。如果頻率響應(yīng)不是你所要的,你可以改變輸入?yún)?shù)和迭代過程。
因此,你已經(jīng)用設(shè)計工具產(chǎn)生了系數(shù),檢驗了頻率響應(yīng)。那么現(xiàn)在是否可以移開這個工具,而在FPGA中實現(xiàn)這個設(shè)計呢?并非如此,還要考慮一些事情。首先要確定頻率響應(yīng),數(shù)據(jù)不是無限精確的。大多數(shù)設(shè)計工具讓你定義一個量化級別并觀察結(jié)果。倘若級別的精度是合理的,那就不需要做改動。然而,最好是現(xiàn)在發(fā)現(xiàn)這些問題而不是在實驗室。下一步是研究其它的濾波器設(shè)計,諸如Lth帶(或者Nyquist)濾波器,這些濾波器大約有一半的系數(shù)設(shè)置為0,因此減少了數(shù)學(xué)上的復(fù)雜性。
在FPGA中實現(xiàn)設(shè)計
你設(shè)置了系數(shù)之后,現(xiàn)在打算在FPGA中實現(xiàn)這個設(shè)計。再次要做出若干決定。首先是選擇實現(xiàn)乘法器單元的方法,決定它們能運行多快。通常有兩個選擇:用在FPGA內(nèi)實現(xiàn)邏輯的查找表(LUT)來實現(xiàn)乘法器,或者用FPGA內(nèi)的專用的DSP單元。為了說明這些選擇,考慮LatticeECP2 FPGA系列,在這個FPGA內(nèi)用sysDSP塊實現(xiàn)一個18x18乘法器不占用LUT,運行速度高于400MHz。用LUT完成相同的功能其性能大約是100MHz,并要占用許多LUT。專門的DSP塊擁有高速并使用少的LUT,通常選擇這個方法,除非你保留DSP塊準(zhǔn)備留作它用。
圖4 LatticeECP2 sysDSP塊
接下來要做的事是決定使用多少個乘法器。對于最快的速度,乘法器的數(shù)目等于FIR濾波器中抽頭的數(shù)目。這種類型的濾波器完全用并行形式來實現(xiàn)。然而在許多情況下,并不需要性能的級別,允許乘法器時間共享。一種快速計算揭示了使用的乘法器的數(shù)目。首先做一個簡化,以采樣率除速度,你認(rèn)為適中的復(fù)雜設(shè)計可以運行于所選的FPGA,然后對這個數(shù)進(jìn)行四舍五入至最接近的整數(shù)。通過這個計算因子,可以減少乘法器的數(shù)目。作為一個例子,假設(shè)要在LatticeECP2 FPGA中實現(xiàn)12個抽頭,75MSPS,12位的濾波器。用這個器件,300MHz的濾波器比較容易實現(xiàn),減少因子為4,需要3個乘法器。
在做出最后決定之前,要考慮最終的實現(xiàn)。例如,使用Lattice提供的FIR產(chǎn)生器,這個工具用sysDSP塊內(nèi)的加法樹實現(xiàn)FIR濾波器。因為這個加法樹的范圍是4個乘法器,沒有有效的資源與指定的3個乘法器聯(lián)系在一起。此外,如果指定了4個乘法器,設(shè)計要求的工作速度會略有降低。
表2 最大采樣率對比用于12個抽頭濾波器的乘法器
現(xiàn)在有了系數(shù),乘法器實現(xiàn)的方法,以及知道需要多少個乘法器。許多供應(yīng)商,包括Lattice提供自動產(chǎn)生FIR的工具。最后一步是把系數(shù)輸入工具,指定乘法器的數(shù)目。產(chǎn)生濾波器之后要進(jìn)行時序分析,確定是否假設(shè)的速度是正確的。在使用的例子中,工具報告了350MHz的最大速度,高于假設(shè)的300MHz。如果速度非常接近,你應(yīng)該進(jìn)行調(diào)整并再試。
評論