基於FPGA的FIR抽取濾波器設計

2021-09-06 21:21:42 字數 3010 閱讀 8803

用fpga實現抽取濾波器比較複雜,主要是因為在fpga中缺乏實現乘法運算的有效結構,現在,fpga中整合了硬體乘法器,使fpga在數字訊號處理方面有了長足的進步。本文介紹了一種採用xilinx公司的xc2v1000實現fir抽取濾波器的設計方法。

具體實現結構設計基於抽取濾波器的工作原理,本文採用xc2v1000實現了乙個抽取率為2、具有線性相位的3階fir抽取濾波器,利用原理圖和vhdl共同完成原始檔設計。圖1是抽取濾波器的頂層原理圖。其中,clock是工作時鐘,reset是復位訊號,enable是輸入資料有效訊號,data_in(17:0)是輸入資料,data_out(17:0)是輸出資料,valid是輸出資料有效訊號。adder18是加法器模組,mult18是乘法器模組,acc36是累加器模組,signal_36to18是資料截位器模組,fir_controller是控制器模組。控制器定時向加法器、乘法器和累加器傳送資料或控制訊號,實現流水線操作。

圖1  抽取濾波器頂層原理圖

控制器

控制器是抽取濾波器的核心模組,有兩個功能:一是接收輸入資料,二是向其它模組傳送資料和控制訊號。它根據加法器、乘法器和累加器的時序特性,有規律地向加法器傳送抽頭資料,向乘法器傳送係數,向累加器傳送控制訊號,讓加法器、乘法器和累加器在每個時鐘週期都完成指定的任務,從而實現流水線操作。控制器用vhdl語言描述,用暫存器存放抽頭和係數。

加法器

加法器的輸入和輸出都是18 bit,用vhdl語言描述實現。它有兩個工作時鐘的延遲,在輸入資料準備好的情況下,第乙個時鐘得出相加結果,第二個時鐘把相加結果鎖存輸出。

乘法器

乘法器為18 bit輸入,36 bit輸出,用庫元件mult18x18s和36 bit鎖存器實現。mult18x18s是xc2v1000自帶的18×18 bit硬體乘法器,單個時鐘就可完成乘法運算。36 bit鎖存器工作於時鐘的上公升沿,用vhdl語言描述。乘法器(mult18)也有兩個工作時鐘的延時,在輸入資料準備好的情況下,第乙個時鐘得出相乘結果,第二個時鐘把相乘結果鎖存輸出。加法器和乘法器採用鎖存輸出的結構,雖然增加了乙個工作時鐘的延遲,但有利於抽取濾波器穩定的工作,提高可靠性。

累加器

36 bit累加器用於累加乘法器的輸出,得出濾波結果。它有乙個控制埠clr,當clr為高電平時,輸出前一輪累加結果,並初始化,開始新一輪累加;當clr為低電平時,進行累加運算。累加器用vhdl語言描述。

資料截位器

資料截位器用vhdl語言描述,用於把累加器的36bit輸出進行取捨處理,一般截掉資料低位部分,保留資料高位。為了對抽取濾波器進行功能**,這裡截掉資料高18bit,保留資料低18bit。

工作過程及功能**

下面以抽取濾波器完成一次抽取濾波的全過程為例,說明抽取濾波器的工作過程。假設時鐘1、時鐘2、時鐘3和時鐘4控制器已接收了資料x(n-3)、x(n-2)、x(n-1)和x(n),那麼,

時鐘5:控制器向加法器傳送資料x(n)和x(n-3);

時鐘6:加法器進行x(n)+x(n-3)運算;控制器向加法器傳送資料x(n-1)和x(n-2);

時鐘7:加法器進行x(n-1)+x(n-2)運算,輸出x(n)+x(n-3)運算結果。控制器向乘法器傳送係數h(0);

時鐘8:加法器輸出x(n-1)+x(n-2)運算結果,乘法器進行h(0)[ x(n)+x(n-3)]運算,控制器向乘法器傳送係數h(1);

時鐘9:乘法器進行h(1)[ x(n-1)+x(n-2)]運算,輸出h(0)[ x(n)+x(n-3)]運算結果。控制器向累加器傳送控制訊號(clr為高電平);

