Brza furijeova transformacija

Brza Furijeova transformacija (engl. Fast Fourier transformation; često se označava kao FFT) je algoritam za „brzo“ izračunavanje vrednosti diskretne Furijeove transformacije. Ubrzanje u odnosu na uobičajen postupak izračunavanja diskretne Furijeove transformacije postiže se izbegavanjem ponovnog izračunavanja izraza koji se međusobno negiraju. Algoritam se pripisuje Džejmsu V. Kuliju (James W. Cooley) i Džonu V. Tukiju (John W. Tukey) koji su ga objavili 1965. godine. Međutim, Karl Fridrih Gaus ga je razvio već 1805. da bi izračunao putanju asteroida Palas i Juno. Pritom su mnoge verzije razvijene i pre Kulijeve i Tukijeve varijante. Posle su se pojavila mnoga poboljšanja i varijacije.

Za brzu Furijeovu transformaciju postoji i algoritam u suprotnom smeru - inverzna brza Furijeova transformacija.

Neformalan opis Kuli-Tuki algoritma

Kuli-Tuki algoritam se bazira na ideji podeli-pa-vladaj (divide-and-conquer, eng.). Preduslov za njegovo izvršavanje je da broj tačaka (tačke izmerene za neki signal, na primer) na kojima se vrši transformacija bude stepen dvojke. Kako često možemo sami da izaberemo koliko tačaka hoćemo da uzmemo, ovo i ne predstavlja veliku prepreku.

DFT izračunavamo tako što naše tačke (vektor) prvo podelimo na dva vektora, jedan koji odgovara komponentama izvornog vektora sa parnim indeksima, a drugi sa neparnim. Onda izračunamo DFT oba vektora i spojimo rezultate. Pritom koristimo osobine jediničnog korena Furijeove matrice. Posle ponavljamo rekurzivno postupak. Time možemo da DFT na kraju izračunamo prema složenosti O ( log ( n ) ) {\displaystyle O(\log(n))} u vremenu.

Formalan opis Kuli-Tuki algoritma

Prisetimo se definicije diskretne Furijeove transformacije:

c ^ k = j = 0 N 1 e 2 π i j k N c j {\displaystyle {\hat {c}}_{k}=\sum _{j=0}^{N-1}e^{-2\pi \mathrm {i} \cdot {\frac {jk}{N}}}\cdot c_{j}} za k = 0 , , N 1 {\displaystyle k=0,\dots ,N-1}

gde je c = ( c 0 , , c N 1 ) {\displaystyle c=(c_{0},\dots ,c_{N-1})} vektor koji želimo da transformišemo, a c ^ {\displaystyle {\hat {c}}} taj vektor Furije transformisan.

Definišimo N = N = N 2 {\displaystyle N'=N''={\frac {N}{2}}} .

Potom definišemo vektor sa parnim indeksima:

c 0 = c 0 , c 1 = c 2 , , c N 1 = c N 2 {\displaystyle c'_{0}=c_{0},c'_{1}=c_{2},\dots ,c'_{N'-1}=c_{N-2}}

i označimo njegovu DFT kao:

c ^ 0 , c ^ 1 , , c ^ N 1 {\displaystyle {\hat {c}}'_{0},{\hat {c}}'_{1},\dots ,{\hat {c}}'_{N'-1}}

te vektor sa neparnim indeksima:

c 0 = c 1 , c 2 = c 3 , , c N 1 = c N 1 {\displaystyle c''_{0}=c_{1},c''_{2}=c_{3},\dots ,c''_{N''-1}=c_{N-1}}

i njegovu DFT:

c ^ 0 , c ^ 1 , , c ^ N 1 {\displaystyle {\hat {c}}''_{0},{\hat {c}}''_{1},\dots ,{\hat {c}}''_{N''-1}}

Sledi spajanje:

