《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > FFT實(shí)時(shí)譜分析系統(tǒng)的FPGA設(shè)計(jì)和實(shí)現(xiàn)

FFT實(shí)時(shí)譜分析系統(tǒng)的FPGA設(shè)計(jì)和實(shí)現(xiàn)

2008-09-12
作者:劉桂華, 傅佑麟, 嚴(yán) 平

  摘 要: 采用按時(shí)間抽選的基4原位算法和坐標(biāo)旋轉(zhuǎn)數(shù)字式計(jì)算機(jī)(CORDIC)算法實(shí)現(xiàn)了一個(gè)FFT實(shí)時(shí)譜分析" title="譜分析">譜分析系統(tǒng)。整個(gè)設(shè)計(jì)采用流水線工作方式,保證了系統(tǒng)的速度,避免了瓶頸的出現(xiàn);整個(gè)系統(tǒng)采用FPGA實(shí)現(xiàn),實(shí)驗(yàn)表明,該系統(tǒng)既有DSP器件實(shí)現(xiàn)的靈活性又有專用 FFT芯片實(shí)現(xiàn)的高速數(shù)據(jù)吞吐能力,可以廣泛地應(yīng)用于數(shù)字信號(hào)處理" title="數(shù)字信號(hào)處理">數(shù)字信號(hào)處理的各個(gè)領(lǐng)域。
  關(guān)鍵詞: 快速傅里葉變換 CORDIC算法 現(xiàn)場可編程" title="可編程">可編程門陣列(FPGA)


  快速傅里葉變換(Fast Fourier Transformation, FFT) 實(shí)時(shí)譜分析是DSP應(yīng)用的核心技術(shù)之一,而在高速實(shí)時(shí)信號(hào)處理中,常采用專門集成電路(ASIC)來實(shí)現(xiàn)。FPGA是一種具有大量的可編程邏輯單元的器件,它的應(yīng)用使得電子產(chǎn)品不僅具有高速度、高集成度和高可靠性,而且具有用戶可編程特性,能降低設(shè)計(jì)風(fēng)險(xiǎn)。實(shí)驗(yàn)表明,用FPGA實(shí)現(xiàn)的實(shí)時(shí)譜分析系統(tǒng)既有專用ASIC電路實(shí)現(xiàn)的快速性,又有DSP器件實(shí)現(xiàn)的靈活性,非常適用于高速實(shí)時(shí)的數(shù)字信號(hào)處理。
1 FFT實(shí)時(shí)信號(hào)處理系統(tǒng)的總體設(shè)計(jì)
  FFT頻譜分析系統(tǒng)主要由1024點(diǎn)基-4 FFT模塊和接口控制電路組成。其中,基-4 FFT模塊用于實(shí)現(xiàn)一組1024點(diǎn)復(fù)數(shù)數(shù)據(jù)的FFT變換;接口控制電路負(fù)責(zé)控制1024點(diǎn)基-4 FFT模塊,并對A/D采樣輸出的數(shù)據(jù)進(jìn)行緩存、速率匹配等,協(xié)調(diào)整個(gè)FFT頻譜分析系統(tǒng)的工作時(shí)序。
  在本設(shè)計(jì)中,F(xiàn)FT實(shí)時(shí)譜分析系統(tǒng)的1024點(diǎn)基-4 FFT算法采用FPGA實(shí)現(xiàn)。FPGA的總體框圖如圖1所示。其中,衰減限幅模塊負(fù)責(zé)對數(shù)據(jù)進(jìn)行衰減及限幅壓縮處理;雙口RAM負(fù)責(zé)存儲(chǔ)外部輸入的原始數(shù)據(jù)及經(jīng)過蝶形運(yùn)算后的中間數(shù)據(jù);四點(diǎn)FFT模塊完成4點(diǎn)DFT運(yùn)算;地址控制模塊負(fù)責(zé)產(chǎn)生讀地址、寫地址、寫使能信號(hào)以及相關(guān)模塊的啟動(dòng)、控制信號(hào),是FFT系統(tǒng)的控制核心;復(fù)乘運(yùn)算模塊是系統(tǒng)運(yùn)算的核心部分,采用CORDIC算法實(shí)現(xiàn);旋轉(zhuǎn)因子產(chǎn)生器產(chǎn)生復(fù)乘運(yùn)算中的旋轉(zhuǎn)因子的角度數(shù)據(jù);倒序模塊實(shí)現(xiàn)頻譜正常順序輸出。


