brza fourierova transformacijamdjumic/uploads/diplomski/kas13.pdf2 fourierova preobrazba 2.1...
TRANSCRIPT
-
Sveu£ili²te Josip Jurja
Strossmayera Osijek
Odjel Za Fiziku
Zavr²ni rad
Seminar
Brza Fourierova Transformacija
Autor:
Matej Kasa
Mentor:
Doc. dr. sc. Zvonko
Glumac
U Osijeku, 11. rujna 2015.
-
Sadrºaj
1 Uvod 21.1 Predgovor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Fourierova preobrazba 32.1 Op¢enito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Upotrijebe preobrazbi . . . . . . . . . . . . . . . . . . . . . . 7
3 Diskretni sustavi 83.1 Uzorkovanje . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4 DFT 104.1 DFT matrica . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Kori²tenje algoritma . . . . . . . . . . . . . . . . . . . . . . . 114.3 Sloºenost algoritma . . . . . . . . . . . . . . . . . . . . . . . 13
5 FFT 145.1 Izvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.2 Sloºenost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.3 Izvorni kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.4 Primjer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205.5 Zero padding . . . . . . . . . . . . . . . . . . . . . . . . . . . 225.6 Windowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.7 Primjena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6 Kraj 266.1 Zaklju£ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266.2 Popis literature . . . . . . . . . . . . . . . . . . . . . . . . . 27
1
-
1 Uvod
1.1 Predgovor
Ovaj rad je pisan kao dio preddiplonmkog studija na Sveu£ili²tu Josipa Jurja
Strossmayera, Odjela za �ziku. Ovu temu sam odabrao jer u dana²nje doba
digitalna tehnologija prodire sve dublje u na²e ºivote. FFT algoritam je 1994.
god Gilbert Strang opisao kao najvaºniji numeri£ki algoritam dana²njeg doba
²to on uistinu jeste. Njegova primjena je ogromna tolika da je te²ko navesti
gdje se sve moºe koristiti i za ²ta.
1.2 Uvod
U dana²nje vrijeme postoji velika potreba za obraivanjem velikih koli£ina
informacija u malom vremenu. To se moºe uraditi na dva na£ina. Prvi jest
da izgradimo brza ra£unala koja ¢e mo¢i obraivati podatke izuzetno velikim
brzinama dok drugi na£in jest osmi²ljavanjem e�kasnijih algoritama koji ¢e
u manje vremena obraditi ve¢u koli£inu informacija. U dana²nje vrijeme se
koristimo s obije metode, ali svakako trebamo shvatiti da je daleko vaºnije
osmi²ljavati e�kasnije algoritme. Brute force algoritmi nerijetko su i preko
deset puta sporiji od e�kasnih algoritama. Uzmimo primjer algoritama za
sortiranje: Bubble sort sa sloºeno²¢u n2 i Merge sort sa sloºeno²¢u n log n.
Kod malih polja razlika u vremenu izvoenja nije pretjerano velika, ali u
realnosti polja su £esto velika. Samo za polje od 1000 elemenata brute-
force algoritam zahtijeva stotisu¢a puta vi²e operacija. Naºalost tehnolo²ke
inovacije ne mogu rasti tolikom brzinom koliko moºe opadati sloºenost al-
goritama. Pove¢anje procesorske snage ra£unala je nelinearan proces koji u
praksi zahtjeva brojne komplicirane tehnologije. Tu postoje razni problemi:
napajanje, voltaºa, hlaenje, memorija, paralelizacija, komunikacija izmeu
2
-
jezgri i dr. Danas smo dosegli limit koliko brzo jezgre mogu obraivati po-
datke. Pove¢avanje procesorske snage ra£unala postiºemo paralelizacijom tj.
dodavanjem vi²e procesorskih jezgri u jedno ra£unalo. Time ra£unalo stje£e
mogu¢nost odraivanja vi²e zadataka u isto vrijeme. Da bismo iskoristili tu
arhitekturu moramo pisati paralelne algoritme. Drugi na£in jest kori²tenje
vektorskih algoritama koje obavljaju jednu instrukciju nad vi²e podataka.
Najpoznatiji na£in jest SIMD (eng. Single instruction, multiple data) dok
najpoznatiji setovi instrukcija su SSE, SSE2, SSE3 gdje se jedna operacija
moºe obaviti nad 4 broja. Sre¢om broj algoritama kojeg moºemo ubrzati
na ovaj na£in je velik. Svi gra�£ki algoritmi su izrazito paralelni u svojoj
prirodi stoga se oni izvode gra�£koj kartici koja sadrºi procesor (GPU, eng.
graphics processor unit) koji u sebi sadrºi preko 100 jezgri. Algoritam koji
¢emo obraditi u ovom radu takoer se moºe ubrzati koriste¢i SSE instruk-
cije. Algoritmi mogu iskoristiti cache memoriju procesora te tako jo² vi²e
ubrzati rad procesora. Mi se ne¢emo baviti optimizacijom algoritma po²to
ona uvelike ovisi o platformi na kojoj se kod izvodi. Ve¢inom se FFT (eng.
Fast Fourier Transform) izvodi na DSP-u (eng. digital signal processor) ²to
je u biti procesor koji je specijalno dizajniran za obradu signala.
2 Fourierova preobrazba
2.1 Op¢enito
U matematici se £esto nailazi na parove funkcija j i J , vezanih relacijom
oblika
J(ω) =
∫ ba
j(t)K(ω, t)dt.
Funkcija J(ω) se zove (integralna) preobrazba funkcije j(t), a K(ω, t) se
naziva jezgra preobrazbe. Preobrazba se takoder moºe shvatiti i kao pres-
3
-
likavanje funkcije j(t) zadane u t prostoru, u funkciju J(ω) zadanu u ω
prostoru
j(t)→ J(ω).
Neke preobrazbe imaju svoje inverze pomo¢u kojih prelazimo iz ω prostora
natrag u t prostor.
Jedna od naj£e²¢ih preobrazbi jeste Fourier-ova preobrazba. Fizikalni
proces moºe biti opisan ili u vremenskoj domeni h(t) ili u frekvencijskoj do-
meniH(f) gdje je za svaku frekvenciju−∞ < f
-
∫ ∞−∞
r3(t)e−i2πωtdt =
∫ ∞−∞
[ar1(t) + br2(t)] e−i2πωtdt
= a
∫ ∞−∞
r1(t)e−i2πωtdt+ b
∫ ∞−∞
r2(t)e−i2πωtdt
= aR1(ω) + bR2(ω)
= R3(ω)
�
Vremenski pomak: za bilo koji realni broj t0 vrijedi, ako je r3(t) = r1(t−
t0), onda je R3(ω) = e−i2πt0ωR1(ω).
Dokaz:
∫ ∞−∞
r3(t)e−i2πωtdt =
∫ ∞−∞
r1(t− t0)e−i2πωtdt
=
∫ ∞−∞
r1(u)e−i2πω(u+t0)du
= e−i2πωt0∫ ∞−∞
r1(u)e−i2πωudu
= e−i2πωt0R1(ω)
= R3(ω)
�
Frekvencijski pomak: za bilo koji realni broj ω0 vrijedi, ako r3(t) =
ei2πtω0r1(t), onda je R3(ω) = R1(ω − ω0).
Dokaz:
5
-
∫ ∞−∞
r3(t)e−i2πωtdt =
∫ ∞−∞
ei2πω0tr1(t)e−i2πtωdt
=
∫ ∞−∞
r1(t)e−i2πt(ω−ω0)dt
= R1(ω − ω0)
= R3(ω)
�
Vremensko skaliranje: za realni broj a razli£it od nule vrijedi, ako je
r3(t) = r1(at), onda je R3(ω) = 1|a|R1(ωa ).
Dokaz:
∫ ∞−∞
r3(t)e−i2πωtdt =
∫ ∞−∞
r1(at)e−i2πωtdt
=
∫ ∞−∞
r1(u)
ae−i2πω
uadu
Za c > 0 ∫ ∞−∞
r1(u)
ae−i2πω
uadu =
1
aR1
(ωa
)=
1
|a|R1
(ωa
)Za c < 0
∫ −∞∞
r1(u)
ae−i2πω
uadu = −
∫ ∞−∞
r1(u)
ae−i2πω
uadu
=1
−aR1
(ωa
)=
1
|a|R1
(ωa
)�
6
-
2.2 Upotrijebe preobrazbi
Nalazimo se u Bijeloj Ku¢i i ºelimo prenijeti tu informaciju. Moºemo re¢i
da se nalazimo:
1. u Bijeloj Ku¢i
2. na adresi: 1600 Pennsylvania Ave NW, Washington, DC 20500, United
States
3. GPS koordinatama 38.897726, -77.036508
Na£in broj 1 ¢emo koristiti ako ºelimo re¢i da smo posjetili tu graevinu
jer svi znaju za nju ali rijetko tko zna njenu adresu. Ukoliko ºelimo do¢i do
nje traºimo adresu jer nam ona govori gdje se to£no nalazi ta zgrada. Iako
sva tri na£ina prenose istu informaciju nije svaki oblik pogodan za svaku
upotrebu. Sli£na stvar je i u matematici. Odreene probleme je jednos-
tavno rje²avati u odreenoj domeni a te²ko ili gotovo nemogu¢e u drugoj.
Konvolucija bi u vremenskoj domeni zahtjevala rje²avanje kompliciranih in-
tegrala dok u frekvencijskoj domeni se svodi na mnoºenje dviju funkcija. U
digitalnoj komunikaciji koriste se vi²e kanala koji svaki zasebno modulira
signal. Primatelj mora analizirati signal kako bi utvrdio koju informaciju
mu je po²iljatelj poslao. Signal se pretvara u frekvencijsku domenu te se
dijeli na kanale kako bi se iz njih izvuklo poslani simbol. Navedeni zadatak
je daleko teºe obaviti u vremenskoj domeni. Uzmimo obrnuti slu£aj kada po-
²iljatelj mora poslati signal. Prvo podatke pretvara u paralelni oblik koji je
pogodniji za slanje kroz vi²e kanala. Zatim svaku skupinu bitova pretvara u
signale. Ti signali se spajaju u jedan te ih se prebacuje u vremensku domenu
koja je pogodnija za slanje podataka. Signal u vremenskoj domeni ²alje na
ureaj koji ¢e slati elektri£ne impulse preko antene. Problem se pretvara u
7
-
drugu domenu u kojoj je lak²e rje²iv. Nakon ²to se problem rije²i inverznom
preobrazbom ga se vra¢a u originalnu domenu.
3 Diskretni sustavi
Do sada opisane preobrazbe bavile su se preobrazbom kontinuiranih funkcija.
Izmeu svaki dvije razli£ite to£ke postoji beskona£no mnogo to£aka. Ve£ina
dogaaja u prirodi su kontinuirani. Meutim ra£unala su diskretni strojevi
tj. oni sve operacije obavljaju u diskretnim koracima zvanim instrukcija.
Kako bi mogli obraivati podatke iz okoline potrebno ih je diskretizirati.
Obi£no imamo senzor koji neku �zikalnu pojavu (temperaturu, tlak, zvuk,
ja£inu svjetla itd. ) pretvara u napon ili struju. Na senzor spajamo ADC
ureaj (eng. Analog - To - Digital converter) koji pretvara kontinuirani signal
u diskretni. Op¢enito govore¢i mi moºemo diskretizirati neku kontinuiranu
funkciju h(t). Iako je prvi na£in daleko £e²¢i u praksi mi ¢emo se zadrºati
na op¢enitom slu£aju i razmatrat ¢emo diskretizaciju kontinuirane funkcije
h(t) u procesu zvanom uzorkovanje.
3.1 Uzorkovanje
Uzorkovanje je proces svoenja kontinuiranog signala na diskretni. U pra-
vilnim vremenskim intervalima T 1 biljeºimo vrijednosti funkcije h(t) te tako
imamo
hn(t) = h(nT ).
Ukoliko T mjerimo u sekundama onda fs = 1T predstavlja frekvenciju uzor-
kovanja u hercima. Zanima nas kolika mora biti frekvencija uzorkovanja fs
da bismo bez gre²ke uzorkovali signal frekvencije f . Najbolje bi bilo uzeti1U realnim sustavim T oscilira oko neke vrijednosti. Time se pojavljuje problem jittering-a.
8
-
²to ve¢i fs, ali vi²e uzoraka zauzima vi²e memorije i zahtjeva skupe ureaje.
Nyquist je dao odgovor na to pitanje. Za svaku frekvenciju uzorkovanja fs,
postoji kriti£na frekvencija fc:
fs = 2fc.
Ako signal uzorkujemo frekvencijom fs, onda ¢emo bez gre²ke mo¢i re-
konstruirati signal frekvencije ne ve¢e od fc. U praksi se £esto frekvencija
digne za otprilike 15% kako bi se osigurala bolja reprodukcija signala. Ta
tehnika se zove oversampling.
3.2 Aliasing
Pokaºimo najjednostavniji primjer aliasinga, tek toliko da shvatimo pojam.
Uzmimo da nam je frekvencija uzorkovanja fs = 4KKHz. Time moºemo
uzorkovati signal frekvencije f1 = 2KHz. irina signala kojeg uzorkujemo
nije ograni£ena (tzv. bandwidth unlimited) tj. signal sadrºi frekvencije ve¢e
od f1. Sada uzmimo signal bilo koje frekvencije f2 izmeu 0Hz i f1. to se
dogaa kada se na ulazu pojave cijelobrojni harmonici signala f2 £ije frek-
vencije prelaze f1? Zbog niske frekvencije uzorkovanje ureaj ¢e "misliti" da
uzorkuje signal frekvencije f2 iako se na ulazu nalaze signali frekvencije ve¢e
od f1. Time smo efektivno visoke frekvencije preslikali u niºe frekvencije Ta
pojava se zove aliasing. Ona se manifestira time da gubimo mogu¢nost raz-
likovanja razli£itih signala, a pojavljuje se zbog gubitka informacija prilikom
diskretiziranja kontinuiranih pojava. Koje su mogu¢nosti rje²avanja ovog
problema? Jedan na£in je pove¢ati f1. Taj na£in ima svojih ograni£enja
prvenstveno jer su ADC ureaji skupi i ograni£eni u svojim mogu¢nostima.
Drugi na£in jest postavljanja nisko propusnih �ltera (eng. low-pass �lter).
9
-
To su analogni ureaji koje karakterizira frekvencija fco. Sve signale s ma-
njom od te frekvencije ureaj propu²ta dok signale s ve¢om frekvencijom
prigu²uje. Time ograni£avamo ²irinu pojasa signala te se osiguravamo da u
ulaznom signalu nema frekvencija ve¢ih od fs2 .
4 DFT
Prethodno obraena Fourierova preobrazba je kontinuirana odnosno ona dje-
luje na analiti£ke funkcije. U praksi se funkcije zadaju pomo¢u to£aka npr.
prilikom snimanja zvuka ili nekog drugog signala mi dobivamo niz diskretnih
vrijednosti koje je senzor zabiljeºio. Kako bi mogli obraivati diskretne po-
datke treba nam diskretna Fourierova transformacija ili DFT (eng. Discrete
Fourier Transform). DFT pretvara kona£nu listu jednako udaljenih uzo-
raka2 u listu koe�cijenata. I ulaz i izlaz DFT-a su kompleksni brojevi. Niz
od N kompleksnih brojeva x0, x1, . . . , xN−1 preobraºavamo u N-periodi£ni
niz kompleksnih brojeva pomo¢u formule
Xk =N−1∑n=0
xne−i2πkn/N . (1)
Za svaki Xk, jednadºba 1 usporeuje ulazne podatke s testnim signalom
odreene frekvencije koja ovisi o k. Moºemo re¢i da DFT dijeli (zbog minusa
u eksponentu) ulazni signal s nizom testnih signala kako bi otkrio koliko je
pojedini testni signal prisutan u ulaznom signalu. DFT ima svoj inverz koji
je dan s formulom:2u praksi uzorci nisu jednako udaljeni stoga se javlja prije spomenuti problem jitter-a.
10
-
xn =1
N
N−1∑k=0
Xnei2πkn/N .
4.1 DFT matrica
DFT se moºe iskazati pomo¢u jednadºbe
X = Wx, (2)
gdje je x jednostup£ani vektor, koji predstavlja ulazni signal, W je N ×
N kvadratna DFT matrica te X je jednostup£ani vektor koji predstavlja
rezultat. Matrica se moºe de�nirati kao
W =1√N
1 1 1 1 · · · 1
1 ω ω2 ω3 · · · ωN−1
1 ω2 ω4 ω6 · · · ω2(N−1)
1 ω3 ω6 ω9 · · · ω3(N−1)... ... ... ... . . . ...
1 ωN−1 ω2(N−1) ω3(N−1) · · · ω(N−1)(N−1)
,
gdje je ω = e−2πiN .
Jednadºba 2 i jednadºba 1 daju isti rezultat. Pogledajmo matricu malo
detaljnije. Koliko puta se pojedini £lanovi pojavljuju? Tu redundanciju
¢emo izbaciti kako bismo izbjegli nepotrebne ra£unske operacije i u kona£nici
ubrzali algoritam.
4.2 Kori²tenje algoritma
Iz de�nicije DFT-a znamo da algoritam uzima polje kompleksnih brojeva te
da vra¢a polje kompleksnih brojeva. Nas zanima kako se koristiti tim algorit-
11
-
mom odnosno kako mu se zadaju ulazne vrijednosti te kako se interpretiraju
izlazne vrijednosti. Kod izlaznih vrijednosti nas zanima
1. kolika je frekvencija pojedinog vala
2. kolika je amplituda i fazni pomak pojedinog vala
Po£nimo prvo s ulazom. Ulazni podaci su naj£e²¢e realni (uzorci zvuka,
slike itd. ) stoga imaginarne dijelove postavljamo na 0. Algoritam ne obra-
uje cijelobrojne podatke pa ako nam je ulaz cijeli broj onda ih trebamo
prevesti u druga£iji zapis broja, naj£e²¢e IEEE 754. To nam je bitno jer
su izlazni podaci ADC ureaja cijeli brojevi koji se prikazuju u PCM3 (eng.
pulse code modulation) formatu. Ulazni podaci mogu biti kompleksni, a naj-
£e²¢e je to slu£aj kada obavljamo inverzni DFT. Kod izlaznih podataka stvar
je malo kompliciranija. Kako odreujemo amplitudu i fazni pomak? Zapis
je dan u kartezijevim koordinatama te ukoliko ºelimo doznati amplitudu i
fazni pomak koristimo malo izmjenjene dobro poznate formule za prijelaz
u polarne koordinate. Razlika je ²to amplitudu dijelimo s polovicom broja
uzoraka tj. N2 .
r = 2√Re(Xk)2 + Im(Xk)2/N
φ = atan2(Im(Xk),Re(Xk)
)atan2 je arkus tanges funkcija s dva argumenta koja ura£unava u kojem
se kvadrantu nalazimo te rezultat vra¢a unutar [0, 2π].
Uzmimo da nam je frekvencija uzorkovana fs te da imamo ukupno N
uzoraka tada se na k−tom indeksu nalazi frekvencija. Radi jednostavnosti
rezultate ¢emo u tekstu zvati bin u £ijem ¢e indeksu biti broj koji odgovara3metoda za digitalno prikazivanje analognih signala
12
-
rezultatu.2kfsN
, k ∈ [0, N/2− 1]
Vidimo da se u nultom elementu nalazi signal frekvencije 0 ²to predstav-
lja DC (eng. direct current, istosmjerna struja) kompomentu. Primjetimo
da k ide do N2 − 1. Na k ∈ [N/2 + 1, N − 1] se nalaze negativne frek-
vencije. U njihovo zna£enje ne¢emo ulaziti. Ostaje nam jo² k = N2 . To
je kombinacija negativne i pozitivne frekvencije pa prilikom izra£unavanja
njegove amplitude trebamo uzeti u obzir da je ona dva puta ve¢a od stvarne
dakle amplitudu tog signala treba dijeliti s 2. Ista stvar vrijedi i za DC kom-
ponentu. Ona je kombinacije dvije iste DC komponente stoga i nju treba
podijeliti s 2. Ako polje u memoriji zamislimo kao liniju onda je izlaz ovog
algoritma ta linija savijena u kruºnicu.
4.3 Sloºenost algoritma
Pitanje sloºenosti algoritma jedno je od najvaºnijih kada se bavimo njima.
Ovdje ¢emo spomenuti Big-O notaciju ili asimptotsku sloºenost algoritma.
Ona opisuje pona²anje algoritma kada broj podataka koje obraujemo teºi ka
beskona£nosti ili nekom velikom broju. Postoje memorijska i vremenska slo-
ºenost. Memorijska sloºenost nam govori koliko memorije zauzima algoritam
dok nam vremenska sloºenost govori koliko je operacija potrebno za izvoe-
nje algoritma. Pogledajmo prvo memorijsku sloºenost. AlgoritamN uzoraka
sprema u polje veli£ine N . Na isti na£in sprema izlazne podatke. Ulazni i
izlazni podaci su kompleksni brojevi, a oni se prikazuju kao dva realna broja
(ra£unalo poznaje cijele brojeve, realne brojeve i znakove). Dolazimo do toga
da nam treba sveukupno 4N realnih brojeva kako bi izvodili algoritam. Pra-
vilo kod asimptotske analize jest da se sve konstante izbace. Tako dobivamo
memorijsku sloºenost N . To nam ne govori koliko ¢e on byte-ove zauzeti u
13
-
memoriji nego samo kako raste potreba za memorijom u ovisnosti o broju
ulaznih podataka (uzoraka). Da smo algoritam implementirali pomo¢u DFT
matrice sloºenost bi bila N 2 jer broj elemenata kvadratne matrice raste s
kvadratom broja stupaca. Kod vremenske sloºenosti trebamo vidjeti koliko
operacija algoritam treba uraditi. Proalnalizirajmo sumu u jednadºbi 1. U
svakoj iteraciji sume obavljamo kompleksno mnoºenje (koje zahtjeva 4 mno-
ºenja i 2 zbrajanja). Za k = const imamo N kompleksnih mnoºenja te N−1
kompleksnih zbrajanja. Nadalje k ide od 0 do N − 1 ²to zna£i da prethodni
korak ponavljamo N puta. To nas dovodi do kona£ne sloºenosti od N 2 (izba-
cujemo sve konstante iz krajnjeg zapisa). Ovaj zapis nam ne moºe to£no re¢i
koliko traje izvoenje algoritma jer u igru ulazi dizajn samog ra£unala kojim
se moºe ubrzati ili usporiti izvoene. Ono ²to nam moºe re¢i jest kako broj
operacija ovisi o broju ulaznih podataka. N 2 sloºenost uop¢e nije poºeljna
pogotovo u ovom slu£aju gdje se algoritam izvodi nad velikim brojem po-
dataka. Na svu sre¢u postoji e�kasnija implementacija ovog algoritma koja
¢e nam omogu¢i izvoenje u N logN vremenskoj sloºenosti, dok memorijska
ostaje ista.
5 FFT
U prethodnom odjeljku vidjeli smo da je ra£unanje DFT-a pomo¢u de�nicije
vremenski zahtjevan proces. U DFT matrici moºemo vidjeti da je ve£ina
mnoºenja koje obavljamo redundantna te da se ona mogu izbaciti iz ra£una.
Fast Fourier transform (hrv. brza fourierova preobrazba) je algoritam (ili
pak skupina algoritama) koji ra£una DFT. Razlika je ta ²to FFT koristi
tehniku divide-and-conquer (hrv. podjeli pa vladaj) u kojoj se originalni
problem dijeli na dva pod-problema koji su lak²e rje²ivi. Nadalje svaki pod-
problem moºemo na isti na£in nastaviti dalje dijeliti sve dok ne doemo do
14
-
polja veli£ine 1. Tako dobivena rje²enja se spajaju kako bi dobili kona£no
rje²enje. Time ¢emo eliminirati redundantne operacije te u kona£nici ubrzati
algoritam. Mi ¢emo opisati opisati i korisitit Cooley-Tukey FFT algoritam.
5.1 Izvod
Op¢enito FFT je skupina algoritama, a mi ¢emo se zadrºati na Cooley-
Tukey algoritmu. I taj algoritam se moºe dijeliti na radix-x implementacije.
Ugrubo re£eno to je kolika ¢e biti veli£ina polja u zadnjem pozivu rekurzije.
Mi ¢emo se bazirati na radix-2 algoritmu jer je on najjednostavniji. Radix-
4, radix-8 su e�kasniji algoritmi jer obavljaju operacije na ve¢em polju, ali
su teºi za implementirati. Mi se ovdje ne¢emo bazirati na implementaciji
brzih algoritama te ¢emo £itatelja uputiti da na internetu pronae e�kasne
implementacije FFT algoritma. Jedna od takvih biblioteka je i FFTW (eng.
Fastest Fourier Transform in the West). Uzmimo da je N potencija broja
2 (u tom slu£aju rekurzivno dijeljenje polja na 2 dijela postaje trivijalno).
Algoritam prvo ra£una DFT parnih podataka (x2m = x0, x2, . . . , xN−2) a
zatim neparnih podataka (x2m+1 = x1, x2, . . . , xN−1) te zatim ih kombinira
kako bi dobili kona£ni rezultat. Pogledajmo formulu
Xk =N/2−1∑m=0
x2me− 2πiN (2m)k +
N/2−1∑m=0
x2m+1e− 2πiN (2m+1)k.
Iz drugog izraza moºemo izlu£iti e−2πiN k. Vidimo da su te dvije sume
DFT-ovi parnih ulaza te DFT neparnih ulaza. S F ek ozna£imo DFT parnih
ulaza te s F ok DFT neparnih ulaza. Na kraju dobivamo:
15
-
Xk =
N/2−1∑m=0
x2me− 2πiN/2mk︸ ︷︷ ︸
DFT parno indeksiranih vrijednosti
+ e−2πiN k
N/2−1∑m=0
x2m+1e− 2πiN/2mk︸ ︷︷ ︸
DFT neparno indeksiranih vrijednosti
.
Na kraju dobivamo izraz pomo¢u kojeg ra£unamo k−tu komponentu
izlaza. Taj postupak se provodi sve dok ne doemo do pod-polja veli£ine 1.
Xk = Fek + e
− 2πiN kF ok
5.2 Sloºenost
Kad je k = const takvih podjela ima 2 log2N . Znamo da je k ∈ [0, N − 1]
²to zna£i da gornji postupak provodimo N puta. To nas dovodi do kona£ne
sloºenosti algoritma od N log2N . Uzimaju¢i za primjer N = 220, dolazimo
da je FFT algoritam brºi odprilike za 52 428 puta ²to je velika razlika. Da
kojim slu£ajem nismo otkrili FFT algoritam mnoge tehnologije koje danas
imamo ne bi postojale.
5.3 Izvorni kod
Dan je primjer izvornog koda koji ra£una FFT i inverzni FFT (u daljnjem
tekstu IFFT). Program je pisan u jeziku C++ a koristi gotove klase koje
predstavljaju kompleksne brojeve i polja podataka
#inc lude
#inc lude
#inc lude
us ing namespace std ;
16
-
const double PI = 3.141592653589793238460;
typede f std : : complex Complex ;
typede f std : : va larray CArray ;
void f f t (CArray& x)
{
const s i ze_t N = x . s i z e ( ) ;
i f (N
-
{
x = x . apply ( std : : conj ) ;
// f f t
f f t ( x ) ;
x = x . apply ( std : : conj ) ;
x /= x . s i z e ( ) ;
}
i n t main ( )
{
const i n t N = 32 ;
Complex t e s t [N ] ;
f o r ( i n t i = 0 ; i < N; i++)
{
t e s t [ i ] = cos (2 ∗ PI ∗ 3 .0 f ∗ i / N) ;
}
CArray data ( t e s t , N) ;
f f t ( data ) ;
f o r ( i n t i = 0 ; i < N; i++)
{
18
-
i f ( log10 ( fabs ( data [ i ] . r e a l ( ) ) ) < −3)
data [ i ] . r e a l ( ) = 0 .0 f ;
i f ( l og ( fabs ( data [ i ] . imag ( ) ) ) < −3)
data [ i ] . imag ( ) = 0 .0 f ;
}
f o r ( i n t i = 0 ; i < N; ++i )
{
cout
-
5.4 Primjer
/ 1/
1
Slika 1: Primjer na kojem pokazujemo FFT
Prikaºimo FFT na konkretnom primjeru. Generirajmo neki proizvoljno
signal. Ulazni signal ima N = 32 uzoraka. Uzmimo da signal ima DC
komponentu iznosa 2. Zatim mu dodajemo kosinusoidu koja ima 3 ciklusa
u N uzoraka. Dodajmo mu jo² dvije kosiusoide s 5 odnosno 16 ciklusa u N
uzoraka. Kosinusoidu uzimamo jer sa stanovi²ta FFT algoritma nema fazni
pomak. Ulazne podatke moºemo opisati donjim izrazom,
20
-
xn = 2 + cos(2π3n
N) + 2 cos(2π5
n
N) + cos(2π16
n
N)
Prikazat ¢emo samo realni dio rezultata po²to je imaginarni dio nula.
Kao izlaz dobili smo niz od 32 realna broja. U bin0 se nalazi razina DC
signala no na njega ¢emo vratiti kasnije. U bin3 se nalazi broj 16. Vidimo
da u ulazu imamo kosinusoidu koja ima 3 ciklusa u N uzoraka te da mu
je amplituda 1. U prethodnom odjeljku smo naveli da amplitudu dobivamo
tako da izra£unamo modul realnog broja te ga podjelimo s N2 . Time bi
smo dobili amplitudu od 1 ²to se slaºe s na²om formulom ulaznog signala.
Takoer signal ima "frekvenciju" 3 a broj se nalazi u bin3 ²to je opet u
skladu s na²om formulom. U bin5 imamo broj 32. U ulazom signal se nalazi
kosinusoida "frekvencije" 5 te amplitude 2. Dijele¢i 32 s N/2 dobivamo
2 ²to je u skladu s formulom. Sada dolazimo do bin16. Dijele¢i 16 s N2dobivamo 2 no ne zaboravimo da taj broj predstavlja dva vala stoga jo²
moramo podjeliti s 2 kako bi dobili ispravnu amplitudu. Isto moramo u£initi
i s DC komponentom koja se nalazi u bin0. Vidimo da se u bin27 i bin29
nalaze kopije prethodnih signala koji smao imaju negativnu frekvenciju, ali
na isti na£in dolazimo do iste amplitude. Primjetimo da fs nije zadan pa u
ovom slu£aju ne moºemo govoriti o frekvenciji u hercima, nego govorimo o
frekvenciji kao "ciklusa u N uzoraka".
21
-
5.5 Zero padding
Do sada smo imali slu£aj kada su se u signalu nalazile sinusoide koje su imale
cijelobrojni broj ciklusa u N uzoraka. Time se signal poklapao s barem jed-
nom testnom sinusoidom. Time smo u kona£nici dobili £ist frekvencijski
spektar odnosno u grafu smo dobili ²iljak na mjestu te frekvencije. U stvar-
nosti to ne¢e uvijek biti slu£aj nego ¢e signali imati prozvoljan necijelobrojni
broj ciklusa u N uzoraka. U tom slu£aju ne¢emo dobiti £isti spektar nego
¢emo dobiti ²iroki spektar frekvencija.
/ 1/
1
Slika 2: Signal s 3.5 ciklusa u N uzorka. Primjetimo da bi na donjem grafubin4 trebao imati vrijednost 512.
Taj problem se moºe rje²iti upotrijebom zero-padding-a (hrv. dodavanje
nula). Signalu na kraju (ili po£etku) dodajemo niz nula kako bi pove¢ali
22
-
broj uzoraka. Time smo pove¢ali N , a ako pogledamo u formulu 1 vidimo
da ve¢i N zna£i vi²e testnih sinusoida. Pove¢ani broj testnih sinusoida nam
pove¢ava ²ansu za postojanje sinusoide sli£ne frekvencije kao ²to se nalazi
u signalu. Obi£no signal pove¢avamo za dva, £etiri ili vi²e puta kako bi
osigurali ve¢u preciznost. Na slici 2 vidimo da amplituda u frekvencijskoj
domeni ne odgovara stvarnoj amplitudi signala. Kao ²to ¢emo vidjeti na
sljede¢oj slici, upotrijeba zero-paddinga uvelike pobolj²ava situaciju.
/ 1/
1
Slika 3: Dodavaju¢i nule na kraj signala, pove¢ali smo N za dva puta. Sadase ²iljak premjestio na bin7.
Razlog pojavljivanja tih problema je diskretizacija. Mi kontinuirani sig-
nal poku²avamo prikazati pomo¢u kona£nog broja to£aka £ime se gube in-
formacije.
23
-
5.6 Windowing
FFT moºemo ra£unati samo nad kona£nim dijelom podataka. Matematika
FFT-a se bazira na pretpostavci da je vremenski signal periodi£an tj. da se
na²i podaci ponavljaju u vremenu. To uzrokuje prekid na krajevima funk-
cije. Windowing je metoda s kojom se to sprje£ava. To je funkcija koja
ima vrijednost nula van odreenog intervala. Primjenjivanjem te funkcije
na podacima se osiguravamo da su uzlani podaci neprekidni na rubovima.
No mnoºenje u vremenskoj domeni je konvolucija u frekvencijskoj domeni a
rezultat toga jest ²irenje spektralnih linija. Postoji mno²tvo window funkcija
a odabir prikladne zna£i odvagivanje prednosti i nedostataka svake od nje.
Ne postoji jedna funkcija koja je prikladna za sve slu£ajeve. Mi ¢emo spo-
menuti naj£e²¢u od njih tj. onu koja se naj£e²¢e koristi kad ne moºemo na¢i
prikladniju. Ta funkcija se zove Hanningova funkcija, a zadana je formulom
w(n) = 0.5
(1− cos
(2πn
N − 1
)).
Slika 4: Na x-osi se nalazi broj uzorka dok na y-osi nam je prikazan faktors kojim mnoºimo uzorak.
24
-
5.7 Primjena
Gotovo je svaki £ovjek barem jednom direktno do²ao u doticaj s FFT al-
goritmom. Radi se o xDSL4 tehnologiji. Telefon koristi 4KHz signala za
svoj rad a bakrena ºica obi£no ima propusnost oko 1MHz. Cilj je isko-
ristiti preostalu propusnost za prijenos podataka kako bi se ostvario ²iroko-
pojasni pristup internetu. xDSL tehnologija koristi OFDM (eng. Orthogonal
frequency-division multiplexing, hrv. ortogonalno frekvencijsko multipleksi-
ranje). Sastoji se u dijeljenju dostupnog pojasa na N kanala jednake frek-
vencije koji su meusobno udaljeni za neki iznos. Ureaju dajemo podatke
koje ºelimo slati. On ih podjeli na N dijelova te ih priprema za slanje. Preko
svakog kanala se ²alje b bitova istovremeno. Ureaj zatim pretvara bitove
u val odreene amplitude i faznog pomaka koriste¢i odreenu modulaciju,
naj£e²¢e QAM5. Dobivene signale spajamo u jedan signal. Signal pomo¢i
IFFT-a pretvaramo iz frekvencijske u vremensku domenu. Takav signal ²a-
ljemo na DAC ureaj6 koji ²alje elektri£ne impulse preko bakrene ºice, gdje
se na drugoj strani nalazi prijemnik. Prijemnik prvo ra£una FFT dobivenog
signala te kada pretvori signal u frekvencijsku domenu gleda sadrºaj sva-
kog kanala. U frekvencijskom zapisu lagano je vidjeti koji su podaci poslani
odreenim kanalom. Na kraju se niz paralelnih bitova pretvara u serijski tok
podataka koji se ²alju korisniku.4eng. digital subscriber line.5eng. Quadrature amplitude modulation, modulira amplitudu i fazu signala kako bi prenio dva digi-
talna toka.6eng. digital to analog converter, ureaj koji pretvara broj u digitalnom zapisu u napon.
25
-
6 Kraj
6.1 Zaklju£ak
Pokazali smo da se od kontinuirane Fourierove preobrazbe lagano dolazi do
diskretne Fourierove preobrazbe. No ra£unanje DFT-a pomo¢u de�nicije je
bilo vremenski sporo te smo stoga upotrijebili programersku tehniku podjeli-
pa-vladaj kako bi ubrzali rad algoritma. U svojoj srºi vidjeli smo da je algo-
ritam veoma jednostavan. Za e�kasnu implementaciju algoritma morat ¢emo
u detalje poznavati ra£unalo na kojem radimo. Postoje gotove, optimizirane
biblioteke za ra£unanje FFT-a, koje se mogu na¢i na internetu. Daleko vi²e
problema ¢emo imati prilikom upotrebe algoritma. Mi smo pokazali dva
takva problema i rekli smo da je njihov uzrok diskretizacija kontinuirane
pojave. Dali smo dva mogu¢a rje²enja za te probleme: zero-padding i win-
dowing. Najve¢i problem je ²to ne postoji univerzalni FFT koji bi imao
odli£ne karakteristike u svim slu£ajevima. Zato je na korisniku da odabere
ispravne metode i ispravni algoritam. U nekim slu£ajevima brzina izvoe-
nja je vaºnija od to£nosti rezultata dok je u nekim slu£ajevima obrnuto, no
te²ko da ¢emo uspjeti ostvariti oboje istovremeno. Neki algoritmi zato ne
koriste £isti FFT nego ga modi�ciraju kako bi dobili na performansama ili
na preciznosti. De�nitivno je da FFT ima nezamjenjivu ulogu na²em te da
se dosta truda ulaºe u pronalaºenja univerzalnijih metoda za ra£unanje ili
kako bi se na engleskom to nazvalo one size �ts all.
26
-
6.2 Popis literature
Literatura
[1] Wiliam H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P.
Flannery, Numerical Recipes in C, Cambridge University Press, 2nd edi-
tion, 1992,
[2] Eric Postpischil, Construction of a High-Performance FFT, 2004.
[3] George B. Arfken, Hans J. Weber, Mathematical methods for physicist,
6th edition, 2005
[4] Zvonko Glumac, Matemati£ke metode �zike, Odjel za Fiziku, 2013.
[5] https://en.wikipedia.org/wiki/Discrete_Fourier_transform
[6] https://en.wikipedia.org/wiki/Fast_Fourier_transform
[7] https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm
[8] David Dorranov youtube kanal, ht-
tps://www.youtube.com/user/ddorran
[9] Stack Exchange, Q and A stranica http://dsp.stackexchange.com
27
UvodPredgovorUvod
Fourierova preobrazbaOpcenitoUpotrijebe preobrazbi
Diskretni sustaviUzorkovanjeAliasing
DFTDFT matricaKorištenje algoritmaSloženost algoritma
FFTIzvodSloženostIzvorni kodPrimjerZero paddingWindowingPrimjena
KrajZakljucakPopis literature