基於FPGA的高速流水線FFT算法實現

2021-01-10 電子產品世界

  0 引言

本文引用地址:http://www.eepw.com.cn/article/82350.htm

  有限長序列的DFT(離散傅立葉變換)特點是能夠將頻域的數據離散化成有限長的序列。但由於DYT本身運算量相當大,限制了它的實際應用。FFT(快速傅立葉變換)算法是作為DFT的快速算法提出,它將長序列的DFT分解為短序列的DFT,大大減少了運算量,使得DFT算法在頻譜分析、濾波器設計等領域得到了廣泛的應用。

  FPGA(現場可編程門陣列)是一種具有大規模可編程門陣列的器件,不僅具有專用集成電路(ASIC)快速的特點,更具有很好的系統實現的靈活性。FPGA可通過開發工具實現在線編程。與CPLD(複雜可編程邏輯器件)相比,FPGA屬寄存器豐富型結構,更加適合於完成時序邏輯控制。因此,FPGA為高速FFT算法的實現提供了一個很好的平臺。

  1 基4-FFT算法基本原理

  在FFT各類算法中,基2-FFT算法是最簡單的一種,但其運算量與基4-FFT算法相比則大得多,分裂基算法綜合了基4和基2算法的特點,雖然具有最少的復乘運算量,但其L蝶形運算控制的複雜性也限制了其在硬體上的實現,因此,本設計採用了基4-FFT算法結構。

  基4-FFT算法的基本運算是4點DFT。一個4點的DFT運算的表達式為:

       

  式(1)對於輸出變量進行了二進位倒序,便於在運算過程中進行同址運算,節省了運算過程中所需存儲器單元的數量。

  按DIT(時間抽取)的1 024點的基4-FFT共需5級蝶形運算,每級從RAM中讀取的數據經過蝶形運算後原址存入存儲單元準備下一級運算。算法的第1級為一組N=1 024點的基4蝶形運算,共256個蝶形,每個蝶形的距離為256點;第2級為4組N=256點的基4蝶形運算,每組64個蝶形,每個蝶形的距離為64點。後3級類推。這種算法每一級的運算具有相對獨立性,每級運算都採用同址運算,因此,本設計只使用了2個1 k×16 bits的RAM單元。運算過程中所需的旋轉因子的值經過查詢預設的正弦與餘弦ROM表得到。

  2 1024點FFT算法模塊的設計

  本設計的總體框圖如圖1所示。整個模塊的輸入包括16位帶符號實部和虛部數據輸入、FFF啟動信號,輸出包括16位帶符號實部和虛部數據輸出、輸出有效數據區間標誌。內部結構包括2個1 k×16 bits的實部和虛部雙口RAM存儲單元、蝶形運算單元、旋轉因子生成模塊(包括正弦因子查詢表、餘弦因子查詢表和象限轉換模塊)、RAM和ROM存儲器地址控制單元、倒序模塊以及時序總控制單元。

       

  下面對主要單元進行分析。

  2.1旋轉因子產生模塊

  在整個FFT運算過程中,需要存儲一組旋轉因子表用於蝶形運算,如第1級運算需要的旋轉因子有W01024,W11024,…,W10231024,根據旋轉因子的可約性,後幾級運算所需的旋轉因子都可以在這一組數據中查到,因此無需另外存儲。為了更節省存儲資源,本設計只在ROM單元中存儲了前256個旋轉因子數據,即第1象限因子W01024,W11024,…,W2551024,。其餘象限的因子通過象限轉換後得到。這樣便可以節省3/4的ROM存儲單元的硬體資源。

  2.2蝶形運算單元

  2.2.1蝶形整體結構

  蝶形運算單元包括輸入輸出寄存器、串/並轉換、並/串轉換和複數乘法器等。從基本的基4蝶形運算表達式可以看出,每一級的輸出數據在進入下一級運算之前都要首先與旋轉因子WnkN進行相乘。本設計採用如圖2的蝶形運算器結構。

       

  這種結構是經過優化的蝶形運算器結構,文獻[3]給出了這一結構的具體分析,這樣的結構與傳統的需要3個復乘單元的蝶形結果相比,因為採用了流水線控制,硬體上節省了2個復乘單元,而輸出同樣只需4個時鐘周期,工作效率並未降低。在FPGA設計中,一個乘法器的引入,尤其是高位數的乘法器的引入,將很大程度地影響系統整體的運行速率,並且將佔用大量的資源。因此,這種改進方案更有利於FFT算法的高效實現。

  2.2.2復乘器設計

  對於復乘單元的設計,常見的復乘方式為:

       

  式中:i為虛數單位。

  這種乘法表達式需要4個實數乘法運算和2個加減運算,設計中對表達式進行如下變換:

      

  式(3)這種復乘方式只需要3個實數乘法運算和5個加減就可以完成復乘運算,減少了乘法器數量。式中(c+s)值可以在進行象限轉換的同時通過計算得到,而無需另外存儲。

  2.2.3數據溢出控制

  為了防止數據計算過程中的溢出,上述蝶形單元中的加減法運算單元對於輸入的4個有符號複數數據採取了符號位擴展相加後再對計算結果進行1/4倍壓縮的方法進行計算。而對於乘法單元則採用了刻度(scaling)的方法,將複數數據(16位)與旋轉因子(8位)相乘後,得到24位數據結果刻度為16位數據後,再存人RAM單元中參與下一級運算。經過這樣處理後,有效地防止了整個系統在運算過程中出現的數據溢出情況,保證了最終運算結果的可靠性。

  2.3地址產生與總時序控制

  在FFT運算過程中,地址的產生包括複數數據存儲RAM的讀寫地址(RAM_addr)產生和旋轉因子表的讀取地址產生。對於不同級運算情況下,RAM讀寫的控制必須按DIT的倒序規則進行,這在程序中就需要若干個變量來控制。假設控制級數的變量是L,每級的蝶形運算距離是D,當前計算蝶形所在的組為第S組,共N組,當前計算蝶形所在組中的位置是第A個蝶形,那麼每個蝶形的4個輸人數據地址分別為:

        
 
  ROM讀取地址ROM_addr可按如下式子計算得到: 

       

  式中iAN=i×A×N:i=2,1,3,為輸出4點數據的倒序序號,當i為0時數據直接輸出,無需對ROM進行讀取。

  本設計中採用的RAM模塊為QuartusⅡ軟體中的雙口RAM模塊,此模塊存儲與讀取可以同時進行。系統單獨完成一個蝶形運算總共需要11個時鐘周期,為了能夠充分利用乘法器的運行效率,設計採用了流水線工作方式,平均完成一個蝶形運算只需4個時鐘周期。複數乘法器的工作時序佔整個工作時序的75%,具有較高的工作效率。

  綜上所述,可以得到如圖3所示流水線工作圖。

  圖3中,RAM_addr為分別計算4個數據地址,地址計算結果將交替存人寄存器組a和b中。這種控制方式類似於Pingpong RAM的控制方式,適用於流水線工作時序中,可以較大地提高系統的工作效率。地址寄存器組a(或b)中的第1個地址在用於保存完本次蝶形運算數據的第1個計算結果數據之後的,將被立即寫入下一個蝶形第1個數據讀取地址,可見這種流水線方式具有非常高的工作效率。

       

  圖3中,ROM_addr為分別計算3個旋轉因子的地址,M1、M2、M3分別為每個蝶形單元的3次復乘。蝶形運算單元對4個輸入數據A/B/C/D進行計算,輸出結果4個數據為A′/B′/C′/D′。可以看出,在這16個時鐘單元中,共有4個蝶形運算同時處於流水線工作中,因此每個蝶形運算平均只需4個時鐘周期就可以完成。

  需要指出的是,在所有蝶形運算結束後,即第5級運算完成後,所存儲在RAM中的數據是四進位倒序的,為了能在輸出端得到正確的1024點頻域數據,在輸出時必須進行四進位倒序輸出,輸出的數據可以直接用於後續的數據分析等工作。

  2.4 FFT算法仿真結果

  在QuartusⅡ軟體中利用simulator tool工具在100 MHz的時鐘環境下對系統進行了仿真。輸入時域數據為一個矩形窄脈衝信號,完成整個FFT運算的耗時僅為51.28μs。仿真得到的矢量波形文件的部分結果如圖4所示。

        

  將仿真輸出結果轉換成tbl文件並利用MATLAB軟體讀取後,得到如圖5所示的頻譜數據圖(實部數據部分)。

        
 
  圖6所示為MATLAB自帶FFT()函數對於輸入相同1 024點數據的FFT計算結果(同樣為實部數據部分)。
        
       

  通過對比可以看到,本設計的仿真結果與MAT-LAB計算的結果基本一致。只在較小值受到了有限字長效應的影響。就總體而言,本設計能夠正確而高效地計算輸入的1 024點數據的頻域數據值,數據能夠有效地用於實際的頻譜分析過程中。

  3 結束語

  1024點基4-FFT算法共需要5級運算,每級需要計算256個蝶形,由前所述,平均每個蝶形運算需要4個時鐘周期,所以理論上完成1 024點FFT的總時鐘周期為N=256×4×5=5120;假設使用的時鐘為100MHz,那麼將總共耗時T=5120×(1/100)=51.2μs,這與仿真結果51.28μs基本一致。將所設計的FFT程序模塊在Altera公司的自帶DSP單元的stratix系列FPGA上進行綜合後,除了乘法器以及存儲單元外,所佔據資源僅為1 619個邏輯單元。因此,本設計方案能夠在FPGA有限的資源下實現較高效率的FFT算法。