2 功能模塊的設(shè)計(jì)
2.1 衰減限幅模塊

  FFT實(shí)時(shí)譜分析系統(tǒng)采用的算術(shù)運(yùn)算方案是定點(diǎn)運(yùn)算" title="定點(diǎn)運(yùn)算">定點(diǎn)運(yùn)算,衰減限幅模塊實(shí)現(xiàn)了定比例衰減、尾數(shù)處理和壓縮信號(hào)電平的作用,用以防止數(shù)據(jù)溢出。模塊框圖如圖2所示,其壓縮特性如圖3所示。


2.2 四點(diǎn)FFT模塊
  四點(diǎn)FFT模塊完成四點(diǎn)DFT變換,變換公式如下:
  
  四點(diǎn)FFT模塊中完全不需要復(fù)數(shù)乘法,乘-j只需將實(shí)部虛部交換,再加上必要的正負(fù)號(hào)即可。四點(diǎn)FFT模塊采用流水線工作方式,每四個(gè)時(shí)鐘周期完成一組四點(diǎn)FFT運(yùn)算。在輸入一組四點(diǎn)原始數(shù)據(jù)x(i)時(shí),要完成兩項(xiàng)工作:①進(jìn)行上一組四點(diǎn)FFT的第二級運(yùn)算,即計(jì)算并輸出上一組四點(diǎn)FFT的結(jié)果X(k);②進(jìn)行本組四點(diǎn)FFT的第一級運(yùn)算,即計(jì)算本組四點(diǎn)FFT的中間結(jié)果X′(k)。這樣充分利用了硬件資源。
2.3 復(fù)乘運(yùn)算模塊
  復(fù)乘運(yùn)算是FFT處理器中兩種最頻繁的運(yùn)算之一,因而復(fù)乘運(yùn)算模塊也是FFT處理器中的一個(gè)重要模塊。輸入復(fù)數(shù)數(shù)據(jù)xr+jxi與旋轉(zhuǎn)因子cosα+jsinα相乘的公式為:
  
  利用CORDIC的圓周旋轉(zhuǎn)的向量工作模式可以實(shí)現(xiàn)復(fù)乘運(yùn)算,所采用的迭代方程組如下:
  
  所以,只需將需要運(yùn)算的角度值作為z0輸入,經(jīng)過旋轉(zhuǎn)迭代后,迭代結(jié)果的xn和yn就是所需要的旋轉(zhuǎn)因子復(fù)乘的運(yùn)算值。即:
  
  復(fù)乘運(yùn)算模塊的工作流程如圖4所示。


  從復(fù)乘運(yùn)算的算法流程中可以看到,實(shí)現(xiàn)復(fù)乘運(yùn)算的主要元件有加法器、移位器和多選一數(shù)據(jù)選擇器等。組成流水線后,各流水單元結(jié)構(gòu)相似,很適合用FPGA實(shí)現(xiàn)。
2.4 旋轉(zhuǎn)因子產(chǎn)生模塊
  在一個(gè)基-4蝶形運(yùn)算單元中,包含WP、W2P和W3P三個(gè)旋轉(zhuǎn)因子,每組基-4蝶形運(yùn)算的第一個(gè)輸出數(shù)據(jù)所乘的旋轉(zhuǎn)因子總為1。在同一個(gè)蝶形組內(nèi),p值是不變的,因而只需確定一個(gè)p值,三個(gè)旋轉(zhuǎn)因子便可確定下來。每當(dāng)一個(gè)基-4蝶形組計(jì)算完畢而轉(zhuǎn)入下一個(gè)蝶形組時(shí),p值改變一次,其變化的順序恰好是(L-1)位四進(jìn)制數(shù)順序加1的倒序輸出。由此可以根據(jù)蝶形運(yùn)算的級數(shù)和四點(diǎn)FFT的節(jié)點(diǎn)位置計(jì)算出對應(yīng)的旋轉(zhuǎn)因子的角度。
  由于=cos()-jsin(),在程序中將小數(shù)cos()和-sin()轉(zhuǎn)換成定點(diǎn)數(shù),變換為二進(jìn)制數(shù)進(jìn)行計(jì)算。
  本設(shè)計(jì)的復(fù)乘運(yùn)算采用CORDIC算法實(shí)現(xiàn),需要輸入角度值作為進(jìn)行復(fù)乘運(yùn)算的相應(yīng)旋轉(zhuǎn)因子的角度,因此旋轉(zhuǎn)因子產(chǎn)生模塊輸出的數(shù)據(jù)即對應(yīng)旋轉(zhuǎn)因子的角度值,模塊中包括10位計(jì)數(shù)器和一個(gè)計(jì)算輸出進(jìn)程。程序的運(yùn)算流程如圖5所示。


  本設(shè)計(jì)采用直接計(jì)算旋轉(zhuǎn)因子的方法,不需要產(chǎn)生旋轉(zhuǎn)因子的讀取地址和額外的ROM資源,簡化了設(shè)計(jì),但需要一直進(jìn)行角度值的計(jì)算,增加了系統(tǒng)的運(yùn)算時(shí)間。
