固定幾何結構的FFT算法及其FPGA實現

2021-01-10 電子產品世界

作者Email: smz_wxd@sohu.com

1.引言

DFT及其快速算法FFT是信號處理領域的核心組成部分。FFT算法多種多樣,按數據組合方式不同一般分時域和頻域,按數據抽取方式的不同又可分為基2,基4等。各算法的優缺點視不同的制約因素而不同。FFT的實現方法也多種多樣,可以用軟體實現,也可以用硬體實現,用軟體在PC機或工作站上實現則計算速度很慢。一般多結合具體系統用硬體實現。例如用單片機或DSP實現。但是速度仍然很慢,難以與快速的A/D器件匹配。在雷達信號處理領域主要追求的目標是速度,即實時性的要求非常高。針對這種快速信號處理的要求及FPGA器件的特點,本文採用的是一種基2固定幾何結構的FFT算法。採用的是Altera公司推出的最新器件Stratix來做硬體仿真。Stratix器件是一款採用高性能結構體系的PLD器件。它結合了強大內核性能,大存儲帶寬,數位訊號處理(DSP)功能,高速I/O性能和模塊化設計與一體的PLD。其內嵌的DSP模塊具有很高的乘法運算速度。在用VHDL編程時可以用MegaWizard的方法指定用DSP模塊生成乘法器,用這種乘法器來做蝶形,用多個蝶形來構成FFT運算級,通過循環即可實現FFT核心運算的並行化。用Altera公司的Quartus軟體做邏輯分析和波形分析。Quartus軟體具有很強的硬體仿真和邏輯分析功能,它可將用VHDL編寫的硬體描述綜合到FPGA中。

2.算法介紹

為了說明問題的方便,下面以基2,八點FFT為例加以說明。傳統的基2變幾何結構算法如下(圖一):箭頭上的數字代表旋轉因子 中的k。圖中輸入採用的是按碼位顛倒的順序排放的。輸出是自然順序。這種結構的特點是每個蝶形的輸出數據仍然放在原來的輸入的數據存儲單元內,這樣只需要2N個存儲單元(FFT中的數據是複數形式,每點需要兩個單元存儲)。其缺點是不同級的同一位置蝶形的輸入數據的尋址不固定,難以實現循環控制。用FPGA編程時難以並行實現,數據處理速度慢。當FFT的點數增加時更是如此。通過觀察傳統結構的FFT算法可以發現,如果將第一級中間的兩個蝶形交換,則可以得到如下結構(圖二):

對此結構進行進一步的變換,將第二級的輸出不送回原處而是將其存儲起來並按順序存放,則第三級中間的兩個蝶形跟著調換,並把輸入按順序排列,就變成了如下(圖三)所示的固定結構的FFT了。在蝶形變換的同時,其旋轉因子也跟著調換。


出數據的順序是不變的,因此每級幾何結構是固定的。用這種結構尋址方便,易於用FPGA編程,實現內部並行的FFT硬體結構,從而明顯加快FFT的運算速度。

3.FPGA硬體實現

FPGA器件的特點是可用硬體描述語言對其進行靈活編程。利用FPGA廠商提供的軟體可仿真硬體的功能。使硬體設計如同軟體設計一樣靈活方便。縮短了系統研發周期。利用JTAG接口可對其進行ISP(In System Programmable 在系統編程)提高了系統的靈活性。隨著晶片集成度的提高,單片FPGA內不僅擁有大量的邏輯單元而且還能集成RAM,ROM,I/O及DSP塊等。從而使SOC(System On_a_Chip 片上系統)成為現實。本文採用的是Altera公司的Stratix系列晶片的EP1s25。用Altera公司的QuartusII2.0軟體做硬體仿真和邏輯分析。並將輸出結果與Matlab仿真結果進行了比較。系統框圖如下(圖四):

代碼用VHDL硬體描述語言實現。本系統的結構特點是:1。為提高數據精度,系統全部用16位寬。用data_array,write_array和fly_array三個數組實現了內核的並行處理,可在10個時鐘周期內算完32點復FFT。時鐘周期為25納秒,因此32點FFT只需250納秒。2。實現了數據的流水輸入輸出。在計算第i組數據的同時,第i-1組的數據FFT結果正在串行輸出,第i+1組的數據則正在串行輸入。因為內核計算是並行的,速度快,所以可以有很高的串行輸入。本系統的A/D採樣頻率可達200MHz。仿真所用的信號是:

x(t)= (0.5*sin(2*n*pi/4.7)+0.5*sin(2*n*pi/16.3)+0.1*rand(1,32))*1000

