18.3 Îmbunătățiri ale vitezei

Când este convoluția FFT mai rapidă decât convoluția standard? Răspunsul depinde de lungimea kernelului de filtrare, așa cum se arată în figura 18-3. Crossoverul apare atunci când kernelul filtru are aproximativ 40-80 de eșantioane (în funcție de hardware-ul folosit).

Figura 18-3 Timpul de execuție pentru convoluția FFT.

Convoluția FFT este mai rapidă decât metoda standard când nucleul filtrului este mai lung de aprox. 60 de puncte. Acești timpi de execuție sunt pentru un Pentium de 100 MHz, utilizând virgulă mobilă, simplă precizie.

Ideea importantă de reținut: nucleele de filtrare mai scurte de aproximativ 60 de puncte pot fi implementate mai rapid cu convoluția standard, iar timpul de execuție este proporțional cu lungimea kernelului. Kernelurile mai lungi ale filtrului pot fi implementate mai rapid cu convoluția FFT. Cu convoluție FFT, kernelul de filtrare poate fi făcut atât de lung cât doriți, cu foarte puțină penaliate în timpul de execuție. De exemplu, un kernel filtru de 16.000 de puncte necesită doar aprox. de două ori mai mult să execute decât unul cu doar 64 de puncte.

Viteza de convoluție dictează, de asemenea, precizia de calcul ( la fel cum este descris pentru FFT în capitolul 12). Aceasta se datorează faptului că eroarea de rotunjire în semnalul de ieșire depinde de numărul total de calcule, care este direct proporțional cu timpul de calcul. Dacă semnalul de ieșire este calculat mai repede, acesta va fi, de asemenea, calculat mai precis. De exemplu, imaginați convoluția unui semnal cu un kernel filtru de 1000 de puncte, cu virgulă mobilă în simplă precizie. Utilizând convoluția standard, zgomotul tipic de rotunjire poate fi de cca. 1 parte din 20.000 (de la liniile directoare din Capitolul 4). În comparație, convoluția FFT poate fi de așteptat să fie un ordin de mărime mai rapidă, și un ordin de mărime mai precisă (adică, 1 parte din 200.000).

Păstrați convoluția FFT ascunsă atunci când aveți o cantitate mare de date de procesat și aveți nevoie de un kernel filtru extrem de lung. Gândiți-vă în termeni de un semnal cu un milion de eșantioane și la un kernel de filtru de o mie de puncte. Orice mai puțin nu va justifica efortul suplimentar de programare. Nu doriți să scrieți propria rutină de convoluție FFT? Uitați-vă în bibliotecile și pachetele software pentru codul pre-scris. Începeți cu site-ul web al acestei lucrări (consultați pagina cu drepturi de autor).