Sei sulla pagina 1di 8

Calcolo di integrali di Fourier usando la FFT

13 settembre 2014
1 Integrale di Fourier
Consideriamo il seguente integrale di Fourier:
H(f) =
_
+

h(t) exp(j2ft)dt (1)


dove h(t) `e una funzione descrivibile tramite un numero nito di campioni e
quindi del tipo:
h(t) =
M1

m=0
h
m

_
t t
m

_
(2)
dove > 0 `e il passo di campionamento. I campioni sono prelevati negli
istanti t
m
= t
0
+m e il numero totale di campioni prelevati `e M. il valore
dei campioni `e h
m
= h(t
m
). La funzione () `e detta kernel di interpolazione.
Il kernel `e tale che (0) = 1 e (m) = 0, m = 1, 2, . . . , dal momento che
nei punti di campionamento la sommatoria deve restituire i valori campionati.
Il kernel pu` o essere ad esempio una funzione nestra rettangolare rect(t),
una nestra triangolare (t), anche una delta di Dirac (t). Nel caso in
cui il segnale h(t) sia a banda limitata il kernel `e una funzione sinc(t) =
sin(t)/t. Utilizzando la rappresentazione (2) della funzione h(t) `e possibile
scrivere lintegrale di Fourier (1) nel seguente modo:
H(f) =
M1

m=0
h
m
_
+

_
t t
m

_
exp(j2ft)dt (3)
da cui si ottiene
H(f) =
M1

m=0
h
m
_
+

_
t t
m

_
exp(j2ft)dt (4)
1
ricordando che
_
+

_
t t
m

_
e
j2ft
dt = (f )e
j2ft
m
(5)
dove () `e la trasformata di Fourier di () Si ottiene che
H(f) = (f )
M1

m=0
h
m
exp (j2ft
m
) (6)
che riscriviamo come
H(f) = W

(f)
M1

m=0
h
m
exp (j2ft
m
) (7)
dove W

(f) = (f ). Notiamo che no a questo punto non `e stata


eettuata nessuna approssimazione. Tuttavia la valutazione della (7) per
un numero elevato di frequenza puo risultare oneroso dal punto di vista
computazionale.
2 Algoritmo di Fast Fourier Transform
Lalgoritmo di Fast Fourier Transform - FFT permette di valutare in modo
eciente e simultanemante la seguente somma
X
k
=
N1

n=0
x
n
exp
_
j2k
n
N
_
(8)
per k = 0, , N 1. In altri termini dato il vettore di numeri comples-
si [x
0
, x
1
, , x
N1
] lalgoritmo FFT produce in (N log N) operazioni il
vettore di [X
0
, X
1
, , X
N1
]. Nel seguito indicheremo con la notatione
FFT
k
[x
0
, x
1
, , x
N1
] la componente numero k del vettore prodotto dalla
FFT. Ora mostriamo alcune propriet`a della FFT che ci serviranno in seguito.
Supponiamo di dover calcolare una FFT con N pari

X
k
=
N1

n=0
(1)
n
x
n
exp
_
j2k
n
N
_
(9)
per k = 0, , N 1. In cui i campioni di posto dispari sono cambiati di
segno. Il fattore del segno si pu`o scrivere come (1)
n
= exp(jn) e quindi
si ottiene

X
k
=
N1

n=0
exp
_
j2
_
k +
N
2
_
n
N
_
(10)
2
per cui si ha che

X
k
=
_
X
k+N/2
per k = 0, . . . , N/2 1
X
kN/2
per k = N/2, , N 1
(11)
cio`e il vettore

X si pu` o ottenere scambiando la prima met`a del vettore X
con la seconda. In questo caso si pu`o scrivere che

X = fftshift[X]
3 Calcolo dellintegrale di Fourier mediante
la FFT
Riconsideriamo la (7) e cerchiamo di esprmimerla utilizzando lalgoritmo di
FFT. Tenendo conto che t
m
= t
0
+ m si pu` o scrivere che
H(f) = W

(f) exp (j2ft


0
)
M1

m=0
h
m
exp (j2fm) (12)
Assumiamo di voler calcolare la (12) in un numero discreto di frequenze. Sce-
gliendo le frequenze in modo opportuno si pu` o impiegare la FFT. In partico-
lare si deve scegliere un numero intero N M di frequenze in cui calcolare
la (12). In generale per valori di N che sono potenze di 2 lalgoritmo FFT
`e piu eciente. Osservando la (12) e la (8) si comprende che le frequenze
devono essere del tipo
f
n
= f
0
+ n
1
N
(13)
con n = 0, , N 1 cio`e si deve scegliere una risoluzione in frequenza
che `e inversamente proporzionale alla durata del segnale osservato ovvero

