《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 基于FPGA流水線分布式算法的FIR濾波器的實(shí)現(xiàn)

基于FPGA流水線分布式算法的FIR濾波器的實(shí)現(xiàn)

2008-08-22
作者:徐 鋒 禹衛(wèi)東 唐 紅

??? 摘?要: 提出了一種采用現(xiàn)場(chǎng)可編程門陣列器件(FPGA)并利用窗函數(shù)法實(shí)現(xiàn)線性FIR數(shù)字濾波器的設(shè)計(jì)方案,并以一個(gè)十六階低通" title="低通">低通FIR數(shù)字濾波器電路的實(shí)現(xiàn)為例說(shuō)明了利用Xilinx公司的Virtex-E系列芯片的設(shè)計(jì)過(guò)程,。對(duì)于在FPGA中實(shí)現(xiàn)FIR濾波器的關(guān)鍵——乘加運(yùn)算,,給出了將乘加運(yùn)算轉(zhuǎn)化為查找表" title="查找表">查找表的分布式算法" title="分布式算法">分布式算法。設(shè)計(jì)的電路通過(guò)軟件進(jìn)行了驗(yàn)證并進(jìn)行了硬件仿真,,結(jié)果表明:電路工作正確可靠,,能滿足設(shè)計(jì)要求。
??? 關(guān)鍵詞: FIR濾波器? FPGA? 窗函數(shù)? 分布式算法? 流水線

?

??? 隨著數(shù)字技術(shù)日益廣泛的應(yīng)用,,以現(xiàn)場(chǎng)可編程門陣列(FPGA)為代表的ASIC器件得到了迅速普及和發(fā)展,,器件集成度和速度都在高速增長(zhǎng)。FPGA既具有門陣列的高邏輯密度和高可靠性,,又具有可編程邏輯器件的用戶可編程特性,,可以減少系統(tǒng)設(shè)計(jì)和維護(hù)的風(fēng)險(xiǎn),降低產(chǎn)品成本,,縮短設(shè)計(jì)周期,。
??? 分布式算法是一種以實(shí)現(xiàn)乘加運(yùn)算為目的的運(yùn)算方法。它與傳統(tǒng)算法實(shí)現(xiàn)乘加運(yùn)算的不同在于執(zhí)行部分積運(yùn)算的先后順序不同,。簡(jiǎn)單地說(shuō),,分布式算法在完成乘加功能時(shí)是通過(guò)將各輸入數(shù)據(jù)每一對(duì)應(yīng)位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成相應(yīng)部分積,然后再對(duì)各部分積進(jìn)行累加形成最終結(jié)果,,而傳統(tǒng)算法是等到所有乘積產(chǎn)生之后再進(jìn)行相加來(lái)完成乘加運(yùn)算的,。與傳統(tǒng)算法相比,分布式算法可極大地減少硬件電路規(guī)模,,很容易實(shí)現(xiàn)流水線處理,提高電路的執(zhí)行速度,。
??? FPGA有著規(guī)整的內(nèi)部邏輯塊陣列和豐富的連線資源,特別適合細(xì)粒度和高并行度結(jié)構(gòu)特點(diǎn)的數(shù)字信號(hào)處理任務(wù),,如FIR,、FFT等。本文詳細(xì)討論利用FPGA實(shí)現(xiàn)FIR濾波器的設(shè)計(jì)過(guò)程,,并且對(duì)設(shè)計(jì)中的關(guān)鍵技術(shù)——分布式算法進(jìn)行詳細(xì)描述,。
1 FIR和分布式算法
1.1 FIR的基本概念

??? FIR濾波器的數(shù)學(xué)表達(dá)式為:
???

式中,N是FIR濾波器的抽頭數(shù);x(n)表示第n時(shí)刻的輸入樣本,;h(i)是FIR濾波器的第i級(jí)抽頭系數(shù),。
??? 普通的直接型FIR濾波器結(jié)構(gòu)如圖1所示。

?


