7. TRANSFORMATA FOURIER Ă RAPIDĂ ŞI APLICAŢII

19
7. TRANSFORMATA FOURIER Ă RAPIDĂ ŞI APLICAŢII – IMPLEMENTĂRI PE SC140 IMPLEMENTĂRI PE SC140 Aplicaţii ale Transformatei Fourier Aplicaţii ale Transformatei Fourier Aplicaţii bazate pe calcule numerice - analiza spectrului instrumente de laborator echipamente audio profesionale estimarea vitezei la radar acurateţea calculelor e de importanţa vitală pentru performanţele întregului sistem Aplicaţii ale Transformatei Fourier Aplicaţii ale Transformatei Fourier Aplicaţii de recunoaştere detectarea semnalului cu un conţinut de frecvenţă specific (semnal vocal, audio) Reprezentarea semnalului prin descompunerea după componentele spectrale TFD t t it di ă l it li TFD este o etapa intermediară a algoritmului Aplicaţii ale Transformatei Fourier Aplicaţii ale Transformatei Fourier Aplicaţii bazate pe convoluţie TFD a convoluţiei a două semnale în timp e egală cu produsul transformatelor celor două semnale lungimea filtrului este foarte mare filtrarea se realizează prin TFD a semnalului de intrare înmulţirea cu funcţia de transfer în frecvenţă a filt li( t fi l ltă) filtrului (care poate fi precalculată) TFD inversă

Transcript of 7. TRANSFORMATA FOURIER Ă RAPIDĂ ŞI APLICAŢII

7. TRANSFORMATA FOURIER ĂRAPIDĂ ŞI APLICAŢII –

IMPLEMENTĂRI PE SC140IMPLEMENTĂRI PE SC140

Aplicaţii ale Transformatei FourierAplicaţii ale Transformatei Fourier

Aplicaţii bazate pe calcule numerice - analiza spectrului instrumente de laborator echipamente audio profesionale estimarea vitezei la radar

acurateţea calculelor e de importanţa vitală pentru performanţele întregului sistemp p ţ g

Aplicaţii ale Transformatei FourierAplicaţii ale Transformatei Fourier

Aplicaţii de recunoaştere detectarea semnalului cu un conţinut de frecvenţă

specific (semnal vocal, audio) Reprezentarea semnalului prin descompunerea după

componentele spectraleTFD t t i t di ă l it l i TFD este o etapa intermediară a algoritmului

Aplicaţii ale Transformatei FourierAplicaţii ale Transformatei Fourier

Aplicaţii bazate pe convoluţie TFD a convoluţiei a două semnale în timp e egală cu

produsul transformatelor celor două semnale lungimea filtrului este foarte mare filtrarea se realizează prin TFD a semnalului de intrare înmulţirea cu funcţia de transfer în frecvenţă a

filt l i ( t fi l l tă)filtrului (care poate fi precalculată) TFD inversă

Algoritmi rapizi pentru calculul TFDAlgoritmi rapizi pentru calculul TFD

Transformata Fourier discretă (TFD) este definită prin

21

0 1 1N jnk NX k x n W k N W e

sub formă matriceală

0

, 0,1, , 1,N Nn

X k x n W k N W e

0 , 1 , , 1T

X X X N X

X Wx

0 , 1 , , 1T

x x x N

x

11

1 1 1

1 NN NW W

W

1 1 11

N N

N N NW W

W

1 N NW W

Algoritmi rapizi pentru calculul TFDAlgoritmi rapizi pentru calculul TFD

Sunt necesare un număr de N2 înmulţiri complexe şi N(N-1) adunări complexe.

O înmulţire complexă = 4 înmulţiri şi două adunări reale

Rezultă un număr de 4N2 înmulţiri reale şi 4N înmulţiri reale şi 2N2+2N(-N-1) = 4N2-2N adunări reale.

Complexitatea aritmetică este de forma O(N2) Complexitatea aritmetică este de forma O(N2)

Proprietăţile coeficienţilor WNProprietăţile coeficienţilor W

2j kNkN

1j

kN NNW e

N N 2 12 2 1N Nk j

N NW W e

2 kj nnk nNN N

k

W e W

k

Algoritmi rapizi pentru calculul TFD

Există algoritmi ce permit efectuarea TFD cu un

Algoritmi rapizi pentru calculul TFD

număr mai mic de operaţii. Reprezentarea indicilor:p

1 1 2 2 modd

n K n K n Nk K k K k N

3 1 4 2 modk K k K k N

Algoritmi bază R:N=RM

Algoritmi rapizi pentru calculul TFD

Algoritmi cu decimare în timp

Algoritmi rapizi pentru calculul TFD

1 2 1 2, 0,1, , 1, 0,1, , 1;Nn Rn n n n RR

1 2 1 2, 0,1, , 1, 0,1, , 1;N Nk k k k k RR R

Algoritmi cu decimare în frecvenţă

1 2 1 2, 0,1, , 1, 0,1, , 1;N Nn n n n n RR R

1 2 1 2, 0,1, , 1, 0,1, , 1;

R RNk Rk k k k RR

R

Algoritmi în baza 2Algoritmi în baza 2

Algoritmi cu decimare în timp Algoritmii în baza 2 au fost introduşi de Cooley şi Tukey pentru N=2M, MN.ş y p ,

