Cooley-Tukey-algoritmen är den vanligaste algoritmen för att beräkna Fast Fourier-transformen . Algoritmen gör det möjligt att uttrycka en diskret Fouriertransform med längd lika med ett godtyckligt sammansatt tal , genom ett visst antal transformationer av mindre längd med hjälp av rekursion , vilket reducerar komplexiteten i beräkningarna till jämna . Uppkallad efter J. Cooley och J. Tukey .
För ett godtyckligt naturligt tal, den diskreta Fouriertransformen av en komplex vektor , där , är en komplex vektor , där , vars komponenter ges av formeln
var .
För att konstruera algoritmen antas det att för vissa naturliga tal och och följande substitution av index görs [1] :
vilket resulterar i
Därefter omvandlas vektorerna för in- och utdata till tvådimensionella arrayer och , givet av likheterna
Det är värt att notera att komponenterna är beställda annorlunda än .
Nästa, låt och . Det är uppenbart att . Sedan, när det gäller tvådimensionella variabler, transformeras formeln till formen [2]
Att beräkna längdtransformationen kommer alltså ner på att göra följande:
Dessutom, istället för komplexa additioner och komplexa multiplikationer av den ursprungliga formeln, innehåller det slutliga schemat inte mer än komplexa additioner och komplexa multiplikationer [2] .
Var och en av längdtransformationerna eller kan beräknas med hjälp av olika snabba algoritmer, i synnerhet igen enligt ovanstående schema. I detta fall kan längdtransformationen representeras i en form som kräver komplexa multiplikationer [3] .
I många applikationer är längden på transformationen en potens av två: . Sedan, i ovanstående schema, alternativ eller är möjliga . I det här fallet talar man om Cooley-Tukey-algoritmen i bas två [3] ( radix-2 ) .
Om , då talar man om Cooley-Tukey-algoritmen med tidsförtunning [3] . I detta fall omvandlas ekvationerna till formen
Om vi introducerar notationen och , då kan ekvationerna skrivas om som
En sådan operation brukar kallas en "fjäril" .
Denna procedur kan tillämpas rekursivt på ingångsvektorn . Vid varje steg delas -punktstransformationen upp i tvåpunktstransformationer, som i sin tur delas upp på samma sätt tills transformationens längd blir lika med en. Sedan finns det ett omvänt drag, vid varje steg fördubblas längden på resultaten av transformationerna med hjälp av "fjärilar". Med denna implementering utförs komplexa multiplikationer och komplexa additioner.
Denna process är ett exempel på tillämpningen av dela och erövra tekniken . I många implementeringar undviks dock direkt rekursion och istället korsas beräkningsträdet i bredd-först sökordning .
Om , då talar man om Cooley-Tukey-algoritmen med frekvensdecimering [4] . I detta fall omvandlas ekvationerna till formen
Låta
släpp det
Med hjälp av formlerna för frekvensdecimeringsalgoritmen är det lätt att verifiera att följande relation gäller:
Denna bas-två-modifiering av algoritmen kallas Rader-Brenner-algoritmen . Det gör det möjligt att minska beräkningskomplexiteten på grund av enklare multiplikationer med rent imaginära konstanter [5] . Liknande formler kan erhållas med hjälp av reella konstanter [6] .
Algoritmen och dess rekursiva implementering uppfanns omkring 1805 av K. Gauss när han interpolerade banorna för asteroiderna Pallas och Juno [7] . Då blev upptäckten inte utbredd och publicerades först efter vetenskapsmannens död på nytt latin . Gauss-resultatet återupptäcktes flera gånger i olika former under de kommande 150 åren och blev populärt efter publiceringen 1965 av en artikel av J. Cooleyfrån IBM och J. Tukey från Princeton , där algoritmen återigen upptäcktes, och en bekväm implementering för en dator beskrevs också [8] .
Det faktum att Gauss var upptäckaren av algoritmen upptäcktes bara några år efter publiceringen av Cooley och Tukey. I sin artikel hänvisade de bara till I.J. Goods arbete, där Goode-Thomas-algoritmen beskrevs .
Att uttrycka Fouriertransformen av en längd i termer av två längdtransformer kallas ibland Danielsons lemma— Lanczos , eftersom den erhölls av dessa två författare 1942 [9] .