• 沒有找到結果。

快速傅利葉轉換(FFT)

4.2 重要功能區塊 (F UNCTIONAL BLOCKS )

4.2.2 快速傅利葉轉換(FFT)

± ± ±

± ± ±

± ± ±

± ± ±

± ± ±

± ± ±

圖 4-7 Pipeline CORDIC structure

4.2.2 快速傅利葉轉換(FFT)

FFT 基本介紹

快速傅利葉轉換的運算是根據離散傅利葉轉換(DFT)的數學而來,其利用離 散傅利葉轉換的複數乘法在複數平面上的對稱性質,將具有對稱性質的多個乘法 合併成一項,因此可以大大地減少數學運算量,在不變更原數學模型架構之下,

能獲得較有效率的運算。該方法是在 1965 由 Cooly and Tukey 所提出的,此即為 現在著名的快速傅利葉轉換(FFT)[11],其數學模型大致上可分為兩種不同的架 構,一種為時間點分組架構(Decimation In Time),而另外一種則是頻率點分組架 構(Decimation In Frequency)。本論文採用頻率點分組架構進行實現。DIF 架構 ([12])的推導如下 : 後做(N/2)點的 DFT。其示意圖如圖 4-8,再將第二級中(N/2)點 DFT,以相同的 原理進行分解,就可以獲如圖 4-9,著名的 DIF butterfly。由於此架構是利用在

複數平面0 與0 180 的對稱性,將乘法合併,因此運算可以由原先每一級 N 次複0 twiddle factor 就成為不主要的複數乘法運算(trivial multiplication),這也就是 radix-4 比 radix-2 運算更有效率的地方(約可減少運算量 25%)。

我們可由( 4-16)的 [2 ]

X r 與( 4-17)的 X

[2

r

+ ,分別以 r 代入1]

2s

2

s

+ 1

,得 到 radix-4 的式子如下所示 :

( / 4) 1 ( / 4) 1 而且仍可保持 Radix-2 的 butterfly 架構,其原理也很簡單,只是把一個 Radix-4 的運算,拆成兩級來做而已,Radix-2 的 PE(Processing Element)如下圖。 2

2k

演算法推得),將 3 個 radix-2 串接,具有 radix-2 簡單架構的優點及低複雜乘法 Memory-based FFT。下圖為 Radix-2 16-points pipeline FFT 的基本架構圖。

圖 4-13 16-points pipeline FFT

由上圖中,我們可以看到,當 FFT 運算進行穩定狀態後,每個暫存器的使 用率將為 100%,因此系統運作正好是一級接著一級,故可以達到較高的吞吐量,

而使用的記憶體大小為 N-1(N 代表 N 點 FFT),由於記憶體是屬於分散記憶體 (Distributed Memory),因為記憶體會分散在每個 butterfly 架構之上,較單一塊的 記憶體會占上較大的面積。而圖 4-14 為 memory-based FFT 架圖,一開始先由 x(n)將欲做 FFT 的訊號存到記憶體 X 上,經過 FFT CORE 一級的處理器後,再 回授到記憶體 X 上,有幾級的 FFT,就會繞幾次。最後一級經過 FFT Core 出來

之後,將資料存到記體 Y 上,做 bit-reverse 的動作之後將結果輸出至 X(k)。

圖 4-14 Memory-Based FFT 示意圖

在 11n 的系統中,20MHz 之下,64 點的 FFT 並不大,在 pipeline FFT 架構 中並不會占去太多的面積,而且其複雜度和控制方面,都比 Memory-Based FFT 簡單許多,而其管線的特性,除了讓 OFDM 在一長串連續資料做 FFT 時更有效 率,也讓乘法器及暫存器的使用率達到 100%,本篇論文中,主要以 pipeline FFT 來做為硬體上的架構。

之前我們提過,Radix-8 在運算複雜度方面會比 Radix-2 簡單,因為其利用 對稱性,將更多重要乘法以不重要(trivial)乘法取代,計算量減少,也更有效率,

但在 FPGA 的實現上,則需考量扇入(fan-in)與扇出(fan-out)的問題,因此 radix-2 的架構反而比較好,因為其扇入,扇出數都很少,可適應 FPGA 上頻寬的限制。

整合上面的優點,即可構成 Radix-2 FFT。64 點 Radix-3 2 pipeline FFT 的架構3 如下圖 :

圖 4-15 64 點 Radix-2 pipeline FFT 3

其中的 BF2 架構也很簡單,可分為兩種 mode,一種為 Bypass mode,一種為 Normal mode,如下圖 4-16

圖 4-16 PE of BF2

其中 Bypass Mode 主要是讓資料直接通過,經過一段時間的暫存並回授之後,再 經由切換至 Normal Mode 中,與之後的資料做相加減。

在圖 4-15 中所示,我們只需在 TW1 的地方放上一個乘法器即可,其它的 地方都只是不重要乘法,由於在之前天線收上來之後,經過 A/D 的部分為 10 個 bits,故我們也讓 x(n)為 10 個 bits,每經過一級,訊號的動態範圍就會變大兩倍,

所以在每一級之後做 scale 或是 truncate 是必要的。X(k)輸出也是 10 個 bits,而 X(k)輸出並不是以 X(0),X(1)的依順序出來,而是 X(0),X(32),X(16)…等等,

bit-reversal 的方式輸出。為了讓輸出是依序的,我們需要兩個記憶體來將 X(0),

X(32),X(16)…對應到記憶體中存起來,再依序讀出來,其架構如下圖 4-17。

用兩個記憶體的主要目的,是當第一串 FFT 資料來時,由 RAM1 做 Bit-Reversal 的方式存入時,RAM2 則依序輸出,第二串 FFT 資料由 RAM2 做 Bit-Reversal 的方式存入,由 RAM1 依序輸出。

圖 4-17 Bit-Reversal output

一般來說,pipeline 的設計都是針對連續需要做 FFT 的區塊做設計最為容 易,控制訊號方面也很容易實現。但在 11n 當中,HT-data 並非連續的區塊做 FFT,

而是中間有著一定的間隔(即 CP=16),再加上之前的通道估計,也會用到 FFT,

使得時序上及控制訊號上的安排更加的困難,我們可以參考下圖 4-18

圖 4-18 FFT Block(虛線部分)

由上圖我們可以看到,執行 FFT 的區塊並不是連續的,而且其中帶有一點 不規則性(HT-HTF 的部分),這時我們需要一些計數器,來設法跳過不做 FFT 的 部分。如要避開這個不規則性,我們也可以把第一個 FFT Block 拿掉(如上圖 4-18 第一個虛線框框),因為這裡重覆的 HT-HTF 區塊主要是用來做頻率補償的。這 樣一來,就可以更加的簡化我們的設計了。

相關文件