c ^ k = j = 0 N 1 e 2 π i j k N c j                                   = j = 0 N 1 e 2 π i ( 2 j ) k N c 2 j + j = 0 N 2 1 e 2 π i ( 2 j + 1 ) k N c 2 j + 1 = j = 0 N 1 e 2 π i j k N c j + j = 0 N 1 e 2 π i j k N c j = { c ^ k + e 2 π i k N c ^ k kada  k < n c ^ k N e 2 π i k N N c ^ k N kada  k n {\displaystyle {\begin{matrix}{\hat {c}}_{k}&=&\sum _{j=0}^{N-1}e^{-2\pi \mathrm {i} \cdot {\frac {jk}{N}}}\cdot c_{j}\qquad \ \ \qquad \ \ \ \ \qquad \ \ \ \ \qquad \ \ \ \ \qquad \ \ \ \\\\&=&\sum _{j=0}^{N-1}e^{-2\pi \mathrm {i} {\frac {(2j)k}{N}}}\cdot c_{2j}+\sum _{j=0}^{{\frac {N}{2}}-1}e^{-2\pi \mathrm {i} {\frac {(2j+1)k}{N}}}\cdot c_{2j+1}\\\\&=&\sum _{j=0}^{N'-1}e^{-2\pi \mathrm {i} \cdot {\frac {jk}{N'}}}\cdot c'_{j}+\sum _{j=0}^{N''-1}e^{-2\pi \mathrm {i} \cdot {\frac {jk}{N''}}}\cdot c''_{j}\\\\&=&{\begin{cases}{\hat {c}}'_{k}+e^{-2\pi \mathrm {i} {\frac {k}{N}}}\cdot {\hat {c}}''_{k}&{\mbox{kada }}k<n'\\{\hat {c}}'_{k-N'}-e^{-2\pi \mathrm {i} {\frac {k-N''}{N}}}\cdot {\hat {c}}''_{k-N''}&{\mbox{kada }}k\geq n'\end{cases}}\end{matrix}}}