??? FIR濾波器實(shí)質(zhì)上是一個(gè)分節(jié)的延遲線,把每一節(jié)的輸出加權(quán)累加,,便得到濾波器的輸出,。對(duì)于FIR濾波器,幅度上只需滿足以下兩個(gè)條件之一,,就能構(gòu)成線性相位" title="線性相位">線性相位FIR濾波器,。?
??? h(n)=h(N-1-n)???????????????????????????????????? ??? ??(2)
??? h(n)=-h(N-1-n)??????????????????????????????????????????(3)
??? 式(2)稱為第一類線性相位的幅度條件(偶對(duì)稱),式(3)稱為第二類線性相位的幅度條件(奇對(duì)稱),。
1.2? FIR濾波器的優(yōu)化
??? 在實(shí)際應(yīng)用中,,為了減少邏輯資源的占有量和提高系統(tǒng)的運(yùn)行速度,對(duì)FIR濾波器需要進(jìn)行優(yōu)化處理,。本文采用的優(yōu)化主要有兩種:一種是對(duì)表達(dá)式進(jìn)行優(yōu)化,,另一種是在FPGA實(shí)現(xiàn)中利用特有的查找表進(jìn)行優(yōu)化。

1.2.1 表達(dá)式的直接優(yōu)化

??? 對(duì)于線性相位因果FIR濾波器,,它的系數(shù)具有中心對(duì)稱特性,,即h(i)=±h(N-1-i)。令s(i)=x(i)±x(N-1-i),,對(duì)于偶對(duì)稱,,代入式(1)可得:
???

??? 根據(jù)方程(4),線性相位FIR濾波器的直接型結(jié)構(gòu)可以改為如圖2所示的結(jié)構(gòu),,從而使N次乘法減少為[N/2]次,,加法次數(shù)增加了[N/2]次(N為偶數(shù)),總的運(yùn)算量減少,。

?


1.2.2 利用查找表進(jìn)行設(shè)計(jì)優(yōu)化
??? 由于實(shí)現(xiàn)的是固定系數(shù)的FIR濾波器,,所以可以利用簡(jiǎn)化的乘法器(如查找表)減少設(shè)計(jì)所耗用的器件資源。
??? 以一個(gè)8階FIR濾波器為例來(lái)說(shuō)明在FPGA實(shí)現(xiàn)中優(yōu)化的過(guò)程,。假定濾波器的輸入為2bit的正整數(shù),,由式(4)可以得到輸出為:
??? y(n)=s(0)h(0)+s(1)h(1)+s(2)h(2)+s(3)h(3)?????????????? (5)
??? 這時(shí)的乘法和加法就可以并行地采用查找表實(shí)現(xiàn),其結(jié)構(gòu)示意圖如圖3所示,。

?


??? 在圖3中,,右面4個(gè)信號(hào)是輸入的低位bit,左邊是輸入信號(hào)的高位bit,。低位和P1最多使用4bit,,由于系數(shù)固定,,查找表實(shí)現(xiàn)起來(lái)很方便,;高位和P2可按同樣方法計(jì)算。在該結(jié)構(gòu)中,,部分積P1和P2可以利用Virtex-E的4輸入查找表實(shí)現(xiàn),,所有的計(jì)算都可并行完成。由于輸入為2bit,因此只用了一個(gè)加法器,;對(duì)于更多位數(shù)的輸入來(lái)說(shuō),,將需要更多的加法器。這樣就實(shí)現(xiàn)了將乘法器轉(zhuǎn)化為加法器,,減少了邏輯資源,,優(yōu)化了設(shè)計(jì)。
1.3? 分布式算法
??? 分布式算法在20多年前被首次提出,,但直到Xilinx發(fā)明FPGA的查找表結(jié)構(gòu)以后,,分布式算法才在20世紀(jì)90年代初重新受到重視,并被有效地應(yīng)用在FIR濾波器的設(shè)計(jì)中,。下面介紹分布式算法的原理,。
??? 式(1)可以用下式表示:
???