1 2 1 22 , 0,1, , 1, 0,1;2Nn n n n n

1 2 1 2, 0,1, , 1, 0,1;2 2N Nk k k k k

1 1N

N

1 22NX k X k k

1 2 1 2

1 2

12 22

1 20 0

2Nn n k k

Nn n

x n n W

N

1 1 2 1 2 2

1 12

1 2 20 0 2

2

N

n k n k n kN N

n nx n n W W W

1 20 0 2n n

Algoritmi cu decimare în timpAlgoritmi cu decimare în timp

1 12 2N N

N

1 1 1 2 1 1

1 1

2 2

1 2 1 2 10 02 2

2 2 12

n k k k n kN N N

n n

NX k k x n W W W x n W

P t k 0 21 2 1

2 1 kk k kN NW W W

Pentru k2=0:

1 12 2N N

1 1 1 1 1

1 1

2 2

1 1 10 02 2

2 2 1n k k n kN N N

n nX k x n W W x n W

1kNW 1

2

TFD 2 1N x n 12

TFD 2N x n

Algoritmi cu decimare în timpAlgoritmi cu decimare în timp

1 12 2N N

N

1 1 1 2 1 1

1 1

2 2

1 2 1 2 10 02 2

2 2 12

n k k k n kN N N

n n

NX k k x n W W W x n W

P t k 1 21 2 1

2 1 kk k kN NW W W

Pentru k2=1:

1 1N N

1 1 1 1 1

1 1

2 2

1 1 10 02 2

2 2 12

n k k n kN N N

n n

NX k x n W W x n W

1kNW 1

2

TFD 2 1N x n 12

TFD 2N x n

Algoritmi cu decimare în timpAlgoritmi cu decimare în timp

0

12nx 1k

TFD N/2 1kX

12N

0

12 1 nx 1k

TFD N/2

kW 21 NkX

-1

12N

1kNW

Algoritmi cu decimare în timpAlgoritmi cu decimare în timp

Fluture: o înmulţire cu factorul

2j kk NW e

de modul unitar (numit factor de rotaţie)

a kNa bWNW e

(numit factor de rotaţie) o TFD de ordinul 2.

-1 b k

Na bWk

NW

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8

x(0) X(0)k1=0x(0)

x(4) TFD

X(0)k1 0

X(1)k1=1

x(2) de ordin 4 X(2)k1=2

W k W 2kx(6)

x(1)0

8WX(4)k1=0

X(3)k1=3W4k=W8

2k

x(1)

x(5) TFD-1

X(4)k1 01

8W-1 X(5)k1=1

x(3) de ordin 4-1

28W

X(6)k1=23W

x(7) -18W

X(7)k1=3

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8

x(0) X(0)TFDk1=0

x(0)

x(4)

X(0)

X(1)

TFDde ordin 2 k1=1

x(2) X(2)TFDde ordin 2

-1

08W

2W

08W

x(6)

x(1)

X(3)

X(4)

de ordin 2-1

8W

-11

8W-1

x(1)

x(5)

X(4)

X(5)

TFDde ordin 2

-1

08W

2W-1

28W

3W

x(3) X(6)TFDd di 2

-18W

-18W

x(7) X(7)de ordin 2

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8

x(0) X(0)

-1

08W

x(0)

x(4)

X(0)

X(1)

0W-1

08W

2W

x(2) X(2)

-18W

-18W

08W

x(6)

x(1)

X(3)

X(4)

-1

08W

-11

8W-1

x(1)

x(5)

X(4)

X(5)

0W-1

08W

2W-1

28W

3W

x(3) X(6)

-18W

-18W

-18W

x(7) X(7)

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8

x(0) X(0)0

8W

x(0)

x(1)

X(0)

X(4)-1

-1

08W

08W 1

8W

x(2) X(2)

08W

-18 8

x(3)

x(4)

X(6)

X(1)

-1

08W

-1

-1

28W

x(4)

x(5)

X(1)

X(5)-10

8W

0W

28W

-12W

-13W

x(6) X(3)

8W-1

8W-1

8Wx(7) X(7)-1

Algoritmi cu decimare în frecvenţă

Se reprezintă indicii sub forma:

Algoritmi cu decimare în frecvenţă

1 2 1 2, 0,1, , 1, 0,1;2 2N Nn n n n n

i ltă

1 2 1 22 , 0,1, , 1, 0,1;2Nk k k k k

şi rezultă

2X k X k k 1 2 1 2

1 12 22

NNn n k kNx n n W

1 22X k X k k

1 2

1 20 0 2 N

n nx n n W

1N

1 1 1 2 2 2

1 2

1 12

1 2 20 0 22

n k n k n kN N

n n

Nx n n W W W

Algoritmi cu decimare în frecvenţă

şi rezultă pentru k2=0 şi respectiv, k2=1:

Algoritmi cu decimare în frecvenţă

1 1

12

1 1 1 22

N

n kNX k x n x n n W

1

1 1 1 20 2

22

TFD

Nn

X k x n x n n W

N

1 1 22

TFD2N x n x n n

N

1 1 1

1

12

1 1 1 20 2

2 12

N

n n kN N

n

NX k x n x n n W W

1

1

2

1 1 2TFD2

