28

Brza Fourierova Transformacijamdjumic/uploads/diplomski/KAS13.pdf2 Fourierova preobrazba 2.1 Op¢enito U matematici se £esto nailazi na parove funkcija ji J, vezanih relacijom oblika

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • 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