Transformada ràpida de Fourier

De la Viquipèdia, l'enciclopèdia lliure
Suma de dos senyals sinusoidals de 300 i 600 Hz (imatge superior) i resultat de la FFT (imatge inferior).

La transformada ràpida de Fourier (o FFT, de l'anglès Fast Fourier transform), no és més que una forma molt ràpida i eficient de calcular la transformada discreta de Fourier (DFT) d'un senyal discret i la seva inversa, la transformada inversa discreta de Fourier (IDFT).[1]

Es calcula de forma computacional a través d'un determinat algorisme. En termes d'eficiència, la DFT té un cost temporal d'O(n²) i la FFT d'O(nlog n). En transformades de poques mostres gairebé no s'aprecia la diferència. On sí que es pot apreciar és, per exemple, en una transformada de 1024 mostres. Fent la DFT es necessitarien aproximadament operacions i fent la FFT, en canvi, unes 5000. Per poder aplicar la transformada ràpida de Fourier, es necessiten dues condicions indispensables: que el senyal discret a transformar sigui periòdic i que el nombre de mostres sigui de l'ordre de , amb n essent un nombre enter positiu. Com més gran sigui n, millor serà la transformada. Generalment, n sol ser igual a 10.

D'aquí ve la seva importància pel desenvolupament de les telecomunicacions. Operacions que abans de la FFT podien desestimar-se per la seva complexitat, van començar-se a fer utilitzant aquesta nova transformada ràpida de Fourier.[2]

La transformada ràpida de Fourier és d'importància fonamental en l'anàlisi matemàtica i ha estat objecte de nombrosos estudis. L'aparició d'un algorisme eficaç per a aquesta operació va ser una pedra angular en la història de la informàtica.[3]

Les principals aplicacions de la transformada ràpida de Fourier són múltiples. És la base de moltes operacions fonamentals que es troben en el tractament digital del senyal, on té una àmplia utilització. També és important en el filtratge digital i la resolució d'equacions diferencials, entre d'altres aplicacions. A més, proporciona un mitjà convenient per millorar el rendiment dels algorismes per a un conjunt de problemes aritmètics comuns.

Definició[modifica]

Siguin x0, ...., xn-1 nombres complexos. La transformada discreta de Fourier (DFT) es defineix com [4]

Càlcul gràfic

L'avaluació directa d'aquesta fórmula requereix O(n²) operacions aritmètiques. Mitjançant un algorisme FFT es pot obtenir el mateix resultat amb tan sols O(n log n) operacions. En general, aquests algorismes depenen de la factorització de n però, al contrari del que sovint es creu, existeixen FFTs per a qualsevol n, fins i tot amb n primer.

La idea que permet aquesta optimització és la descomposició de la transformada en altres de més simples que es tornen a descompondre, i així fins a arribar a transformades de 2 elements on k pot prendre valors 0 i 1. Un cop resoltes les transformades més simples, s'han d'agrupar en altres de nivell superior que s'han de resoldre de nou i així successivament fins a arribar al nivell més alt. Al final d'aquest procés, els resultats obtinguts han de reordenar-se.

Ja que la transformada discreta de Fourier inversa és anàloga a la transformada discreta de Fourier, amb diferent signe a l'exponent i un factor 1/n, qualsevol algorisme FFT pot ser fàcilment adaptat per al càlcul de la transformada inversa. En general, tenim que:

Algorismes de càlcul de FFT[modifica]

Algorisme de Cooley-Tukey[modifica]

Algorisme de Cooley–Tukey

Existeixen diferents algorismes per calcular la FFT, però el més conegut i utilitzat és el de Cooley-Tukey. Aquest va ser popularitzat l'any 1965 gràcies a una publicació de J. W. Cooley i J. W. Tukey. Aquest algorisme té diferents formes. A continuació s'explica, breument, la més senzilla d'elles: la DIT (Decimation-in-time). És també la més explicada als llibres de text, però, paradoxalment, la menys usada en grans aplicacions.[5]

La base d'aquest algorisme és fer subdivisions de la DFT. Es treballa en diferents etapes i a cada etapa es va dividint en grups de 2. Es poden fer un nombre màxim de N\2-1 etapes(per un costat els coeficients parells i per l'altre els imparells). Cada un dels coeficients de sortida de la FFT,de les mostres imparelles es multipliquen per , on k és la posició del vector de sortida, i se sumen a les mostres parelles. Les FFT de N/2 es pot resoldre també de la següent manera: realitzant aquesta operació de manera recursiva fins a obtenir una FFT de grandària 2. El resultat és:

