地塹
[拼音]:kuaisu Fuliye bianhuan
[英文]:fast Fourier transformation
簡稱FFT,是指進行“有限離散傅立葉變換”(簡稱DFT)的快速演算法。一維DFT是把N元陣列
A
(0),A
(1),…,A
(N-1)按線性關係式(1)
變為N元陣列x(0),x(1),…,x(N-1)的一種線性變換,其中記號W是一個復常數,滿足
=1,其值為
傳統演算法是直接計算(1),大約需要N2次運算(這裡所說的運算每一次包含一個複數乘法和一個複數加法)。1965年,美國人庫利和圖基提出的FFT演算法把運算次數縮減為Nlog2N。因此,FFT演算法比傳統演算法提高工效約為N/log2N倍。當N很大時,這是巨量的提高。例如,在影象處理問題中,一個影象分為10000×10000個點,因而對所進行的DFT來說,應有N=108,於是用FFT演算法提高工效約為1016/(108log2108)
3750000倍。如用每秒能作一千萬次運算的電子計算機進行計算,按FFT演算法,幾百秒即可完成,若按傳統演算法要幾十年才能算完。
演算法的基本思想
總的來說是利用復常數W 的性質把關係式(1)的各項重新組合為新的算式,並使用遞推的步驟,以縮減運算次數。以N=2n為例,設j1是j 除以
時的餘數,新的算式是
即先行計算兩個
元陣列Y(j1)和Z(j1),然後再用2n個乘法和2n個加法算出2n元陣列x(j)。類似地,可把
元陣列的計算化為兩個
元陣列的計算,等等,如此遞推,最後把計算M元陣列的運算次數記為T(M),按上述計算步驟有關係式:
,
·
,由此可得
。如果N不是2n的形式,而是有分解式
,則可建立運算次數不超過
的FFT演算法。
在數值計算和實際問題中的應用
上述演算法同樣可應用於逆DFT,即從N 元陣列x(0),x(1),…,x(N-1)按線性關係式
變換為陣列
A
(0),A
(1),…,A
(N-1)。FFT演算法在數值計算中的一個重要應用是計算卷積,即從N元陣列A
(0),A
(1),…,A
(N-1)及具有周期N的陣列B
(0),B
(1),…,B
(N-1)(B
(-1)=B
(N-1),B
(-2)=B
(N-2),…)按關係式計算N元陣列
C
(0),C
(1),…,C
(N-1)。採用如下步驟:首先把兩個陣列A
(k)和B
(k)用FFT演算法分別得陣列X(j)和Y(j),其次作陣列(只需N個乘法)Z(j)=X(j)·Y(j) (j=0,1,…,N-1),最後用FFT演算法把陣列Z(j)作逆DFT,得卷積
C
C
(1),…,C
(N-1)。上述演算法的運算次數約為3Nlog2N,而傳統演算法則是N 2。除用於計算卷積外,FFT演算法還可用作計算兩個多項式的乘積等等。FFT演算法在實際問題中已廣泛應用,在光譜、聲譜、地震譜分析、晶體結構分析、濾波、數字訊號處理、影象資訊處理、物探、天線、雷達、衛星攝影分析、全息圖,以及醫療衛生上的心電圖、腦電圖、X光相片強化等等方面,已大量應用,很有發展前途。
演算法本身的發展近況
近年來,FFT演算法本身不斷增添新的內容。在一維DFT的演算法方面有:“素因子”法、不要調換排列順序法、修剪法、N為素數的演算法、餘弦變換演算法、一維DFT的二維處理方法、基底3-FFT的新演算法、維諾格拉特演算法(這是DFT演算法的一個重要進展)以及雷德-布萊納演算法等;二維DFT的演算法除以一維FFT為基礎的演算法外,也建立了若干直接對二維陣列進行運算(分解和變換)的演算法。
快速數論變換
如上所述,計算卷積要做三次 FFT,這在N很大時的計算量仍然很大。此外,還存在由於舍入誤差而不能得到高精度的卷積以及要貯存三角函式以保證有關
的計算需要等缺點。以上缺點為70年代發展起來的快速數論變換演算法所克服。設M是大於 1的正整數,
表示從0到M-1的非負整數全體,使用同餘概念,即 α呏b(modM)表示兩整數α與b的差α-b是M的倍數。設α是
中任一數,N是使
呏1(modM)成立的最小正整數,稱 α 為
中的N 次本原單位根。
中的陣列
A
(0),A
(1),…,A
(N-1)按線性同餘關係式變為
中的陣列x(0),x(1),…,x(N-1),稱為數論變換。在一定的條件下,可以把FFT演算法平行地移植到
上以進行NTT,稱為快速數論變換。仿照上述利用FFT演算法計算卷積的步驟,同樣可用快速數論變換來計算卷積。它具有速度更快,沒有舍入誤差和不需要貯存三角函式或其他基礎函式等優點。但變換本身沒有物理意義。
1979年出現了把維諾格拉特演算法和數論變換相結合的計算DFT的新混合演算法,進一步縮減了乘法次數。
參考書目
遊兆永著:《線性代數與多項式的快速演算法》,上海科學技術出版社,上海,1980。
孫琦、鄭德勳、沈仲琦著:《快速數論變換》,科學出版社,北京,1980。