f
=
1
N
. Sostituendo le frequenze (13) nella (12) si ottiene
H(f
n
) = W

(f
n
) exp (j2f
n
t
0
)
M1

m=0
h
m
exp (j2f
n
m) (14)
Nel caso in cui N > M si eettua unoperazione detta zero-padding in cui
si pongono i campioni h
m
= 0 per m = M, , N 1, in questo modo `e
possibile estendere la sommatoria no ad N 1 senza alterare il risultato.
Eettuando le dovute semplicazioni si ottiene
H(f
n
) = W

(f
n
) exp (j2f
n
t
0
)
N1

m=0
h
m
exp (j2f
0
m) exp
_
j2n
m
N
_
(15)
3
Per convenienza si pone
W
t
0

(f
n
) = W

(f
n
) exp (j2f
n
t
0
)

h
m
= h
m
exp (j2f
0
m)
e quindi si scrive
H(f
n
) = W
t
0

(f
n
)
N1

m=0

h
m
exp
_
j2n
m
N
_
(16)
che pu` o essere calcolata con una FFT
H(f
n
) = W
t
0

(f
n
)FFT
n
_

h
0
,

h
1
, ,

h
N1
_
(17)
con n = 0, , N 1.
Da notare che nella (17) non `e stata fatta nessuna approssimazione.
3.1 Casi particolari
Consideriamo il caso in cui f
0
=
k
2
, k = 0, 1, 2, in cui rientra anche
il caso in cui f
0
= 0. Si osserva che
exp (j2f
0
m) = exp (jkm)
_
1 per k pari
(1)
m
per k dispari
(18)
Quindi scegliendo f
0
= 0 si ottiene che

h
m
= h
m
per cui
H(f
n
) = W
t
0

(f
n
)FFT
n
[h
0
, h
1
, , h
N1
] (19)
con n = 0, , N 1.
Volendo determinare anche armoniche a frequenze negative occorre di-
stingure tra il caso N pari e il caso N dispari. Nel caso N pari allora si puo
semplicemente scegliere k = 1 e quindi f
0
=
1
2
. In questo modo is otterr` a
che

h
m
= (1)
m
h
m
e si determiner` a lo spettro nelle frequenze
f
n
=
1
2
+
n
N
con n = 0, , N 1. Per n = 0, , N/21 si avranno frequenze negative.
La componente continua si ha per n = N/2. Le altre frequenze per n =
N/2 + 1, , N 1 sono positive. Naturalmente si puo anche evitare di
moltiplicare per (1)
m
utilizzando la funzione fftshift ovvero si ottiene
H(f
n
) = W
t
0

(f
n
) fftshift
n
[FFT [h
0
, h
1
, , h
N1
]] (20)
4
con n = 0, , N 1.
Nel caso in cui N `e dispari allora si pu` o scegliere f
0
=
N1
2N
. In que-
sto modo si avr` a

h
m
= exp
_
j
N1
N
m
_
h
m
e si determiner` a lo spettro nelle
frequenze
f
n
=
N 1
2N
+
n
N
con n = 0, , N 1. Per n = 0, , (N 1)/2 1 si avranno frequenze
negative. La componente continua si ha per n = (N1)/2. Le altre frequenze
per n = (N 1)/2 + 1, , N 1 sono positive. Anche in questo caso si
puo anche evitare di moltiplicare per exp
_
j
N1
N
m
_
utilizzando la funzione
fftshift ovvero si ottiene
H(f
n
) = W
t
0

(f
n
) fftshift
n
[FFT [h
0
, h
1
, , h
N1
]] (21)
con n = 0, , N 1.
4 kernel ()
Nel caso in cui il kernel `e La trasformata di Fourier del kernel risulta () =
().
(f) = 1
per cui si ottiene che
W
t
0

(f) = exp (j2ft


0
) (22)
5 kernel rect()
Calcoliamo i fattori di correzione W
t
0

(f)nel caso in cui il kernel () =


rect(). La trasformata di Fourier del kernel risulta
(f) = sinc(f)
per cui si ottiene che
W
t
0

(f) = sinc(f ) exp (j2ft


0
) (23)
6 kernel sinc()
Calcoliamo i fattori di correzione W
t
0

(f)nel caso in cui il kernel () =


sinc(). La trasformata di Fourier del kernel risulta
(f) = rect(f)
5
per cui si ottiene che
W
t
0

