FFT

Marek Peca marek@tynska.cuni.cz
Pátek Červen 4 14:54:49 CEST 2004


Zdravicko,

> Kdyz vezmu nasamplovany zvuk a udelam nad nim FFT, ziskam ve vysledku dve
> pole, tedy alespon v te implementaci, co jsem nasel nekde na webu jako free
> a krute ji opraskl :). Jedno pole je realnych a jedno imaginarnich cisel
> (alespon tak to chapu). Co je imaginarni cislo sice vim, ale co v tech
> vysledcich rika mi jasne neni :(. Mohl by mi prosim nekdo dat rychlou
> nalejvarnu ohledne FFT, pokud mozno lopatou (po lopate, ne lopatou po
> zadech) ? Zajimalo by mne konkretne, co mam z tech vysledku (poli) vynest do
> grafu, abych mel pred sebou frekvencni analyzu, tedy ktere frekvence je
> kolik.

Fourierova transofrmace prevadi funkci casu (signal) na komplexni
funkci frekvence, tedy fazor. Velikost tohoto fazotru (A) uvdava
amplitudu one frekvencni slozky, uhel fazoru udava jeji fazi (fi).
Toto komlpexni cislo muzeme zapsat bud jako A*e^(j*fi), nebo
ekvivalentne A*(cos(fi) + j*sin(fi)) = a + j*b, tedy jak rika
Pythagoruv plagiat egyptske moudrosti A=sqrt(a^2+b^2), fi.. no tady
je trochu problem, v prog. jazycich se to pocita fi=atan2(b,a),
pouzijete-li nromalni arctg, musite si pohlidat kvadrant. Samozrejme
vam to hodi uhel do rozsahu +-pi, takze v praxi je to nekdy potreba
"rozrolovat", to kdyz se jedna o signal s neminimalni fazi a zajima
nas to moc.

Fourierova transformace je definovana pro signal od stvoreni sveta do
jeho zaniku, coz v praxi nikdo nenaimplementuje (ani nechce), takze
se spektrum aproximuje DFT (~FFT) pro kratsi casove segmenty.
Pripominam jen, ze FT realneho signalu musi mit A(f) symetrickou
podle osy A (suda fce) a fi(f) symetrickou podle pocatku (licha fce),
tim si to muzete zkontrolovat. Pokud chcete delat spektralni analyzu
amplitudy ("ktere frekvence je kolik"), pouzijete A. Ale bacha, je
hrozne jednoduchy namerit uplny kraviny. U signalu se sumem je treba
sejmout vice segmentu a prumerovat. Zaroven je dobre pouzit okenka a
prekryvani. Doporucil bych:

* zvolit delku segmentu, tady mate dilema frekvencniho proti casovemu
rozliseni -- s tim nic moc neudelate, je to slavny, 20. stoletim
mavajici Heisenberguv(?) princip neurcitosti (pokud se s tim nechcete
smirit, muzete se podivat po parametrickych metodach, napriklad po
nedavno zminovane AR ~ LPC);

* rozsekat na prekryvajici se segmenty, napr. prekryti 50%; kazdy
segment vynasobit oknem, napr.
0.5*(1-cos(2*pi*cislo_vzorku/delka_segmenu)), z kazdeho takto
vznikleho useku udelat FFT, spocitat amplitudove spektrum a umocnit
na druhou (vykon);

* zprumerovat -- ziskate odhad vykonove hustoty (dP/df).

Metod a doporuceni mate milion, nebojte se, ze by existoval nejaky
zaruceny a nejlepsi zpusob ;-).


Zdravi MP




Další informace o konferenci Hw-list