數字信號處理專題(3)——FFT運算初探

1、前言html

  FFT運算是目前最經常使用的信號頻譜分析算法。在本科學習數字信號處理這門課時一直在想:學這些東西有啥用?公式推來推去的,有實用價值麼?到了研究生後期才知道,廣義上的數字信號處理無處不在:手機等各類通訊設備和WIFI的物理層信號處理、攝像頭內的ISP、音頻信號的去噪等。各類算法中,FFT是查看信號本質,也就是頻譜的重要手段。以前僅直接調用FFT/IFFT IP核,今天深刻探討下算法自己和實現方案。算法

2、FFT運算原理及結構網絡

  本文僅對FFT的核心思想、做用和算法結構進行介紹,FFT具體原理和公式推導詳見參考文獻。FFT是DFT的快速算法,旨在下降計算複雜度以減少處理延遲和佔用的軟硬件資源,核心思想是將大點數的DFT運算拆分紅多個小點數的DFT運算。所以FFT核心公式與DFT相同。
架構

   DFT運算把原始信號採樣點與不一樣的旋轉因子作乘累加運算,而旋轉因子通過歐拉公式展開後就是角度成倍數關係的正餘弦函數。如今DFT在幹什麼以及怎麼幹的一目瞭然:把一段原始信號採樣點與不一樣頻率的正餘弦信號作「相關運算」,從而找出信號的頻率份量。通俗點說就是經過查看信號與不一樣頻率值正餘弦信號的類似程度分析信號自己的頻率成分。工程應用時,瞭解到這一點就足夠了。函數

  有了上述理解,再來看FFT算法。公式推導部分只要知道它是根據旋轉因子的對稱性和週期性把大點數的DFT運算拆分紅多個小點數DFT運算就好了,真正要掌握的是推導事後的表達式以及算法結構。以時間抽取(DIT)的基2算法爲例,它是根據採樣點奇偶序號,不斷對N點DFT運算進行兩兩拆分直到兩點DFT運算爲止的快速算法。其中的蝶形運算表達式即爲這種拆分思想的精華:學習

  其中,k=0,1,...,N/2-1.X1(k)和X2(k)分別是信號x(n)的偶數序號採樣點x(2r)和基數序號採樣點x(2r+1)的DFT運算結果。經過上述公式,N點DFT運算拆分紅了兩個N/2點的DFT運算。信號流圖表達爲:spa

  咱們以8點FFT運算爲例,拆分過程以下。具體講解見參考文獻2.設計

  FFT運算點數 N=2^L。L則爲運算級數,每級有N/2個蝶形。若是是頻率抽取(DIF)的基2算法,總體結構和蝶形單元都會有區別。3d

 3、FFT運算的FPGA實現探討htm

   從X家FFT/IFFT IP Core的接口信號以及網絡上的資源能夠看出,爲了使接口與FFT運算點數無關,採用串行輸入-->並行計算-->並串轉換的頂層架構實現FFT功能。並行計算過程當中須要求取旋轉因子,常見的作法是使用CORDIC算法計算特定角度的正餘弦值。如8點FFT要計算0°、-45°、-90°和-135°的正餘弦值。正餘弦值應該能夠直接查表得到,但點數較多時會佔用大量的存儲資源,如點數爲1024,正餘弦值位寬爲16bit,則存儲容量=1024/2*2*16bit= 16Kbit。除了三角函數,運算過程當中還包括複數乘法、複數加減法,都是比較簡單的操做。後續本人會嘗試具體設計FFT運算的迭代和流水線硬件架構及對應的VerilogHDL代碼。

參考文獻:

[圖文]第4章快速傅里葉變換 - 百度文庫 https://wenku.baidu.com/view/3818bb913c1ec5da50e270df.html

數字信號處理--FFT與蝶形算法 - yu_jianchi - 博客園 https://www.cnblogs.com/luoqingyu/p/5930181.html

FFT算法8點12位硬件實現 (verilog) - 清風醉明月 slp_art - 博客園 https://www.cnblogs.com/sleepy/archive/2011/07/20/2112079.html

相關文章
相關標籤/搜索