7. TRANSFORMATA FOURIER Ă RAPIDĂ ŞI APLICAŢII
-
Upload
khangminh22 -
Category
Documents
-
view
1 -
download
0
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