??? 式中,hi即h(i),,xi(n)即x(n-i),,N為濾波器的抽頭數(shù)。
????把數(shù)據(jù)源數(shù)據(jù)格式規(guī)定為2的補(bǔ)碼形式,,則:
???

式中,,xib(n)為二進(jìn)制數(shù),取值為0或1,;xi 0(n)為符號(hào)位,,為1表示數(shù)據(jù)為負(fù),為0表示數(shù)據(jù)為正,。將(7)式代入(6)式可得:
???

??? 由此可以看出,,方括號(hào)中是輸入變量的一個(gè)數(shù)據(jù)位和所有濾波器抽頭系數(shù)h0~hi的每一位進(jìn)行“與”運(yùn)算并求和。而指數(shù)部分則說(shuō)明了求和結(jié)果的位權(quán),,整數(shù)乘以2b就是左移b位,,對(duì)此可以通過(guò)硬件連線實(shí)現(xiàn),不占用邏輯資源,。這樣就可以通過(guò)建立查找表來(lái)實(shí)現(xiàn)方括號(hào)中的運(yùn)算,,查找表可用所有輸入變量的同一位進(jìn)行尋址。
2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
??? 下面以一個(gè)16階的線性相位FIR低通濾波器為例說(shuō)明設(shè)計(jì)的過(guò)程,。
2.1 設(shè)計(jì)指標(biāo)及參數(shù)提取
2.1.1 濾波器的設(shè)計(jì)指標(biāo)

?? ?采樣頻率:≥50MHz??????? 歸一化截止頻率:0.4MHz
?? ?類????? 型:低通?????? 輸入數(shù)據(jù)寬度:8位
?? ?階????? 數(shù):16階????? 輸出數(shù)據(jù)寬度:16位
2.1.2 參數(shù)提取
??? 采用漢寧窗函數(shù)(Hanning)設(shè)計(jì)16階線性相位FIR數(shù)字濾波器,,并提取其特性參數(shù)。
??? 這里需要注意的是:下載到FPGA的程序是按照FIR濾波器的差分方程式編寫的,。由于從MATLAB中算出的系數(shù)h(n)的值是一組浮點(diǎn)數(shù),,而FPGA器件只進(jìn)行定點(diǎn)值的計(jì)算,所以要進(jìn)行浮點(diǎn)值到定點(diǎn)值的轉(zhuǎn)換,。假定“1”對(duì)應(yīng)10000000000000000(17位,,相當(dāng)于乘上65536),。
??? 用漢寧窗(Hanning)進(jìn)行設(shè)計(jì),此16階FIR數(shù)字低通濾波器特性參數(shù)經(jīng)過(guò)換算如下:
??? h[0]=h[15]=0000? h[1]=h[14]=0065? h[2]=h[13]=018F? h[3]=h[12]=035A h[4]=h[11]=0579? h[5]=h[10]=078E? h[6]=h[9]=0935?? h[7]=h[8]=0A1F
2.2 系統(tǒng)具體實(shí)現(xiàn)步驟
2.2.1 查找表的建立
??? 我們知道,,如果濾波器抽頭數(shù)N過(guò)多,,用單個(gè)查找表就不能夠執(zhí)行全字(因?yàn)椴檎冶砦粚挘綖V波器抽頭數(shù)的數(shù)量)。在這種情況下,,可以將表的地址輸入位數(shù)(即濾波器抽頭數(shù)N)進(jìn)行降低,,即利用部分表并將結(jié)果相加。如果加上流水線寄存器,,這一改進(jìn)并沒(méi)有降低速度,,但是卻可以極大地減少設(shè)計(jì)規(guī)模,因?yàn)椴檎冶淼囊?guī)模是隨著地址空間,,也就是濾波器抽頭數(shù)N的增加而呈指數(shù)增加,。
??? 濾波器抽頭數(shù)是16個(gè),考慮到線性FIR濾波器的偶對(duì)稱特性,,只考慮8個(gè)獨(dú)立濾波器抽頭數(shù),,則需要一個(gè)28×8的表(其中指數(shù)8指的是8個(gè)濾波器抽頭數(shù),后面的8指的是輸入數(shù)據(jù)的位寬),。但是Virtex-e FPGA只能提供4輸入的查找表,,所以要對(duì)查找表的地址進(jìn)行電路分割。將8位地址線分為高4位和低4位,,分別作為兩個(gè)24×8的查找表的地址輸入,,從而指數(shù)倍地節(jié)省了硬件資源。
??? 查找表的具體內(nèi)容如表1所示,。

