• 沒有找到結果。

第五章   FFT 快速傅立葉轉換於管線型架構

5.2   FFT 快速傅立葉轉換

快速傅利葉轉換 (Fast Fouier Transform, FFT),早期的傅利葉轉換大都利用手算來 完成,因此傅利葉轉換標本個數都很小,儘管早在 1865 年 Gauss 就曾提出有關於如

0,1,2,...., 1

從數學原理證明利用N=4 的數學推導來加以說明 x[0]、 x[1]、 x[2]、x[3]是原始輸入

圖5.2.3 八個元素的快速傅氏轉換蝴蝶圖

對應圖5.2.4 的相位角度的換算可以將方程式(5.2.8)重新整理得到方程式(5.2.9)作

代入所有已知的參數然後將每個點的輸出重新表示:

實部:

X[0]= x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]

X[1] = x[0]-x[4]+0.707(x[1]-x[3]-x[5]+x[7])

X[2] = x[0]-x[2]+x[4]-x[6]

X[3] = x[0]-x[4]+0.707(-x[1]+x[3]+x[5]-x[7])

X[4] = x[0]-x[1]+x[2]-x[3]+x[4]-x[5]+x[6]-x[7]

X[5] = x[0]-x[4]+0.707(-x[1]+x[3]+x[5]-x[7])

X[6] = x[0]-x[2]+x[4]-x[6]

X[7] = x[0]-x[4]+0.707(x[1]-x[3]-x[5]+x[7])

虛部:

X[0] = 0

X[1] = x[6]-x[2]+0.707(-x[1]-x[3]+x[5]+x[7])

X[2] = -x[1]+x[3]-x[5]+x[7]

X[3] = x[2]-x[6]+0.707(-x[1]-x[3]+x[5]+x[7])

X[4] = 0

X[5] = x[6]-x[2]+0.707(x[1]+x[3]-x[5]-x[7])

X[6] = x[1]-x[3]+x[5]-x[7]

X[7] = x[2]-x[6]+0.707(x[1]+x[3]-x[5]-x[7])

經由這邊的數學推導,可證明與蝴蝶圖的輸出相同,且經由這些推導找到可行設計的架 構。在對於N=8 的快速傅立葉轉換因為取的點數較多所以可以更明顯的感受到提昇的速 度以及降低的演算複雜度。

由於離散傅立葉所做的計算量過於龐大,當處理大量的資料時,需要快速計算的演 算法。為了實現快速運算之目的,使用快速傅立葉轉換作為其基礎外,同時利用管線方 式建置其硬體架構[29]。

藉由Cooley-Tukey 算法建置 N-point 之 DFT。把 N-point 之 DFT 拆解成,兩項 -

5.3 64-point FFT 硬體建置

圖5.3.1 64-point FFT 架構圖   

針對本節建置64 點 FFT 之硬體架構,主要採用之方式及對於不同的硬件運用表格做歸

1.Radix-2 Single-path Delay Feedback (R2SDF) 2.Radix-2 Multi-path Delay Commutator (R2MDC) 3.Radix-4 Single-Path Delay Feedback (R4SDF) 4.Radix-4 Multi-Path Delay Commutator (R4MDC)

根據上節FFT 之敘述,撰寫 Radix-4 的 Butterfly 之運算分割結果如式 5.3.1 所示 x'[n] = [(x[n] + x[n+N/2])] +[(x[n+N/4] + x[n+3N/4])]

x'[n+N/2] = [(x[n] + x[n+N/2])] -[(x[n+N/4] + x[n+3N/4])]

x'[n+N/4] = [(x[n] - x[n+N/2])] -j * [(x[n+N/4] - x[n+3N/4])]

x'[n+3N/4] = [(x[n] - x[n+N/2])] +j * [(x[n+N/4] - x[n+3N/4])]

由上式可簡化為四種計算情形,分別為a + b、a - b、a + jb 及 a - jb 等,其後運用兩種複 數運算方式完成運算架構。圖5.3.2 與圖 5.3.3 分別為複數加法器與減法器[29]。

圖5.3.2 複數加法器

圖 5.3.3 複數減法器

以運用counter 迴圈的方式,控制 Pipeline Radix-4 的 butterfly 運算單元。第一級:

x(n2,n1,n0),由 Radix-4 轉換至 G(k0,n1,n0),旋轉因子為 。迴圈會因應其case 中,對應的設定值counter_64[5:4] =00,01,10,11,進而選取 Radix 的 4 個输入,如 表5.3.3 所示[32-33]。

表5.3.2 管線型 Radix-4 運算執行狀態

states ALU1_1 ALU1_2 ALU2_3 ALU2_4 in Reg1 Reg2 Reg3 out

00 X’(1)=a’(2)-j*a’(3)X’(3)=a’(2)-j*a’(3)0 0 x(0) a’(2) a’(3) X’(2)

01 0 0 0 0 x(1) x(0) X’(3) X’(1) X’(2)

10 a(0)=x(0)+x(2) 0 a(2)=x(0)-x(2) 0 x(2) x(0) x(1) X’(3) X’(1) 11 a(1)=x(1)+x(3) X(0)=a(0)+a(1) a(3)=x(1)-x(3) X(2)=a(0)-a(1) x(3) a(2) x(1) a(0) X’(3)

00’ a(2) a(3) X(2) X’(0)

當一級之結果運算完成,便立即將上一級的運算结果覆蓋,此方式可使Pipeline 操 作達到較佳之運算結果,使其運算效能達到最佳。

其複數相乘的運算過程,假定兩個複數運算結果A=a + jb、B =c + jd,可知一次複 數乘法需要四次實數乘法和二次實數加法,但若能簡化其乘法運算次數,便可降低運算 長度及硬體空間。

Y = A×B = (a+jb) × (c+jd) = (ac-bd) + j(ad-bd) = yreal + jyimage

複數乘法器採用有號數之BOOTH 格式,其位元長度為 10bit,主要運算部分為 [8:0](共 9 個 bit)做計算,最高有效位數,作為數值溢位保留位,而複數乘法器示意圖,

如圖5.3.4 所示。

  圖5.3.4 複數乘法器

旋轉因子 的部分,則是將實部與虛部,儲存於reg 中,其後利用

查表的方式實現向量運算旋轉之計算方式。根據前一節之敘述,可知旋轉因子具有週期 與對稱的特性,所以不論旋轉至哪一象限,只需透過實部虛部交替以及正負號的更換,

便可所求解。

經由複數加減法器與複數乘法器結合,便可建置64-point FFT 中的小模組 4-point FFT,如圖 5.3.5 所示。

圖5.3.5 單級 Radix-4 FFT 運算模組

4-point FFT 主要是執行 Butterfly 中 Radix-4 之運算,以及將計算結果 x′[n]、

x′[n+N/4]、 x′[n+N/2]、 x′[n+3N/4]與上述之對應旋轉因子 、 、 、 做 相乘的動作。其後,經由內部建置之迴圈計數,完成此一階層的計算,便會輸出數值至 下一階層的作運算,如此設計可使計算數值較為精確,也可達到運用Pineline 高速運算 之目的。

64-point FFT 之 top 層架構建置為五項輸入及三項輸出,其整體示意圖,如圖 5.3.6 所示[34]。

圖5.3.6 64-point FFT  

其輸出入功能如表5.3.2 所示。

表5.3.3 64-point FFT

相關文件