柴乾隆
(航空工業(yè)蘭州萬里航空機電有限責(zé)任公司 航空機電研究院,甘肅 蘭州 730070)
濾波器主要用于頻率選擇和運算處理,以起到濾除噪聲和分離信號的作用。根據(jù)濾波器系統(tǒng)輸入、輸出信號的處理方式,可分為模擬濾波器和數(shù)字濾波器兩種。模擬濾波器在設(shè)計時可通過查詢大量圖表予以實現(xiàn),簡捷明了,但因相位的非線性,其應(yīng)用受到了很大的限制。而數(shù)字濾波器因其相位線性度高,幅度特性[1-3]任意可變,而被廣泛應(yīng)用于語音和圖像處理、HDTV、模式識別、譜分析等領(lǐng)域。單位抽樣響應(yīng)的長度直接影響著有限長單位沖激響應(yīng)(Finite Impulse Response,FIR)數(shù)字濾波器的穩(wěn)定性,當(dāng)抽樣響應(yīng)的長度有限時,系統(tǒng)的極點均在原點處,因此FIR濾波器是一個穩(wěn)定的線性系統(tǒng)。同時,快速傅里葉變換(Fast Fourier Transfor,FFT)能夠在很大程度上提高FIR濾波器的運算速率[4],以有助于FIR濾波器對信號的有效過濾。
大多數(shù)傳統(tǒng)的FIR濾波器都是采用TI公司的TMS320CXX系列數(shù)字信號處理器(DSP)芯片[5]來實現(xiàn)系統(tǒng)設(shè)計。根據(jù)輸入序列的乘累加[6]編寫軟件,以硬件為平臺,結(jié)合軟件算法,實現(xiàn)濾波器的設(shè)計。但DSP芯片的馮·諾依曼體系架構(gòu)使得數(shù)據(jù)的處理速度和容量都受到了限制,而FPGA因其豐富的連線資源和龐大的邏輯陣列,為實現(xiàn)并行度極高的FIR濾波器搭建了高效的運作平臺,同時具有優(yōu)良的可擴展性。通過采用分布式算法,F(xiàn)IR濾波器可以克服濾波器階數(shù)對運算速率的影響,使兩者不呈正相關(guān)性。因此,分布式算法可廣泛應(yīng)用于高階FIR濾波器的設(shè)計。
傳統(tǒng)分布式算法大多數(shù)采用串行處理輸入序列的數(shù)據(jù),獲取輸出序列值。采用傳統(tǒng)分布式算法易于實現(xiàn)低階濾波器,而高階濾波器的實現(xiàn)則較為困難。目前,利用分布式算法實現(xiàn)的高階FIR濾波器,大多數(shù)都采用串行分布式結(jié)構(gòu)、并行分布式結(jié)構(gòu)或拆分查找表結(jié)構(gòu)。3種分布式結(jié)構(gòu)在存儲器占用和時鐘周期利用方面都各有優(yōu)缺點,因此對3種結(jié)構(gòu)的算法進(jìn)行整合,可有效提高存儲占用和時鐘周期利用,有效化解了兩者之間的矛盾。
本文以國產(chǎn)FPGA為硬件平臺,綜合利用各算法的優(yōu)勢,提出了一種基于FPGA并行+拆分查找表分布式結(jié)構(gòu)高階FIR的設(shè)計與實現(xiàn),以中國電科58所的JS1032系列FPGA為核心器件,利用100%國產(chǎn)化元器件搭建硬件電路,比較研究了3種分布式算法,對FIR濾波器進(jìn)行了硬件實現(xiàn)和軟件仿真,同時利用惠普網(wǎng)絡(luò)分析儀對所設(shè)計的FIR濾波器進(jìn)行了幅頻特性的測試,驗證了該算法的有效性和實時性。
線性時不變性[7]是FIR濾波器最大的系統(tǒng)特征,N階FIR數(shù)字濾波器的輸入序列x(n)與單位沖激響應(yīng)h(n)經(jīng)卷積運算可得輸出序列y(n):
(1)
FIR濾波器典型的設(shè)計結(jié)構(gòu)主要由延時單元、乘法器、抽頭系數(shù)、加法器等部分組成,F(xiàn)IR濾波器典型的設(shè)計結(jié)構(gòu)如圖1所示。輸入樣本x(n)通過緩沖區(qū)實現(xiàn)Z-1延時,并在數(shù)據(jù)寄存器中,開設(shè)n個用于存放最新輸入樣本的滑窗。最新的數(shù)據(jù)采樣乘以抽頭系數(shù),得到的乘積再與上一次的加法器結(jié)果進(jìn)行求和,依次遞進(jìn)運算,改變抽頭數(shù)目和抽頭系數(shù)可獲得不同幅頻特性的FIR濾波器。
圖1 FIR濾波器典型的設(shè)計結(jié)構(gòu)
龐大的乘法和加法運算非常消耗FPGA的資源,同時FPGA的設(shè)計效率和邏輯單元的占用量都非常高,因而使用傳統(tǒng)方法實現(xiàn)FIR濾波器,濾波器的階數(shù)很難提高,因此必須對經(jīng)典實現(xiàn)方法進(jìn)行優(yōu)化改進(jìn)。
分布式算法[8]是Croisier于1973年提出的,但由于計算資源的客觀限制,發(fā)展較為緩慢,直到FPGA的出現(xiàn),才使得分布式算法得到了廣泛應(yīng)用。
分布式算法通過將n個數(shù)據(jù)的相同序號的位在移位寄存器中進(jìn)行操作,在查找表中獲取相應(yīng)的部分積,然后通過二次冪加權(quán)對已獲取的部分積進(jìn)行累加,完成加法運算后,獲得最終結(jié)果。而傳統(tǒng)經(jīng)典算法的乘法運算和加法運算是分離的,是在完成所有乘積之后,再對乘積結(jié)果進(jìn)行累加。分布式算法與傳統(tǒng)算法相比,實現(xiàn)濾波器設(shè)計的硬件電路規(guī)模大為減小,并以流水線式的處理模式,使得計算速度大幅提高。FPGA因其能高速完成移位和加法運算使得分布式算法的應(yīng)用更為廣泛[9],也拓寬了FPGA芯片的應(yīng)用領(lǐng)域。為了便于分析,將濾波器輸出序列的表達(dá)式改為
(2)
假設(shè)h(n)均為常數(shù),x(n)是變量,無符號數(shù)x(n)的表達(dá)式為
(3)
式中,n為第n個采樣值;b為x(n)的第b位。則y(n)可以表示為
(4)
變換求和次序,重新求和得:
y(n)=h(0)[xB-1(0)×2B-1+xB-2(0)×2B-2+
x0(0)×20]+h(1)[xB-1(1)×2B-1+xB-2(1)×2B-2+
x0(1)×20]+…+h(N-1)[xB-1(N-1)×2B-1+
xB-2(N-1)×2B-2+x0(N-1)×20]
=h(0)xB-1(0)+h(1)xB-1(1)+…+
h(N-1)xB-1(N-1)]2B-1+…+[h(0)x0(0)+
h(1)x0(1)+…+h(N-1)x0(N-1)]20
(5)
化簡成如下形式:
(6)
式中,xb(n)為第n個數(shù)據(jù)的第b位。x(n)為取值[0,1]的有限位數(shù)據(jù)。分布式算法的原理框圖如圖2所示。
圖2 分布式算法原理框圖
求得濾波器系數(shù)后,根據(jù)濾波器輸入數(shù)據(jù)位寬,對系數(shù)進(jìn)行合適的放大,在實現(xiàn)過程中對累加值進(jìn)行右移,得到系統(tǒng)的輸出結(jié)果。
分布式算法以序列運算處理的方式劃分,可分為串行分布式結(jié)構(gòu)、并行分布式結(jié)構(gòu)和拆分查找表結(jié)構(gòu)。
串行分布式結(jié)構(gòu)需要大量的ROM進(jìn)行尋址,同時一次運算需要多個時鐘周期,使得成本和存儲時間都急劇增加。當(dāng)FIR濾波器的階數(shù)很高時,使用串行分布式結(jié)構(gòu)很難實現(xiàn)。例如,設(shè)計一個階數(shù)為64、位寬12的FIR濾波器,需要12×264bit的存儲空間,而FPGA根本沒法提供高達(dá)12 Gbit的內(nèi)部存儲空間。
拆分查找表結(jié)構(gòu)相較串行分布式結(jié)構(gòu)而言,很大程度上減小了存儲器的數(shù)量,但拆分查找表結(jié)構(gòu)和串行分布式結(jié)構(gòu)同樣需要很多個時鐘周期來實現(xiàn)乘加運算。輸入數(shù)據(jù)的位寬決定了串行分布式結(jié)構(gòu)和拆分查找表結(jié)構(gòu)兩種算法實現(xiàn)FIR濾波器輸出速率的快慢,每輸入一個數(shù)據(jù),輸出一定要延遲相應(yīng)位寬個數(shù)的周期,才能輸出一個數(shù)據(jù),極大地影響了數(shù)據(jù)處理速度。
并行分布式結(jié)構(gòu)在同一周期內(nèi)同時尋址已存入ROM表的輸入數(shù)據(jù),占用的存儲器資源也較多,但與串行分布式結(jié)構(gòu)相比較,其占用的存儲器資源個數(shù)少之又少,同時在處理高速信號時,并行分布式結(jié)構(gòu)以其較高的數(shù)據(jù)吞吐率顯現(xiàn)出很大的優(yōu)勢。
根據(jù)以上對3種分布式算法優(yōu)缺點的分析說明,串行分布式結(jié)構(gòu)、拆分查找表結(jié)構(gòu)和并行分布式結(jié)構(gòu)在占用存儲器資源和時鐘周期方面的對比如表1所示。
表1 3種分布式算法的對比
為了克服3種分布式結(jié)構(gòu)在存儲器占用和時鐘周期利用方面的矛盾,對并行結(jié)構(gòu)和拆分查找表結(jié)構(gòu)進(jìn)行了整合,使得輸入數(shù)據(jù)在同一周期同時進(jìn)行取值,提高運算速率,并將查找表拆分成若干個小的查找表,減小存儲器的占用,提出并行+拆分查找表結(jié)構(gòu)的分布式算法。并行+拆分查找表分布式結(jié)構(gòu)如圖3所示。下面舉例說明并行+拆分查找表結(jié)構(gòu)的分布式算法在計算規(guī)模和時鐘周期數(shù)兩個方面的優(yōu)勢。例如本文256階的FIR濾波器使用傳統(tǒng)模式查找表,位寬達(dá)2256,通過拆分查找表,其規(guī)模可降為16×216=1048576,并在一周期內(nèi)對輸入數(shù)據(jù)同時進(jìn)行尋址,一方面提升了系統(tǒng)的運算效率,另一方面減小了系統(tǒng)的設(shè)計規(guī)模。
圖3 并行+拆分查找表分布式結(jié)構(gòu)
FIR濾波器的實現(xiàn)需建立在一定的硬件平臺基礎(chǔ)上,其硬件電路系統(tǒng)框圖如圖4所示。在本文的硬件電路中,時序信號和控制信號是由FPGA來完成,同時FPGA處理FIR濾波器系統(tǒng)的輸入數(shù)據(jù),是實現(xiàn)系統(tǒng)要求的核心器件。FPGA的配置是通過STM32來完成的。每次系統(tǒng)通電后,STM32將事先存入到只讀存儲器HWD24C256中的配置文件下載到FPGA 中,下載完畢后,F(xiàn)PGA便開始工作。若需要修改濾波器的參數(shù),只需存入不同的配置文件,而無須改動硬件電路,增強了硬件電路的通用性。采用STM32芯片自身的A/D口,其轉(zhuǎn)化精度為12位,分辨率高,轉(zhuǎn)換速率最大可達(dá)1 MHz。
圖4 硬件電路系統(tǒng)框圖
信號輸入后,根據(jù)信號幅度的控制要求,對信號進(jìn)行適應(yīng)性放大,并傳輸給A/D轉(zhuǎn)換器進(jìn)行采樣轉(zhuǎn)換,之后送到FPGA進(jìn)行運算處理;FPGA完成對數(shù)據(jù)的處理之后,將結(jié)果進(jìn)行D/A變換,轉(zhuǎn)換成模擬信號后,再經(jīng)過運放調(diào)整,最后輸出系統(tǒng)信號。
因美國對華大規(guī)模的芯片禁購,很多進(jìn)口原器件已無法使用。本系統(tǒng)所選器件均為國產(chǎn),元器件國產(chǎn)化數(shù)量比、規(guī)格比、費用比均為100%,系統(tǒng)主要元器件如表2所示。
表2 主要元器件表
并行+拆分查找表分布式算法在FPGA上的實現(xiàn)基本可以劃分為三大功能模塊:輸入輸出控制部分、查找表(Look-Up-Table)部分和累和部分。FPGA程序的系統(tǒng)架構(gòu)如圖5所示。
圖5 FPGA程序的系統(tǒng)架構(gòu)
其中,輸入輸出控制部分負(fù)責(zé)完成系統(tǒng)數(shù)據(jù)的采集并將濾波運算處理的數(shù)據(jù)輸出給后級數(shù)模轉(zhuǎn)換電路;查找表(Look-Up-Table)部分用于獲取計算輸出序列過程中的部分積;累和部分是對通過查找表所得的部分積進(jìn)行加法運算。完成以上三部分的內(nèi)容后,即可進(jìn)行后續(xù)電路的處理,最終得到系統(tǒng)的輸出信號。
利用Matlab軟件中的可視化仿真工具Simulink可以求得FIR濾波器的抽頭系數(shù)[10],本文FIR濾波器所需系數(shù)如表3所示。因FPGA只能處理定點數(shù)的乘法,而Matlab生成的系數(shù)是分布在[-1,1]區(qū)間的浮點數(shù),因此需要將所得的濾波器系數(shù)同乘以1024,才能在FPGA中參與運算處理。
表3 FIR濾波器系數(shù)
輸入輸出控制部分主要用于模擬信號的采集,完成運算處理后,輸出處理信號用于后級進(jìn)行D/A轉(zhuǎn)換。另一方面,系統(tǒng)所需的時序信號也是由輸入輸出控制部分來實現(xiàn)的,通過時序控制輸入數(shù)據(jù),依次存入數(shù)據(jù)緩存區(qū),以待進(jìn)行查表。
查找表部分主要用于對處理后的輸入數(shù)據(jù)通過查表快速獲得部分積結(jié)果。其中一個查找表的具體內(nèi)容如表4所示,其他查找表可根據(jù)表4同理推出。
累和部分對通過查找表獲得的部分積進(jìn)行相加,相加時一定要根據(jù)式(6)進(jìn)行二次冪加權(quán),才能得到系統(tǒng)的內(nèi)積結(jié)果y(n)。獲取內(nèi)積y(n)后,就可以輸出到后級電路進(jìn)行D/A轉(zhuǎn)換,進(jìn)一步獲取系統(tǒng)輸出信號。
表4 查找表
FDATOOL[11](Filter Design & Analysis Tool)是Matlab軟件的Simulink中各種濾波器的專用設(shè)計與分析工具。FDATOOL可以設(shè)計實現(xiàn)各種常規(guī)濾波器,并可將各種算法體現(xiàn)在設(shè)計過程中。FDATOOL操作簡單,方便靈活。在使用FDATOOL工具設(shè)計FIR濾波器時,濾波器類型、階數(shù)、截止頻率、窗函數(shù)的選擇是其關(guān)鍵所在。其中,窗函數(shù)可根據(jù)設(shè)計需求實現(xiàn)對信號的截斷,減少系統(tǒng)能量的泄露,其中Hamming窗、Blackman窗和Hanning窗最為常見。本文FIR濾波器在FDATOOL中的設(shè)計參數(shù)如表5所示。
表5 參數(shù)表
本設(shè)計中FIR濾波器的輸入數(shù)據(jù)為12位有符號二進(jìn)制數(shù),在Matlab中利用Blackman窗計算FIR濾波器的濾波系數(shù),設(shè)置采樣率和截止頻率分別為5 MHz和0.5 MHz。根據(jù)既定參數(shù)要求,通過Matlab的理論仿真,實現(xiàn)所需的高階FIR濾波器,其幅頻特性如圖6所示。
圖6 幅頻特性(Matlab)
采用中國電科58所JS1032系列FPGA器件,在QuartusⅡ開發(fā)軟件下完成并行+拆分查找表分布式FIR濾波器的仿真,其過程包括軟件編程、程序的編譯、調(diào)試,并利用網(wǎng)絡(luò)分析儀HP3577A對FIR濾波器進(jìn)行幅頻特性的測試。網(wǎng)絡(luò)分析儀測試所得的幅頻特性如圖7所示,可知高階FIR濾波器的截止頻率為0.508 MHz,與原定的設(shè)計要求0.5 MHz相比,誤差很小。通過比較Matlab理論仿真與硬件電路實現(xiàn)的結(jié)果可知,利用硬件所設(shè)計的高階FIR濾波器的幅頻響應(yīng)與Matlab理論仿真的結(jié)果高度吻合,誤差僅為0.008 MHz。
圖7 幅頻特性(網(wǎng)絡(luò)分析儀)
由于FIR濾波器傳統(tǒng)實現(xiàn)方法存在局限性,通過對3種分布式算法進(jìn)行比較,提出了一種基于FPGA并行+拆分查找表分布式結(jié)構(gòu)高階FIR濾波器的實現(xiàn)方法,并且利用中國電科58所JS1032系列FPGA及其他所選國產(chǎn)元器件設(shè)計實現(xiàn)了高階FIR濾波器的硬件電路。通過軟件Matlab仿真和硬件實測,表明基于FPGA并行+拆分查找表分布式結(jié)構(gòu)實現(xiàn)的高階FIR濾波器誤差極小,運算速率快,硬件資源占用少,并可根據(jù)實際情況調(diào)整FIR濾波器的階數(shù),可使其廣泛應(yīng)用于很多領(lǐng)域。