時鐘10:乘法器輸出h(1)[ x(n-1)+x(n-2)]運算結果。累加器初始化,開始累加操作。控制器向累加器傳送控制訊號(clr為低電平);

時鐘11:累加器進行累加運算:h(0)[ x(n)+x(n-3)]+ h(1)[ x(n-1)+x(n-2)]。控制器向累加器傳送控制訊號(clr為高電平),控制器輸出濾波資料有效訊號(valid為高電平);

時鐘12:累加器輸出h(0)[ x(n)+x(n-3)]+ h(1)[ x(n-1)+x(n-2)] 累加結果

,並初始化,開始新一輪累加操作。控制器輸出濾波資料無效訊號(valid為低電平)。

以上就是抽取濾波器完成一次抽取濾波的全過程。可見,從資料x(n)輸入到濾波結果y(n) 輸出需要8個工作時鐘。如果控制器不停地向乘法器和加法器傳送抽頭、係數和控制訊號,就會形成流水線操作,那麼每過兩個時鐘,抽取濾波器就會輸出乙個濾波結果。

兩點注意事項

(1)兩個n位二進位制數相加,其和至少需要n+1位二進位制數才能正確表示。本設計中的加法器輸入/輸出都是18bit,為了防止加法器溢位,應確保18bit輸入資料x(n)的最高兩位相同(都是符號位)。

(2)為了實現抽取濾波器的多級串聯結構,應統一輸入資料有效訊號enable和輸出資料有效訊號valid的時序要求。本設計規定控制器在累加器輸出濾波結果後的下乙個時鐘送出濾波結果有效訊號,時寬為乙個工作時鐘週期。

設計特點

採用此設計結構實現抽取濾波器有以下三個特點:

(1)節省片內資源,提高資源使用效率。由於利用ip核生成的濾波器往往不能針對實際情況合理的利用片內資源,造成資源浪費。本設計採用了流水線結構,所有功能模組都滿負荷工作,沒有空閒等待時鐘,從而節省了片內資源,提高了資源利用率。

(2)可以實現抽取濾波器多級結構。針對抽取濾波器的輸出特性,可以採取相同的設計方法,再設計一級抽取濾波器,對前一級輸出的資料再次抽取濾波,從而實現多級抽取濾波器結構。

(3)設計靈活,擴充套件性強。用暫存器存放抽頭和係數適用於濾波器階數較少的情況,如果需要用上百階的抽取濾波,最好用xc2v1000片內ram存放抽頭和係數,這時只要稍微改動控制器的邏輯設計即可實現。在此基礎上,還可實現可程式設計抽取濾波器。

結語

本文以實現抽取率為2、具有線性相位的3階fir抽取濾波器為例,介紹了一種用xilinx公司的xc2v1000實現fir抽取濾波器的設計方法。用該方法設計出的抽取濾波器靈活性強,資源利用率高,能廣泛應用於數字接收領域。

基於Python的FIR濾波器

import numpy as np from scipy.fftpack import fft from scipy import signal import matplotlib.pyplot as plt from matplotlib.pylab import mpl mpl.rcparam...

FIR濾波器與IIR濾波器

有限長單位衝激響應濾波器,又稱為非遞迴型濾波器 特點 fir濾波器的最主要的特點是沒有反饋迴路,穩定性強,故不存在不穩定的問題 fir具有嚴格的線性相位,幅度特性隨意設定的同時,保證精確的線性相位 fir設計方式是線性的,硬體容易實現 fir相對iir濾波器而言,相同效能指標時,階次較高,對cpu的...

FIR濾波器設計

fir濾波器的優越性 相位對應為嚴格的線性,不存在延遲失真,僅僅有固定的時間延遲 因為不存在穩定性問題,設計相對簡單 僅僅包括實數演算法,不涉及複數演算法,不須要遞推運算,長度為m,階數為m 1,計算值約為m 2。關於fir濾波器的幅頻特性和相頻特性。在人們不關心相位時,能夠讓幅頻特性常為正,原來為...