nN N

Nx n x n n W

2 2

Algoritmi cu decimare în frecvenţăAlgoritmi cu decimare în frecvenţă

0 0

n

TFD nx 2X k

12

1

N

n

N/2

1nx 12X k

00

1n

21 Nnx

TFD N/2

12 1 kX

-1

12 N

11n

NW N/2

Algoritmi cu decimare în frecvenţă

Structura fluturelui este diferită faţă de

Algoritmi cu decimare în frecvenţă

decimarea în timp:

b a a+b

b na b W-1 n

NW b Na b W

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8.

X(0)x(0) n1=0 X(0)

X(4)TFD

x(0) n1 0

x(1) n1=1

X(2)de ordin 4x(2) n1=2

X(6)

X(1)0

8Wx(4) n1=0

x(3) n1=3

X(1)

X(5)TFD-1

x(4) n1 01

8W-1x(5) n1=1

X(3)de ordin 42

8W

-1x(6) n1=23W

X(7)8W-1x(7) n1=3

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8.

x(0) X(0)TFDx(0)

x(1)

X(0)

X(4)

TFDde ordin 2

08W

2W-1

x(2) X(2)TFDde ordin 28W

-10

8W

x(3)

x(4)

X(6)

X(1)

de ordin 2

18W

-1

-1

x(4)

x(5)

X(1)

X(5)

TFDde ordin 2

08W

2W-1

28W

3W-1x(6) X(3)TFD

d di 28W-1

8W-1x(7) X(7)de ordin 2

Exemplu: o transformată de ordinul 8Exemplu: o transformată de ordinul 8.

x(0) X(0)0

8W-1

x(0)

x(1)

X(0)

X(4)0

8W

2W 0W-1

x(2) X(2)

8W 8W-1-1

08W

x(3)

x(4)

X(6)

X(1)0

8W-1

18W

-1

-1

x(4)

x(5)

X(1)

X(5)0

8W

2W 0W-1

28W

3W-1x(6) X(3)

8W 8W-1-1

8W-1x(7) X(7)

Calculul fluturilor în baza 2 DIT şi DIFCalculul fluturilor în baza 2 DIT şi DIF

2 2 2ij kk NW k k

2 2cos sin

r i

jk NN

W W

W e k j kN N

Ecuaţiile ieşirilor fluturelui DITi

'A A B W BWA kNWBAA '

'

r r r r i i

i i i r r i

A A B W BW

A A BW B W

-1kNWB k

NWBAB '

'

'

r r r r i i

i i i i

B A B W BW

B A BW B W

N i i i r r iB A BW B W Complexitate aritmetică:

trei adunări, trei scăderi, patru înmulţiritrei adunări, trei scăderi, patru înmulţiri

Calculul fluturilor în baza 2 DIT şi DIF

Ecuaţiile ieşirilor fluturelui DIF

Calculul fluturilor în baza 2 DIT şi DIF

Ecuaţiile ieşirilor fluturelui DIF

A BAA '

