唐 衡,張 晶,趙 歡
(北京軒宇信息技術(shù)有限公司,北京 100089)
數(shù)字濾波器是通過改變或者修正時域或頻域中數(shù)字信號的屬性,從輸入的數(shù)字信號中提取有效的信號成分,來濾除不需要的信號成分或者干擾成分。數(shù)字濾波器在數(shù)字通信中使用非常頻繁。在通信信號處理系統(tǒng)中,考慮計算量和存儲空間要求,就需要不同的采樣率間的相互轉(zhuǎn)換,即多速率數(shù)字信號處理,包括使采樣率升高的內(nèi)插和使采樣率降低的抽取兩種方式[1]。而隨著數(shù)字濾波器理論的成熟與半導(dǎo)體芯片產(chǎn)業(yè)的高速發(fā)展,F(xiàn)PGA 的大量使用使得數(shù)字濾波器的設(shè)計變得更加準(zhǔn)確便利。
基于FPGA 的數(shù)字濾波器的大量應(yīng)用,使得相應(yīng)數(shù)字濾波器的驗證技術(shù)也飛速發(fā)展。為了確認(rèn)數(shù)字濾波器是否準(zhǔn)確地實現(xiàn)了設(shè)計功能,就需要對數(shù)字濾波器進(jìn)行驗證。驗證通常被認(rèn)為是一種從根本上有別于設(shè)計的行為[2]。目前已存在的形式化驗證工具需要專門化的知識,很難掌握,但是仿真驗證是一種遠(yuǎn)比形式化驗證更常采用的驗證技術(shù)[3]。本文介紹常用的采樣率轉(zhuǎn)換濾波器CIC 濾波器和Farrow 濾波器的基本原理、FPGA 實現(xiàn)以及具體的驗證方法,最后給出驗證結(jié)果。
采樣率轉(zhuǎn)換 (SRC) 在通信中應(yīng)用非常普遍,在通信系統(tǒng)中,輸入采樣率和輸出采樣率常為整數(shù)倍或分?jǐn)?shù)倍的轉(zhuǎn)換。目前,常用任意數(shù)字采樣率轉(zhuǎn)換結(jié)構(gòu),在整數(shù)倍時級聯(lián)積分梳狀濾波器(Cascaded integrator-comb,CIC)運(yùn)用較多,而在分?jǐn)?shù)倍時Farrow 結(jié)構(gòu)濾波器[4]則更具優(yōu)勢。
級聯(lián)積分梳狀(CIC)濾波器可以高效地實現(xiàn)抽取或者內(nèi)插,尤其適用于軟件無線電通信系統(tǒng)中處于高采樣率的數(shù)字前端使用[5]。CIC 濾波器僅利用加法器、減法器和寄存器的特點,占用資源少,實現(xiàn)簡單且速度快,所以非常適用工作在高采樣率下。數(shù)字下變頻(Digital Down Converter,DDC)中,CIC 濾波器起著重要的作用,它的主要功能是對采樣速率的抽取,同時具有低通濾波器的特性。
抽取CIC 濾波器由一對或多對積分—梳狀濾波器組成,輸入信號依次經(jīng)過積分、降采樣以及與積分環(huán)節(jié)數(shù)目相同的梳狀濾波器三部分,如圖1 所示。
在內(nèi)插CIC 中,輸入信號依次經(jīng)過梳狀濾波器,升采樣,以及與梳狀數(shù)目相同的積分環(huán)節(jié),如圖2所示。
圖1 抽取CIC 濾波器結(jié)構(gòu)
圖2 內(nèi)插CIC 濾波器結(jié)構(gòu)
工程應(yīng)用中不僅有整數(shù)采樣率變換需求,同樣有任意小數(shù)采樣率轉(zhuǎn)換的需求。內(nèi)插估值的實現(xiàn)方法應(yīng)運(yùn)而生,它是基于數(shù)值分析的插值理論發(fā)展起來,其基本思想就是用原始的采樣值構(gòu)造插值函數(shù),然后根據(jù)插值函數(shù)求出未知點上的信號值,并以此作為對真實值的逼近[6]。CIC 濾波器適合于整數(shù)倍插值或抽取,以及抽取和插值都比較小的分?jǐn)?shù)倍數(shù)的采樣率轉(zhuǎn)換。Farrow 濾波器可以高效地實現(xiàn)任意因子(包括無理數(shù))的采樣率轉(zhuǎn)換。
對于Farrow 結(jié)構(gòu)的拉格朗日內(nèi)插濾波器[7],設(shè)輸入信號周期為Tx,輸出信號周期為Ty,轉(zhuǎn)換公式如下:
對于任意因子的采樣率轉(zhuǎn)換,設(shè)mTy=(km+Δ)Tx,km為整數(shù)部分,Δ 為小數(shù)部分,則上式可轉(zhuǎn)換并簡化為:
用N階多項式逼近h(k+Δ),一般使用拉格朗日多項式,同時改變求和順序,可得:
利用Horner 法則,可得出Farrow 濾波器的具體結(jié)構(gòu),M為濾波器階數(shù),N為拉格朗日插值的階數(shù)。
如圖3 所示:
圖3 Farrow 濾波器結(jié)構(gòu)
仿真驗證是一種最常見的動態(tài)驗證方法,形象直觀,實現(xiàn)簡單,能夠通過覆蓋率檢查測試驗證的充分性。驗證平臺(testbench,簡稱tb)通過產(chǎn)生特定的測試激勵,觀測設(shè)計輸出,通過比對結(jié)果判斷設(shè)計的正確與否。對于復(fù)雜的信號處理算法類驗證,可結(jié)合其他軟件的接口,生成復(fù)雜的激勵信號,同時將需要的數(shù)據(jù)存成文件,進(jìn)行后續(xù)的自動比對,必要時結(jié)合其他分析工具進(jìn)行進(jìn)一步分析。在采樣率轉(zhuǎn)換濾波器的驗證過程中,以SystemVerilog 為主要開發(fā)語言,選用IES 和MATLAB 軟件進(jìn)行多工具聯(lián)合仿真,采用ModuleBase 的環(huán)境開發(fā)方法,能準(zhǔn)確驗證算法原型。
圖4 聯(lián)合仿真驗證方法
按照驗證流程對內(nèi)插濾波器做了聯(lián)合仿真驗證和分析。
FPGA 設(shè)計中,在確定了濾波器參數(shù)后,可以使用IP 核的方式實現(xiàn)設(shè)計,一個60MHz~240MHz的四倍內(nèi)插濾波器的設(shè)計和接口如圖5 和圖6 所示:
圖5 xillinx IES 中濾波器IP 核設(shè)置圖
圖6 IP 核接口
對圖6 中IP 核設(shè)置的四倍內(nèi)插濾波器rdss_inter_filter1 進(jìn)行驗證,使用SystemVerilog 語言在IES 中搭建仿真驗證模型,主要完成的驗證任務(wù)有:
(1)clk_mod 時鐘生成,給DUT 主時鐘和data_mod 的數(shù)據(jù)時鐘;
(2)data_mod 數(shù)據(jù)生成,按照設(shè)置的頻率連續(xù)給DUT 數(shù)據(jù)激勵,并收集通過DUT 內(nèi)插濾波之后的數(shù)據(jù),得到仿真結(jié)果;
(3)MATLAB 聯(lián)合仿真,將給DUT 的數(shù)據(jù)和通過DUT 內(nèi)插濾波之后的數(shù)據(jù)輸入MATLAB 做FFT 變換,得到輔助驗證結(jié)果。
輸入60MHz 為載波的激勵波形r_da_data_test,得到內(nèi)插之后的結(jié)果w_da_data_test。結(jié)果仿真波形如圖7 和圖8 所示。
圖7 四倍內(nèi)插濾波器濾波前后仿真圖形對比
圖8 四倍內(nèi)插濾波器濾波前后數(shù)據(jù)對比
由仿真結(jié)果可知,四倍內(nèi)插濾波周期從16.668ns 到4.168ns,即60MHz 到240MHz,與設(shè)計的四倍內(nèi)插濾波相吻合。
由于IES 仿真驗證中驗證了濾波器的內(nèi)插正確性,MATLAB 則作為輔助性的驗證工具,驗證濾波器的準(zhǔn)確性。由于內(nèi)插是提高采樣率,通常會帶來鏡像干擾,需要確認(rèn)結(jié)果中是否有鏡像干擾。在MATLAB 中,隨機(jī)截取一段四倍內(nèi)插濾波前后的數(shù)據(jù)做FFT 變換,其結(jié)果如圖9、圖10 所示:
圖9 內(nèi)插濾波器濾波前數(shù)據(jù)截取與FFT 變換
由FFT 變換之后的結(jié)果可以看出,四倍內(nèi)插濾波正確,而且也沒有產(chǎn)生鏡像結(jié)果,驗證了設(shè)計的準(zhǔn)確性。
按照驗證流程對Farrow 濾波器進(jìn)行聯(lián)合仿真驗證和分析。
對于高靈敏度接收機(jī),需要考慮碼多普勒的影響,碼多普勒成為一個捕獲需要重點關(guān)注的因素。進(jìn)行碼多普勒補(bǔ)償?shù)目勺兎謹(jǐn)?shù)階延遲濾波器多采用Farrow 結(jié)構(gòu),具有碼多普勒補(bǔ)償模塊的 GNSS 信號捕獲框圖如圖11 所示[9]。
圖10 四倍內(nèi)插濾波后數(shù)據(jù)截取與FFT 變換
圖11 具有碼多普勒補(bǔ)償模塊的 GNSS 信號捕獲框圖
基于FPGA 設(shè)計Farrow 結(jié)構(gòu)濾波器時,常采用MATLAB 的filterbuilder 濾波器設(shè)計工具箱,選擇Fraction Delay 類型,按要求設(shè)置階數(shù)后生成VHDL/Verilog 代碼。
圖12 濾波器接口
對圖12 中偽碼多普勒補(bǔ)償部分進(jìn)行驗證,載波剝離后信號采樣率為6.25MHz,偽碼速率為6.138MHz,偽碼多普勒為±264Hz。使用System Verilog 語言在IES 中搭建仿真驗證模型,完成的驗證任務(wù)主要有:
(1)clk_mod 時鐘生成,給DUT 提供6.25MHz主時鐘;
(2)data_mod 數(shù)據(jù)生成,向DUT 輸入擴(kuò)頻信號(已完成載波剝離),偽碼速率為6.138MHz,偽碼多普勒分別設(shè)置為+264Hz 和-264Hz;
(3)MATLAB 聯(lián)合仿真,將偽碼多普勒補(bǔ)償前后的數(shù)據(jù)輸入MATLAB 進(jìn)行FFT 變換,比對時域和頻域信息,得到輔助驗證結(jié)果。
以6.138MHz~264Hz 的碼速率為例,IES 仿真結(jié)果如圖13 所示。
圖13 采用Farrow 結(jié)構(gòu)濾波器進(jìn)行碼多普勒補(bǔ)償仿真
clk_4x 生成strobe 的NCO 量程為4373337504,頻率控制字初始值為4294967296,多普勒偏移值為-184830,則實際保存至FIFO 的采樣率為(4294967296-184830)/4373337504×6.25=6.137736MHz,與輸入碼速率一致。
采用MATLAB 進(jìn)行FFT 變換,比對時域和頻域信息,其結(jié)果如圖14、圖15 所示。
采樣率轉(zhuǎn)換前后時域和頻域信息一致,驗證了設(shè)計的準(zhǔn)確性。
圖14 采樣率轉(zhuǎn)換前后信號時域
圖15 采樣率轉(zhuǎn)換前后信號幅頻特性
本文給出利用MATLAB 和IES 實現(xiàn)的聯(lián)合仿真實例,驗證了基于FPGA 的數(shù)字采樣率轉(zhuǎn)換濾波器CIC 和Farrow 功能正確、性能良好,完全滿足通用的通信信號處理系統(tǒng)中采樣率轉(zhuǎn)換要求。這種FPGA仿真平臺結(jié)合多種EDA仿真工具的驗證方法,降低了驗證環(huán)境的復(fù)雜度,縮短了FPGA 設(shè)計及驗證周期,增加了設(shè)計的準(zhǔn)確性。與通用驗證平臺和針對特定FPGA 系統(tǒng)的驗證技術(shù)相比,在驗證效率和通用性等方面都具有不可比擬的優(yōu)勢。