4.11.2014

CALCOLO NUMERICO DELLA TRASFORMATA DI FOURIER DI UNA FUNZIONE  REALE: UN  ESEMPIO 

PRIMA PARTE

Per seguire agevolmente questo tutorial è necessario conoscere   

 e aver fatto  gli Esercizi 4.1 e 4.3   pag 132

Alla fine di questa esposizione si dovrebbe essere in grado di svolgere i seguenti esercizi assegnati

Esercizi 5.0, 5.1, 5.2 a pagina 134



Illustriamo la tecnica per il calcolo numerico della trasformata di Fourier di una funzione attraverso un esperimento proposto da E. O. Brigham in The Fast Fourier Transform, Prentice Hall Englewood Cliffs, Boston, 1974.

Esperimento: data la funzione

funzione da trasformare

si vuole calcolare numericamente la sua trasformata di Fourier di e confrontare con la trasformata vera:
quest'ultima  si può  calcolare esplicitamente, ed è
:

Trasformata. paret relae e parte immaginaria 

Si noti: la parte reale è pari e la parte immaginaria è dispari, perchè  f  è reale (Esercizio 3.3).

Calcoleremo la trasformata della sua restrizione all'intervallo [0,8] (perciò il parametro S delle note è  S=8).
In queste pagine continueremo a denotare  con  tale restrizione.


Sia N=32 il numero di punti scelto per calcolare la DFT; l'approssimazione di f^ è

fftprimo

dove
effegei
e la spaziatura fra i campioni  è

zero25
Conviene qui ricordare che   effecappa  è una successione N-periodica.

Si noti: come accade per  la trasformata continua, la parte reale della DFT è pari, la parte immaginaria è dispari  (vedi Esercizio 4.3 pag 128):
no

Seguendo il  suggerimento dell'autore, useremo l'accortezza di modificare nell'origine la funzione assegnata, ponendola uguale a 0.5 invece che a 1. Rimandiamo per il momento la discussione sulle motivazioni di questa scelta (vedi Osservazione in fondo a questa pagina).


Scrittura del programma. Il programma esegue i seguenti passi

 fzero 

dsf
red

      c                                                                         
Infine sovrapporre i grafici.
Fine  del programma. 

 2- Calcolo della parte reale della trasformata.

Qui mostriamo cosa dovreste ottenere dopo i primi tre passi. In  Figura 1a compare il grafico dei campioni di f

emenot

FIGURA 1a. Punti di campionatura di f.  

Eseguiti i primi tre passi  del programma, avremo ottenuto  la N-pla
 
dsf  
e  provveduto a separarne  la parte reale dalla parte immaginaria
.     
 Le Figure 2 e 3  qui sotto mostrano i grafici di Re(f^) e di Re(D)

  

verareale.jpeg            FTRE.jpeg

Figura 2 [a sinistra] Parte reale  della trasformata vera  in [-2,2]         
Figura 3 [a destra]   Plot della parte reale dell'output, punti (k,Re(SFk))  k=1,2,3,...N.


Intrpretazione dell'output  e confronto della trasformata vera con la calcolata.
La trasformata calcolata ad un primo esame può sembrare incorretta! Ma non è così: ricordiamo che la DFT è N-periodica;
possiamo  visualizzare questa periodicità con il seguente grafico, avente in ascissa sempre numeri interi.


tretreni
                                            k=0                                          k=N-1

Figura 3bis 
Tre intervalli di periodicità della successione N-periodica Re(D) (che è pari)

Guardando
la trasformata vera (Figura 2), si intuisce che il grafico della N-pla calcolata (in Figura 3bis qui sopra) è quello relativo all'intervallo [-N/2, N/2-1] (cioè l'intervallo, sugli interi, di ampiezza N e simmetrico rispetto a  k=0).
In Figura 4 si trovano i due grafici calcolata e vera sovrapposti.
Ci sarà utile in seguito l'osservazione che il grafico della calcolata si può ottenere da D ( Figura 3) traslando 
la seconda metà della N-pla
a sinistra di zero della quantità  N/2:

emenot1.jpeg

Figura 4  Trasformata di Fourier calcolata  (puntini) e trasformata vera (linea continua) in [-2,2].


