崔 亮,張芝賢
(沈陽(yáng)航空航天大學(xué) 電子信息工程學(xué)院,遼寧 沈陽(yáng) 110136)
數(shù)字濾波器通常都是應(yīng)用于修正或改變信號(hào)的屬性[1]。最為普通的數(shù)字濾波器就是線性時(shí)間不變量 (LTI)濾波器。LTI與其輸入信號(hào)之間相互作用,是經(jīng)過(guò)一個(gè)線性卷積的過(guò)程。
LTI濾波器分為兩類(lèi):IIR和FIR濾波器。在數(shù)據(jù)通訊,語(yǔ)音信號(hào)處理,圖像處理,雷達(dá)信號(hào)處理中,不能有明顯的相位失真,而有限長(zhǎng)單位沖激相應(yīng)FIR具有嚴(yán)格的線性相位的特點(diǎn);此外,F(xiàn)IR濾波器的單位抽樣響應(yīng)序列是有限長(zhǎng)的,因此是一個(gè)穩(wěn)定的系統(tǒng),故FIR濾波器在上述領(lǐng)域中得到廣泛應(yīng)用[2]。
隨著現(xiàn)代電子技術(shù)的發(fā)展,采用FPGA(Field Programmable Gata Aarry)[3]進(jìn)行數(shù)字信號(hào)處理技術(shù)得到廣泛應(yīng)用。以現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)為代表的ASIC器件得到迅速普及和發(fā)展。數(shù)字濾波器的設(shè)計(jì)正擺脫傳統(tǒng)的設(shè)計(jì)模式,而采用FPGA技術(shù)來(lái)設(shè)計(jì)FIR濾波器正成為設(shè)計(jì)的趨勢(shì)。目前在FPGA中用于設(shè)計(jì)FIR濾波器有很多種方法,即直接乘加結(jié)構(gòu)、乘法器復(fù)用結(jié)構(gòu)、乘累加結(jié)構(gòu)、DA(分布式算法)。在文中是以一32階FIR濾波器進(jìn)行比較的。
這里設(shè)計(jì)的是低通濾波器,其中Fpass=23 MHz,F(xiàn)stop=40 MHz, Fs=160 MHz,Apass=0.1 dB,Astop=80 dB。 通過(guò)調(diào)用MATLAB中濾波器設(shè)計(jì)的工具箱[4](FDATool),生成FIR系數(shù)。
從FIR公式出發(fā)[5],可以得道fir濾波器的輸出是輸入數(shù)據(jù)和系數(shù)相卷積得到的,如公式(1)所示。
具有嚴(yán)格線性相位FIR濾波器具有對(duì)稱(chēng)的性質(zhì),即滿足偶對(duì)稱(chēng)性或奇對(duì)稱(chēng),在這里介紹下偶對(duì)稱(chēng)的結(jié)構(gòu),即滿足公式(2):
由上面討論知道FIR的輸出等于輸入信號(hào)與FIR系數(shù)的卷積,如式(3)所示:
s為輸入信號(hào),h為FIR濾波器系數(shù),N為濾波器的系數(shù)。
從公式可得到是把輸入數(shù)據(jù)進(jìn)行延遲,與系數(shù)相乘后加在一起即可得到最后輸出結(jié)果。據(jù)此可以得到直接乘加結(jié)構(gòu)[5],整體框架如圖1所示。
輸入數(shù)據(jù)通過(guò)32個(gè)延遲單元并和系數(shù)相乘,相乘后的結(jié)果通過(guò)加法樹(shù)就可得到輸出數(shù)據(jù)。該結(jié)構(gòu)使用了32個(gè)乘法器和31個(gè)加法器。對(duì)于更高階的濾波器,使用的乘法器和加法器更多,需要占用大量的FPGA資源。
圖1 整體框架Fig.1 Overall diagram
由于嚴(yán)格線性相位的FIR具有偶對(duì)稱(chēng)的性質(zhì),即h(i)=h(N-i),因此在實(shí)現(xiàn)中可以先進(jìn)行延遲再把數(shù)據(jù)進(jìn)行兩兩相加并與對(duì)應(yīng)的系數(shù)相乘,然后通過(guò)加法樹(shù)得到最終輸出結(jié)果。
先定義32個(gè)寄存器用于保存通過(guò)延遲單元延時(shí)的數(shù)據(jù),然后把寄存器中的數(shù)據(jù)進(jìn)行兩兩相加再同系數(shù)相乘,最后通過(guò)加法樹(shù)得到最后的輸出結(jié)果[6]。整體框圖[3]如圖2所示。
圖2 整體結(jié)構(gòu)Fig.2 Overall diagram
該結(jié)構(gòu)使用了16個(gè)乘法器和31個(gè)加法器,比直接乘加結(jié)構(gòu)節(jié)省了一半的乘法器,但是如果對(duì)于階數(shù)很多的濾波器,仍然會(huì)占用大量的資源。
乘累加結(jié)構(gòu)是通過(guò)對(duì)輸入數(shù)據(jù)進(jìn)行延遲后先進(jìn)行兩兩相加,再選擇對(duì)應(yīng)的數(shù)據(jù)和系數(shù)作為乘法器的輸入數(shù)據(jù),再把相乘后的結(jié)果通過(guò)累加器的累加得到最終的輸出結(jié)果[6]。整體框圖如圖3所示。
圖3 整體框圖Fig.3 Overall diagram
通過(guò)觀察框圖可看出只使用了1個(gè)乘法器和1個(gè)加法器,這會(huì)節(jié)省很多的資源,相應(yīng)的會(huì)造成時(shí)序控制的復(fù)雜性。
分布式算法(DA算法)是一種以實(shí)現(xiàn)乘加為目的的運(yùn)算方法[6]。它是在完成乘加功能時(shí)是通過(guò)將各輸入數(shù)據(jù)每一對(duì)應(yīng)位產(chǎn)生的部分積預(yù)先進(jìn)行相加形成對(duì)應(yīng)部分積,然后再把各部分積保存起來(lái)作為查找表的內(nèi)容,通過(guò)將輸入數(shù)據(jù)的每一位最為查找表的地址讀出數(shù)據(jù),再通過(guò)加法樹(shù)得到最終輸出結(jié)果[6]。FIR公式可用式(4)表示。
對(duì)于一個(gè)16位的有符號(hào)數(shù),x(i)可表示為:
代入式(4)可得:
從式 (6)可看出當(dāng)輸入數(shù)據(jù)很多時(shí),則查找表需要做2^16=65 536個(gè)部分積,即查找表要存儲(chǔ)65 536個(gè)可能組合值,這個(gè)數(shù)據(jù)是很多的,不利于工程實(shí)現(xiàn)。因此這里可以先做一個(gè)4階的查找表,把這4階的查找表做成一個(gè)4階的FIR濾波器,再把這4階的FIR濾波器構(gòu)建一個(gè)32階的濾波器。
4階FIR查找表結(jié)構(gòu)如表1所示。
表1 查找表中值的設(shè)置Tab.1 Median of the lookup table setting
4階的FIR整體框圖結(jié)構(gòu)如圖4所示。
32階FIR濾波器結(jié)構(gòu)如圖5所示。
DA算法僅使用加法器和查找表的結(jié)構(gòu),而不使用乘法器,這樣會(huì)節(jié)省很多資源,在現(xiàn)在工程量很大的情況下可以節(jié)省很多資源。
在這里可以對(duì)上述各種實(shí)現(xiàn)結(jié)構(gòu)做一個(gè)資源統(tǒng)計(jì)表如表2所示。
圖4 4階FIR框圖Fig.4 Overall diagram of 4 FIR
圖5 32階FIR濾波器結(jié)框圖Fig.5 Overall diagram of 32 FIR
表2 資源統(tǒng)計(jì)表Tab.2 Resource statistics
根據(jù)表格2得到乘法器復(fù)用結(jié)構(gòu)比直接乘加結(jié)構(gòu)會(huì)節(jié)省一半的乘法器、而乘累加結(jié)構(gòu)只使用了一個(gè)乘法器、DA只使用加法器沒(méi)有用到乘法器。在FPGA中乘法器會(huì)占用大量的邏輯資源,從統(tǒng)計(jì)表中得到DA算法雖然沒(méi)有用到乘法器但是用到的資源是比較多的,相比下直接乘加結(jié)構(gòu)占用的資源最較少,但是他用到了乘法器。
[1]Lyons R G.數(shù)字信號(hào)處理[M].2版.朱光明,譯.北京:機(jī)械工業(yè)出版社,2006.
[2]余琳,黃光明.基于FPGA的FIR濾波器的性能研究[J].電子設(shè)計(jì)工程,2011,19(9):125-128.YU Lin,HUANG Guang-ming.Performance of FIR digital filterbased on FPGA.ElectronicDesign Engineering,2011,19(9):125-128.
[3]王旭東,潘廣楨.MATLAB及其在FPGA中的應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2006.
[4]羅軍輝,羅勇江,白義臣,等.MATLAB 7.0在數(shù)字信號(hào)處理中的應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2005.
[5]程培青.數(shù)字信號(hào)處理教程 [M].北京:清華大學(xué)出版社,2007.
[6]田耕,許文波,張延偉.無(wú)線通信FPGA設(shè)計(jì)[M].北京:電子工業(yè)出版社,2007.