3 FFT實(shí)時(shí)頻譜分析系統(tǒng)的實(shí)現(xiàn)
  本設(shè)計(jì)采用Synplicity公司的邏輯綜合軟件Synplify7.1 pro進(jìn)行設(shè)計(jì)綜合,用Xilinx的ISE6.1布局布線。實(shí)現(xiàn)后的系統(tǒng)的時(shí)序分析結(jié)果表示,系統(tǒng)有9.139ns的延遲,系統(tǒng)時(shí)鐘周期可達(dá)10.817ns,系統(tǒng)頻率達(dá)到92.4MHz。當(dāng)系統(tǒng)頻率為90MHz時(shí),1024點(diǎn)FFT運(yùn)算需要的時(shí)間大約為68.3μs,完全可以滿足實(shí)時(shí)處理的要求。本文采用Xilinx公司的Virtex-Ⅱxc2v500 fg456-5 FPGA器件實(shí)現(xiàn)系統(tǒng),設(shè)計(jì)使用資源狀況如表1所示。


  本FFT實(shí)時(shí)譜分析系統(tǒng)采用定點(diǎn)運(yùn)算方案,輸入為12位復(fù)數(shù)數(shù)據(jù),輸出為14位復(fù)數(shù)數(shù)據(jù)。采用方波信號(hào)進(jìn)行測試,其參數(shù)為:脈沖幅度H=100,脈沖寬度M=10。本FFT實(shí)時(shí)譜分析系統(tǒng)輸出的幅值如圖6所示,輸出的幅值的相對誤差" title="相對誤差">相對誤差如圖7所示。相對誤差較大的一些點(diǎn)均出現(xiàn)在標(biāo)準(zhǔn)FFT輸出的幅值很小的點(diǎn)上,這是由于有限字長效應(yīng)引起相對誤差造成的。同時(shí)由于采用的算術(shù)運(yùn)算方案是定點(diǎn)運(yùn)算,加劇了小信號(hào)的信噪比的惡化。但在實(shí)際應(yīng)用中這些輸出幅值很小的點(diǎn)會(huì)被判別為頻譜上的噪聲點(diǎn),對實(shí)際的頻譜分析影響不大,故對系統(tǒng)的誤差影響并不大。而在標(biāo)準(zhǔn)FFT輸出的幅值較大的點(diǎn)上,相對誤差則很小。


  本設(shè)計(jì)全部由VHDL語言實(shí)現(xiàn),采用自頂向下的設(shè)計(jì)方法,完成了一個(gè)1024點(diǎn)FFT實(shí)時(shí)譜分析系統(tǒng)。該FFT采用了基-4原位算法,既保證了運(yùn)算速度,又節(jié)省了硬件資源。該FFT通過CORDIC算法實(shí)現(xiàn)復(fù)乘,較傳統(tǒng)的復(fù)乘運(yùn)算節(jié)省了大量的ROM資源,同時(shí)采用了流水線結(jié)構(gòu),加快了運(yùn)算速度。
參考文獻(xiàn)
1 劉淩,胡永生. 數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn). 北京:清華大學(xué)出版社,2002
2 李廣軍,孟憲元. 可編程ASIC 設(shè)計(jì)及應(yīng)用[M].成都:電子科技大學(xué)出版社,2000
3 劉朝暉, 韓月秋.用FPGA 實(shí)現(xiàn)FFT 的研究[J].北京:北京理工大學(xué)學(xué)報(bào),1999;19(2):234~238
4 Volder J E.The CORDIC Trigonometric Computing Technique IRE.Trans.on Electronic Computer,1959(9)

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