相關焦點

  • 用FPGA實現FFT算法(圖)
    當n較大時,因計算量太大,直接用dft算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(fast fourier transformation,簡稱fft)使dft運算效率提高1~2個數量級。其原因是當n較大時,對dft進行了基4和基2分解運算。fft算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的fft仍然是很困難。
  • 基於高速定點FFT算法的FPGA設計方案
    在高速數位訊號處理領域,如雷達信號處理,FFT的處理速度往往是整個系統設計性能的關鍵所在。 針對高速實時信號處理的要求,軟體實現方法顯然滿足不了其需要。近年來現場可編程門陣列(FPGA)以其高性能、高靈活性、友好的開發環境、在線可編程等特點,使得基於FPGA的設計可以滿足實時數位訊號處理的要求,在市場競爭中具有很大的優勢。 在FFT算法中,數據的寬度通常都是固定的寬度。
  • 基於FPGA的FFT算法硬體實現
    基於FPGA的FFT算法硬體實現
  • 用FPGA實現FFT算法
    當N較大時,因計算量太大,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(Fast Fourier Transformation,簡稱FFT)使DFT運算效率提高1~2個數量級。其原因是當N較大時,對DFT進行了基4和基2分解運算。FFT算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的FFT仍然是很困難。
  • 基於FPGA流水線結構並行FFT的設計與實現
    FFT算法是作為DFT快速算法提出的,它將長序列的DFT分解為短序列的DFT,大大減少了運算量。FFT的FPGA實現同時具有軟體編程的靈活性和ASIC電路的快速性等優點,成為快速實時實現FFT的一種重要手段。文章意在設計一種高速率高吞吐率的FFT處理器,以滿足實時處理要求。
  • 基於FPGA的高速流水線浮點乘法器設計與實現
    因此,為了進一步提高微處 理器性能,開發高速高精度的乘法器勢在必行。同時由於基於IEEE754 標準的浮點運算具 有動態範圍大,可實現高精度,運算規律較定點運算更為簡捷等特點,浮點運算單元的設計 研究已獲得廣泛的重視。
  • 基於FPGA IP核的FFT實現
    0 引 言 數位訊號處理領域中FFT算法有著廣泛的應用。目前現有的文獻大多致力於研究利用FFT算法做有關信號處理、參數估計、F+FT蝶形運算單元與地址單元設計、不同算法的FFT實現以及FFT模型優化等方面。
  • 基於FPGA的移位寄存器流水線結構FFT處理器設計與實現
    從上面的算法結構分析中知道,由於後級的DFT運算點數是前一級的一半,所以後一級的開關轉換周期也是前一級的一半,基於這種關係,可以使用一個8位計數器的每一位狀態來對各級開關進行控制。最高位控制第一級,同時由於上一級數據進入下一級需要一個時鐘,所以下一級的開關轉換時刻要比上一級延遲一個時鐘周期。
  • 基於改進的CORDIC算法的FFT復乘及其FPGA實現
    在FFT運算中,核心操作是蝶形運算,而蝶形運算的主要操作是向量旋轉,實現向量旋轉可用複數乘法運算來實現,但複數乘耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現向量旋轉,具有使用資源少、硬體規模小等優勢。因此在FFT蝶形運算中用其代替傳統FFT運算中的複數乘法器,可以獲得更好的性能。
  • 基於FPGA高精度浮點運算器的FFT設計與仿真
    摘要 基於IEEE浮點表示格式及FFT算法,提出一種基2FFT的FPGA方法,完成了基於FPGA高精度浮點運算器的FFT的設計。利用VHDL語言描述了蝶形運算過程及地址產生單元,其仿真波形基本能正確的表示輸出結果。
  • 基於FPGA的結構光圖像中心線提取
    實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。利用現場可編程門陣列器件(FPGA)的流水線技術以及並行技術的硬體設計來完成運算,保證了光條紋中心點的實時準確提取。實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。
  • 基於DSP的FFT算法實現
    基於DSP的FFT算法實現1、FFT的原理快速傅氏變換(FFT)是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、
  • 基於MSP430系列微控制器的FFT算法實現
    離散時間採樣的快速傅立葉變換FFT(fast Fouriertrans form)算法是目前最主要的諧波檢測和分析方法。FFT算法的實現可以採用專用晶片37—40、DSP晶片6—1141—44、FPGA晶片193— 207以及微控制器等。隨著集成電路製造技術和數字計算機技術的進步,微控制器晶片的功能和所能提供的邏輯資源越來越多。
  • 基於FPGA的實時中值濾波器硬體實現
    在許多實際應用場合,如高清視頻監控、X光圖像的降噪等,需要快速且實時地進行中值濾波,軟體實現達不到實時處理的要求,因此選用硬體實現。 在硬體實現上,文獻[1]、[2]等採用行延遲的方法形成鄰域數據,以實現3×3的中值濾波。文獻[7]為了提高紅外成像跟蹤器設計了大窗口的中值濾波器。
  • 一種基於FPGA的實時紅外圖像預處理方法
    摘要:由於紅外圖像預處理算法自身的複雜性,使得紅外圖像在DSP中的預處理時間較長。針對這一問題,提出一種基於FPGA的實時紅外圖像預處理方法。
  • 基於DSP和FPGA的機器人聲控系統設計與實現
    2 系統硬體總體設計 系統的硬體功能是實現語音指令的採集和步進電機的驅動控制,為系統軟體提供開發和調試平臺。如圖1所示。 系統硬體分為語音信號的採集和播放,基於dsp的語音識別,fpga動作指令控制、步進電機及其驅動、dsp外接快閃記憶體晶片,jtag口仿真調試和鍵盤控制幾個部分。
  • 基於FPGA的高速卷積硬體設計及實現
    本文從實際工程應用出發,使用快速傅立葉變換(FFT)技術,探討卷積的高速硬體實現方法。本文引用地址:http://www.eepw.com.cn/article/148300.htm1 卷積算法的原理設線性時不變系統的衝激響應為h(n),則衝激響應和輸入δ(n)之間有關係
  • 基2 FFT 算法的模塊化硬體實現與比較
    但不同的應用場合對 FFT 算法的實現有不同的特性要求。研究的主要熱點在於硬體資源的佔用量與運算速度[1-3]。而這兩者又是互相制衡的關係。所以有必要比較實現 FFT 算法的多種方案。基 2 算法具有算法簡單、時序清晰、在高速實時數據處理中不容易出錯的優點。所以本文簡要介紹了基 2 FFT 的算法化簡原理,設計實現了將 FFT 處理器劃分為通用化的三個模塊。
  • 基於FPGA的可配置FFT_IFFT處理器的設計與實現
    目前,正交頻分復用OFDM(Orthogonal Frequency Division Multiplexing)技術已經成為未來寬帶無線接入系統的基本實現技術之一,其抗多徑衰落和高頻帶利用率的優點被廣泛應用於無線通信系統中,是解決高速數據在無線信道中傳輸的首選方案
  • 基於FPGA的可配置FFT IP核實現研究
    摘要 針對FFT算法基於FPGA實現可配置的IP核。採用基於流水線結構和快速並行算法實現了蝶形運算和4k點FFT的輸入點數、數據位寬、分解基自由配置。本文引用地址:http://www.eepw.com.cn/article/201610/308483.htm在現代聲納、雷達、通信、圖像處理等領域中,數位訊號處理系統經常要進行高速、高精度的FFF運算。現場可編程邏輯陣列(FPGA)是一種可定製集成電路,具有面向數位訊號處理算法的物理結構。