閆慧欣,楊 錄,李少聰,滕生超,左天樂,呂俊文
(中北大學信息與通信工程學院,山西 太原 038507)
超聲導波檢測技術作為一種距離遠、傳輸速度快、效率高的新型無損檢測手段,在高溫鍋爐、罐裝燃氣、石油管道等領域有著廣闊的應用前景[1]。
在信號激發、傳輸和接收的過程中,超聲導波可能會被外部噪聲所影響,例如在進行動態溫度場溫度測量時,對于測溫結果的處理,先用電路實現帶通濾波,再通過上位機存儲數據,然后利用Matlab 對測量信號進行處理。如果可以直接通過FPGA 實現帶通濾波器,再將濾波器結果直接在FPGA 中進行運算,那么就可以大大節省運算時間。本文設計目的是設計高頻、窄帶的帶通濾波器,普遍滿足于超聲導波探測技術的需要。
在數字信號處理領域,數字濾波器根據沖擊響應函數的時域特性,可分為無限脈沖響應(IIR)和有限脈沖響應(FIR 濾波器)兩大類[2]。
IIR 數字濾波器的傳輸函數由2 個可調節因子組成,其中兩個因子分別為零點和極點,只有一個條件是極點必須位于一個單位圓圈之內,從而降低系統的階數,提高系統的選擇性。但是,IIR 濾波器的穩定性得不到保證,而且無法達到嚴格的線性相位[3]。而FIR 濾波器的傳輸函數由于其極點是固定于原點的,其特性可以隨零點的變化而變化,具有較好的穩定性、較好的相位線性和多通帶濾波等優點,因此,本文選擇FIR 濾波器。FIR 濾波器的基本結構有直接型、級聯型、線性相位型、頻率采樣型等[4]。其中直接型運算簡單、運行速度快、節省資源,可作為本文的實現結構。
對于單位抽樣響應為h(n)的N-1 階FIR 濾波器,輸入信號為x(n),n為序列號,輸出信號為y(n)。在時域中,濾波器的差分方程公式為:
頻域中,系統函數表示為:
根據式(2)可得出如圖1所示的直接型結構。從圖中可以看到,直接型結構由延遲器、乘法器和加法器組成[3]。

圖1 FIR 濾波器直接型結構
若濾波器的階數為N-1,則實現該濾波器需要N個延遲器、N個乘法器以及N-1 個加法器[5]。通常,直接型濾波器按順序執行,可采用流水線處理方式,本濾波器的階數為20 階。20 階FIR 濾波器系統輸出表達式為:
式中,N個濾波器的抽頭系數h(n)分別與N個采樣數據x(n)相乘,所得的積累之和為輸出結果[5]。FIR 濾波器實現的基本結構圖如圖2 所示。

圖2 N 階FIR 數字濾波器直接型結構的統計模型
針對上述情況,本文濾波器設計的數字指標如下:采樣頻率為100 MHz、中心頻率為1 MHz、衰減幅值為50 dB 的20 階FIR 帶通濾波器。硬件實現帶通濾波器,階數越高所耗的資源越高,故將低通濾波器和高通濾波器疊加起來進行實現,運用fdatool 工具分別得到高通濾波器和低通濾波器的傳輸系數,如圖3 所示,灰色線為20 階低通濾波器,黑色線為20 階高通濾波器[1]。

圖3 帶通濾波器系數設計
本濾波器設計帶通是依靠高通濾波器疊加低通濾波器實現的,低通濾波器確定了上限,高通濾波器確定了下限,當上限下限都確定,那么就實現了帶通。這樣做的好處是:在實現相同帶寬的時候,該方法所用的階數少;FPGA 仿真時,所耗資源也少,運行速度快。以f1=0.5 MHz,f2=1 MHz,f3=1.5 MHz 三個單頻正弦波疊加構成模擬信號,如圖4 所示,頻率0.5 MHz 和1.5 MHz 被濾除,1 MHz 可以輸出,達到了濾波效果[6]。