-1B nNWBAB )('n

NW'r r rA A B

'

'

r r r

i i iA A BB A B W A B W

Complexitate aritmetică: trei adunări

'

r r r r i i i

i r r i i i r

B A B W A B W

B A B W A B W

trei adunări trei scăderi patru înmulţiri

Calculul fluturilor în baza 2 DIT şi DIF

Fluturele pentru FFT în baza 2 DIT Fluturele pentru FFT în baza 2 DIF

Calculul fluturilor în baza 2 DIT şi DIF

p pA

B

kNWBAA '

kWBAB'

A

B

BAA '

nWBAB )('

MACMSU

ADDSUB

-1kNWB k

NWBAB ' -1B nNWBAB )('n

NW

1'

r r rT A B WA T BW '

r r rA A BT A B

MSUMACMAC

SUBADDSUB

1

2'

r i i

i i r

A T BWT A BWA T B W

1'

r r

i i i

T A BA A BT A B

MACMSUMAC

SUBMPYMAC

2

3'

i r i

r r r

A T B WT A B WB T BW

2

3 1'

i i

r

T A BT TWB T T W

MACMSUMSU

MACMPYMAC

3

4'

4

r i i

i i r

i i

B T BWT A BWB T B W

3 2

4 2'

4 1

r i

r

i i

B T T WT T WB T TW

MSU MAC4i r iB T B W 4 1i i

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

Se pune problema dacă valorile complexe obţinute după calculul TFD au valori supraunitare:

21N jnk

În modul:

0

, 0,1, , 1,jnk N

N Nn

X k x n W k N W e

În modul:

1 1N N

nk nkN NX k x n W x n W N

ceea ce înseamnă o creştere maximă cu N.

0 0 1 1

N Nn n

X k x n W x n W N

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

Pentru reprezentarea: parte reală şi parte imaginară,

2 2Re ImX k X k X k N

Rezultă o valoare maximă a componentelor

Re şi ImX k N X k N

Aceasta conduce la necesitatea scalării datelor la intrarea TFD cu 1/N, în speţă a semnalului x(n).p ţ ( )

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

Pentru TFD rapidă în bază 2, N=2M

Împărţirea cu N este echivalentă cu shiftarea la dreapta a semnalului de intrare cu log2N biţi.p g2 ţ De exemplu: N=256 rezultă o shiftare la dreapta cu 8 biţi a

semnalului de intrare.

Cu cât lungimea TFD creşte, numărul de biţi cu care se shiftează intrarea creşte înrăutăţindu-se RSZ.ş ţ

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

Scalarea ieşirilor fiecărui etaj Ieşirile fiecărui etaj sunt valorile complexe obţinute la

ieşirea fluturelui de ordin 2ş

A kNWBAA '

-1kNWB k

NWBAB 'NW

A BAA '

-1B nNWBAB )('n

NW1 NW

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

În modul, ieşirile fluturelui se pot dubla la fiecare etaj aşa cum rezultă din ecuaţia:

' 2A A BW A B W

Este necesară scalarea ieşirilor fiecărui etaj cu 2

1' 2N NA A BW A B W

Este necesară scalarea ieşirilor fiecărui etaj cu 2. Numărul total de etaje este log2N ceea ce conduce la

l N d l i t l i i FFTo scalare cu N de la intrarea la ieşirea FFT. Această metodă are un raport semnal-zgomot mai

bun ca metoda anterioară.

Scalarea pentru DSP în virgulă fixăScalarea pentru DSP în virgulă fixă

Scalarea condiţionată în virgulă mobilă pe bloc În etajele pentru care adunările nu conduc la depăşiri

scalarea nu este necesară, apărând astfel o pierdere de i f ţiinformaţie.

A treia metodă de scalare tratează un etaj ca pe un bloc de date atribuind un exponent pentru fiecare blocdate, atribuind un exponent pentru fiecare bloc.

Dacă apare o creştere a numărului de biţi la o ieşire, î t l bl d d t t hift t l d t iîntregul bloc de date este shiftat la dreapta şi exponentul blocurilor este incrementat. La sfârşitul FFT trebuie determinat numărul de scalări

efectuate pentru a avea un rezultat corect

Reordonarea în ordine inversă a biţilorReordonarea în ordine inversă a biţilor

S ţ Indexul iniţial Indexul cu biţii inversaţi S ţSecvenţainiţială

Indexul iniţial Indexul cu biţii inversaţi Secvenţa ordonatăDecimal Binar Decimal Binar

(0) 0 000 0 000 (0)x(0) 0 000 0 000 x(0)

x(4) 4 100 1 001 x(1)

( ) ( )x(2) 2 010 2 010 x(2)

x(6) 6 110 3 011 x(3)

x(1) 1 001 4 100 x(4)

x(5) 5 101 5 101 x(5)

x(3) 3 011 6 110 x(6)

x(7) 7 111 7 111 x(7)

Reordonarea în ordine inversă a biţilorReordonarea în ordine inversă a biţilorAdresa secvenţei

iniţialeSecvenţa

iniţialăModificarea adresei

reverse-carrySecvenţa

reordonată

$8 = 1000 0R0 = 1000 +N0 = 0100

0

$9 = 1001 1R0 = 1100 +

4$9 = 1001 1N0 = 0100

4

$A = 1010 2R0 = 1010 +N0 = 0100

2

$B = 1011 3R0 = 1110 +N0 = 0100

6

$C = 1100 4R0 = 1001 +

1$C 1100 4N0 = 0100

1

$D = 1101 5R0 = 1101 +N0 = 0100

5

R0 1011$E = 1110 6

R0 = 1011 +N0 = 0100

3

$F = 1111 7R0 = 1111 +N0 0100

7$N0 = 0100

Reordonarea în ordine inversă a biţilorReordonarea în ordine inversă a biţilor

for( k = 0; k < N; k++ )for( k = 0; k < N; k++ )if( (i = BitReverse[k]) != k ){

BitReverse[i] = i;k1 = k << 1;k2 = i << 1;Re1 = x[k1];x[k1++] = x[k2];x[k2++] = Re1;x[k2++] = Re1;Re1 = x[k1];x[k1] = x[k2];x[k2] = Re1;

}}}

Caracteristicile unei transformate DITCaracteristicile unei transformate DIT

Index IndexDistanţa întreDistanţa întreDistanţa între

X(0)

X(4)

x(0)

x(1) W0

000

001

000

100

binar binarnodurile dualenodurile dualenodurile duale

X(4)

X(2)-1

-1

x(1)

x(2) W0

W0

W

W2

001

010

100

010

X(6)

X(1)-1-1

-1

x(3)

x(4)W0

0

W W2

1

011

100

110

001

X(5)

X(3)

-1

11

-1x(5)

x(6)

W0

W0 W2

W1101

110

101

011

Etaj 1 Etaj 2 Etaj 3

X(7)-1

-1

-1

-1

-1x(7)

W0 W2 W3111 111

Caracteristicile unei transformate DITCaracteristicile unei transformate DIT

Etajul 1 Etajul 2 Etajul 3 Etajul log2N2

Număr de grupuri 1 2 4 N / 2

Număr de fluturi N / 2 N / 4 N / 8 1pe grup N / 2 N / 4 N / 8 1

Distanţa între nod ri d ale N / 2 N / 4 N / 8 1noduri dualeExponentul coeficienţilor W

(N/2)k,k=0

(N/4)k,k=0, 1

(N/8)k,k=0,1,2,3

k,k=0..N/2-1ţ , , , ,