輸入數據為32點複數,系統仿真波形如下(局部):

用FPGA輸出的FFT的結果(圖六)和用Matlab計算的FFT理論結果(圖七),其頻譜如下:

此信號是由兩個正弦波疊加一個隨機函數構成的。信噪比為14db。為切合工程實際,仿真信號採用的是實信號,其頻譜具有對稱性,因此圖中只取32點仿真結果的一半即16點便可。

4.結論

通過比較可以看出仿真結果與理論值吻合的很好。Altera公司採用傳統結構的FFT算法其32點的運算時間大於1.0us。用DSP做的32點FFT時間也要1.0us以上。本系統的最大優勢在於利用FPGA器件豐富的邏輯資源,內嵌的RAM,ROM塊及其靈活的可編程特性採用固定幾何結構的FFT算法使運算速度較傳統方法有了很大提高。當然付出的代價是用這種並行的結構需求的硬體資源很多。隨著晶片集成度的不斷提高,用這種並行結構實現的FFT運算其優越性將越來越明顯。而且用這種結構實現的FFT很容易擴展。只需要增加蝶形的個數和循環次數即可。詳細說明見 VHDL源程序。


相關焦點

  • 用FPGA實現FFT算法(圖)
    當n較大時,因計算量太大,直接用dft算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(fast fourier transformation,簡稱fft)使dft運算效率提高1~2個數量級。其原因是當n較大時,對dft進行了基4和基2分解運算。fft算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的fft仍然是很困難。
  • 用FPGA實現FFT算法
    當N較大時,因計算量太大,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(Fast Fourier Transformation,簡稱FFT)使DFT運算效率提高1~2個數量級。其原因是當N較大時,對DFT進行了基4和基2分解運算。FFT算法除了必需的數據存儲器ram和旋轉因子rom外,仍需較複雜的運算和控制電路單元,即使現在,實現長點數的FFT仍然是很困難。
  • 基於FPGA IP核的FFT實現
    0 引 言 數位訊號處理領域中FFT算法有著廣泛的應用。目前現有的文獻大多致力於研究利用FFT算法做有關信號處理、參數估計、F+FT蝶形運算單元與地址單元設計、不同算法的FFT實現以及FFT模型優化等方面。
  • 基於改進的CORDIC算法的FFT復乘及其FPGA實現
    在FFT運算中,核心操作是蝶形運算,而蝶形運算的主要操作是向量旋轉,實現向量旋轉可用複數乘法運算來實現,但複數乘耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現向量旋轉,具有使用資源少、硬體規模小等優勢。因此在FFT蝶形運算中用其代替傳統FFT運算中的複數乘法器,可以獲得更好的性能。
  • 利用FPGA實現的FFT變換設計
    快速傅立葉變換(FFT)算法的提出,使得數位訊號處理的運算時間上面縮短了好幾個數量級。因此對FFT算法及其實現方法的研究具有很強的理論和現實意義。本文引用地址:http://www.eepw.com.cn/article/266000.htm  1 FFT算法及其實現方法  現場可編程門陣列FPGA是一種可編程使用的信號處理器件,其運算速度高,內置高速乘法器可實現複雜累加乘法運算;同時其存儲量大,無需外接存儲器就可實現大量數據運算;而且算法實現簡單,通過VHDL程式語言可輕鬆實現功能開發
  • 基於FPGA的FFT算法硬體實現
    基於FPGA的FFT算法硬體實現
  • 基於FPGA的高速流水線FFT算法實現
    FFT(快速傅立葉變換)算法是作為DFT的快速算法提出,它將長序列的DFT分解為短序列的DFT,大大減少了運算量,使得DFT算法在頻譜分析、濾波器設計等領域得到了廣泛的應用。  FPGA(現場可編程門陣列)是一種具有大規模可編程門陣列的器件,不僅具有專用集成電路(ASIC)快速的特點,更具有很好的系統實現的靈活性。FPGA可通過開發工具實現在線編程。
  • 基於FPGA高精度浮點運算器的FFT設計與仿真
    摘要 基於IEEE浮點表示格式及FFT算法,提出一種基2FFT的FPGA方法,完成了基於FPGA高精度浮點運算器的FFT的設計。利用VHDL語言描述了蝶形運算過程及地址產生單元,其仿真波形基本能正確的表示輸出結果。
  • 基於FPGA流水線結構並行FFT的設計與實現
    FFT算法是作為DFT快速算法提出的,它將長序列的DFT分解為短序列的DFT,大大減少了運算量。FFT的FPGA實現同時具有軟體編程的靈活性和ASIC電路的快速性等優點,成為快速實時實現FFT的一種重要手段。文章意在設計一種高速率高吞吐率的FFT處理器,以滿足實時處理要求。
  • 基於MSP430系列微控制器的FFT算法實現
    離散時間採樣的快速傅立葉變換FFT(fast Fouriertrans form)算法是目前最主要的諧波檢測和分析方法。FFT算法的實現可以採用專用晶片37—40、DSP晶片6—1141—44、FPGA晶片193— 207以及微控制器等。隨著集成電路製造技術和數字計算機技術的進步,微控制器晶片的功能和所能提供的邏輯資源越來越多。
  • 基於Cyclone II FPGA開發平臺實現語音識別算法程序的設計
    本系統採用了Altera公司的Cyclone II FPGA開發平臺和相應的開發工具Quartus II進行系統硬體部分的開發;利用Nios II IDE實現了語音識別算法的編譯、連結、調試和運行;同時還應用了Altera公司獨具特色的C2H加速工具,實現了語音算法程序的硬體加速,使系統性能得到了明顯的提升。
  • 基於高速定點FFT算法的FPGA設計方案
    針對高速實時信號處理的要求,軟體實現方法顯然滿足不了其需要。近年來現場可編程門陣列(FPGA)以其高性能、高靈活性、友好的開發環境、在線可編程等特點,使得基於FPGA的設計可以滿足實時數位訊號處理的要求,在市場競爭中具有很大的優勢。 在FFT算法中,數據的寬度通常都是固定的寬度。然而,在FFT的運算過程中,特別是乘法運算中,運算的結果將不可避免地帶來誤差。
  • 基於DSP和FPGA的機器人聲控系統設計與實現
    2 系統硬體總體設計 系統的硬體功能是實現語音指令的採集和步進電機的驅動控制,為系統軟體提供開發和調試平臺。如圖1所示。 系統硬體分為語音信號的採集和播放,基於dsp的語音識別,fpga動作指令控制、步進電機及其驅動、dsp外接快閃記憶體晶片,jtag口仿真調試和鍵盤控制幾個部分。
  • 基於FPGA的結構光圖像中心線提取
    實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。實驗表明採用FPGA 實現圖像處理的專用算法能滿足圖像數據進行實時準確提取的要求。所以本文研究了在FPGA上用硬體描述語言實現圖像的中心線提取算法,採用了極值法、閾值法和重心法相結合的中心線提取方法。通過功能模塊的硬體化,以便高速提取結構光中心線。結果表明,實驗系統達到了基於視頻速度的應用要求。1 系統硬體設計  圖1為光條中心線提取系統的硬體設計框圖。
  • 如何在FPGA中實現狀態機
    FPGA常常用於執行基於序列和控制的行動,比如實現一個簡單的通信協議。對於設計人員來說,滿足這些行動和序列要求的最佳方法則是使用狀態機。狀 態機是在數量有限的狀態之間進行轉換的邏輯結構。一個狀態機在某個特定的時間點只處於一種狀態。
  • 通俗易懂的講解FFT的讓你快速了解FFT
    當然這都是以前的事情了,經過了系統的學習+2個星期的研究,自製了一個FFT的算法,不敢說速度上的優勢,但是個人認為是一種通俗易懂的實現方法。經過實際的VC++模擬實驗、和STM32跑的也很成功。 首先,要會FFT,就必須要對DFT有所了解,因為兩者之間本質上是一樣的。
  • matlab下實現FFT信號分析
    利用matlab做頻譜分析前我們需要了解分析過程中的一些基礎知識,matlab中的 fft 函數用法、fftshift 函數的用法函數 1  fft :作用:快速傅立葉變換。語法:Y = fft(X)Y = fft(X,n)Y = fft(X,n,dim)語法:Y = fft(X) 用快速傅立葉變換 (FFT) 算法計算 X 的離散傅立葉變換 (DFT)。
  • 一種近距雷達目標檢測信號處理的FPGA實現
    基於線性逼近的近似求模算法適合近距雷達這種實時性要求極高、運算精度要求適中的應用場合。由於雷達探測前端遭遇的雜波分布情況比較複雜,雜波幹擾的強度相差很大,如果採用固定的檢測門限,幹擾電平增大幾分貝時,將大量地增加虛警,因而要求信號處理能夠採用恆虛警(CFAR)目標檢測技術。
  • 基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解
    基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解 工程師青青 發表於 2018-07-16 18:22:00 基於FFT算法的電力系統諧波檢測裝置
  • 基於DSP的FFT算法實現
    基於DSP的FFT算法實現1、FFT的原理快速傅氏變換(FFT)是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、