Szybka transforata Fouriera Wyznaczenie ciągu (Y 0, Y 1,, Y 1 ) przy użyciu DFT wyaga wykonania: nożenia zespolonego ( 1) razy, dodawania zespolonego ( 1) razy, przy założeniu, że wartości ω j są już dane ajczęściej przyjowane wartości są rzędu 1000, co daje około iliona operacji każdego rodzaju aturalny stało się więc poszukiwanie sposobów wyznaczania DFT, które pozwoliłyby na obniżenie kosztu tej etody Algoryt taki został opisany w 1965 roku przez dwóch ateatyków aerykańskich J W Cooleya i J W Tukeya i nosi nazwę szybkiej transforaty Fouriera (FFT) Algoryt ten wykorzystuje specjalną postać acierzy przekształcenia F, której eleentai są pierwiastki z jedynki Koszt FFT jest rzędu log ale czyli iech =, Y n = 1 = 1 1 ω nk Y n = 1 1 Zauważy, że i podobnie P +n = 1 y k ω nk = 1 y k ω nk + ω n 1 ( y k ω nk + y k+1 ω n(k+1) ) = y k+1 ω nk, = ω nk = e iπ 1 ( nk) ( = e iπ ) 1 nk = ω nk, y k ω nk + ω n 1 y k ω (+n)k y k+1 ω nk = 1 I n+ = I n = 1 y k ω nk ( Pn + ω n I n ) = P n oraz ω (+n) = e iπ 1 (+n) = ω n e iπ = ω n Równości te prowadzą do algorytu: 1
Krok 1 Krok Krok 3 Obliczyć P k i ω k I k Utworzyć Y k = 1 (P k + ω k I k ) Wyznaczyć Y k+ = 1 (P k ω k I k ) Kroki te należy wykonać dla k = 0, 1,, 1 P k i I k są dodatkowo dwoa niezależnyi DFT rzędu = : F F :(y 0, y,, y ) (P 0, P 1,, P 1 ), :(y 1, y 3,, y 1 ) (I 0, I 1,, I 1 ) Przy założeniu, że jest parzyste, ożna więc algoryt powtórzyć Jeśli = p, to iterujey ten proces tak długo, aż dojdziey do DFT rzędu Ma ona postać: Przykład: = 8 Y 0 = y 0 + y 1, Y 1 = y 0 y 1 1 (y 0, y 1,, y 7 ) dzieliy na dwa ciągi długości 4: (y 0, y, y 4, y 6 ), (y 1, y 3, y 5, y 7 ) Ciągi te dzieliy na ciągi długości : (y 0, y 4 ), (y, y 6 ), (y 1, y 5 ), (y 3, y 7 ) 3 Obliczay dla każdego z tych ciągów P 0 i I 0 oraz wyznaczay (Y 0, Y 1 ) 4 Przy użyciu foruł Y k = 1 (P k + ω k I k ) Y k+ = 1 (P k ω k I k ) przechodziy od wektora długości do wektora długości
Dla = p ogólny koszt tego algorytu to 1 (log ) + 1 dodawań i log nożeń Dla = 104 daje to na koszt 50 razy niejszy od kosztu DFT Progra: Procedure FFT(n,w,y,Y); if n=1 then Y[0]:=y[0] else :=n div ; for k:=0 to -1 do b[k]:=y[*k]; c[k]:=y[*k+1] end; w:=w*w; FFT(,w,b,B); FFT(,w,c,C); wk:=1; for k:=0 to -1 do X:=B[k]; T:=wk*C[k]; 3
end end end Y[k]:=(X+T)/; Y[k+]:=(X-T)/; wk:=wk*w Zastosowania FFT do obliczeń nuerycznych Przykład 1: Splot cykliczny 1 Ciągi o wartościach zespolonych (x n ) n Z, (h q ) q Z - ciągi o wartościach zespolonych, okresowe o okresie Splot cykliczny tych ciągów zdefiniowany jest wzore y n = 1 q=0 h q x n q = 1 q=0 h n q x q Jest to ciąg okresowy o okresie Przy ustalony (h q ) przekształcenie zadane powyższy wzore jest liniowy przekształcenie C w siebie: X Y = HX, X = (x 0, x 1,, x 1 ) T, Y = (y 0, y 1,, y 1 ) T, h 0 h 1 h h 1 h 1 h 0 h 1 h H = h h 1 h 0 h 0 h 1 h h 3 h 0 Macierz tą nazyway acierzą cykliczną Wyznaczenie splotu cyklicznego bezpośrednio z definicji wyaga wykonania: nożenia zespolonego - razy, dodawania zespolonego - ( 1) razy Możey jednak rozważać DFT (X k ), (H k ) i (Y k ) odpowiednio ciągów (x n ), (h n ) i (y n ) Równanie zadające splot będzie iało wówczas postać Y k = H k X k, k = 0, 1,,, 1 4
Jeśli założyy, że = p, to wykonujey teraz następujące kroki: Kolejne kroki Koszt 1 Wyznaczay transforaty [(p ); p] F : (x n ) (X k ) F : (h n ) (H k ) Obliczay iloczyn [; 0] 3 Y k = H k X k, k = 0, 1,, 1 Wyznaczay transforatę odwrotną [ (p ); p] F 1 : (Y k ) (y n ) Koszt całkowity to nożenie zespolone dodawanie zespolone (3 log 4) razy, 3 log razy Dla = 64 daje to koszt [448; 115], zaiast [4096, 403] Ciągi o wartościach rzeczywistych W ty przypadku krok 1 oże być zastąpiony wyznaczenie pojedynczej transforaty ziennych zespolonych zaiast dwóch transforat ziennych rzeczywistych W kroku 3 oblicza się transforatę odwrotną rzędu ciągu, który spełnia warunek Y k = Y k, ożey zastąpić to obliczanie transforaty rzędu Całkowity koszt wynosił będzie [ 4 (3 log 5); (3 log 1) ] operacji zespolonych, czyli [ (3 log 5); (9 log 7) ] operacji rzeczywistych Przy = 64 zniejsza to liczbę wykonywanych operacji z [16 384; 16 56] do [83, 1 504] Przykład : Splot niecykliczny iech (x n ) n Z, (h n ) n Z będą dwoa sygnałai nieokresowyi o zwartych nośnikach W szczególności niech x n = 0 jeśli n < 0 lub n M, h n = 0 jeśli n < 0 lub n Q (Q M) Chcey wyznaczyć y n = Q 1 q=0 h q x n q 5
y n jest równe 0, jeśli n < 0 lub n M + Q 1 iech będzie najniejszą potęga liczby taką, że M + Q 1 Tworząc z oryginalnego ciągu ciąg okresowy o okresie, wracay do probleu wyznaczenia splotu cyklicznego z użycie FFT Koszt takiego postępowania oże się jednak okazać wyższy niż koszt bezpośredniego rachunku w przypadkach, gdy długości tych dwóch sygnałów różnią się znacznie, np gdy ciąg (x n ) jest praktycznie nieskończony, a nośnik filtru (h n ) relatywnie ały Są jednak etody pozwalające obniżyć ten koszt, rozważa się w nich ciąg (x n ) podzielony na niejsze części 6