Implementarea FFT DIT pe SC140Implementarea FFT DIT pe SC140for( etaj = 1; etaj < N; etaj <<= 1, Pas >>= 1 ){{

k1 = 0; // indicele intrarii 1 a flutureluik2 = Pas << 1; // indicele intrarii 2 a flutureluifor( grup = 0; grup < etaj; grup++ ){//bucla parcurge fluturii din cadrul grupului curent// p g g p

for( k = 0; k < Pas; k++ ){

C l l fl t i... Calcul fluturi}

k1 = k2;k2 = k1 + (Pas << 1);}

}}

Implementarea FFT DIT pe SC140Implementarea FFT DIT pe SC140for( k = 0; k < Pas; k++ ){

1 r r rT A B W {Wr = W[Cr*2];Wi = W[Cr*2+1];

'1

2'

r i i

i i r

A T BWT A BWA T B W

//scalarea cu 2 a intrarilorAr = shr(x[k1],1);Ai = shr(x[k1+1] 1);

2

3'

i r i

r r r

A T B WT A B WB T BW

Ai = shr(x[k1+1],1);Br = shr(x[k2],1);Bi = shr(x[k2+1],1);

3

4'

r i i

i i r

B T BWT A BW

B T B W

//calculul iesirilor flutureluiT1 = L_mac(ldeposit_h(Ar), Br, Wr); //T1 = Ar + Br * WrT2 = L mac(ldeposit h(Ai) Bi Wr); //T2 = Ai + Bi * Wr

4i r iB T B W

T2 = L_mac(ldeposit_h(Ai), Bi, Wr); //T2 = Ai + Bi * WrT3 = L_msu(ldeposit_h(Ar), Br, Wr); //T3 = Ar - Br * WrT4 = L_msu(ldeposit_h(Ai), Bi, Wr); //T4 = Ai - Bi * Wr

Implementarea FFT DIT pe SC140Implementarea FFT DIT pe SC140x[k1++] = msu_r(T1, Bi, Wi); //Ar’ = T1 - Bi * Wix[k1++] = mac r(T2 Br Wi); //Ai’ T2 + Br * Wix[k1++] = mac_r(T2, Br, Wi); //Ai’ = T2 + Br * Wix[k2++] = mac_r(T3, Bi, Wi); //Br’ = T3 + Bi * Wix[k2++] = msu_r(T4, Br, Wi); //Bi’ = T4 - Br * Wi

//coeficientii de rotatie urmatoriCr = Cr + etaj;

1'

r r rT A B WA T BW

Cr = Cr + etaj; }

1

2'

2

r i i

i i r

i i

A T BWT A BWA T B W

2

3'

3

i r i

r r r

r i i

A T B WT A B W

B T BW

3

4'

4

r i i

i i r

i r i

T A BW

B T B W

Optimizarea pentru execuţie mai rapidăOptimizarea pentru execuţie mai rapidă

Optimizarea implementării FFT se poate face: pentru micşorarea timpului de calcul. pentru reducerea memoriei ocupate de program sau de date.

Cele două cerinţe sunt în general contradictorii. Deoarece costurile memoriei sunt într-o continuă Deoarece costurile memoriei sunt într o continuă

descreştere, optimizarea timpului de execuţie devine din ce în ce mai importantădin ce în ce mai importantă.

Exemplu: TFD rapidă cu decimare în timpExemplu: TFD rapidă cu decimare în timp

Factori de rotaţie triviali (nu implică operaţii aritmetice) în primul şi al doilea etaj

0 1NW / 4NNW j

se pot combina primul şi al doilea etaj într-un fluture de ordin 4:

N N j

de ordin 4:

0

A A’

-1

08 1W

08 1W

B B’

1

-1

1

28W j

C

D1

C’

D’-1 -1

Exemplu: TFD rapidă cu decimare în timpExemplu: TFD rapidă cu decimare în timp

x(0) X(0)

-1

08W

x(0)

x(4)

X(0)

X(1)

0W-1

08W

2W

x(2) X(2)

-18W

-18W

08W

x(6)

x(1)

X(3)

X(4)

-1

08W

-11

8W-1

x(1)

x(5)

X(4)

X(5)

0W-1

08W

2W-1

28W

3W

x(3) X(6)

-18W

-18W

-18W

x(7) X(7)

Exemplu: TFD rapidă cu decimare în timpExemplu: TFD rapidă cu decimare în timp

A A’

-1

08 1W

B B’

-1

08 1W

28W j

C

1

C’

'A A C B D

-1 -18W j

D1

D’

'A A C B D '

r r r r r

r r r r r

A A C B D

B A C B D

'

i i i i i

i i i i i

A A C B D

B A C B D

'

'

r r r i i

r r r i i

C A C B D

D A C B D

'

'

i i i r r

i i i r r

C A C B D

D A C B D

r r r i i i i i r r

Exemplu: TFD rapidă cu decimare în timpExemplu: TFD rapidă cu decimare în timp

Pentru fiecare fluture trivial de ordin 4 trebuie efectuate 8 adunări şi 8 scăderi reale.

În total pentru primele două etaje ale unei p p jtransformate de ordin N în loc de 2.N/2 fluturi de ordin 2 se vor calcula N/4 fluturi triviali de ordin 4.

Exemplu: TFD rapidă cu decimare în timpExemplu: TFD rapidă cu decimare în timp

Factori de rotaţie triviali există şi în etajele rămase. Există două tipuri de fluturi triviali: Tipul 1: 0 / 41, N

N NW W j

Tipul 2:/8 3 /8 2 2

2 2N N

N NW W j

Tipul 1 nu implică multiplicări. Tipul 2 de factori nu sunt cu adevărat triviali dar se

2 2

Tipul 2 de factori nu sunt cu adevărat triviali dar se reduce complexitatea fluturelui de ordin 2 la două multiplicări şi şase adunări sau scăderi realemultiplicări şi şase adunări sau scăderi reale.

Folosirea unor fluturi particulari are ca rezultat mărirea programului prin operaţii diferite pentru fiecare etajprogramului prin operaţii diferite pentru fiecare etaj.

TFD pentru secvenţe realeTFD pentru secvenţe reale

În cazul secvenţelor reale există proprietatea:

deci

*( ) ( )X k X N k deci

X(0) şi X(N/2) au valori reale

Re{ ( )} Re{ ( )}X k X N k Im{ ( )} Im{ ( )}X k X N k

X(0) şi X(N/2) au valori reale. Este suficient să se calculeze X(k) pentru k=0,1,…,N/2 (un

număr de N valori reale)număr de N valori reale).