Osservazione. In questo caso la conoscenza della trasformata vera ci ha guidato nel tracciare il grafico della calcolata; in generale però la trasformata vera non è nota.
Si pone dunque la questione
: quali valori  di  (f^)  rappresenta la N-pla trovata D?
In altri termini: in quale intervallo dell'asse delle frequenze  dobbiamo "collocare"

D per rappresentare graficamente la  f^ calcolata?
La risposta ci viene data dalla formula che esprime  la DFT in termini della trasformata vera (vedi  formule (1.8), (1.9), (1.10) pag. 112):

period

 

Dalla (0.1) si deduce che la spaziatura da prendere sull'asse delle frequenze per rappresentare graficamente la trasformata

calcolata  è 1/S,  e  l'intervallo deve avere ampiezza N/S, quindi sarà  [-N/2S,N/2S).

Dalla (0.1) si deduce che, se f^ è concentrata in [-N/2S, N/2S], allora D=(SF_k  k=0,..., N-1) è una buona approssimazione di f^  in questo intervallo perchè, fuori di esso, le "code" delle traslate sono trascurabili.

Inoltre

  • la prima metà della N-pla  Re(D)  approssima i valori di Re( f^) relativi alle frequenze positive:
  refhat          
          refhatdue    

Quindi se vogliamo sovrapporre i grafici delle trasformate vera e calcolata, bisogna  prima fare uno "shift" della seconda metà di D portandola a sinistra dell'origine e poi sovrapporre questo grafico al grafico di Re( f^)(k/S),  k=-N/2,...  .., N/2-1 .

Nell'esempio in studio si ha [-N/2S, N/2S] =[-2,2] e i punti k/S sono k/8, k=-16, .....15.   (vedi Figura 4).

 Riassumendo, abbiamo campionato la funzione f in (1) nell'intervallo [0,8] con N=32 punti e ottenuto N valori della sua trasformata di Fourier  nell'intervallo [-N/2S, N/2S] =[-2,2].
Questi due intervalli, uno
nel dominio dei tempi e l'altro nel dominio delle frequenze non vanno confusi.   

ESERCIZIO Ripetere l'esperimento con N=64  ed S (ancora) uguale a 8.
In questo caso i valori trovati saranno approssimazioni dei valori di f^  nell'intervallo 
[-N/2S,N/2S)= [-4,4]
Si dovrà fare il plot di  f^ su tale intervallo valutandola in  N punti con spaziatura 1/8.
Sovrapporre il grafico della vera al grafico di D (dopo aver operato lo shift su D).
Questa questione sarà ancora discussa al punto 2 della  parte 3 più avanti.



 2- Calcolo della parte immaginaria della trasformata.
 
Ripetendo le stesse operazioni per 
 la parte immaginaria della
trasformata si ottiene la N-pla riportata in Figura 5a)
 
ift


Figura 5a) Parte immaginaria della trasformata calcolata, sull'asse  
delle ascisse compaiono i numeri naturali da 1 a 32.  

2



5 b) Parte immaginaria della trasformata di Fourier vera (puntini blu) e della

 calcolata (rossi).  L'intevallo sull'asse delle ascisse è [-2,2]. Notare l'errore al bordo.



 

 Fatti  importanti per la  scrittura del programma 

1 ) La  routine di Matlab  fft(x).m    esegue  il calcolo della somma qui sotto

routine

quindi bisogna successivamente moltiplicare per 1/N (e poi per l'ampiezza S dell'intervallo, ovviamente)

2.)  Per fare lo shift  di cui abbiamo parlato esiste una routine predisposta, 

si chiama fftshift.m   Se  N=2M   è la dimensione del vettore

H =(x_1,x_2,....,x_(2M)) , scrivendo  H1 =fftshift(H)  

si ottiene H1=(x_(M+1), x_(M+2),...., x_(N), x_1, x_2,..., x_M)

3.) Se la funzione da trasformare  è definita  su un intervallo [-R,S]

allora bisogna usare la formula (1.11) delle note, che qui non riportiamo. 

Se R=S la formula diventa 
[cfr formula (1.12) delle note]. L'approssimazione di f^ in quest'ultimo caso è
2Sfft


quindi la  (F_k) va moltiplicata, oltre che per l'ampiezza del supporto di  f,  anche  per (-1)^k

ESERCIZIO Eseguire l'esperimento su esposto sulla parte immaginaria.

