Trasformata di Fourier veloce

In matematica, la trasformata di Fourier veloce, spesso abbreviata con FFT (dall'inglese Fast Fourier Transform), è un algoritmo ottimizzato per calcolare la trasformata discreta di Fourier (DFT) o la sua inversa.

La FFT è utilizzata in una grande varietà di applicazioni, dall'elaborazione di segnali digitali alla soluzione di equazioni differenziali alle derivate parziali agli algoritmi per moltiplicare numeri interi di grandi dimensioni grazie al basso costo computazionale.

Definizione

Sia una -pla di numeri complessi. La DFT è definita dalla formula:

Calcolare direttamente questa somma richiede una quantità di operazioni aritmetiche . Un algoritmo FFT ottiene lo stesso risultato con un numero di operazioni . In generale questi algoritmi si basano sulla fattorizzazione di , ma esistono algoritmi FFT per qualunque , anche per numeri primi.

Poiché l'antitrasformata discreta di Fourier è uguale alla DFT, ma con esponente di segno opposto e a fattore, qualsiasi algoritmo FFT può essere facilmente invertito.

Algoritmo di Cooley-Tukey

L'algoritmo FFT più diffuso è l'algoritmo di Cooley-Tukey. Questo algoritmo si basa sul principio di divide et impera, e spezza ricorsivamente una DFT di qualsiasi dimensione , con numero composto tale che in DFT più piccole di dimensioni e , insieme a moltiplicazioni per l'unità immaginaria, detti fattori twiddle.

Questo metodo (e in generale l'idea di una trasformata di Fourier veloce) fu reso popolare da una pubblicazione di James Cooley e John Wilder Tukey nel 1965, ma in seguito si scoprì che i due autori avevano indipendentemente reinventato un algoritmo noto a Carl Friedrich Gauss nel 1805[1] (e successivamente riscoperto in molte altre forme limitate).

L'uso più conosciuto dell'algoritmo di Cooley-Tukey è di dividere e trasformare in due pezzi di ad ogni passo, ed è quindi ottimizzato solo per dimensioni che siano potenze di due, ma in generale può essere utilizzata qualsiasi fattorizzazione (com'era noto sia a Gauss che a Cooley e Tukey). Questi casi sono chiamati rispettivamente casi radice 2 e radice mista (ma esistono anche altri approcci con nomi specifici). Anche se l'idea di base è ricorsiva, la gran parte delle implementazioni tradizionali riorganizzano l'algoritmo per evitare la ricorsione esplicita. Inoltre, poiché l'algoritmo di Cooley-Tukey spezza la DFT in DFT più piccole, può essere arbitrariamente combinato con qualsiasi altro algoritmo per la DFT, come quelli descritti qui sotto.

Un'implementazione iterativa in C++ della FFT basata sull'algoritmo di Cooley-Tukey è la seguente:

#include <iostream>
#include <complex>
#define MAX 200

using namespace std;

int log2(int N)    //funzione per calcolare il logaritmo in base 2 di un intero
{
  int k = N, i = 0;
  while(k) {
    k >>= 1;
    i++;
  }
  return i - 1;
}

int check(int n)    //usato per controllare se il numero di componenti del vettore di input è una potenza di 2
{
  return n > 0 && (n & (n - 1)) == 0;
}

int reverse(int N, int n)    //calcola il reverse number di ogni intero n rispetto al numero massimo N
{
  int j, p = 0;
  for(j = 1; j <= log2(N); j++) {
    if(n & (1 << (log2(N) - j)))
      p |= 1 << (j - 1);
  }
  return p;
}

void ordina(complex<double>* f1, int N)     //dispone gli elementi del vettore ordinandoli per reverse order
{
  complex<double> f2[MAX];
  for(int i = 0; i < N; i++)
    f2[i] = f1[reverse(N, i)];
  for(int j = 0; j < N; j++)
    f1[j] = f2[j];
}

void transform(complex<double>* f, int N)     //calcola il vettore trasformato
{
  ordina(f, N);    //dapprima lo ordina col reverse order
  complex<double> W[N / 2]; //vettore degli zeri dell'unità.
                            //Prima N/2-1 ma genera errore con ciclo for successivo
                           //in quanto prova a copiare in una zona non allocata "W[N/2-1]"
  W[1] = polar(1., -2. * M_PI / N);
  W[0] = 1;
  for(int i = 2; i < N / 2; i++)
    W[i] = pow(W[1], i);
  int n = 1;
  int a = N / 2;
  for(int j = 0; j < log2(N); j++) {
    for(int i = 0; i < N; i++) {
      if(!(i & n)) {
        /*ad ogni step di raddoppiamento di n, vengono utilizzati gli indici */
        /*'i' presi alternativamente a gruppetti di n, una volta si e una no.*/
        complex<double> temp = f[i];
        complex<double> Temp = W[(i * a) % (n * a)] * f[i + n];
        f[i] = temp + Temp;
        f[i + n] = temp - Temp;
      }
    }
    n *= 2;
    a = a / 2;
  }
}

void FFT(complex<double>* f, int N, double d)
{
  transform(f, N);
  for(int i = 0; i < N; i++)
    f[i] *= d; //moltiplica il vettore per il passo in modo da avere il vettore trasformato effettivo
}

int main()
{
  int n;
  do {
    cout << "specifica la dimensione del vettore,che sia potenza di 2" << endl;
    cin >> n;
  } while(!check(n));
  double d;
  cout << "inserisci la dimensione del passo di campionamento" << endl;
  cin >> d;
  cout << "passo di campionamento = " << d << endl;
  complex<double> vec[MAX];
  cout << "inserisci il vettore di campionamento" << endl;
  for(int i = 0; i < n; i++) {
    cout << "inserisci la componente di indice " << i << endl;
    cin >> vec[i];
    cout << "indice " <<i<< "= " << vec[i]  << endl;
  }
  FFT(vec, n, d);
  cout << "vettore trasformato" << endl;
  for(int j = 0; j < n; j++)
    cout << vec[j] << endl;
  return 0;
}

Altri algoritmi per calcolare la FFT

Ci sono altri algoritmi per la FFT oltre al Cooley-Tukey. Per N=N1N2 con N1 e N2 numeri coprimi può essere utilizzato l'algoritmo di Good-Thomas PFA (Prime-factor FFT Algorithm), basato sul teorema cinese del resto, che fattorizza la DFT in un modo simile al Cooley-Tukey. L'algoritmo FFT di Rader-Brenner è un sistema di fattorizzazione simile al Cooley-Tukey ma con fattori twiddle immaginari puri, riducendo il numero delle moltiplicazioni al costo di un aumento delle addizioni e della instabilità numerica.

Gli algoritmi che suddividono ricorsivamente la DFT in operazioni più piccole diverse dalla DFT includono l'algoritmo di Bruun e il QFT. (Gli algoritmi di Rader-Brenner e il QFT sono stati proposti per dimensioni che siano potenze di 2, ma è possibile che vengano adattati per numeri composti qualunque. L'algoritmo di Bruun si può applicare su dimensioni qualunque anche composte). In particolare l'algoritmo per la FFT di Bruun è basato sull'interpretare la FFT come la fattorizzazione ricorsiva del polinomio zn-1 in polinomi a coefficienti reali nella forma zm-1 e z2m+azm+1.

Un altro punto di vista polinomiale è sfruttato dall'algoritmo FFT di Schmuel Winograd, che fattorizza zn-1 in polinomi ciclotomici, che spesso hanno coefficienti 1, 0 o −1, e quindi richiedono poche (se non nessuna) moltiplicazione, quindi può essere utilizzato per ottenere FFT con un numero minimo di moltiplicazioni ed è spesso usato per trovare algoritmi efficienti per piccoli fattori. In effetti Winograd dimostrò che la DFT può essere calcolata con solo O(n) moltiplicazioni; sfortunatamente questo si ottiene con un numero considerevolmente superiore di addizioni, uno scambio non più favorevole sui moderni processori dotati di chip dedicati per le moltiplicazioni in virgola mobile. In particolare, l'algoritmo di Winograd fa anche uso dell'algoritmo PFA e di quello di Rader per le FFT con dimensioni che siano numeri primi.

Un altro algoritmo FFT per numeri primi è dovuto a L. I. Bluestein ed è a volte chiamata algoritmo chirp-z: riesprime la DFT come una convoluzione, la cui dimensione può essere portata ad una potenza di due e valutata dalla FFT di Cooley-Tukey.

Algoritmi FFT specializzati per dati reali e/o simmetrici

In molte applicazioni i dati di input per la DFT sono reali puri, nel qual caso il risultato soddisfa la simmetria

e sono stati conseguentemente sviluppati algoritmi FFT per questa situazione[2]. Un approccio consiste nel riutilizzare un algoritmo ordinario e rimuovere le parti di calcolo ridondanti, risparmiando approssimativamente un fattore due di occupazione di memoria e di tempo impiegato. In alternativa, è possibile esprimere la trasformata discreta di Fourier di una n-pla con un numero pari di elementi tutti reali come la trasformata discreta complessa della metà della dimensione originaria le cui parti reali ed immaginarie sono gli elementi pari e dispari degli elementi originari, seguiti da O(n) operazioni di post-processo.

Si pensava una volta che le n-ple reali di cui calcolare la DFT potessero essere calcolate in modo più efficiente con la trasformata discreta di Hartley (detta DHT dall'acronimo di Discrete Hartley Transform), ma si scoprì in seguito che in genere possono essere individuati algoritmi FFT specializzati che richiedono meno operazioni del corrispondente algoritmo DHT. Anche l'algoritmo di Bruun fu inizialmente proposto per avvantaggiarsi dei numeri reali come input, ma non è mai diventato popolare.

Accuratezza e approssimazioni

Tutti gli algoritmi FFT presentati finora calcolano esattamente la DFT (in senso aritmetico, trascurando cioè gli errori dovuti ai calcoli in virgola mobile). Tuttavia sono stati anche proposti algoritmi FFT che calcolano la DFT approssimativamente, con un errore che può essere reso arbitrariamente piccolo al costo di un maggiore sforzo computazionale. Questi algoritmi scambiano l'errore di approssimazione a favore di una maggiore velocità od altre caratteristiche. Alcuni esempi sono l'algoritmo FFT di Edelman et al. (1999), la FFT di Guo e Barrus (1996) basata sui wavelet o quella di Shentov et al. (1995).

Anche gli algoritmi FFT "esatti" hanno degli errori quando viene utilizzata l'aritmetica a virgola mobile a precisione finita, ma questi errori sono in genere molto piccoli; la maggior parte degli algoritmi FFT hanno eccellenti proprietà numeriche. Il limite superiore dell'errore relativo per l'algoritmo di Cooley-Tukey è contro per la formula originaria della DFT (Gentleman e Sande, 1966). Questi risultati, comunque, sono molto sensibili verso l'accuratezza dei fattori twiddle usati nella FFT (che sono poi i valori delle funzioni trigonometriche), e non è raro che implementazioni poco accurate della FFT abbiano precisione molto peggiori, ad esempio se utilizzano tabelle dei valori trigonometrici poco accurate. Alcuni algoritmi di FFT, come il Rader-Brenner, sono intrinsecamente meno stabili.

In aritmetica a virgola fissa, la precisione degli errori accumulati dagli algoritmi di FFT sono peggiori, e crescenti come per l'algoritmo di Cooley-Tukey[3]. Inoltre, raggiungere questa precisione richiede un'accurata attenzione e nello riscalare i fattori per minimizzare la perdita di precisione, e gli algoritmi di FFT in virgola fissa richiedono il riscalamento ad ogni stadio intermedio delle decomposizioni come nel Cooley-Tukey.

Per verificare la correttezza di un'implementazione di un algoritmo FFT, garanzie rigorose possono essere ottenute in tempo con una semplice procedura che controlla le proprietà di linearità, della risposta impulsiva e della tempo-invarianza per dati in input casuali[4].

Note

  1. ^ (LA) Carl Friedrich Gauss, Theoria interpolationis methodo nova tractata, pp. 266-327.
  2. ^ H.V. Sorensen, D.L Jones, M.T. Heideman, and C.S. Burrus. (1987, June). Real-valued fast Fourier transform algorithms. IEEE Transactions on Signal Processing, 35(6), 849-863.
  3. ^ Digital Signal Processing, A. V. Oppenheim, R. W. Schafer, Prentice Hall, 1975
  4. ^ Funda Ergün, 1995, Testing multivariate linear functions: Overcoming the generator bottleneck, Proc. 27th ACM Symposium on the Theory of Computing: 407–416.

Bibliografia

  • (EN) Gilbert Strang, Wavelets, in American Scientist, vol. 82, n. 3, maggio-giugno 1994, p. 253. URL consultato l'8 ottobre 2013.
  • (EN) D. F. Elliott, & K. R. Rao, 1982, Fast transforms: Algorithms, analyses, applications. New York: Academic Press.
  • (EN) Funda Ergün, 1995, Proc. 27th ACM Symposium on the Theory of Computing: 407–416.
  • (EN) M. Frigo and S. G. Johnson, 2005, "The Design and Implementation of FFTW3," Proceedings of the IEEE 93: 216–231.
  • (EN) Carl Friedrich Gauss, 1866. "Theoria Interpolationis Methodo Nova Tractata", Werke band 3, 265–327. Göttingen: Königliche Gesellschaft der Wissenschaften.
  • (EN) W. M. Gentleman and G. Sande, 1966, "Fast Fourier transforms—for fun and profit," Proc. AFIPS 29: 563–578.
  • (EN) H. Guo and C. S. Burrus, 1996, Proc. SPIE Intl. Soc. Opt. Eng. 2825: 250–259.
  • (EN) H. Guo, G. A. Sitton, C. S. Burrus, 1994, Proc. IEEE Conf. Acoust. Speech and Sig. Processing (ICASSP) 3: 445–448.
  • (EN) Steve Haynal and Heidi Haynal, "Generating and Searching Families of FFT Algorithms", Journal on Satisfiability, Boolean Modeling and Computation vol. 7, pp. 145–187 (2011).
  • (EN) S. G. Johnson and M. Frigo, 2007. "A modified split-radix FFT with fewer arithmetic operations," IEEE Trans. Signal Processing 55 (1): 111–119.
  • (EN) T. Lundy and J. Van Buskirk, 2007. "A new matrix approach to real FFTs and convolutions of length 2k," Computing 80 (1): 23-45.
  • (EN) Kent, Ray D. and Read, Charles (2002). Acoustic Analysis of Speech. ISBN 0-7693-0112-6. Cites Strang, G. (1994)/May–June). Wavelets. American Scientist, 82, 250-255.
  • (EN) James C. Schatzman, 1996, Accuracy of the discrete Fourier transform and the fast Fourier transform, SIAM J. Sci. Comput. 17: 1150–1166.

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autoritàGND (DE4136070-9

Read other articles:

Concert hall in Downtown Atlanta, Georgia, United States For other uses, see Tabernacle (disambiguation). The TabernacleExterior of the venue (c.2009)Former namesHouse of Blues (1996-97)Address152 Luckie St NWAtlanta, GA 30303-2006LocationDowntown AtlantaOwnerLive NationCapacity2,600ConstructionBroke groundAugust 17, 1909 (1909-08-17)OpenedSeptember 3, 1911 (1911-09-03)Renovated1994-9620082014Construction cost$125,000($4.09 million in 2023 dollars[1])Ar…

ПосёлокБайкальский Прибой 51°56′16″ с. ш. 106°11′54″ в. д.HGЯO Страна  Россия Субъект Федерации Бурятия Муниципальный район Кабанский Сельское поселение «Большереченское» Внутреннее деление 5 улиц История и география Часовой пояс UTC+8:00 Население Население ↘118[1&#…

Disambiguazione – Se stai cercando il significato relativo all'araldica, vedi Palato (araldica). Questa voce o sezione sull'argomento anatomia è priva o carente di note e riferimenti bibliografici puntuali. Sebbene vi siano una bibliografia e/o dei collegamenti esterni, manca la contestualizzazione delle fonti con note a piè di pagina o altri riferimenti precisi che indichino puntualmente la provenienza delle informazioni. Puoi migliorare questa voce citando le fonti più precisamente. …

American swimmer Brooke BennettPersonal informationFull nameBrooke Marie BennettNational team United StatesBorn (1980-05-06) May 6, 1980 (age 44)Tampa, FloridaHeight5 ft 5 in (1.65 m)Weight126 lb (57 kg)SportSportSwimmingStrokesFreestyleClubBrandon Blue Wave Medal record Women's swimming Representing the United States Olympic Games 1996 Atlanta 800 m freestyle 2000 Sydney 400 m freestyle 2000 Sydney 800 m freestyle World Championships (LC) 1998 Perth …

Canal crossing central Scotland The Forth and Clyde Canal, near Bonnybridge and Larbert The Forth and Clyde Canal is a canal opened in 1790, crossing central Scotland; it provided a route for the seagoing vessels of the day between the Firth of Forth and the Firth of Clyde at the narrowest part of the Scottish Lowlands. This allowed navigation from Edinburgh on the east coast to the port of Glasgow on the west coast. The canal is 35 miles (56 km) long and it runs from the River Carron at Gr…

Северный морской котик Самец Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:Синапсиды…

Vous lisez un « article de qualité » labellisé en 2007. Richesse des nations Édition de Londres (1776) de la Richesse des nations Auteur Adam Smith Pays Royaume-Uni Genre Économie Éditeur W. Strahan and t. Cadell, Londres Date de parution 1776 modifier  Recherches sur la nature et les causes de la richesse des nations (en anglais, An Inquiry into the Nature and Causes of the Wealth of Nations), ou plus simplement la Richesse des nations, est le plus célèbre ouvrage d…

Carthage (la) Archidioecesis Carthaginensis Informations générales Type de juridiction Siège titulaire Église Église catholique Création v. 50 Église La cathédrale Saint-Louis de Carthage est devenue un musée Direction actuelle Pape François Province ecclésiastique Province ecclésiastique de Carthage (d) Plus haute juridiction Saint-Siège Localisation Siège Carthage Pays Tunisie (en) Notice sur www.catholic-hierarchy.org modifier  Vestiges de la basilique dite de Saint-Cyprien…

English actor Dex LeeLee in 2023Born (1993-05-16) 16 May 1993 (age 30)Edmonton, EnglandEducationThe Latymer SchoolMorgan Aslanoff School of DanceArtsEdOccupationActorYears active2014–presentTelevisionDoctorsRelativesMiriam-Teak Lee (sister) Dex Lee (born 16 May 1993) is an English actor, known for his role as Bear Sylvester on the BBC soap opera Doctors. Before he was cast in Doctors, he appeared in numerous professional stage productions and worked part-time as a dance teacher. Earl…

English composer and organist(1711–1779) William Boyce by John Russell, 1776 William Boyce (baptised 11 September 1711 – 7 February 1779) was an English composer and organist. Like Beethoven later on, he became deaf but continued to compose. He knew Handel, Arne, Gluck, Bach, Abel, and a very young Mozart, all of whom respected his work. Life William Boyce by Thomas Hudson, ca. 1745 Boyce was born in London, at Joiners Hall, then in Lower Thames Street, to John Boyce, at the time a joiner an…

American composer (1937–2023) David Del TrediciBorn(1937-03-16)March 16, 1937Cloverdale, California, U.S.DiedNovember 18, 2023(2023-11-18) (aged 86)New York City, U.S.Alma materUniversity of California, BerkeleyPrinceton UniversityOccupationComposerKnown forNeo-RomanticismNotable workIn Memory of a Summer DayTattooAwardsPulitzer Prize for Music (1980)Guggenheim FellowWoodrow Wilson Fellowship David Walter Del Tredici (March 16, 1937 – November 18, 2023) was an American compose…

Bosnian singer This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Dražen Žerić – news · newspapers · books · scholar · JSTOR (April 2021) (Learn how and when to remove this message) Dražen Žerić…

Highest court in the U.S. state of Michigan Michigan Supreme CourtEstablished1836LocationLansing, Michigan, United StatesComposition methodSemipartisan electionAuthorized byMichigan ConstitutionAppeals toSupreme Court of the United StatesJudge term length8 yearsNumber of positions7 (including chief justice)WebsiteOfficial WebsiteChief JusticeCurrentlyElizabeth T. ClementSinceNovember 22, 2022 The Michigan Supreme Court is the highest court in the U.S. state of Michigan. It is Michigan's court of…

1986 Connecticut Attorney General election ← 1982 November 4, 1986 1990 →   Nominee Joe Lieberman Richard E. Arnold Party Democratic Republican Popular vote 613,742 335,209 Percentage 64.7% 35.3% County resultsLieberman:      50–60%      60–70%      70–80% Attorney General before election Joe Lieberman Democratic Elected Attorney General Joe Lieberman Democratic Elections in Connectic…

Conquista romana della Gallia Cisalpinaparte delle guerre romano-celticheLa provincia romana della Gallia CisalpinaDataIII–II secolo a.C. LuogoGallia cisalpina Casus belliEspansionismo romano EsitoVittoria romana e annessione della pianura padana SchieramentiRepubblica romanaTribù galliche, Tribù liguri, Reti Voci di guerre presenti su Wikipedia Manuale Con l'espressione conquista della Gallia Cisalpina si indica la campagna di sottomissione dei popoli delle regioni che oggi formano l'attual…

Río Ocklawaha El río desde el puente de Ferry en StarkesUbicación geográficaCuenca Río St. JohnsNacimiento Lago GriffinDesembocadura Río St. JohnsCoordenadas 29°28′13″N 81°41′25″O / 29.4702, -81.6904Ubicación administrativaPaís  Estados UnidosEstado  FloridaCondados Lake, Putnam y MarionCuerpo de aguaLongitud 119 kmSuperficie de cuenca n/d km²Caudal medio n/d m³/sAltitud Nacimiento: n/d mDesembocadura: n/d mMapa de localización Cuenca y curso del r…

أطلانطسمعلومات عامةجزء من ميثولوجيا إغريقية موجود بالقرب من المسطح المائي المحيط الأطلسي[1] موجود في عمل The Time Stealer (en) [2]عشرون ألف فرسخ تحت الماءالماسة الزرقاء تعديل - تعديل مصدري - تعديل ويكي بيانات خارطة أثناسيوس كيرشر عن جزيرة اطلنطس في وسط المحيط الأطلسي. من موندو…

Defunct American department store Barneys New York Inc.Former store, downtown San FranciscoCompany typePrivateIndustryRetailFounded1923; 101 years ago (1923) in New York City, New York, United StatesFounderBarney PressmanDefunctFebruary 22, 2020; 4 years ago (2020-02-22) (US stores)FateChapter 11 bankruptcy and liquidation, intellectual property acquired by Authentic Brands GroupHeadquartersNew York City, New York, United StatesNumber of locations 22 (at peak,…

Attacchi missilistici su Gəncəparte della seconda guerra del Nagorno KarabakhData4 ottobre 2020, 8 ottobre 2020, 10 ottobre 2020, 17 ottobre 2020 LuogoGəncə TipoAttacco missilistico Forze in campoEseguito daHaykakan banak (forze armate armene) BilancioPerdite civili26 morti, 125 feriti voci di bombardamenti aerei presenti su Wikipedia Gli attacchi missilistici su Gəncə del 2020 (in azero: Gəncə bombalanmaları) comprendono quattro diversi attacchi missilistici compiuti contro la città d…

1992 American TV series or program O Pioneers!VHS coverGenreDramaBased onO Pioneers!by Willa CatherTeleplay byRobert W. LenskiDirected byGlenn JordanStarring Jessica Lange David Strathairn Tom Aldredge Music byBruce BroughtonCountry of originUnited StatesOriginal languageEnglishProductionExecutive producerCraig AndersonProducerGlenn JordanCinematographyDick BushEditorScott ConradRunning time99 minutesProduction companies Prairie Films Craig Anderson Productions Lorimar Television Hallmark Hall o…