Există algoritmi specializaţi pentru date reale it d l ităţii it ti i i i permit reducerea complexităţii aritmetice şi a memoriei

utilizate apare o complicare a programului apare o complicare a programului.

Algoritmi pentru o singură secvenţă realăAlgoritmi pentru o singură secvenţă reală

Vom utiliza algoritmul în bază doi cu decimare în timp:

1 21 1 1 1

1 12 2

21 2 1 1( ) (2 ) (2 1)

2

N NNk kn k n k

N N NNX k k x n W W x n W

Pentru k2=0 şi k1=0,1,…,N/2–1:1 10 02 22 n n

unde prin X'(k1) şi X''(k1) s-au notat TFD de ordin N/2

11 1 1( ) ( ) ( )k

NX k X k W X k

unde prin X (k1) şi X (k1) s au notat TFD de ordin N/2.

De asemenea:

1* *1 1 12 2 2

kN

N N NX k X k W X k

Algoritmi pentru o singură secvenţă realăAlgoritmi pentru o singură secvenţă reală

Exprimând părţile reale şi imaginare se obţin:

1 1 1 1 1 1Re ( ) Re ( ) cos Re ( ) sin Im ( )Im ( ) Re ( ) sin Re ( ) cos Im ( )

X k X k k X k k X kX k X k k X k k X k

pentru eşantioanele de ordin 0,1,…,N/4

1 1 1 1 1 1Im ( ) Re ( ) sin Re ( ) cos Im ( )X k X k k X k k X k 2N

1 1 1 1 1 1Re Re ( ) cos Re ( ) sin Im ( )2NX k X k k X k k X k

1 1 1 1 1 1Im Im ( ) sin Re ( ) cos Im ( )2NX k X k k X k k X k

pentru eşantioanele de ordin N/4+1,…,N/2.

Algoritmi pentru o singură secvenţă reală

Rezultă schema:

Algoritmi pentru o singură secvenţă reală

0ReX’(k1) ReX[k1]

TFD : N/2 :

ImX’(k1)

x(2n)ReX[k1]

ImX[k1] :

2N

-1

cos(k1)ReX[N/2-k1]-1x(2n+1)

0ReX’’(k1)

TFD :N/2

sin(k1)sin(k1)

-1ImX[N/2-k1]-1

N/2 :ImX’’(k1)

:-cos(k1)

sin(k1)

Algoritmi pentru două secvenţe reale

Calculul simultan al TFD pentru două secvenţe de

Algoritmi pentru două secvenţe reale

date reale x(n) şi y(n) Se poate utiliza algoritmul pentru date complexe. p g p p TFD este o transformată liniară astfel că, dacă notăm:

( ) ( ) ( )j atunci:

( ) ( ) ( )z n x n j y n

( ) TFD{ ( )}( )Z k z n k( ) ( )X k jY k

TFD{ ( ) ( )}( )x n jy n k

Re ( ) Im ( ) Im ( ) Re ( )X k Y k j X k Y k

Re ( ) Im ( ) Re ( ) Im ( )X k j X k j Y k j Y k

( ) ( ) ( ) ( )j

Algoritmi pentru două secvenţe realeAlgoritmi pentru două secvenţe reale

( ) Re ( ) Im ( ) Im ( ) Re ( )Z k X k Y k j X k Y k

Deoarece secvenţele sunt reale, TFD are simetrie

( ) ( ) ( ) ( ) ( )j

circular conjugat simetrică.

Re{ ( )} Re{ ( )}X k X N k Im{ ( )} Im{ ( )}X k X N k

Rezultă:

{ ( )} { ( )} { ( )} { ( )}Re{ ( )} Re{ ( )}Y k Y N k Im{ ( )} Im{ ( )}Y k Y N k

Rezultă:

( ) Re ( ) Im ( ) Im ( ) Re ( )Z N k X k Y k j X k Y k

