DFT 1. oldal A Fourier-sorfejtés szerint minden periodikus jel egyértelműen felírható különböző amplitúdójú és fázisú szinusz és koszinusz jelek összegeként: = + + 1. ahol az együtthatók, szintén a definíció szerint meghatározhatók. Könnyen belátható az is (erre itt most nem térünk ki), hogy mivel azonos frekvenciájú sin() és cos() függvények között csak fázisban van különbség (90 ), az idő függvény tehát csak cos() vagy csak sin() összegeként is felírható. Ilyenkor az egyes tagok frekvenciája, csúcsértéke, és fázisa is eltérő lesz. A továbbiakban az előző sor megfogalmazását hozzuk olyan alakra, amely lehetővé teszi a módszer gépi implementálását anélkül, hogy bonyolult integrálokat kellene kiszámítani. A komplex számoknál megismert Euler-formula: + =. illetve, mivel előjelét a elnyeli, a szinuszból pedig kiemelhető: A két összefüggésből: = 3. = + = 4. 5. Ennek megfelelően írjuk át a Fourier sor kifejezését: = +$ % &' + % &' + % &' % &' ( 6. Az egyes exponensek szerint csoportosítva (azokat kiemelve): = +) % &' + + % &' * 7. Az összegzésben k eddig pozitív számként szerepelt. Ha feltesszük, hogy negatív értékeket is felvehet, a szummát egyszerűbb alakra hozhatjuk. Ha jól belegondolunk, ez azt jelenti, hogy az alapfrekvencia negatív többszörösei is megengedettek. Természetesen ez fizikailag értelmetlen, mindössze egy kis matematikai ügyeskedésről van szó az egyszerűbb alakért. Sőt, k=0 esetre még az a0- át is az összeg részévé tehetjük.
Vezessük be a következő jelölést - legyen,,, + olyan komplex szám, amelyre:. oldal A,h >0? +,,,:=, h =0 @? + >,h <0 8. Ezzel - figyelembe véve, hogy k t negatív értékekre is kiterjesztettük - az előző formula: = +,,, % &' 9. Legyen N db., időben azonos lépésközzel vett mérési eredmény által adott (Shannon mintavételezési tételének megfelelően). Az i-edik időpont ekkor: - = = / 0 Ahol az egyes mérési pontok között eltelt idő, / pedig a mérés teljes időtartama. Legyen jelölésben: 10. - - 11. Valós esetben k nem lehet negatív és a korábbi végtelen helyett csak N-1 ig fut. Mivel N db mérési pont van, ebből legfeljebb csak N db független,,, + képezhető hiszen nem tudunk több információt előállítani, mint ami eredetileg is rendelkezésre állt. Ez fordítva is igaz. Az,,, + Fourier együtthatók (N db) az egyes szinuszos komponensek részvételi arányát jelentik a jelben. Ezért fontos, hogy minél hosszabb, több pontból álló mintát vizsgáljunk, hiszen annál több együttható megkülönböztetésére lesz lehetőségünk. Túl kevés adat pontatlan felbontást adhat, hiszen a nem besorolható nagyfrekvenciás komponensek is a számítás során előálló eredmények részét fogják képezni, ahelyett, hogy önállóan megkülönböztethetők lennének. Mivel az indexelés 0-tól megy, a felső határ N-1 lesz. Beírva (10)-et, (11)-et a (9)-be, kapjuk hogy: - = - = +,,, % &' = +,,, 45 6 & 6 & 3 - = +,,, 45 3-1. Azaz valós függvényértékeket határozunk meg ismertnek feltételezett,,,-k + segítségével. A kapott formula tehát valójában az Inverz Diszkrét Fourier transzformáció (IDFT): - =7 9+/ :+,; < - = +,,, 45 3-13.
Felmerül a kérdés, létezik-e hasonló, odafelé alakító transzformáció,,,-k + meghatározására is? Ha igen, igaznak kell lennie, hogy: 3. oldal =9+/ E9+/:;F 14. azaz, a két transzformáció egymás inverze. Feltesszük, hogy a (13)-ban látott transzformáció inverze, azaz az eredeti DFT is hasonló szerkezetű lehet. Emiatt elsőként pontosan ugyanolyan alakot tételezhetünk fel: +,,,= 45 3 15. Helyettesítsük be ezt az IDFT kifejezésébe és ellenőrizzük, milyen feltételek mellett teljesül a (14) azonosság. - = H 45 3 I 45 3 - = H) 45 3 45 3 - * I = H 45 3 - I= H 45 3 K I 16. ahol m=i+l egész szám. Az eredményül kapott kifejezés zárójeles összege azonban minden nullától különböző m esetén zérus lesz. Ezt könnyen belátható a mértani sor (an+1=anq) összegképlete alapján, ami: L 3 = 3 M = N M N = M3 1 M 1 17. alakú (a K-index csak a klasszikus mértani sorösszeg alakjának bemutatásához kellett). Legyen a0=1, q= PQ R K. Ezeket (17)-ba helyettesítve épp a kérdéses összegre kimondott állítás igazolódik: L 3 = ) 45 3 K * = 45 3 K = 45 3 K 45K 1 = 45 3 K 1 1 45 3 K 1 45 3 K 1 ) 45 3 K 3 * 1 45 3 K 1 45 = 3 K 1 1=0 45 3 K 1 18. Azaz (16)-ban a zárójeles rész minden m!=0-ra nulla. Értékelhető eredmény csak az első elem esetében (i=0) keletkezik, ezen belül is csak akkor, ha l=0 is teljesül (hiszen m csak ekkor lehet 0). Ebben az esetben viszont az exponens értéke 1, amit pontosan N-szer adunk össze:
4. oldal - =S 0, B 0 0, B C0 19. A feltételezett transzformáció (15) tehát nem működik jól. Ha elérhető lenne, hogy m-nek minden i-értékhez létezzen nulla értékű kifejezése, akkor az oda-vissza transzformáció után az eredeti tömbelemek N-szeresei állnának elő. Az elvárt viselkedés tehát például m=i-l esetén fenn is áll, hiszen i és l is pozitív és 0-tól megy N-1-ig. Ilyenkor minden i-re lesz olyan l amelyre m éppen nulla. A (16) levezetést ezzel a feltétellel visszafelé írva: H 45 3 K I H 45 3 - I H) 45 3 45 3 - * I H 45 3 I 45 3-0 - 0. Azaz konstans szorzótól eltekintve visszakapunk minden eredeti elemet. Ha a (0)-at az N konstanssal való osztással is korrigálunk, akkor megkapjuk a helyes DFT transzformációt, mely már megfelel (14)-nek. Összefoglalva eddigi ismereteinket: A Diszkrét Fourier Transzformáció átalakítási szabályai (N-elemű minta esetén) TUV:W; +,,, 1 0 45 3 TUV Z :U[; - +,,, 45 3-0..0!1 3 0..0!1 4 Csakúgy, mint ahogy a mintavételezett időfüggvény (fi) egyes pontjai között időlépés van, az +, elemei között is van bizonyos lépésköz, mégpedig \/0. Az +, tehát a frekvenciatartományon értelmezett komplex, diszkrét frekvenciafüggvény, melynek felvett értékei a frekvenciasávra jellemző amplitúdó sűrűséget jellemzi. Végtelen pontot és végtelenül kicsiny lépésközöket felvéve eljuthatunk a folytonos Fourier transzformáció képleteihez. Az összegzést a folytonos integrálás váltja fel, a konstans osztó is elmarad határértékekben történő gondolkodás miatt. z oda-vissza transzformálásnak egyértelműnek kell lennie ekkor is. Az exponenciális függvény integrálja-deriváltja önmaga, szorozva vagy osztva a kitevőben található konstanssal. Az transzformációk során egyszer az idő (t), egyszer a frekvencia (f) szerint kell integrálnunk. Ha körfrekvenciát használunk, az oda-vissza alakított függvény éppen \ szeresben fog eltérni. A normáló faktorban megjelenő korrekció tehát ezt a különbséget küszöböli ki:
A folytonos Fourier Transzformáció átalakítási szabályai 5. oldal UV:W^; +, 1 \ _ %'` UV Z :U[a; _ +, %'` 5 6 Ha a transzformált térnek a normál frekvenciateret (most jelölje az f-frekvenciát a b) választjuk ( +,b, a normáló faktor is elmarad: UV:W^; +,b_ 45c'` UV Z :U[d; _ +,b 45c'`b 7 8
6. oldal yakorlat. DFT-DFT -1 implementációja (C/C++) Hozzon létre egy struktúrát, ez jelenti majd a komplex számot: typedef struct Cx { double Re; double Im; }; Létesítsen két, egyenként N-elemszámú tömböt, az egyik ( f ) double, a másik ( F ) Cx típusú ele- f l F k = F k, úgy hogy Re{ F k } = F[ k]. Re és hason- meket tartalmazzon. Ekkor pl. f l = [ ] tömbelem, [ ] lóan { F } F[ k]. Im Im k = Kezdetben legyen minden érték nulla. Ezután két egymásba ágyazott FORciklusra lesz szüksége. A külső a k értékein halad (azaz az F tömbön) lépked végig, a belső pedig az F egy adott elemét határozza meg l-szerint N db. szorzás és összeadás által (3 szerint). A belső ciklus tehát a f tömb elemein lépked végig, megszorozza azokat az exp. taggal, majd hozzáadja az F aktuális eleméhez. Felmerülhet, hogy hogyan szorozzunk gépen a komplex exp. számmal. Emlékezzünk, hogy: α e j = cos α + j sin α ( ) ( ) Mivel a Cx típusban a képzetes és a valós részek külön vannak tárolva, egyesével dolgozhatunk: megszorozzuk fl-t (ez minden l-re valós szám) a koszinuszos taggal és hozzáadjuk F aktuális elemének Re részéhez. Ezután az fl-t a szinuszos taggal szorozzuk és ezt ugyanezen elem Im részéhez adjuk hozzá. Miután a belső ciklus végigfutott az f minden elemén, a következő F elem kiszámítása következik (a képletben az l a belső, a k pedig a külső ciklus változója). Ha ezzel végeztünk, az F tömbünk az f tömb értékeinek Fourier transzformáltját fogja tartalmazni. Hasonló elven valósítsa meg az IDFT-t is, mely most az F tömbből képez az f tömbbe. Az összegzéseket azonban most ne közvetlenül az f-be (hiszen az csak valós értékeket képes tárolni), hanem először - a részszámolások elvégzéséhez - egy Cx típusú (e[) munkaváltozóba írja. F értékei komplex számok és most ezeket szintén komplex exp.-sal kell szorozni (4) szerint. Legyen α az exp. kitevője az i. elem k. lépésében. Ekkor a szorzás: jα ( a + bj) e = ( a + bj) ( cos( α ) + j sin( α )) = a cos( α ) b sin( α ) + j ( a sin( α ) + b cos( α )) 13 Fk 1444 4443 Re 1444 4443 Azaz az összegzést gyűjtő munkaváltozó (e[) az k=n-dik körben a következő értékkel nő: W.Re + = F [ k ].Re cos( α ) F[ k ].Im sin( α ); W.Im + = F [ k ].Im cos( α ) + F [ k ].Re sin( α ); Ha jól jártunk el, a munkaváltozó Im-része az összegzés végére nullává válik, a valós részt pedig az f megfelelő elemébe írva, f-ben az eredeti tömb (az eredetileg mintavételezett jel) jelenik meg. Im