next up previous
Következõ: Az FFT gyakorlati alkalmazása Fel: Digitális jelek feldolgozása Elõzõ DFT - diszkrét Fourier transzformáció

FFT - Fast Fourier Transformation

A Fourier transzformáció igen fontos eszköz jelek vizsgálatában, mérési eredmények értékelésében, stb. Nem kell tehát különösebben csodálkoznunk azon, hogy rengeteg munkát fordítottak a transzformáció részleteinek alapos kidolgozására.

A digitális számítógépek, valamint a digitális méréstechnika elterjedése újabb lökést adott a Fourier transzformáció alkalmazásának. A digitális számítógépek azonban lényegüket tekintve nagyon lomha, lusta rendszerek, mivel az aritmetikai mûveleteket mindig logikai alapmûveletekre vezetik vissza. Külünösen vontatottak a szorzások végzésében. A Fourier transzformáció pedig igen sok szorzást igényel: a mátrix koncepcióból eléggé nyilvánvalóan következik, hogy N szám transzformációjához tex2html_wrap_inline3405 szorzás szükséges. Egy 1000 mérési pontot tartalmazó adatsor DFT-je tehát egymillió szorzást igényel, ami a jelenlegi (átlagos) gépsebességek mellett több/sok másodperces mûveleti idõt igényel. (Az összeadások idejét nem szokás külön beszámítani, mivel ennek idõigénye a szorzásnak legfeljebb tizede.)

A Fourier transzformáció számítási idejét az 1965-ben Cooley és Tukey (CT) amerikai matematikusok által kidolgozott algoritmus csökkentette radikálisan. 1978-ban pedig Winograd lépett elõ egy új eljárással. Nézzük csak az alábbi összehasonlító táblát:

szorzás/pont összeadás/pont

A CT - Fast Fourier Transmormation alapgondolata eléggé kézenfekvõ: N pont DFT-je tex2html_wrap_inline3405 szorzást igényel. Ha az adatokat két egyforma részre bontjuk, akkor a két rész külön-külön transzformációja tex2html_wrap_inline3417 szorzásba kerül. Ha a két transzformáció részeredményei könnyen összekombinálhatók, akkor érdemes ezt az utat választani. Az is nyilvánvaló, hogy N-et célszerû 2 egész kitevõjû hatványának választani, hogy a szorzás-spórolás jótéteményébõl többszörösen részesedhessünk.

A 50 ábrán az eredeti v adatsorból a párosakat és páratlanokat szétválogatva g és h adatsorokhoz juthatunk. A DFT képletének mindkét adatsorra való alkalmazásával arra az eredményre jutunk, hogy a G és H részspektrumok összekombinálásához csak tex2html_wrap_inline3431-nal történõ szorzás kell, tehát viszonylag olcsón "ússzuk meg" azt, hogy a két részre bontással mûveleteket spóroltunk.

  figure851
50. Ábra: Az adatsor szétválasztása páros és páratlan sorokra.

tex2html_wrap_inline3433

tex2html_wrap_inline3435

tex2html_wrap_inline3437

tex2html_wrap_inline3439

Ha k>N/2-1-nél, akkor k-N/2-vel helyettesíthetõ, így végül


displaymath3445

displaymath3447

A 51 ábrán az elõbbi elv alkalmazását ábrázoljuk grafikusan. Az ábra a./ részén feltüntettük a kiinduló adatokat, két csoportba szétválogatva. Az elõbb tárgyalt algoritmus szerint a V spektrumkomponenseket úgy kapjuk meg, ha két-két adaton az ún. lepkemûveletet végezzük el. (A ``lepke'' az ábra e./ részén látható: az A és B mennyiségeket alakítja át a megadott módon.) -- Természetesen meggondolásunk négy, illetve két adatra is érvényes (lásd a b./ ábra felsõ és alsó része).

  figure882
51. Ábra: Az FFT algoritmus részei N=8 esetén