Pentru fiecare secvenţă este suficient calculul TFD pentru k=0,1,…N/2.

Algoritmi pentru două secvenţe realeAlgoritmi pentru două secvenţe reale

( ) Re ( ) Im ( ) Im ( ) Re ( )Z k X k Y k j X k Y k

( ) Re ( ) Im ( ) Im ( ) Re ( )Z N k X k Y k j X k Y k

Se pot separa transformatele fiecărei secvenţe:

1 1( ) Re ( ) Re ( ) Im ( ) Im ( )X k Z k Z N k j Z k Z N k ( ) Re ( ) Re ( ) Im ( ) Im ( )2 2

X k Z k Z N k j Z k Z N k

1 1( ) Im ( ) Im ( ) Re ( ) Re ( )2 2

Y k Z N k Z k j Z N k Z k

De asemenea, pentru k=0 şi k=N/2 avem:

( ) ( ) ( ) ( ) ( )2 2

j

(0) Re (0) ( / 2) Re ( / 2)(0) Im (0) ( / 2) Im ( / 2)

X Z X N Z NY Z Y N Z N

( ) ( ) ( ) ( )

Calculul TFD inverse folosind TFD

Transformata Fourier discretă inversă (TFDI)

Calculul TFD inverse folosind TFD

1

0

1( ) TFDI{ ( )}( ) ( )N

nkN

kx n X k n X k W

N

0,1,..., 1n N

Apar următoarele diferenţe: împărţirea cu N

0k

împărţirea cu N conjugarea factorilor de rotaţie WN.

A t î ă ă i i i d i Aceasta înseamnă mărirea memoriei de program prin introducerea unei funcţii suplimentare pentru calculul TFDITFDI.

Calculul TFD inverse folosind TFD

Se poate calcula TFD inversă folosind transformata

Calculul TFD inverse folosind TFD

directă având în vedere următoarea relaţie:

**1TFDI{ ( )} TFD{ ( )}X k j j X k TFDI{ ( )} TFD{ ( )}X k j j X kN

*21** *

N j nk * *

0TFD{ ( )} ( )

j nkN

kj j X k j j X k e

*21N *21N 21

*

0( )

N j nkN

kj X k je

21

0( )

N j nkN

kX k j je

21

*

0( )

N j nkN

kX k j j e

21

0( )

N j nkN

kX k e

0k 0k

Calculul TFD inverse folosind TFD

Fie z = a + j.b o variabilă complexă.

Calculul TFD inverse folosind TFD

( )X k

Expresia j.z* înseamnă: *j a jb j a jb b ja

Inversareparte reală –

i i ă

adică o inversare între părţile reală şi imaginară

j j j j j parte imaginară

părţile reală şi imaginară. Algoritmul de calcul al

IFFT f l i d FFT t

FFT(scalare cu 1/N)

IFFT folosind FFT este:

Inversareparte reală –

parte imaginară

( ) IFFT{ ( )}x n X k

Algoritmi în baza 4 Să presupunem că N=4M, deci se pot utiliza

l i i î b R 4

Algoritmi în baza 4

algoritmi în baza R=4. Există şi în acest caz algoritmi cu decimare în timp

şi algoritmi cu decimare în frecvenţă. Vom scrie indicii utilizând exprimarea specifică p p

algoritmilor cu decimare în timp:

N1 2 1 24 , 0,1, , 1, 0,1,2,3;

4Nn n n n n

N N

1 2 1 2, 0,1, , 1, 0,1,2,3;4 4N Nk k k k k

Algoritmi în baza 4 Rezultă:

Algoritmi în baza 4

1NN

1 24NX k X k k

1 2 1 2

1 2

1 34 44

1 20 0

4Nn n k k

Nn n

x n n W

N

1 1 2 1 2 2

1 34

1 2 40 0 4

4

N

n k n k n kN N

n nx n n W W W

sau detaliind sumele după n2:1 20 0 4n n

N N

1 1

1

14

10 4

4

N

n kN

nx n W

1kNW 1 1

1

14

10 4

4 1

N

n kN

nx n W

1 24NX k k

2

4kW

1 0 4n

12kNW 13k

NW

1 4

1 1

14

14 2

N

n kNx n W

1 1

14

14 3

N

n kNx n W

224

kW 234

kWN N 1

10 4

Nn

1

10 4

Nn 4 4

Algoritmi în baza 4Algoritmi în baza 4

x(4n1) TFD 0 TFD

0

TFDN/4 k1

N/4-1

TFD4

x(4n1+1) TFDN/4

0k1

1kNW

k2=0 X(k1)k1

N/4 N/4-1

x(4n1+2) TFD 0

TFD412kW

123

( 1)X(k1+N/4)X(k1+N/2)x(4n1 2) TFD

N/40

k1N/4-1

1NW 3 X(k1+3N/4)

N/4-1

x(4n1+3) TFD 0k

13kNW TFD

N/4 1

N/4 k1N/4-1 4

Algoritmi în baza 4Algoritmi în baza 4k2=0 Fiecare TFD de

di 4 fi X(k1)ordin 4 poate fi calculată:

1kNW

X(k1+N/4)-j

k2=1– direct 12 adunări complexe deci

12kW

( 1 )j

k2=2

complexe, deci 24 adunări reale