Napomena: N = N = N 2 {\displaystyle N'=N''={\frac {N}{2}}} , ali se radi lakšeg razumevanja navodi različito!

Često smo u praksi zainteresovani za konkretne frekvencije. Uvodimo notaciju:

ω n := 2 π n N T , n = 1 K , . . . , N K {\displaystyle \omega _{n}:=2\pi {\frac {n}{NT}},n=1-K,...,N-K} , K {\displaystyle K} je negde u blizini N 2 {\displaystyle {\frac {N}{2}}} , a T {\displaystyle T} perioda našeg merenja.

Onda je brza furijeova transformacija za određenu frekvenciju:

c ^ ( ω k ) = { c ^ ( ω k ) + e i ω k T c ^ ( ω k ) kada  k < 0 c ^ ( ω k ) e i ω k ( 1 N T 2 ) c ^ ( ω k ) kada  k 0 {\displaystyle {\hat {c}}(\omega _{k})={\begin{cases}{\hat {c}}'(\omega _{k})+e^{-\mathrm {i} \omega _{k}T}\cdot {\hat {c}}''(\omega _{k})&{\mbox{kada }}k<0\\{\hat {c}}'(\omega _{-k})-e^{-\mathrm {i} \omega _{k}(1-{\frac {NT}{2}})}\cdot {\hat {c}}''(\omega _{-k})&{\mbox{kada }}k\geq 0\end{cases}}}

Literatura

  • N. Brenner, C. Rader (1976). „A New Principle for Fast Fourier Transformation”. IEEE Acoustics, Speech & Signal Processing 24 (3): 264-266. DOI:10.1109/TASSP.1976.1162805. 
  • Cooley James W., John W. Tukey (1965). „An algorithm for the machine calculation of complex Fourier series”. Math. Comput. 19 (90): 297-301. DOI:10.1090/S0025-5718-1965-0178586-1. 
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, 2001. Introduction to Algorithms, 2nd. ed. MIT Press and McGraw-Hill. ISBN 978-0-262-03293-3. Especially chapter 30, "Polynomials and the FFT."
  • Pierre Duhamel (1990). „Algorithms meeting the lower bounds on the multiplicative complexity of length- 2 n {\displaystyle 2^{n}} DFTs and their connection with practical algorithms”. IEEE Trans. Acoust. Speech. Sig. Proc. 38 (9): 1504-151. DOI:10.1109/29.60070. 
  • P. Duhamel and M. Vetterli, 1990, Fast Fourier transforms: a tutorial review and a state of the art, Signal Processing 19: 259–299.
  • A. Edelman, P. McCorquodale, and S. Toledo, 1999, The Future Fast Fourier Transform?, SIAM J. Sci. Computing 20: 1094–1114.
  • D. F. Elliott, & K. R. Rao, 1982, Fast transforms: Algorithms, analyses, applications. New York: Academic Press.
  • Funda Ergün, 1995, Testing multivariate linear functions: Overcoming the generator bottleneck, Proc. 27th ACM Symposium on the Theory of Computing: 407–416.
  • M. Frigo and S. G. Johnson, 2005, "The Design and Implementation of FFTW3," Proceedings of the IEEE 93: 216–231.
  • Carl Friedrich Gauss, 1866. "Nachlass: Theoria interpolationis methodo nova tractata," Werke band 3, 265–327. Göttingen: Königliche Gesellschaft der Wissenschaften.
  • W. M. Gentleman and G. Sande, 1966, "Fast Fourier transforms—for fun and profit," Proc. AFIPS 29: 563–578. DOI:10.1145/1464291.1464352
  • H. Guo and C. S. Burrus, 1996, Fast approximate Fourier transform via wavelets transform, Proc. SPIE Intl. Soc. Opt. Eng. 2825: 250–259.
  • H. Guo, G. A. Sitton, C. S. Burrus, 1994, The Quick Discrete Fourier Transform, Proc. IEEE Conf. Acoust. Speech and Sig. Processing (ICASSP) 3: 445–448.
  • Steve Haynal and Heidi Haynal, "Generating and Searching Families of FFT Algorithms Arhivirano 2012-04-26 na Wayback Machine-u", Journal on Satisfiability, Boolean Modeling and Computation vol. 7, pp. 145-187 (2011).
  • Heideman M. T., D. H. Johnson, C. S. Burrus (1984). „Gauss and the history of the fast Fourier transform”. IEEE ASSP Magazine 1 (4): 14-21. DOI:10.1109/MASSP.1984.1162257. 
  • Michael T. Heideman, C. Sidney Burrus (1986). „On the number of multiplications necessary to compute a length- 2 n {\displaystyle 2^{n}} DFT”. IEEE Trans. Acoust. Speech. Sig. Proc. 34 (1): 91-95. DOI:10.1109/TASSP.1986.1164785. 
  • S. G. Johnson and M. Frigo, 2007. "A modified split-radix FFT with fewer arithmetic operations," IEEE Trans. Signal Processing 55 (1): 111–119.
  • T. Lundy and J. Van Buskirk, 2007. "A new matrix approach to real FFTs and convolutions of length 2k," Computing 80 (1): 23-45.
  • Kent, Ray D. and Read, Charles (2002). Acoustic Analysis of Speech. ISBN 978-0-7693-0112-9. Cites Strang, G. (1994)/May–June). Wavelets. American Scientist, 82, 250-255.
  • Jacques Morgenstern (1973). „Note on a lower bound of the linear complexity of the fast Fourier transform”. J. ACM 20 (2): 305-306. DOI:10.1145/321752.321761. 
  • M. J. Mohlenkamp (1999). „A fast transform for spherical harmonics”. J. Fourier Anal. Appl. 5 (2-3): 159-184. DOI:10.1007/BF01261607. Arhivirano iz originala na datum 2007-02-06. Pristupljeno 2014-06-15. 
  • H. J.Nussbaumer (1977). „Digital filtering using polynomial transforms”. Electronics Lett. 13 (13): 386-387. DOI:10.1049/el:19770280. 
  • V. Pan, 1986, The trade-off between the additive complexity and the asyncronicity of linear and bilinear algorithms, Information Proc. Lett. 22: 11-14.
  • Christos H. Papadimitriou, 1979, Optimality of the fast Fourier transform, J. ACM 26: 95-102.
  • D. Potts, G. Steidl, and M. Tasche, 2001. "Fast Fourier transforms for nonequispaced data: A tutorial", in: J.J. Benedetto and P. Ferreira (Eds.), Modern Sampling Theory: Mathematics and Applications (Birkhauser).
  • Press WH, Teukolsky SA, Vetterling WT, Flannery BP (2007). „Chapter 12. Fast Fourier Transform”. Numerical Recipes: The Art of Scientific Computing (3rd izd.). New York: Cambridge University Press. ISBN 978-0-521-88068-8. Arhivirano iz originala na datum 2011-08-11. Pristupljeno 2014-06-15. 
  • Vladimir Rokhlin, Mark Tygert (2006). „Fast algorithms for spherical harmonic expansions”. SIAM J. Sci. Computing 27 (6): 1903-1928. DOI:10.1137/050623073. 
  • James C. Schatzman, 1996, Accuracy of the discrete Fourier transform and the fast Fourier transform, SIAM J. Sci. Comput. 17: 1150–1166.
  • O. V. Shentov, S. K. Mitra, U. Heute, A. N. Hossen (1995). „Subband DFT. I. Definition, interpretations and extensions”. Signal Processing 41 (3): 261-277. DOI:10.1016/0165-1684(94)00103-7. 
  • H. V. Sorensen, D. L. Jones, M. T. Heideman, C. S. Burrus (1987). „Real-valued fast Fourier transform algorithms”. IEEE Trans. Acoust. Speech Sig. Processing 35 (35): 849-863. DOI:10.1109/TASSP.1987.1165220. 
  • Peter D. Welch (1969). „A fixed-point fast Fourier transform error analysis”. IEEE Trans. Audio Electroacoustics 17 (2): 151-157. DOI:10.1109/TAU.1969.1162035. 
  • S. Winograd (1978). „On computing the discrete Fourier transform”. Math. Computation 32 (141): 175-199. DOI:10.1090/S0025-5718-1978-0468306-4. JSTOR 2006266.