Az ábra figyelmes vizsgálata arra a megállapításra vezet, hogy a teljes transzformációhoz tex2html_wrap_inline3457 lepkemûvelet szükségeltetik (kettes alapú logaritmus). Ha észrevesszük, hogy a lepkemûvelet tulajdonképpen csak egyetlen -- de komplex -- szorzást tartalmaz, akkor az tex2html_wrap_inline3459 összefüggés a teljes FFT szorzás-igényét adja meg. N=1024 esetén egymillió szorzás helyett csak 10000 szorzást kell elvégezni, vagyis a DFT-hez képest az FFT csak századannyi gépidõt használ.

Vegyük észre, hogy az FFT alkalmazásánál a bemenõ adatok nem sorrendben követik egymást, hanem furcsa módon meg vannak "keverve". A kiinduló adatok megfelelõ sorrendbe állítása is igényel némi gépidõt. Ennek elvégzéséhez is találtak ügyes eljárást. Figyelmes matemetikusok észrevették, hogyha 256 bemenõ adattal dolgoznak, akkor pl. a 158-ik adat helyére a 21-ik adat kerül. Ez az egy-egy értelmû leképezés az ún. ``bit-reverzálás'' nevû algoritmuson alapul, mely lényegében a biteknek a felezõ tengely körüli elforgatásából áll (l. 52 ábra).

  figure891
52. Ábra: A bit-reverzálás mûvelet

Felezési elven nagyon sokfajta FFT algoritmus létezik. A 51.c ábra szerinti eljárás nagy érdeme, hogy a számítások során nem igényel külön tárolóhelyet: a bemenõ adatok helyére íródhatnak a részeredmények, illetve a végeredmény. -- A 51.d ábra szerinti algoritmus viszont nem igényli a kezdõ adatok keverését, de a lepkemûvelete összetettebb, stb.

Befejezésül megadjuk az FFT-nek egy program listáját, BASIC nyelven. Az A tömbben a valós, a B tömbben a képzetes részeket tároljuk. A program két részbõl áll: az elsõ részben az adatok ``keverése'' történik, a második rész az igazi transzformáció.

 
                 DIM A(256), B(256)

NP=256 : ND=NP/2 : M=8 (tex2html_wrap_inline3463)

REM KEVERES

J=1

FOR I=1 TO NP-1

IF I<J THEN TR=A(I) : IT=B(I) : A(I)=A(J)

: B(I)=B(J) : A(J)=TR : B(J)=IT

K=ND

440 IF K<J THEN J=J-K : K=INT(K/2) : GOTO 440

J=J+K

NEXT I

REM TRANSZFORMACIO

LE=1

FOR L=1 TO M

LD=LE : LE=LE+LE

UR=1 : UI=0 : AN=3.1415926/LD

WR=COS(AN) : WI=-SIN(AN)

FOR J=1 TO LD

FOR I=J TO NP STEP LE

IP=I+LD

TR = A(IP)*UR-B(IP)*UI : IT=A(IP)*UI+B(IP)UR

A(IP)=A(I)-TR : B(IP)=B(I)-IT : A(I)=A(I)+TR : B(I)=B(I)+IT

NEXT I

TR=UR*WR-UI*WI : UI=UR*WI+UI*WR : UR=TR

NEXT J

NEXT L

A program begépelési hibamentessége könnyen ellenõrizhetõ: válasszunk egy tetszõleges bemenõ adatsort, transzformáljuk, a valós és képzetes részeket egyaránt osszuk el N-nel, fordítsuk meg a képzetes részek elõjelét, használjuk mégegyszer ugyanezt a programot és eredményül az eredeti adatsorhoz kell jutnunk.

Az FFT belsõ szerkezetének megértése sok esetben vezethet számítástechnikai elõnyhöz, vagyis kisebb futási idõhöz. Ha például azonos méretû szakaszokat kell egymás után folyamatosan transzformálni, akkor jobban járunk, ha két adatsort töltünk be a transzformáció indításakor, az egyiket a valós, amásikat a képzetes részbe. A transzformáció lineáris volta miatt ugyanis a két részspektrum az eredõbõl és annak konjugáltjából egy gyors/olcsó mûvelettel megkapható:


displaymath3467

displaymath3469

displaymath3471

displaymath3473


next up previous
Követklezõ: Az FFT gyakorlati alkalmazása Fel: Digitális jelek feldolgozása Elõzõ: DFT - diszkrét Fourier transzformáció