?


2.2.2 查表" title="查表">查表計(jì)算部分積累加和的過(guò)程
??? 假定輸入數(shù)據(jù)x[n]的值x[0]=110=000000012c,x[1]=-110=111111112c,x[2]=310=000000112c,x[3]=210=000000102c,。(注:2c代表用二進(jìn)制補(bǔ)碼表示,最高位為符號(hào)位。)
??? 查找表(1)的部分積如表2所示,。

?


??? 數(shù)據(jù)校驗(yàn)結(jié)果:h[0]x[0]+h[1]x[1]+h[2]x[2]+h[3]x[3]=2812,。
??? 說(shuō)明利用分布式查表算法的計(jì)算結(jié)果與直接計(jì)算結(jié)果相同,算法正確無(wú)誤,。
??? 查找表(2)的查表計(jì)算結(jié)果依此類推,。只是需要注意:查找表(2)的數(shù)據(jù)輸入x是8位數(shù)據(jù)x[4]、x[5],、x[6],、x[7],而不是x[3]、x[2],、x[1],、x[0]。根據(jù)系數(shù)偶對(duì)稱性質(zhì),,x[8],、x[9],、x[10],、x[11]查查找表(2),,x[12]、x[13],、x[14],、x[15]查查找表(1)。
3 設(shè)計(jì)結(jié)果
??? 本系統(tǒng)的FPGA采用Xilinx公司的Virtex-E系列中的XCV100E FPGA,,使用的軟件是Xilinx公司的ISE5.2i及Modelsim公司的Modelsim時(shí)序仿真工具,,對(duì)FIR濾波器進(jìn)行描述編程使用的是VHDL語(yǔ)言。
??? 實(shí)現(xiàn)FIR濾波器的最上層的原理圖如圖4所示,,輸入16個(gè)8位數(shù)據(jù)data_in={1,-1,3,2,2,-1,1,-1,1,-1,3,2,2,-1,1,1},。

?


??? 系統(tǒng)仿真的時(shí)序圖如圖5所示。所設(shè)計(jì)FIR濾波器的幅頻,、相頻,、單位脈沖沖激響應(yīng)如圖6~8所示。

?

?

?

?

?

?

?


??? FIR濾波器是DSP的基本運(yùn)算形式之一,。本文介紹的基于FPGA的分布式算法提高了系統(tǒng)運(yùn)行的速度并且節(jié)省了大量的FPGA資源,。通過(guò)階數(shù)以及查找表中抽頭系數(shù)的設(shè)定,還可以靈活地實(shí)現(xiàn)除低通外的高通,、帶阻和帶通濾波器,。
??? 設(shè)計(jì)的電路已通過(guò)FPGA驗(yàn)證,說(shuō)明工作正常,,符合設(shè)計(jì)指標(biāo),。
參考文獻(xiàn)
1 劉 凌,胡永生[譯].數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn).北京:清華大學(xué)出版社,2003
2 程佩青.數(shù)字信號(hào)處理教程.北京:清華大學(xué)出版社,1995
3 朱艷云,,文愛(ài)軍.可級(jí)聯(lián)FIR濾波器的IP設(shè)計(jì)及FPGA驗(yàn)證.電子工程師,,2002;28(5)
4? Xilinx Databook. Xiinx, 2003

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。