– cu un algoritm

TFD41

NWX(k1+N/2)

-1

-1

k2 2cu un algoritm rapid 16 adunări reale

13kNW

X(k1+3N/4)j-1

k2=3X(k1+3N/4)-j

Algoritmi în baza 4Algoritmi în baza 4k2=0 Pentru un fluture

î X(k1)vom avea în general 3 înmulţiri

l i1k

NWX(k1+N/4)

-jk2=1complexe şi

16 adunări reale, î ă -1

12kW

( 1 )j

k2=2

ceea ce înseamnă– 12 înmulţiri reale

i 22 d ă i l

1

1NW

X(k1+N/2)-1

-1

k2 2şi 22 adunări reale în varianta 4/2 sau9 înmulţiri reale şi

13kNW

X(k1+3N/4)j-1

k2=3– 9 înmulţiri reale şi

25 adunări reale în varianta 3/3. X(k1+3N/4)-jva a ta 3/3.

Algoritmi în baza 4 Procedând la fel ca la baza 2, se obţin

Algoritmi în baza 4

3 4 23NMR 3 log 5 8 log 5 8;2

11 3 8 11 3 8

N N N N N N N

pentru varianta 4/2 şi

4 211 3 8 11 3 8NAR log log2 2 3 4 2 3

N N N N N N N

pentru varianta 4/2 şi

4 29 43 16 9 43 16NMR log log ;4 12 3 8 12 3

N N N N N N N

4 2

4 12 3 8 12 325 43 16 25 43 16NAR log log4 12 3 8 12 3

N N N N N N N

pentru varianta 3/3. În mod absolut asemănător se poate realiza şi un

4 12 3 8 12 3

În mod absolut asemănător se poate realiza şi un algoritm bază 4 cu decimare în frecvenţă.

7.2 ALTI ALGORITMI DE CALCUL AL TRANSFORMATEI FOURIER

Algoritmul Goertzel

Fie sistemul discret cu:

Ieșirea:

Pentru m=N

2 21 1( )

0 0( ) ( ) ( ) ( )

N Nj k N n j knN N

k Nn n

y N x n e x n e X k

2

( ) ( ), 0,..., 1j km

Nkh m e u m k N

21 1 ( )

0 0( ) ( ) * ( ) ( ) ( ) ( )

N N j k m nN

k k kn n

y m x m h m x n h m n x n e

Algoritmul Goertzel

Pentru:

Rezultă:2 21

2 20 1 1

2 21 1

2 21 21 1

1 1( )1 1

1 121 2cos1 1

j k NN j km mNk k kj jm N N

k kj jN N

k kj jN N

e zH z e ze z e z

e z e zk z ze z e z N

2

( ) ( ), 0,..., 1j km

Nkh m e u m k N

Algoritmul Goertzel2

1

1 2

1( )21 2cos

kjNe zH z

k z zN

Algoritmul Goertzel

Ieșirea acestui filtru RII pentru m=N este egală cu valoarea TFD pentru frecvența k

21

1 2

1( )21 2cos

kjNe zH z

k z zN

Nmk NykX )()(

Algoritmul Goertzel

21

1 2

1( )21 2cos

kjNe zH z

k z zN

+ +

z-1

z-12cos(2πk/N)

-1

x(n) y(n)

y(N)=X(k)

-e-j2πk/N

calea de reacţie(feedback)

calea directă(feedforward)

v(n)

v(n-1)

v(n-2)

Algoritmul Goertzel

+

z-1

z-12cos(2πk/N)

-1

x(n)

calea de reacţie(feedback)

v(n)

v(n-1)

v(n-2)

( ) ( ) 2cos(2 / ) ( 1) ( 2)v n x n k N v n v n

21

1 2

1( )21 2cos

kjNe zH z

k z zN

- pentru n=0,…,N-1

Algoritmul Goertzel

21

1 2

1( )21 2cos

kjNe zH z

k z zN

+

z-1

y(n)

-e-j2πk/N

calea directă(feedforward)

v(n)

v(n-1)- pentru n=N

2 /( ) ( ) ( 1) ( )j k Ny N v N e v N X k

( ) 2cos(2 / ) ( 1) ( 2)v N k N v N v N

2 2 2 2( ) ( ) ( 1) 2cos ( ) ( 1)ky N v N v N v N v NN

Sliding DFT

NkjNkjNkjkk eNnxenxenXnX /2/2/2 )()()1()(

x(n–1)

1

0

-1x(n–16)

Fereastra temporală n–1 (N=16)

TimpFereastra temporală n

Timp x(n)x(n–15)x(n–16)

Sliding DFT

Relația de recurență

Corespunde sistemului RII

2 22

2 21 1

1( )1 1

k kj j kN NN N jN

k k kj jN N

e e z zH z ee z e z

NkjNkjNkjkk eNnxenxenXnX /2/2/2 )()()1()(

Sliding DFT

2

2

2 21 1

1( ) 11 1

kjk N Nj NNk k kj j

N N

z eH z e ze z e z

+ +

z–1z–N

-1 ej2πk/Nfiltru pieptene

ej2πk/N

x(n) v(n) v(n)ej2πk/N y(n)=X(k)

• parte comună• implementată 1 dată

• parte individuală fiecărei componente k• implementată de N ori