黃軍友
(四川信息職業(yè)技術(shù)學(xué)院,四川廣元 628017)
正交頻分復(fù)用技術(shù)(Orthogonal Frequency Division Multiplexing,OFDM)較好地解決了由帶寬限制、信道時(shí)變特性、噪聲、干擾及多路徑問(wèn)題制約的通信質(zhì)量和信道容量的發(fā)展問(wèn)題.OFDM技術(shù)基本原理是把高速數(shù)據(jù)流分成若干低速數(shù)據(jù)流并行地在相互正交的子載波上傳輸,將頻率選擇性衰落信道轉(zhuǎn)化成為若干平坦衰落子信道,[1]從而減少多徑衰落的時(shí)間彌散,可以有效地對(duì)付多徑衰落,對(duì)抗窄帶干擾,提高傳輸速率.[2]OFDM可以采用FFT算法來(lái)實(shí)現(xiàn),當(dāng)子信道數(shù)目比較多的時(shí)候,采用FFT能減少系統(tǒng)的復(fù)雜度.本文主要研究2k/4k/8k多模式復(fù)用FFT的FPGA的實(shí)現(xiàn).
可知,8k傅立葉變換可由4*2k的傅立葉變換構(gòu)成.2k的傅立葉變換可由128*16的傅立葉變換構(gòu)成.128的傅立葉變換可進(jìn)一步由16*8的傅立葉變換構(gòu)成,即整個(gè)傅立葉變換可由基2基4的傅立葉變換構(gòu)成.2k的FFT可以通過(guò)5個(gè)基4和一個(gè)基2變換實(shí)現(xiàn);4k的FFT變換可通過(guò)6個(gè)基4變換實(shí)現(xiàn);8k的FFT可以通過(guò)6個(gè)基4和一個(gè)基2變換實(shí)現(xiàn).
表1列出不同蝶形運(yùn)算單元所需的運(yùn)算次數(shù).從基2到基4,實(shí)數(shù)乘、加法的運(yùn)算次數(shù)發(fā)生了比較大的跳變,而從基4到基8以及基16運(yùn)算次數(shù)變化的幅度不是很明顯.從算法復(fù)雜性看,最優(yōu)基為基4和基8.從控制角度看,基2算法最容易控制.基4算法控制復(fù)雜一些,仍然具有和基2算法的可類比性.8和基16算法的控制復(fù)雜度與基4相比跳變明顯.考慮到運(yùn)算速度和控制性的折衷,基4算法在基FFT處理實(shí)現(xiàn)中具有更高性價(jià)比.[3]
表1 蝶形運(yùn)算單元的運(yùn)算次數(shù)
其中,r=log2N
以4K點(diǎn)的FFT為例(時(shí)鐘周期25 ns),如表2.
表2 運(yùn)算效率
以基4作為基本的運(yùn)算單元,至少需要流經(jīng)基4單元6次.實(shí)際處理時(shí)間包括處理時(shí)延和存儲(chǔ)時(shí)延,內(nèi)部工作時(shí)鐘至少為外部時(shí)鐘的7倍,換成基16,內(nèi)部工作時(shí)鐘可以降為外部時(shí)鐘的4倍,可以更為穩(wěn)定的工作.本設(shè)計(jì)中,使用Stratix系列器件,邏輯資源較為充足.考慮速度、穩(wěn)定性、通用性、所用資源等方面,采用4/2×4/2的蝶形運(yùn)算單元結(jié)構(gòu),其基本的運(yùn)算單元為基 4/2,在進(jìn)行兩次運(yùn)算后進(jìn)行存儲(chǔ)調(diào)序的處理,減小了內(nèi)部時(shí)鐘的壓力和控制的復(fù)雜度.
FFT運(yùn)算結(jié)果的精度,與輸入數(shù)據(jù)的位數(shù)及運(yùn)算的過(guò)程中的位數(shù)有關(guān),同時(shí),和數(shù)據(jù)的表示形式也有很大關(guān)系.[4]通過(guò)仿真如圖 1,固定 rom_bits的位數(shù)為 16,圖中的曲線由上至下分別對(duì)應(yīng)ram_bits由19至12變化.可以看到ram_bits大于16時(shí),再增加其位數(shù)并不能帶來(lái)更大的好處.因此在硬件實(shí)現(xiàn)代價(jià)和性能之間均衡,最終選取rom_bits=16,ram_bits=17.
圖1 位數(shù)變化時(shí)信噪比變化圖
8k點(diǎn)的FFT可以通過(guò)低點(diǎn)數(shù)的FFT來(lái)實(shí)現(xiàn).出于通用性和穩(wěn)定性考慮,實(shí)際利用的運(yùn)算單元是基16/8/4/2通用的運(yùn)算模塊,具體到8k點(diǎn)的實(shí)現(xiàn)就有16-8-8-8及16-16-16-2兩種實(shí)現(xiàn)的方法.
圖2分別表示了16-16-16-2和16-8-8-8分解方式下變換結(jié)果和Matlab工具箱中FFT函數(shù)比較的結(jié)果.從圖中可以看到,兩種方式均可以較好的完成 8k點(diǎn)的 FFT,信噪比均達(dá)到了 75 dB以上.16-16-16-2方式較16-8-8-8方式在信噪比上有約3 dB的增益.因此8k點(diǎn)變換的總體結(jié)構(gòu)選用了16-16-16-2的分解方式.
圖2 兩種分解模式的性能比較
實(shí)際實(shí)現(xiàn)中,在FFT運(yùn)算模塊的基礎(chǔ)上,只需將輸入序列進(jìn)行取共軛后再進(jìn)行FFT運(yùn)算,輸出結(jié)果再取一次共軛便實(shí)現(xiàn)了對(duì)輸入序列的 IFFT運(yùn)算.IFFT在FFT的基礎(chǔ)上輸入和輸出均有一次共軛操作,但它們共用一個(gè)內(nèi)核,這是十分方便的.而1/N實(shí)際上就是一個(gè)比例關(guān)系,可以根據(jù)輸出數(shù)據(jù)的大小要求,選擇一個(gè)合適的因子相除輸出,來(lái)完成IFFT的運(yùn)算.
FFT的基本結(jié)構(gòu)可由基2/4模塊,復(fù)數(shù)乘法器,存儲(chǔ)單元和存儲(chǔ)器的控制模塊構(gòu)成,整體結(jié)構(gòu)如圖3.
圖3 FFT實(shí)現(xiàn)的總體框架
通常外部輸入數(shù)據(jù)的速度比內(nèi)部數(shù)據(jù)處理速度慢.在輸入一組數(shù)據(jù)時(shí),在外部時(shí)鐘的作用下,存入RAMa或RAMb其中之一,同時(shí)開(kāi)始對(duì)兩個(gè)RAM 中的另一個(gè)中的數(shù)據(jù)進(jìn)行運(yùn)算.輸出部分的RAM與輸入端類似,也是RAMc和RAMd輪流工作,如圖4.為了適應(yīng)多模式復(fù)用,設(shè)計(jì)指示信號(hào),指示不同點(diǎn)數(shù)的輸出時(shí)刻.接收端的RAM存儲(chǔ)運(yùn)算的結(jié)果,在指示信號(hào)的作用下輸出數(shù)據(jù).
在2k/4k/8k傅立葉變換中,要實(shí)現(xiàn)通用性,控制器是最主要的模塊.2k,4k,8k變換有不同的內(nèi)部運(yùn)算時(shí)間和存儲(chǔ)器地址,在通用性設(shè)計(jì)中,針對(duì)不同的點(diǎn)數(shù)設(shè)計(jì)不同的存儲(chǔ)器存取地址,同時(shí),在完成變換后,要對(duì)開(kāi)始輸出有用信號(hào)的時(shí)刻進(jìn)行指示.
圖4 輸入輸出控制
圖5是相應(yīng)的硬件實(shí)現(xiàn)框圖,此運(yùn)算模塊可以進(jìn)行基16、基8、基4和基2的運(yùn)算.其結(jié)構(gòu)是由兩級(jí)基 4/2復(fù)用的蝶形運(yùn)算單元串行級(jí)聯(lián)完成的.在第一級(jí)基2/4完成以后數(shù)據(jù)要經(jīng)過(guò)RAM進(jìn)行緩存以便調(diào)整順序,調(diào)整完順序后,以新的順序輸出,開(kāi)始第2級(jí)基2/4運(yùn)算.模塊有兩個(gè)數(shù)據(jù)輸出端口.第一級(jí)運(yùn)算完成后輸出,可以完成基 2/4的運(yùn)算,從第二級(jí)輸出,可以完成16/8的運(yùn)算,使此運(yùn)算單元有很大的適應(yīng)性.
圖5 運(yùn)算模塊
蝶形運(yùn)算完成運(yùn)算后,產(chǎn)生一定的逆序.為了保證順序輸入順序輸出,需要在RAM存取過(guò)程中進(jìn)行地址變換.地址的產(chǎn)生可以采用不同的方式.[6]而本次實(shí)現(xiàn)中,由于芯片中的存儲(chǔ)單元有限,采用了通過(guò)計(jì)數(shù)器計(jì)數(shù),將計(jì)數(shù)結(jié)果按地址的規(guī)律進(jìn)行變換的方法來(lái)產(chǎn)生所需的地址.針對(duì)不同的點(diǎn)數(shù),給計(jì)數(shù)器設(shè)計(jì)不同的清零信號(hào),完成多模式復(fù)用的設(shè)計(jì).
其對(duì)稱性表現(xiàn)為
表3 正余弦函數(shù)的對(duì)稱性
對(duì)于2k/4k/8k的傅立葉變換來(lái)說(shuō),旋轉(zhuǎn)因子只是對(duì)一個(gè)周期進(jìn)行不同的分割.8k變換的旋轉(zhuǎn)因子中包括了2k/4k的所有因子.實(shí)現(xiàn)中,ROM中存儲(chǔ)了8k點(diǎn)FFT所對(duì)應(yīng)的旋轉(zhuǎn)因子.相對(duì)2k/4k變換來(lái)說(shuō),相對(duì)應(yīng)的因子不是連續(xù)的,需要對(duì)8k的旋轉(zhuǎn)因子按一定的規(guī)律抽取.抽取通過(guò)對(duì)讀ROM的地址序列進(jìn)行控制,可實(shí)現(xiàn)2k/4k/8k變換的通用性.
通過(guò)選擇器從RAM中取數(shù)據(jù)的同時(shí),從ROM中取旋轉(zhuǎn)因子.在數(shù)據(jù)和旋轉(zhuǎn)因子進(jìn)入基4運(yùn)算單元后,首先進(jìn)行鎖存,然后并行送入基4的運(yùn)算部分,以達(dá)到數(shù)據(jù)和旋轉(zhuǎn)因子的同步,如圖6(a).而輸出時(shí),為達(dá)到流形輸出的效果,也需要進(jìn)行鎖存,如圖6(b):
圖6 數(shù)據(jù)的鎖存
本次實(shí)現(xiàn),只是將2k/4k/8k點(diǎn)的FFT設(shè)計(jì)在一個(gè)工程中.當(dāng)需要16點(diǎn)、256點(diǎn)、1024點(diǎn)等點(diǎn)數(shù)的FFT變換時(shí),分別需要2個(gè)基4單元,4個(gè)基4單元以及5個(gè)基4單元,而8點(diǎn),32點(diǎn)、512點(diǎn)的FFT變換,分別需要1個(gè)基4和1個(gè)基2單元、2個(gè)基4和1個(gè)基2單元、4個(gè)基4和1個(gè)基2單元.都可以歸結(jié)成基4基2單元,在具體實(shí)現(xiàn)中,可以控制數(shù)據(jù)流過(guò)蝶形運(yùn)算單元的次數(shù)來(lái)完成.
ALTERA公司的Stratix系列中的EPLS25芯片是現(xiàn)場(chǎng)可編程門陣列(FPGA),能滿足較高速度的需要.芯片內(nèi)部集成了25660個(gè)邏輯單元(LE),1899K RAM比特.芯片中專用DSP處理模塊,對(duì)乘法器的實(shí)現(xiàn)具有快速,準(zhǔn)確的優(yōu)勢(shì).EP1S25含224個(gè)M512,均勻分布在片內(nèi),可用于需要大量小規(guī)模存儲(chǔ)器的場(chǎng)合.EP1S25含138個(gè)M4K,每塊大小為4608個(gè)比特(含512檢驗(yàn)位).EP1S25還有兩個(gè)大容量MegaRAM,每塊含576K個(gè)比特(64K校驗(yàn)位),適用于需要大容量RAM的數(shù)據(jù)轉(zhuǎn)發(fā),視頻緩存等應(yīng)用場(chǎng)合.[9]這些片內(nèi) RAM具有很高的靈活性和很強(qiáng)的實(shí)用性,在設(shè)計(jì)中可以用作RAM,ROM,F(xiàn)IFO等等存儲(chǔ)類型.同時(shí)在應(yīng)用時(shí),可以對(duì)其存儲(chǔ)數(shù)據(jù)的總線寬度,存儲(chǔ)的深度及讀、寫(xiě)產(chǎn)生的時(shí)延等等進(jìn)行設(shè)定.
除了一些專用引腳外,F(xiàn)PGA上幾乎所有的引腳均可供用戶使用,這使得FPGA信號(hào)處理方案具有非常高性能的I/O帶寬.大量的I/O引腳和多塊存儲(chǔ)器可讓設(shè)計(jì)獲得優(yōu)越的并行處理性能.獨(dú)立的存儲(chǔ)塊可作為輸入/工作存儲(chǔ)區(qū)和結(jié)果緩存區(qū),這使得I/O可與FFT計(jì)算同時(shí)進(jìn)行.
在實(shí)現(xiàn)的時(shí)間方面,以一個(gè)4096點(diǎn)的FFT為例,在4096個(gè)時(shí)鐘周期內(nèi)完成.若采用10 MHz的輸入時(shí)鐘,變換時(shí)間在300 us左右,而最新的FPGA使用了MultiTrack互連技術(shù),可以在250 MHZ以下的頻率穩(wěn)定的工作,對(duì)于FFT的實(shí)現(xiàn)時(shí)間可以大大地縮小.
如圖7所示,驗(yàn)證的過(guò)程分為仿真和實(shí)測(cè),比較的基準(zhǔn)是Matlab工具箱中的FFT函數(shù).本次設(shè)計(jì)共使用了6 295個(gè)邏輯單元,24個(gè)DSP模塊,1 015 808 bit的存儲(chǔ)單元,信噪比達(dá)到了75 dB以上,可以滿足大多數(shù)情況下的應(yīng)用要求.
圖7 測(cè)試與驗(yàn)證流程
[1]譚澤富.一種OFDM系統(tǒng)中的頻偏估計(jì)方法[J].重慶三峽學(xué)院學(xué)報(bào),2006(3).
[2]黨向東.專用 FFT實(shí)時(shí)信號(hào)處理器的硬件實(shí)現(xiàn)研究[J].錦州師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2003(2).
[3]李成詩(shī),初建朋,李新兵,等.基于CORDIC的一種高速實(shí)時(shí)定點(diǎn) FFT的 FPGA實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2004(4).
[4]李小進(jìn),初建朋,賴宗聲,等.高速基2FFT處理器的結(jié)構(gòu)設(shè)計(jì)與 FPGA實(shí)現(xiàn)[J].電路與系統(tǒng)學(xué)報(bào),2005(5).
[5]Richard B. Ertel, “Generation of Two Equal Power Correlated Rayleigh Fading Enelopes”, IEEE Communications Letters, 1998,10:pp276-278.
[6]王凱,葛建華,梁錫林.OFDM調(diào)制中高速FFT處理器的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)有線電視,2006(1).
[7]田豐,鄧建國(guó),賈治華,等.FFT算法的一種FPGA實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2005(8).
[8]蔣冰,劉懷宇.基于存儲(chǔ)器的3780點(diǎn)FFT的FPGA設(shè)計(jì)和實(shí)現(xiàn)[J].中國(guó)有線電視,2005(23).
[9]顧晴茹,周玉潔.OFDM系統(tǒng)中高速FFT處理器的FPGA實(shí)現(xiàn)[J].信息技術(shù),2005(12).