Ripetere con N=64 come fatto per la parte reale.

 


SECONDA PARTE

1) Esiste una  routine per fare la trasformata inversa, si chiama ifft.m.

Come abbiamo detto in 1) più sopra, il fattore 1/N non compare nella definizione di DFT; ma compare

nella formula che  fornisce la trasformata inversa (in  ifft.m , controllare su help).

Questo è naturale (ricordare la formula di inversione (2.3) pag 116 delle note.   

2) Nel precedente esperimento la funzione da trasformare era reale. Se è complessa in generale, la parte 

reale e la parte immaginaria della trasformata non sono nè pari nè dispari (verificare questa

affermazione).  Lo stesso accade per la DFT ( verificare). In questi casi  l'individuazione dell'intervallo nel

dominio delle frequenze in cui "collocare la N-pla trovata" non è così scontata.

L'esercizio seguente illustra questo punto.


Esercizio Per illustrare questo punto, i più esperti possono fare il percorso inverso  dell'esercizio  su esposto:

assegnata f^ = Re(f^) +i Im(f^) in (0.2) calcolare  numericamente la funzione  f in (1).

Consiglio di scrivere un  programma nuovo ripetto al precedente, iniziando con la scelta dell'intervallo su cui restringere la

funzione  f^  e del numero di punti N  di campionatura.


Raccomando molto questo esperimento, davvero istruttivo.

Si noti che anche in  questo caso sappiamo già il risultato (conosciamo  la   f che è la 

funzione (1) e quindi sappiamo "dove collocare" la  (SF_k) in un grafico (vale a dire scoprire a quali 

valori delle ascisse corrispondono questi valori trovati), ma si pensi ad una situazione in cui questa è 

sconosciuta, che è la tipica situazione reale!  

Il seguente esercizio mostra che, assegnata una N-pla (f_o,....f_N-1),  ci sono più funzioni che hanno la

stessa sua  DFT. 


33

Questo mostra che in generale la conoscenza della DFT di una campionatura di una funzione

consente di individuare valori di  f^ a meno di una traslazione.

 


 

 

TERZA  PARTE: CONTROLLO  DELL'ERRORE

Vogliamo ora valutare le  fonti di errore nel calcolo numerico della trasformata di Fourier. 

Per uno studio completo  si può  consultare il libro di W. L.  Briggs,  V. E.  Henson "The DFT".

Non discuteremo l'errore dovuto al troncamento della funzione. Analizzeremo invece l'errore cosiddetto di

aliasing.

 

Errore di Aliasing

Abbiamo visto che se  f  ha supporto in  [0,S], SF_k  è uguale a  

SFkpoisson

Dunque  si ha un errore di aliasing, che, come già sappiamo, tipicamente si manifesta ai bordi.

Per ridurre questo errore si può rendere più grande il parametro del periodo N/S; così facendo  le code che "entrano"     

in un intervallo  di periodicità saranno più piccole (ovviamente questo accade se f^  decresce all'infinito).

Vale a dire, poichè S è fissato, si può prendere un numero N di punti più grande. 

Quindi, per ridurre l'errore di aliasing,  bisogna prendere più punti di campionatura.

Queste osservazioni sono particolarmente utili per l'Esercizio 5.3, che  ha proprio lo scopo di evidenziare questi errori.

Considerazioni del tutto simili valgono nel caso f abbia supporto in un intervallo [-R,S], R e S>0

OSSERVAZIONE (Sulla scelta di modificare la funzione assegnata nel punto t=0 ponendo f(0)=1/2). 

Questa scelta corrisponde ad usare la regola dei trapezi al posto della regola  dei rettangoli nel calcolo 

dell'integrale che esprime la trasformata di Fourier di f (in realtà anche l'estremo destro dell'intevallo 

andrebbe  moltiplicato per 1/2, ma il valore della funzione in questo punto è piccolo). 

Sappiamo che l'errore nella regola dei trapezi è più  piccolo di quello  nella regola dei rettangoli.   

Conviene comunque sperimentare in entrambi i casi, sia operando questa correzione sia lasciando il 

valore 1 in zero. Conviene verificare l'effetto della correzione sia sulla parte reale che sulla parte 

immaginaria della calcolata.

ASSEGNO DI ESERCIZI DI LABORATORIO: consegnare anche questi esperimenti.