(f) = rect(f ) exp (j2ft


0
) (24)
Si noti che in pratica lunica dierenza con il kernel () sta nel fatto che
lo spettro `e limitato tra
1
2
e
1
2
7 Integrali di Fourier 2D
Supponiamo di voler calcolare il seguente integrale di Fourier 2D
H(k
x
, k
y
) =
_
+

_
+

h(x, y) exp (j2(x k


x
+ y k
y
)) dk
x
dk
y
(25)
dove h(x, y) `e una funzione descrivibile con un numero nito di campioni
ovvero:
h(x, y) =
M1

m=0
N1

n=0
h
mn

x
_
x x
m

x
_

x
_
y y
m

y
_
(26)
dove

x
`e il passo di campionamento nella direzione x.
y
`e il passo di cam-
pionamento nella direzione y. h
mn
= h(x
m
, y
n
) `e il campione prelevato in
(x
m
, y
n
). I campioni sono prelevati nel grigliato di punti x
m
= x
0
+ m
x
e y
n
= y
0
+ n
y
e il numeoro totale di campioni prelevati `e M N. Le
funzioni
x
e
y
sono i kernel di interpolazione e il loro prodotto forma un
unico kernel di interpolazione =
x

y
che `e fattorizzato. Naturalmente
anche in questo caso si ha che
x/y
(0) = 1 e
x/y
(m) = 0, m = 1, 2, . . . .
Ora applicando lo stesso ragionemtno del caso 1D si giunge a
H(k
x
, k
y
) =
x

x
(k
x

x
)
y

y
(k
y

y
)
M1

m=0
N1

n=0
h
mn
exp (j2(x
m
k
x
+ y
n
k
y
))
(27)
dove
x
e
y
sono rispettivamente le traformate di Fourier di
x
e
y
.
Ponendo
W

y
(k
x
, k
y
) =
x

x
(k
x

x
)
y

y
(k
y

y
) (28)
si ottiene
H(k
x
, k
y
) = W

y
(k
x
, k
y
)
M1

m=0
N1

n=0
h
mn
exp (j2(x
m
k
x
+ y
n
k
y
)) (29)
6
anche in questo caso si tiene conto del campionamento e si ottiene
H(k
x
, k
y
) = W
k
x
x
0
+k
y
y
0

y
(k
x
, k
y
)
M1

m=0
N1

n=0
h
mn
exp (j2(m
x
k
x
+ n
y
k
y
))
(30)
dove
W
k
x
x
0
+k
y
y
0

y
(k
x
, k
y
) = W

y
(k
x
, k
y
) exp (j2(x
0
k
x
+ y
0
k
y
)) (31)
Anche nel caso bidimensionale `e opportuno utilizzare un algoritmo di tra-
sformata veloce di Fourier per calcolare H(k
x
, k
y
). Per far cio `e necessario
scegliere un certo numero di frequenze disposte uniformemente. Per cui si
scelgono due numeri interi U M e V N e i valori di frequenza in cui
determinare lo spettro saranno:
k
x
u
= k
x
0
+
u

x
U
(32)
k
x
v
= k
y
0
+
v

y
V
(33)
con u = 0, . . . , U 1 e v = 0, . . . , V 1. Questa scelta di frequenze per-
mette di utilizzare lalgoritmo di FFT. Infatti sostituendo le espressioni delle
frequenze(33) nella (30) ed eettuando lo zero-padding dove necessario si ha
H(k
x
u
, k
y
v
) = W
k
x
u
x
0
+k
y
v
y
0

y
(k
x
u
, k
y
v
)
U1

m=0
V 1

n=0

h
mn
exp
_
j2
_
u
m
U
+ v
n
V
__
(34)
dove

h
mn
sono i campioni demodulati deniti da

h
mn
= h
mn
exp (j2(m
x
k
x
0
+ n
y
k
y
0
)) (35)
A questo punto si pu`o introdurre lalgoritmo FFF2 nel seguente modo
H(k
x
u
, k
y
v
) = W
k
x
u
x
0
+k
y
v
y
0

y
(k
x
u
, k
y
v
)FFT2
_

h
mn
_
(36)
con u = 0, . . . , U 1 e v = 0, . . . , V 1.
Anche nel caso bidimensionale `e possibile evitare di eettuare la demo-
dulazione dei campioni scegliendo opportunamente le frequenze k
x
0
e k
y
0
co-
me fatto nel caso monodimensionale. In particolare scegliendo le frequenze
7
iniziali secondo la seguente regola.
k
x
0
=
_
_
_

1
2
x
per U pari

U1
2U
x
per U dispari
(37)
k
y
0
=
_
_
_

1
2
y
per V pari

V 1
2V
y
per V dispari
(38)
allora si ha semplicemente
H(k
x
u
, k
y
v
) = W
k
x
u
x
0
+k
y
v
y
0

y
(k
x
u
, k
y
v
) FFTSHIFT [FFT2 [h
mn
]] (39)
8