Sei sulla pagina 1di 8

TrasformatadiFourierveloce

DaWikipedia,l'enciclopedialibera.

Inmatematica,latrasformatadiFourierveloce,spessoabbreviataconFFT(dall'ingleseFastFourierTransform),unalgoritmoottimizzatoper
calcolarelatrasformatadiscretadiFourier(DFT)elasuainversa.
LaFFTutilizzatainunagrandevarietdiapplicazioni,dall'elaborazionedisegnalidigitaliallasoluzionediequazionidifferenzialiallederivate
parzialiaglialgoritmipermoltiplicarenumeriinteridigrandidimensionigraziealbassocostocomputazionale.

Indice
1Definizione
2AlgoritmodiCooleyTukey
3AltrialgoritmipercalcolarelaFFT
4AlgoritmiFFTspecializzatiperdatirealie/osimmetrici
5Accuratezzaeapprossimazioni
6Note
7Bibliografia
8Vocicorrelate
9Collegamentiesterni

Definizione
Sia

unanpladinumericomplessi.LaDFTdefinitadallaformula:

Calcolaredirettamentequestasommarichiedeunaquantitdioperazioniaritmetiche
.UnalgoritmoFFTottienelostessorisultatoconun
numerodioperazioni
.Ingeneralequestialgoritmisibasanosullafattorizzazionedi ,maesistonoalgoritmiFFTperqualunque
anchepernumeriprimi.
Poichl'antitrasformatadiscretadiFourierugualeallaDFT,maconesponentedisegnooppostoe
facilmenteinvertito.

afattore,qualsiasialgoritmoFFTpuessere

AlgoritmodiCooleyTukey
L'algoritmoFFTpidiffusol'algoritmodiCooleyTukey.Questoalgoritmosibasasulprincipiodidivideetimpera,espezzaricorsivamenteunaDFT
diqualsiasidimensione ,con numerocompostotaleche
inDFTpipiccoledidimensioni e ,insiemea
moltiplicazioniperl'unitimmaginaria,dettifattoritwiddle.
Questometodo(eingeneralel'ideadiunatrasformatadiFourierveloce)furesopopolaredaunapubblicazionediJamesWilliamCooleyeJohnWilder
Tukeynel1965,mainseguitosiscoprcheidueautoriavevanoindipendentementereinventatounalgoritmonotoaCarlFriedrichGaussnel1805[1]
(http://lseet.univtln.fr/~iaroslav/Gauss_Theoria_interpolationis_methodo_nova_tractata.php)(esuccessivamenteriscopertoinmoltealtreforme
limitate).
L'usopiconosciutodell'algoritmodiCooleyTukeydidividereetrasformareinduepezzidi
adognipasso,edquindiottimizzatosoloper
dimensionichesianopotenzedidue,maingeneralepuessereutilizzataqualsiasifattorizzazione(com'eranotosiaaGausscheaCooleyeTukey).
Questicasisonochiamatirispettivamentecasiradicedi2eradicemista(elealtrevariantihannoiproprinomi.Anchesel'ideadibasericorsiva,la
granpartedelleimplementazionitradizionaliriorganizzanol'algoritmoperevitarelaricorsioneesplicita.Inoltre,poichl'algoritmodiCooleyTukey
spezzalaDFTinDFTpipiccole,puesserearbitrariamentecombinatoconqualsiasialtroalgoritmoperlaDFT,comequellidescrittiquisotto.
Un'implementazioneiterativainC++dellaFFTbasatasull'algoritmodiCooleyTukeylaseguente:

#include<iostream>
#include<complex>
#defineMAX200

usingnamespacestd;

intlog2(intN)//funzionepercalcolareillogaritmoinbase2diunintero
{
intk=N,i=0;
while(k){
k>>=1;

i++;
}
returni1;
}

intcheck(intn)//usatopercontrollareseilnumerodicomponentidelvettorediinputunapotenzadi2
{
returnn>0&&(n&(n1))==0;
}

intreverse(intN,intn)//calcolailreversenumberdiogniinteronrispettoalnumeromassimoN
{
intj,p=0;
for(j=1;j<=log2(N);j++){
if(n&(1<<(log2(N)j)))
p|=1<<(j1);
}
returnp;
}

voidordina(complex<double>*f1,intN)//disponeglielementidelvettoreordinandoliperreverseorder
{
complex<double>f2[MAX];
for(inti=0;i<N;i++)
f2[i]=f1[reverse(N,i)];
for(intj=0;j<N;j++)
f1[j]=f2[j];
}

voidtransform(complex<double>*f,intN)//calcolailvettoretrasformato
{
ordina(f,N);//dapprimaloordinacolreverseorder
complex<double>W[N/2];//vettoredeglizeridell'unit.
//PrimaN/21mageneraerroreconcicloforsuccessivo
//inquantoprovaacopiareinunazonanonallocata"W[N/21]"
W[1]=polar(1.,2.*M_PI/N);
W[0]=1;
for(inti=2;i<N/2;i++)
W[i]=pow(W[1],i);
intn=1;
inta=N/2;
for(intj=0;j<log2(N);j++){
for(inti=0;i<N;i++){
if(!(i&n)){
/*adognistepdiraddoppiamentodin,vengonoutilizzatigliindici*/
/*'i'presialternativamenteagruppettidin,unavoltasieunano.*/
complex<double>temp=f[i];
complex<double>Temp=W[(i*a)%(n*a)]*f[i+n];
f[i]=temp+Temp;
f[i+n]=tempTemp;
}
}
n*=2;
a=a/2;
}

voidFFT(complex<double>*f,intN,doubled)
{
transform(f,N);
for(inti=0;i<N;i++)
f[i]*=d;//moltiplicailvettoreperilpassoinmododaavereilvettoretrasformatoeffettivo
}

intmain()
{
intn;
do{
cout<<"specificaladimensionedelvettore,chesiapotenzadi2"<<endl;
cin>>n;
}while(!check(n));
doubled;
cout<<"inserisciladimensionedelpassodicampionamento"<<endl;
cin>>d;
complex<double>vec[MAX];
cout<<"inserisciilvettoredicampionamento"<<endl;
for(inti=0;i<n;i++){
cout<<"inseriscilacomponentediindice"<<i<<endl;
cin>>vec[i];
}
FFT(vec,n,d);
cout<<"vettoretrasformato"<<endl;
for(intj=0;j<n;j++)
cout<<vec[j]<<endl;
return0;
}

AltrialgoritmipercalcolarelaFFT
CisonoaltrialgoritmiperlaFFToltrealCooleyTukey.PerN=N1N2conN1eN2numericoprimipuessereutilizzatol'algoritmodiGoodThomas
PFA(PrimefactorFFTAlgorithm),basatosulteoremacinesedelresto,chefattorizzalaDFTinunmodosimilealCooleyTukey.L'algoritmoFFTdi
RaderBrennerunsistemadifattorizzazionesimilealCooleyTukeymaconfattoritwiddleimmaginaripuri,riducendoilnumerodellemoltiplicazioni
alcostodiunaumentodelleaddizioniedellainstabilitnumerica.
GlialgoritmichesuddividonoricorsivamentelaDFTinoperazionipipiccolediversedallaDFTincludonol'algoritmodiBruuneilQFT.(Glialgoritmi
diRaderBrennereilQFTsonostatipropostiperdimensionichesianopotenzedi2,mapossibilechevenganoadattatipernumericomposti
qualunque.L'algoritmodiBruunsipuapplicaresudimensioniqualunqueanchecomposte).Inparticolarel'algoritmoperlaFFTdiBruunbasato
sull'interpretarelaFFTcomelafattorizzazionericorsivadelpolinomiozn1inpolinomiacoefficientirealinellaformazm1ez2m+azm+1.

Unaltropuntodivistapolinomialesfruttatodall'algoritmoFFTdiWinograd,chefattorizzazn1inpolinomiciclotomici,chespessohannocoefficienti
1,0o1,equindirichiedonopoche(senonnessuna)moltiplicazione,quindipuessereutilizzatoperottenereFFTconunnumerominimodi
moltiplicazioniedspessousatopertrovarealgoritmiefficientiperpiccolifattori.IneffettiWinograddimostrchelaDFTpuesserecalcolatacon
soloO(n)moltiplicazionisfortunatamentequestosiottieneconunnumeroconsiderevolmentesuperiorediaddizioni,unoscambiononpifavorevole
suimoderniprocessoridotatidichipdedicatiperlemoltiplicazioniinvirgolamobile.Inparticolare,l'algoritmodiWinogradfaancheusodell'algoritmo
PFAediquellodiRaderperleFFTcondimensionichesianonumeriprimi.
UnaltroalgoritmoFFTpernumeriprimidovutoaL.I.Bluesteinedavoltechiamataalgoritmochirpz:riesprimelaDFTcomeunaconvoluzione,la
cuidimensionepuessereportataadunapotenzadidueevalutatadallaFFTdiCooleyTukey.

AlgoritmiFFTspecializzatiperdatirealie/osimmetrici
InmolteapplicazioniidatidiinputperlaDFTsonorealipuri,nelqualcasoilrisultatosoddisfalasimmetria

esonostaticonseguentementesviluppatialgoritmiFFTperquestasituazione[1].Unapproccioconsistenelriutilizzareunalgoritmoordinarioe
rimuoverelepartidicalcoloridondanti,risparmiandoapprossimativamenteunfattoreduedioccupazionedimemoriaeditempoimpiegato.In
alternativa,possibileesprimerelatrasformatadiscretadiFourierdiunanplaconunnumeroparidielementituttirealicomelatrasformatadiscreta
complessadellametdelladimensioneoriginarialecuipartirealiedimmaginariesonoglielementipariedisparideglielementioriginari,seguitida
O(n)operazionidipostprocesso.
SipensavaunavoltachelenplerealidicuicalcolarelaDFTpotesseroesserecalcolateinmodopiefficienteconlatrasformatadiscretadiHartley
(dettaDHTdall'acronimodiDiscreteHartleyTransform),masiscoprinseguitocheingenerepossonoessereindividuatialgoritmiFFTspecializzati
cherichiedonomenooperazionidelcorrispondentealgoritmoDHT.Anchel'algoritmodiBruunfuinizialmentepropostoperavvantaggiarsideinumeri
realicomeinput,manonmaidiventatopopolare.

Accuratezzaeapprossimazioni
TuttiglialgoritmiFFTpresentatifinoracalcolanoesattamentelaDFT(insensoaritmetico,trascurandocioglierroridovutiaicalcoliinvirgola
mobile).TuttaviasonostatianchepropostialgoritmiFFTchecalcolanolaDFTapprossimativamente,conunerrorechepuessereresoarbitrariamente
piccoloalcostodiunmaggioresforzocomputazionale.Questialgoritmiscambianol'errorediapprossimazioneafavorediunamaggiorevelocitod
altrecaratteristiche.Alcuniesempisonol'algoritmoFFTdiEdelmanetal.(1999),laFFTdiGuoeBarrus(1996)basatasuiwaveletoquelladiShentov
etal.(1995).

AncheglialgoritmiFFT"esatti"hannodeglierroriquandovieneutilizzatal'aritmeticaavirgolamobileaprecisionefinita,maquestierrorisonoin
generemoltopiccolilamaggiorpartedeglialgoritmiFFThannoeccellentiproprietnumeriche.Illimitesuperioredell'errorerelativoperl'algoritmodi
CooleyTukeyO(logn),controO(n3/2)perlaformulaoriginariadellaDFT(GentlemaneSande,1966).Questirisultati,comunque,sonomolto
sensibiliversol'accuratezzadeifattoritwiddleusatinellaFFT(chesonopoiivaloridellefunzionitrigonometriche),enonrarocheimplementazioni
pocoaccuratedellaFFTabbianoprecisionemoltopeggiori,adesempioseutilizzanotabelledeivaloritrigonometricipocoaccurate.Alcunialgoritmidi
FFT,comeilRaderBrenner,sonointrinsecamentemenostabili.
Inaritmeticaavirgolafissa,laprecisionedeglierroriaccumulatidaglialgoritmidiFFTsonopeggiori,ecrescenticomeO(n)perl'algoritmodiCooley
Tukey[2].Inoltre,raggiungerequestaprecisionerichiedeun'accurataattenzioneenelloriscalareifattoriperminimizzarelaperditadiprecisione,egli
algoritmidiFFTinvirgolafissarichiedonoilriscalamentoadognistadiointermediodelledecomposizionicomenelCooleyTukey.
Perverificarelacorrettezzadiun'implementazionediunalgoritmoFFT,garanzierigorosepossonoessereottenuteintempoO(nlogn)conunasemplice
procedurachecontrollaleproprietdilinearit,dellarispostaimpulsivaedellatempoinvarianzaperdatiininputcasuali[3].

Note
1. ^H.V.Sorensen,D.LJones,M.T.Heideman,andC.S.Burrus.(1987,June).RealvaluedfastFouriertransformalgorithms.IEEETransactionsonSignal
Processing,35(6),849863.
2. ^DigitalSignalProcessing,A.V.Oppenheim,R.W.Schafer,PrenticeHall,1975
3. ^FundaErgn,1995,Testingmultivariatelinearfunctions:Overcomingthegeneratorbottleneck,Proc.27thACMSymposiumontheTheoryofComputing:407
416.

Bibliografia
(EN)GilbertStrang,WaveletsinAmericanScientist,vol.82,n3,maggiogiugno1994,p.253.URLconsultatol'8ottobre2013.
(EN)D.F.Elliott,&K.R.Rao,1982,Fasttransforms:Algorithms,analyses,applications.NewYork:AcademicPress.
(EN)FundaErgn,1995,Proc.27thACMSymposiumontheTheoryofComputing:407416.
(EN)M.FrigoandS.G.Johnson,2005,"TheDesignandImplementationofFFTW3(http://fftw.org/fftwpaperieee.pdf),"Proceedingsofthe
IEEE93:216231.
(EN)CarlFriedrichGauss,1866."Theoriainterpolationismethodonovatractata(http://lseet.univ
tln.fr/~iaroslav/Gauss_Theoria_interpolationis_methodo_nova_tractata.php),"Werkeband3,265327.Gttingen:KniglicheGesellschaftder
Wissenschaften.
(EN)W.M.GentlemanandG.Sande,1966,"FastFouriertransformsforfunandprofit,"Proc.AFIPS29:563578.
(EN)H.GuoandC.S.Burrus,1996,Proc.SPIEIntl.Soc.Opt.Eng.2825:250259.
(EN)H.Guo,G.A.Sitton,C.S.Burrus,1994,Proc.IEEEConf.Acoust.SpeechandSig.Processing(ICASSP)3:445448.

(EN)SteveHaynalandHeidiHaynal,"GeneratingandSearchingFamiliesofFFTAlgorithms
(http://jsat.ewi.tudelft.nl/content/volume7/JSAT7_13_Haynal.pdf)",JournalonSatisfiability,BooleanModelingandComputationvol.7,pp.145
187(2011).
(EN)S.G.JohnsonandM.Frigo,2007."AmodifiedsplitradixFFTwithfewerarithmeticoperations(http://www.fftw.org/newsplit.pdf),"IEEE
Trans.SignalProcessing55(1):111119.
(EN)T.LundyandJ.VanBuskirk,2007."AnewmatrixapproachtorealFFTsandconvolutionsoflength2k,"Computing80(1):2345.
(EN)Kent,RayD.andRead,Charles(2002).AcousticAnalysisofSpeech.ISBN0769301126.CitesStrang,G.(1994)/MayJune).Wavelets.
AmericanScientist,82,250255.
(EN)JamesC.Schatzman,1996,AccuracyofthediscreteFouriertransformandthefastFouriertransform(http://portal.acm.org/citation.cfm?
id=240432),SIAMJ.Sci.Comput.17:11501166.

Vocicorrelate
AnalisidiFourier
Conversioneanalogicodigitale
DeltadiDirac
DeltadiKronecker
SeriediFourier
TrasformatadiFourier
TrasformatadiscretadiFourier
TrasformatadiFourieratempodiscreto
TrasformatainversadiFourier

Collegamentiesterni
(EN)FastFourierAlgorithm(http://www.cs.pitt.edu/~kirk/cs1501/animations/FFT.html)
(EN)FastFourierTransforms(http://cnx.org/content/col10550/),ConnexionsonlinebookeditedbyC.SidneyBurrus,withchaptersbyC.Sidney
Burrus,IvanSelesnick,MarkusPueschel,MatteoFrigo,andStevenG.Johnson(2008).
(EN)LinkstoFFTcodeandinformationonline.(http://www.fftw.org/links.html)
(EN)NationalTaiwanUniversityFFT(http://www.cmlab.csie.ntu.edu.tw/cml/dsp/training/coding/transform/fft.html)
(EN)FFTprogramminginC++CooleyTukeyalgorithm.(http://www.librow.com/articles/article10)
(EN)Onlinedocumentation,links,book,andcode.(http://www.jjj.de/fxt/)
(EN)UsingFFTtoconstructaggregateprobabilitydistributions
(http://www.vosesoftware.com/ModelRiskHelp/index.htm#Aggregate_distributions/Aggregate_modeling_
_Fast_Fourier_Transform_FFT_method.htm)

(EN)SriWelaratna,"ThirtyyearsofFFTanalyzers(http://www.dataphysics.com/30_Years_of_FFT_Analyzers_by_Sri_Welaratna.pdf)",Sound
andVibration(January1997,30thanniversaryissue).AhistoricalreviewofhardwareFFTdevices.
(EN)FFTBasicsandCaseStudyUsingMultiInstrument(http://www.multi
instrument.com/doc/D1002/FFT_Basics_and_Case_Study_using_MultiInstrument_D1002.pdf)
(EN)FFTTextbooknotes,PPTs,Videos(http://numericalmethods.eng.usf.edu/topics/fft.html)atHolisticNumericalMethodsInstitute.
(EN)ALGLIBFFTCode(http://www.alglib.net/fasttransforms/fft.php)GPLLicensedmultilanguage(VBA,C++,Pascal,etc.)numericalanalysis
anddataprocessinglibrary.
(EN)MIT'ssFFT(http://groups.csail.mit.edu/netmit/sFFT/)MITSparseFFTalgorithmandimplementation.
(EN)VB6FFT(http://www.borgdesign.ro/fft.zip)VB6optimizedlibraryimplementationwithsourcecode.
FFTW,libreriasoftwareinlinguaggioCperlaFFT
Estrattoda"http://it.wikipedia.org/w/index.php?title=Trasformata_di_Fourier_veloce&oldid=71236970"
Categorie: AnalisidiFourier Trasformate
Questapaginastatamodificataperl'ultimavoltail10mar2015alle11:03.
IltestodisponibilesecondolalicenzaCreativeCommonsAttribuzioneCondividiallostessomodopossonoapplicarsicondizioniulteriori.Vedi
leCondizionid'usoperidettagli.WikipediaunmarchioregistratodellaWikimediaFoundation,Inc.