周恒箴 曾祥希 余震
【摘要】 本文提出了一種采用查階躍響應(yīng)表方法實(shí)現(xiàn)的FIR數(shù)字濾波器設(shè)計(jì)方案,并以一個(gè)649階FIR濾波器的FPGA設(shè)計(jì)為例,與傳統(tǒng)的采用FPGA IPCORE實(shí)現(xiàn)方法進(jìn)行了對(duì)比,分析該設(shè)計(jì)方法在FPGA的資源利用和系統(tǒng)時(shí)鐘速率上的優(yōu)勢(shì)。通過(guò)實(shí)驗(yàn)數(shù)據(jù)驗(yàn)證,該方案可以解決現(xiàn)有技術(shù)中FIR濾波器需要大量乘法器和加法器的問(wèn)題,達(dá)到了降低FPGA硬件資源使用、提高系統(tǒng)運(yùn)行效率的效果。
【關(guān)鍵詞】 FIR 數(shù)字濾波器 階躍響應(yīng) FPGA
一、引言
在數(shù)字信號(hào)處理系統(tǒng)中,數(shù)字濾波器被廣泛地應(yīng)用于干擾的濾除、有用信號(hào)的提取、信號(hào)的整形等各方面。數(shù)字濾波器根據(jù)其沖激響應(yīng)函數(shù)的時(shí)域特性,可分為兩種,即無(wú)限長(zhǎng)沖激響應(yīng)(IIR)濾波器和有限長(zhǎng)沖激響應(yīng)(FIR)濾波器。FIR濾波器的單位沖激響應(yīng)只能持續(xù)一段時(shí)間,由于它的線(xiàn)性相位特性和容易實(shí)現(xiàn)因此在工程上得到廣泛應(yīng)用。
FIR數(shù)字濾波器通過(guò)乘累加運(yùn)算來(lái)實(shí)現(xiàn),輸入信號(hào)x(n)經(jīng)過(guò)FIR濾波器過(guò)程是一個(gè)輸入信號(hào)與濾波器系數(shù)進(jìn)行線(xiàn)性卷積的過(guò)程,即:
為降低硬件資源的消耗,文獻(xiàn)[1]提出了一種分布式算法(Distributed Arithmetic,DA)的濾波器設(shè)計(jì)結(jié)構(gòu),它將傳統(tǒng)的乘、累加運(yùn)算轉(zhuǎn)化為加法和移位運(yùn)算,利用ROM查找表將固定系數(shù)的乘累加運(yùn)算轉(zhuǎn)換成查找表操作,可以較大程度地提高運(yùn)算速度。文獻(xiàn)[2]和文獻(xiàn)[3]也提出了改進(jìn)的分布式算法,采用濾波器的多相分解結(jié)構(gòu)對(duì)DA算法進(jìn)行改進(jìn),以降低硬件資源的使用,但是不論是DA算法或者改進(jìn)的DA算法,ROM查找表的大小會(huì)隨著濾波器階數(shù)N的增加而成指數(shù)增加,消耗更多的硬件資源,難以滿(mǎn)足數(shù)據(jù)處理領(lǐng)域的高速實(shí)時(shí)性要求。在一些某些的應(yīng)用場(chǎng)合,例如超高頻無(wú)源射頻識(shí)別閱讀器的前向波形成形濾波,其輸入波形為矩形波或者階梯波,為了達(dá)到較好的濾波效果需要使用高階的FIR濾波器,如果采用傳統(tǒng)的乘累加結(jié)構(gòu)或者分布式算法,會(huì)占用大量的硬件資源,增加設(shè)備的成本。
本文在FPGA上設(shè)計(jì)并實(shí)現(xiàn)了一種通過(guò)查階躍響應(yīng)表的方法實(shí)現(xiàn)FIR數(shù)字濾波器,當(dāng)輸入信號(hào)為矩形波或階梯波時(shí),利用該方法,可以解決現(xiàn)有技術(shù)中FIR濾波器需要大量乘法器和加法器的問(wèn)題,達(dá)到了降低FPGA資源使用、提高系統(tǒng)運(yùn)行速度的效果。
二、查階躍響應(yīng)法的方法
因此,我們可以將設(shè)計(jì)的FIR濾波器的單位階躍響應(yīng)存儲(chǔ)在一張表中;再對(duì)需要進(jìn)行FIR濾波的輸入信號(hào)進(jìn)行沿提取,提取出階躍信號(hào);再將每個(gè)階躍信號(hào)的幅度和查表的數(shù)據(jù)相乘得到階躍響應(yīng);然后對(duì)所有的階躍響應(yīng)結(jié)果求和,此求和結(jié)果等價(jià)于原信號(hào)直接經(jīng)過(guò)FIR濾波器的濾波結(jié)果。
如果輸入信號(hào)變化的間隔時(shí)間大于FIR濾波器的階躍響應(yīng)時(shí)間長(zhǎng)度,只需要一路處理模塊,模塊根據(jù)輸入階躍信號(hào)的幅度計(jì)算并輸出階躍響應(yīng),然后對(duì)所有的階躍響應(yīng)求和。如果輸入信號(hào)變化的間隔時(shí)間小于FIR濾波器的階躍響應(yīng)時(shí)間長(zhǎng)度,則需要采用多路處理模塊,階躍信號(hào)依次分配給多個(gè)模塊,每個(gè)模塊輸出各自的階躍響應(yīng),最后,再對(duì)所有的模塊的輸出進(jìn)行求和。
三、FPGA實(shí)現(xiàn)
FIR濾波器查階躍響應(yīng)表法的FPGA的實(shí)現(xiàn)如圖1所示,由沿提取、沿分配器、階躍響應(yīng)池和加法器四個(gè)功能模塊組成。其中階躍響應(yīng)池中的每個(gè)階躍響應(yīng)模塊都是相同的,其結(jié)構(gòu)如圖2所示。
階躍響應(yīng)池由N個(gè)相同的階躍響應(yīng)模塊構(gòu)成,如圖2所示,每個(gè)階躍響應(yīng)模塊由沿檢測(cè)、階躍響應(yīng)表(步驟1生成)、乘法器、緩存器和加法器組成。
每個(gè)階躍響應(yīng)模塊的內(nèi)部處理過(guò)程如下:經(jīng)分配后的階躍信號(hào)送入檢測(cè)單元進(jìn)行檢測(cè),檢測(cè)單元輸出三組信號(hào):觸發(fā)信號(hào)、啟動(dòng)信號(hào)和階躍信號(hào)的幅度。當(dāng)檢測(cè)到有階躍信號(hào)時(shí),檢測(cè)單元輸出觸發(fā)信號(hào)對(duì)緩存器進(jìn)行刷新,將當(dāng)前模塊輸出結(jié)果通過(guò)緩存器保存下來(lái)作為輸出基準(zhǔn);與此同時(shí),啟動(dòng)信號(hào)啟動(dòng)指針計(jì)數(shù)器進(jìn)行查表,通過(guò)指針依次取出階躍響應(yīng)表中的數(shù)據(jù);取表結(jié)果和階躍信號(hào)的幅度輸入到乘法器相乘;乘法器的輸出和基準(zhǔn)信號(hào)分別輸入到加法器,其相加結(jié)果作為該階躍響應(yīng)模塊的輸出。
步驟4:階躍相應(yīng)池輸出的N路階躍響應(yīng)信號(hào)S0S1 S2…. SN-1輸入給加法器進(jìn)行相加求和,其求和結(jié)果為該FIR濾波器的輸出。
在每個(gè)階躍響應(yīng)模塊中,由于有個(gè)加法器,可能會(huì)遇到加法器輸出結(jié)果溢出的情況,例如連續(xù)兩個(gè)上升沿的正階躍信號(hào)相加,結(jié)果溢出出現(xiàn)負(fù)數(shù)。出現(xiàn)這種情況時(shí)可以通過(guò)擴(kuò)展有效數(shù)據(jù)位數(shù)防止溢出;也可以通過(guò)滿(mǎn)下面2個(gè)條件,對(duì)溢出結(jié)果不用處理:(1)采用二進(jìn)制補(bǔ)碼運(yùn)算;(2)保證最后的加法器的輸出范圍能夠滿(mǎn)足輸入信號(hào)x(n)和單位階躍響應(yīng)乘積的最大值和最小值。
四、實(shí)驗(yàn)結(jié)果與性能分析
4.1 實(shí)驗(yàn)過(guò)程
以下是利用該方法在A(yíng)ltera FPGA器件上實(shí)現(xiàn)的一個(gè)649階FIR低通濾波器的實(shí)例。借助MATLAB的FDATool工具根據(jù)濾波器的指標(biāo)進(jìn)行濾波器設(shè)計(jì)。
4.2 與利用FIR IPcore方法實(shí)現(xiàn)的FIR模塊進(jìn)行功能對(duì)比
調(diào)用Altera的FIR IPcore生成FIR濾波器模塊,與上述方法進(jìn)行仿真對(duì)比,如圖8所示,I_qpsk_i和I_qpsk_q是16QAM調(diào)制后的I、Q兩路輸入信號(hào),O_IPcore_i和O_IPcore_q是IQ輸入信號(hào)經(jīng)過(guò)Altera FIR IPcore濾波器輸出的結(jié)果,O_step_i和O_step_q是IQ輸入信號(hào)經(jīng)過(guò)查階躍響應(yīng)查表方法輸出的結(jié)果。將兩種方法生成的IQ數(shù)據(jù)對(duì)應(yīng)先減,結(jié)果(s_sub)為0,說(shuō)明兩種方法的輸出數(shù)據(jù)一致。
4.3 FPGA資源和系統(tǒng)時(shí)鐘速度的對(duì)比
上述的查階躍響應(yīng)法的實(shí)例需要3個(gè)乘法器和4個(gè)加法器實(shí)現(xiàn),如果采用Altera Cyclone IV系列器件,型號(hào)為EP4CGX150(該器件具有149,760LEs(邏輯單元)和6,480Kbit嵌入式存儲(chǔ)器),編譯工程進(jìn)行對(duì)比,該方法需要使用498LEs和9個(gè)M9K;而采用Altera FIR IPcore實(shí)現(xiàn)該649階濾波器模塊,需要占用48846LEs和30個(gè)M9K??梢钥闯?,采用查階躍響應(yīng)法實(shí)現(xiàn)的濾波器,在節(jié)省FPGA資源上有顯著的優(yōu)勢(shì)。查階躍響應(yīng)法占用的資源和階躍響應(yīng)池中階躍響應(yīng)的個(gè)數(shù)關(guān)系密切,如果階躍響應(yīng)池中階躍響應(yīng)的個(gè)數(shù)一定,設(shè)計(jì)時(shí)占用的資源與濾波器的階數(shù)關(guān)系不大,階數(shù)變化主要是要修改指針計(jì)數(shù)器的地址。
從表1的數(shù)據(jù)可以看出,采用調(diào)IPcore的方法實(shí)現(xiàn)FIR濾波器模塊,當(dāng)濾波器階數(shù)越大時(shí),占用的LE資源和嵌入式存儲(chǔ)器資源(M9K)也越多,由于邏輯資源的大量占用,導(dǎo)致FPGA布線(xiàn)的延時(shí)加長(zhǎng),從而影響到最大系統(tǒng)時(shí)鐘頻率(Fmax)。因此,在輸入波形為矩形波或者階梯波,而且輸入信號(hào)變化的間隔時(shí)間大于FIR濾波器的階躍響應(yīng)時(shí)間長(zhǎng)度時(shí),采用查階躍響應(yīng)法在FPGA上省了大量的LE資源,對(duì)比FIR IPcore生成的FIR濾波器模塊,可以提高最大系統(tǒng)時(shí)鐘速度。
五、結(jié)束語(yǔ)
從仿真和實(shí)驗(yàn)結(jié)果可以看出,當(dāng)輸入波形為階梯波或者矩形波時(shí),采用這種查詢(xún)階躍響應(yīng)表的的方法能夠解決現(xiàn)有技術(shù)中FIR濾波器需要大量乘法器和加法器的問(wèn)題,達(dá)到了降低資源使用、提高系統(tǒng)運(yùn)行速度的效果。
參 考 文 獻(xiàn)
[1] WHITE Stanley A. Application of distributed arithmetic to digital signal processing: a tutorial review[J]. IEEE ASSP Magazine,1989,7:4-18
[2] 于亞萍,劉源,衛(wèi)勇. 利用改進(jìn)DA算法FIR濾波器的仿真與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用,2011,47(27):77-79
[3] Yu Yaping, Liu Yuan,Wei Yong. Simulation and realization of FIR filter using modified distributed arithmetic architecture[J]. Computer Engineering and Applications[J]. 2011,47(27):77-79