.

Per exemple, es disposa d'un senyal de N=8 mostres. Es poden fer fins a 3 etapes. A la primera etapa es té una DFT de N mostres. A la següent etapa 2 DFTs de N/2 mostres cada una. I l'última etapa tindrà 4 DFTs de N/4 mostres cada una. Finalment s'han de combinar totes les etapes. Es fa a través d'una operació anomenada "butterfly", o papallona del català. Utilitzant aquest algorisme, també anomenat radix-2 s'observa que el nombre de mostres (N) que es pot agafar ha de ser potència de 2.

Altres algorismes [6][modifica]

-Semblant al de Cooley-Tukey però amb N essent un nombre primer.

-Basat en l'aproximació per factorització polinomial.

-Es basa a expressar la DFT com una convolució cíclica. N ha de ser, també, un nombre primer.

-Aquest algorisme expressa la DFT com una convolució lineal, on N pot ésser qualsevol nombre. Aquest algorisme pot utilitzar-se per a més transformades que es basin en la TZ (transformada Z).

FFT amb Matlab[modifica]

  • >> X = fft(x) [7]

Fa la FFT del vector x. 'X' és un vector de nombres complexos ordenats des de k=0...N-1. Es recomana que la longitud del vector 'x' sigui una potència de 2. El que no es recomana és que la longitud 'x' sigui un nombre primer. Una altra opció de la FFT és especificar el nombre de punts amb el qual es vol fer la FFT.

  • >> X = fft(x,N)

Si la longitud de 'x' és menor que N, el vector s'omple amb zeros. Si és més gran, el vector es trunca.

  • >> x = ifft(X)

Fa la FFT inversa del vector X. També es pot especificar el nombre de punts N amb el qual es vol fer la IFFT. (També, com abans >> x = ifft(X,N))

  • >> X = fftshift(X)

Reordena el vector X en ordre creixent de freqüència. Si “X” és el vector resultant de fer una FFT, utilitzant aquesta funció reordenem els punts en funció de la freqüència.

Altres generalitzacions[modifica]

Una O(N5/2 log N) la generalització d'harmònics esfèrics en l'esfera S² amb ganglis N² va ser descrit per Mohlenkamp (1999), juntament amb un algorisme de conjectura (però no està provat) que O(N² log² N la complexitat; Mohlenkamp també proporciona una implementació de la biblioteca libftsh. Un algorisme d'harmònics esfèrics, amb O(N² log N) la complexitat és descrita per Rokhlin i Tygert (2006).

Diversos grups han publicat també "FFT" algorismes per a les dades no equiespaiats, tal com va ser revisat en Potts et al. (2001). Aquests algorismes de no ser estrictament calcular la DFT (que només està definit per a les dades equiespaiats), sinó més aviat una aproximació dels mateixos (un no-uniforme de Fourier discret transforma, o NDFT, que és sovint només es calcula aproximadament).

Aplicacions[modifica]

  • Tractament d'imatge (JPEG) i àudio (MP3)
  • Reducció de soroll en senyals, com el soroll blanc
  • Anàlisi en freqüència de qualsevol senyal discret
  • Anàlisi de materials i estadística
  • Síntesi mitjançant la transformada inversa IFFT

Vegeu també[modifica]

Referències[modifica]

  1. «An Interactive Guide To The Fourier Transform – BetterExplained» (en anglès). betterexplained.com. [Consulta: 1r març 2017].
  2. «A gentle introduction to the FFT | EarLevel Engineering» (en anglès). www.earlevel.com. [Consulta: 1r març 2017].
  3. «Q: What is a Fourier transform? What is it used for?» (en anglès). Ask a Mathematician / Ask a Physicist, 25-09-2012.
  4. «Fast Fourier Transforms» (en anglès). hyperphysics.phy-astr.gsu.edu. [Consulta: 1r març 2017].
  5. «Cooley–Tukey algorithm» (en anglès). sip.cua.edu. Arxivat de l'original el 2018-04-03. [Consulta: 1r març 2017].
  6. «How the FFT works» (en anglès). www.dspguide.com. [Consulta: 1r març 2017].
  7. «Fast Fourier transform - MATLAB fft» (en anglès). es.mathworks.com. [Consulta: 1r març 2017].

Bibliografia[modifica]

Enllaços externs[modifica]