圖4 Matlab 仿真模擬圖
從fdatool 工具包設計出的高低通濾波器系數為歸一化的小數,但在FPGA 上運算只能對定點數進行計算,故需要將系數進行量化取整,將系數符號都變成正的,方便FPGA 使用,量化公式[7]為:
Numhigh = round(Numhigh×105- 851)(4)式中:Numhigh 表示系數;round 表示取整。由量化函數映射出FPGA 中的系數函數,在FPGA 中以圖5 所示帶通濾波器的RTL 結構圖來實現數字帶通濾波器。

圖5 帶通濾波器的RTL 圖
如圖5 所示,FPGA 仿真的RTL 圖采用乘法器和累加器來依次實現低通濾波器和高通濾波器,將Matlab 進行仿真生成的待濾波信號作為輸入信號data_in,輸入序列以八進制的格式存為.txt 文件保存。在進行ModelSim 仿真時,直接調用此文件作為濾波輸入信號,通過PLL 鎖相環設置200 MHz 的工作頻率,再通過FIFO 先入先出的特性,將低通濾波器輸出信號data_out傳入高通濾波器[8]。
FIR 數字帶通濾波器的實現結構由鎖相環PLL 設計模塊、高低通濾波器設計模塊、FIFO 數據存儲模塊、testbench 設計模塊等組成,核心模塊為高低通濾波器設計模塊。如上所述,濾波器的原理就是輸入信號與濾波器系數的卷積,低通濾波器和高通濾波器的區別是截止頻率和通帶頻率不同,濾波器濾波的過程是頻域卷積的過程,所以本文設計低通和高通濾波器的方法都為流水線加法樹陣列法,實現結構如圖6 所示。

圖6 流水線加法樹陣列的20 階FIR 低通濾波器結構
為對接A/D 轉換,設計輸入信號位寬為16 位,采樣點數為512 點,輸出位寬為16 位,FIFO 位寬也為16 位,數據進行帶通濾波處理。輸入數據data_in 為16 位512 點,FIFO 位寬設計為16 位,利用其先入先出的特性,將通過低通濾波后的輸出信號data_out 作為高通濾波器的輸入信號data_hin ,通過高通濾波器的輸出結果data_hout 就是帶通濾波的結果,這期間工作頻率為200 MHz。
本文采用流水線加法樹陣列結構,D 代表信號延遲,x(n)為最先輸入的信號,然后通過延遲得到x(n-1),再與相對應的系數h(0)相乘,以此類推,延遲直到x(n-20),再將乘法運算的結果兩兩相加后,再進一步延遲、相加,直到最后僅有一位信號,即輸出output信號[9]。
帶通濾波器的ModelSim 仿真圖如圖7 所示。圖中:data_in 為設置的輸入信號;data_out 為低通濾波器過濾后的結果;data_hout 為高通濾波器過濾后的結果,也是過濾后總結果。從圖7 中可以看出,針對16 位512 點數據耗時1 047 個時鐘的濾波低頻信號、高頻信號,輸出了通帶內的單頻信號,實現了帶通濾波功能。由仿真結果可以得出:在高噪聲信號環境下,針對信號特征提取與識別問題,同時滿足實時性與快速行的要求,與Matlab 仿真結果一致,說明該濾波器性能良好。

圖7 帶通濾波器的ModelSim 仿真圖
從信號開始進入到輸出結果的時間約為1 047 ns,再除以工作時鐘的周期,已知工作頻率為100 MHz,則周期為1/100 MHz,由此可以得到時鐘數約為1 047。
本文從FIR 數字濾波器的原理出發,運用直接型結構實現數字濾波,利用fdatool 工具箱與Verilog 硬件設計語言設計實現數字濾波。通過低階濾波器疊加實現帶通濾波器的濾波,并采用Matlab 和ModelSim 相結合的方法對所設計的數字濾波器進行了仿真。結果表明,所設計的數字帶通濾波器可以獲得較好的濾波效果。