Elaborazione numerica dei segnali/DFT e FFT

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Elaborazione numerica dei segnali

Trasformata di Fourier discreta (DFT)

Definizione di DFT

Data una sequenza x(n) costituita da un numero N finito di campioni, la sua trasformata di Fourier discreta (Template:Tooltip) X(k), all'interno del suo periodo N, è definita:

X(k)=n=0N1x(n)ej2πnkN,k=0,1,2,,N1

e può essere interpretata come la discretizzazione in frequenza della DTFT X(ej2πf), di cui vengono prese N frequenze fk equispaziate:

fk=kN,k=0,1,2,,N1

Dal punto di vista algoritmico, la DFT è di complessità inferiore rispetto alla DTFT, e inoltre è definita in modo discreto → è rappresentabile su un calcolatore.

Inversione della DFT (IDFT)

L'antitrasformata della DFT, all'interno del suo periodo N, è definita:

x(n)=1Nk=0N1X(k)ej2πnkN,n=0,1,2,,N1

Estensioni periodiche

La DFT e la IDFT[1] sono periodiche di periodo N:

{X(k)=X(k+N)k=0,,N1x(n)=x(n+N)n=0,,N1

Si definiscono le estensioni periodiche X(k) e x(n), rispettivamente di X(k) e x(n):

{X(k)=n=0N1x(n)ej2πnkNkx(n)=1Nk=0N1X(k)ej2πnkNn

Tecnica di aggiunta degli zeri

È possibile teoricamente ricavare per interpolazione la DTFT partendo dagli N campioni della DFT:

X(ej2πf)=1Nk=0N1X(k)sin(πNfkπ)sin(πfπkN)ejπ(N1)(fkN)

Template:Cassetto

In pratica la DTFT viene approssimata a una DFT definita su un nuovo periodo N1N, applicata a una sequenza xz(n) che non è altro che la sequenza di partenza x(n) a cui sono stati accodati N1N campioni nulli:

xz(n)={x(n)n=0,,N10n=N,,N11

Aggiungere degli zeri in fondo alla sequenza x(n) permette di aumentare artificialmente il periodo della sua DFT senza alterare la DTFT a cui si cerca di approssimare:

X(ej2πfk)=n=0N1x(n)ej2πfkn=n=0N11xz(n)ej2πkN1nk=0,,N11

e siccome il numero di campioni presi dalla DTFT è maggiore, la risoluzione della DTFT risulta molto più alta.

Esempio - Sequenza porta
x(n)={10nN10nN

Considerando solamente l'intervallo [0,N1] si ottiene come DFT |X(k)| una funzione sinc campionata a una frequenza molto bassa:

X(k)=n=0N1x(n)ej2πnkN=n=0N1ej2πnkN=1ej2πk1ej2πkN={0k0Nk=0
N1=N
 

Basta però aggiungere degli zeri a destra della porta per migliorare la risoluzione della DTFT:

N1=2N
 

N1=4N
 

N1=100N

Aliasing nel tempo

Partendo dalla sequenza x(n) di durata non finita:

x(n)=anu(n)0<a<1

la sua DTFT campionata nel primo periodo N:

X(k)=X(ej2πkN)=11aj2πkNk=0,,N1

non coincide esattamente con la DFT calcolata sulla sequenza troncata:

XN(k)=1aN1aj2πkNk=0,,N1

perché vi è un effetto di aliasing nel tempo dovuto al fatto che la sequenza x(n) di partenza non ha durata finita.

Al crescere dell'ampiezza del periodo N, la DFT della sequenza troncata tende sempre di più alla DTFT campionata nel primo periodo.

Proprietà della DFT

Accorgimenti

Le proprietà della DFT sono analoghe a quelle della DTFT, ma ci vogliono alcuni accorgimenti:

  • la DFT X(k) è periodica di periodo N → le operazioni sulla DFT X(k) devono condurre a una sequenza periodica di periodo N;
  • la IDFT x(n) è periodica di periodo N → le operazioni sulla IDFT x(n) devono condurre a una sequenza periodica di periodo N.

Operatore di modulo

L'operatore di modulo restituisce sempre un numero compreso in [0,N1]:

|k|N=k mod N

Se k è un numero negativo, si somma N a k tante volte fino a ottenere un numero compreso in [0,N1]:

|13|16=3

Operatore di ritardo circolare

L'operatore di ritardo circolare restituisce una sequenza ritardata che è ancora compresa in [0,N1]:

x(|nN0|k)

in quanto i campioni che vanno al di là del primo periodo ricompaiono all'inizio del primo periodo stesso.

Modo operativo
  • si genera la sequenza periodicizzata x(n);
  • si applica il ritardo di N0 campioni a x(n): x(nN0);
  • la sequenza ritardata x(nN0) è pari alla sequenza periodicizzata x(nN0) troncata nel primo periodo N (n[0,N1]).

Convoluzione circolare

La convoluzione circolare tra due sequenze x(n) e y(n) è definita:

x(n)y(n)=k=0N1x(k)y(|nk|N)

dove N è la più grande tra le durate delle singole sequenze.

Proprietà commutativa
x(n)y(n)=y(n)x(n)

La convoluzione circolare si può rappresentare con un prodotto matrice per vettore. Ad esempio, se la durata N è pari a 4:

x(n)y(n)=[y(0)y(3)y(2)y(1)y(1)y(0)y(3)y(2)y(2)y(1)y(0)y(3)y(3)y(2)y(1)y(0)][x(0)x(1)x(2)x(3)]

Linearità

z(n)=a1x(n)+a2y(n)Z(k)=a1X(k)+a2Y(k)

Ritardo

z(n)=x(|nN0|N)Z(k)=X(k)ej2πkNN0

Modulazione

z(n)=ej2πk0Nnx(n)Z(k)=X(|kk0|N)

Convoluzione circolare

z(n)=x(n)y(n)Z(k)=X(k)Y(k)
Accorgimenti
  • la convoluzione circolare di due sequenze di durata N campioni ha una uguale durata di N campioni (a differenza della convoluzione lineare della DTFT, la cui sequenza risultante ha durata 2N1 campioni);
  • la convoluzione circolare z(k) di due IDFT x(k) e y(k), entrambe di periodo N, è periodica di periodo N:
    z(n+N)=k=0N1x(k)y(n+Nk)=k=0N1x(k)y(nk)=z(n)

Proprietà di simmetria

Se la sequenza x(n) è reale:

  • X(k)=XR(k)+jXI(k)
    • se x(n) è una sequenza pari: XI(k)=0;
    • se x(n) è una sequenza dispari: XR(k)=0;
  • per la DFT vale la simmetria hermitiana intorno a 0:
    X(k)=X*(|k|N)
  • per la DFT vale la simmetria hermitiana intorno a N2;
  • il campione in k=0 della DFT è sempre reale:
    X*(0)=X(0)=n=0N1x(n)

Trasformata di Fourier veloce (FFT)

La DFT ha complessità quadratica (N2).

La Template:Tooltip è un algoritmo di complessità linearitmica (NlogN) che implementa la DFT e la IDFT in maniera più efficiente.

DFT

La DFT può essere rappresentata in termini di matrici:

𝐗=𝐇𝐱;[X(0)X(1)X(2)X(N1)]=[11111HN1HN2HNN11HN2HN4HN2(N1)1HNN1HN2(N1)HN(N1)(N1)][x(0)x(1)x(2)x(N1)]

dove:

HN=ej2π1NHNnk=ej2πnkN

Algoritmo della decimazione nel tempo

L'algoritmo della decimazione nel tempo è un algoritmo di tipo "divide et impera" che riduce la complessità dell'algoritmo di DFT.

Ipotesi
N è una potenza di 2
Divide

La sequenza si suddivide in due sottosequenze costituite da metà campioni:

  • la sottosequenza x0(n) è formata dai campioni pari:
    x0(n)=x(2n)n=0,,N21
  • la sottosequenza x1(n) è formata dai campioni dispari:
    x1(n)=x(2n+1)n=0,,N21
Ricombinazione

Ogni DFT X(k), elemento del vettore 𝐱, si ottiene dalla somma delle DFT delle singole sottosequenze x0(n) e x1(n):

X(k)=X0(|k|N2)+HNkX1(|k|N2)=n=0N21x0(n)HN2nk+HNkn=0N21x1(n)HN2nk

Template:Cassetto

Complessità

Il numero totale di operazioni (somme e prodotti) complesse è pari a:

N+N22<N2

Si può quindi riapplicare ripetutamente il procedimento "divide et impera" sulle sottosequenze. Al passo k-esimo si ha una complessità pari a:

kN+2k(N2k)2k=1,,log2N

All'ultimo passo (k=log2N), quando si arriva a dover valutare le DFT su 1 punto, la complessità totale è linearitmica:

log2NN+Nlog2NN

Riduzione di complessità

La complessità può essere ulteriormente ridotta sfruttando le proprietà di simmetria della matrice 𝐇.

Esempio con N=4 campioni
{X(0)=x(0)+x(2)+x(1)+x(3)X(1)=x(0)+H2x(2)+H4[x(1)+H2x(3)]X(2)=x(0)+x(2)+H42[x(1)+x(3)]X(3)=x(0)+H2x(2)+H43[x(1)+H2x(3)]

Template:Cassetto

Schema circuitale a farfalla

IDFT

Tutte le considerazioni sulla DFT valgono anche per la IDFT: basta applicare l'algoritmo sul complesso coniugato della DFT e poi dividere per N:

x(n)=1Nk=0N1X(k)ej2πnkN=1N[k=0N1X*(k)ej2πnkN]*x(n)=IDFT[X(k)]=1NDFT[X*(k)],n=0,1,2,,N1

Note

  1. Si noti che la sequenza di partenza x(n) non era periodica, ma aveva durata finita.