閆慧欣,楊 錄,李少聰,滕生超,左天樂,呂俊文
(中北大學(xué)信息與通信工程學(xué)院,山西 太原 038507)
超聲導(dǎo)波檢測技術(shù)作為一種距離遠、傳輸速度快、效率高的新型無損檢測手段,在高溫鍋爐、罐裝燃氣、石油管道等領(lǐng)域有著廣闊的應(yīng)用前景[1]。
在信號激發(fā)、傳輸和接收的過程中,超聲導(dǎo)波可能會被外部噪聲所影響,例如在進行動態(tài)溫度場溫度測量時,對于測溫結(jié)果的處理,先用電路實現(xiàn)帶通濾波,再通過上位機存儲數(shù)據(jù),然后利用Matlab 對測量信號進行處理。如果可以直接通過FPGA 實現(xiàn)帶通濾波器,再將濾波器結(jié)果直接在FPGA 中進行運算,那么就可以大大節(jié)省運算時間。本文設(shè)計目的是設(shè)計高頻、窄帶的帶通濾波器,普遍滿足于超聲導(dǎo)波探測技術(shù)的需要。
在數(shù)字信號處理領(lǐng)域,數(shù)字濾波器根據(jù)沖擊響應(yīng)函數(shù)的時域特性,可分為無限脈沖響應(yīng)(IIR)和有限脈沖響應(yīng)(FIR 濾波器)兩大類[2]。
IIR 數(shù)字濾波器的傳輸函數(shù)由2 個可調(diào)節(jié)因子組成,其中兩個因子分別為零點和極點,只有一個條件是極點必須位于一個單位圓圈之內(nèi),從而降低系統(tǒng)的階數(shù),提高系統(tǒng)的選擇性。但是,IIR 濾波器的穩(wěn)定性得不到保證,而且無法達到嚴格的線性相位[3]。而FIR 濾波器的傳輸函數(shù)由于其極點是固定于原點的,其特性可以隨零點的變化而變化,具有較好的穩(wěn)定性、較好的相位線性和多通帶濾波等優(yōu)點,因此,本文選擇FIR 濾波器。FIR 濾波器的基本結(jié)構(gòu)有直接型、級聯(lián)型、線性相位型、頻率采樣型等[4]。其中直接型運算簡單、運行速度快、節(jié)省資源,可作為本文的實現(xiàn)結(jié)構(gòu)。
對于單位抽樣響應(yīng)為h(n)的N-1 階FIR 濾波器,輸入信號為x(n),n為序列號,輸出信號為y(n)。在時域中,濾波器的差分方程公式為:
頻域中,系統(tǒng)函數(shù)表示為:
根據(jù)式(2)可得出如圖1所示的直接型結(jié)構(gòu)。從圖中可以看到,直接型結(jié)構(gòu)由延遲器、乘法器和加法器組成[3]。
圖1 FIR 濾波器直接型結(jié)構(gòu)
若濾波器的階數(shù)為N-1,則實現(xiàn)該濾波器需要N個延遲器、N個乘法器以及N-1 個加法器[5]。通常,直接型濾波器按順序執(zhí)行,可采用流水線處理方式,本濾波器的階數(shù)為20 階。20 階FIR 濾波器系統(tǒng)輸出表達式為:
式中,N個濾波器的抽頭系數(shù)h(n)分別與N個采樣數(shù)據(jù)x(n)相乘,所得的積累之和為輸出結(jié)果[5]。FIR 濾波器實現(xiàn)的基本結(jié)構(gòu)圖如圖2 所示。
圖2 N 階FIR 數(shù)字濾波器直接型結(jié)構(gòu)的統(tǒng)計模型
針對上述情況,本文濾波器設(shè)計的數(shù)字指標(biāo)如下:采樣頻率為100 MHz、中心頻率為1 MHz、衰減幅值為50 dB 的20 階FIR 帶通濾波器。硬件實現(xiàn)帶通濾波器,階數(shù)越高所耗的資源越高,故將低通濾波器和高通濾波器疊加起來進行實現(xiàn),運用fdatool 工具分別得到高通濾波器和低通濾波器的傳輸系數(shù),如圖3 所示,灰色線為20 階低通濾波器,黑色線為20 階高通濾波器[1]。
圖3 帶通濾波器系數(shù)設(shè)計
本濾波器設(shè)計帶通是依靠高通濾波器疊加低通濾波器實現(xiàn)的,低通濾波器確定了上限,高通濾波器確定了下限,當(dāng)上限下限都確定,那么就實現(xiàn)了帶通。這樣做的好處是:在實現(xiàn)相同帶寬的時候,該方法所用的階數(shù)少;FPGA 仿真時,所耗資源也少,運行速度快。以f1=0.5 MHz,f2=1 MHz,f3=1.5 MHz 三個單頻正弦波疊加構(gòu)成模擬信號,如圖4 所示,頻率0.5 MHz 和1.5 MHz 被濾除,1 MHz 可以輸出,達到了濾波效果[6]。
圖4 Matlab 仿真模擬圖
從fdatool 工具包設(shè)計出的高低通濾波器系數(shù)為歸一化的小數(shù),但在FPGA 上運算只能對定點數(shù)進行計算,故需要將系數(shù)進行量化取整,將系數(shù)符號都變成正的,方便FPGA 使用,量化公式[7]為:
Numhigh = round(Numhigh×105- 851)(4)式中:Numhigh 表示系數(shù);round 表示取整。由量化函數(shù)映射出FPGA 中的系數(shù)函數(shù),在FPGA 中以圖5 所示帶通濾波器的RTL 結(jié)構(gòu)圖來實現(xiàn)數(shù)字帶通濾波器。
圖5 帶通濾波器的RTL 圖
如圖5 所示,F(xiàn)PGA 仿真的RTL 圖采用乘法器和累加器來依次實現(xiàn)低通濾波器和高通濾波器,將Matlab 進行仿真生成的待濾波信號作為輸入信號data_in,輸入序列以八進制的格式存為.txt 文件保存。在進行ModelSim 仿真時,直接調(diào)用此文件作為濾波輸入信號,通過PLL 鎖相環(huán)設(shè)置200 MHz 的工作頻率,再通過FIFO 先入先出的特性,將低通濾波器輸出信號data_out傳入高通濾波器[8]。
FIR 數(shù)字帶通濾波器的實現(xiàn)結(jié)構(gòu)由鎖相環(huán)PLL 設(shè)計模塊、高低通濾波器設(shè)計模塊、FIFO 數(shù)據(jù)存儲模塊、testbench 設(shè)計模塊等組成,核心模塊為高低通濾波器設(shè)計模塊。如上所述,濾波器的原理就是輸入信號與濾波器系數(shù)的卷積,低通濾波器和高通濾波器的區(qū)別是截止頻率和通帶頻率不同,濾波器濾波的過程是頻域卷積的過程,所以本文設(shè)計低通和高通濾波器的方法都為流水線加法樹陣列法,實現(xiàn)結(jié)構(gòu)如圖6 所示。
圖6 流水線加法樹陣列的20 階FIR 低通濾波器結(jié)構(gòu)
為對接A/D 轉(zhuǎn)換,設(shè)計輸入信號位寬為16 位,采樣點數(shù)為512 點,輸出位寬為16 位,F(xiàn)IFO 位寬也為16 位,數(shù)據(jù)進行帶通濾波處理。輸入數(shù)據(jù)data_in 為16 位512 點,F(xiàn)IFO 位寬設(shè)計為16 位,利用其先入先出的特性,將通過低通濾波后的輸出信號data_out 作為高通濾波器的輸入信號data_hin ,通過高通濾波器的輸出結(jié)果data_hout 就是帶通濾波的結(jié)果,這期間工作頻率為200 MHz。
本文采用流水線加法樹陣列結(jié)構(gòu),D 代表信號延遲,x(n)為最先輸入的信號,然后通過延遲得到x(n-1),再與相對應(yīng)的系數(shù)h(0)相乘,以此類推,延遲直到x(n-20),再將乘法運算的結(jié)果兩兩相加后,再進一步延遲、相加,直到最后僅有一位信號,即輸出output信號[9]。
帶通濾波器的ModelSim 仿真圖如圖7 所示。圖中:data_in 為設(shè)置的輸入信號;data_out 為低通濾波器過濾后的結(jié)果;data_hout 為高通濾波器過濾后的結(jié)果,也是過濾后總結(jié)果。從圖7 中可以看出,針對16 位512 點數(shù)據(jù)耗時1 047 個時鐘的濾波低頻信號、高頻信號,輸出了通帶內(nèi)的單頻信號,實現(xiàn)了帶通濾波功能。由仿真結(jié)果可以得出:在高噪聲信號環(huán)境下,針對信號特征提取與識別問題,同時滿足實時性與快速行的要求,與Matlab 仿真結(jié)果一致,說明該濾波器性能良好。
圖7 帶通濾波器的ModelSim 仿真圖
從信號開始進入到輸出結(jié)果的時間約為1 047 ns,再除以工作時鐘的周期,已知工作頻率為100 MHz,則周期為1/100 MHz,由此可以得到時鐘數(shù)約為1 047。
本文從FIR 數(shù)字濾波器的原理出發(fā),運用直接型結(jié)構(gòu)實現(xiàn)數(shù)字濾波,利用fdatool 工具箱與Verilog 硬件設(shè)計語言設(shè)計實現(xiàn)數(shù)字濾波。通過低階濾波器疊加實現(xiàn)帶通濾波器的濾波,并采用Matlab 和ModelSim 相結(jié)合的方法對所設(shè)計的數(shù)字濾波器進行了仿真。結(jié)果表明,所設(shè)計的數(shù)字帶通濾波器可以獲得較好的濾波效果。