Wolna encyklopedia
FFTW (Fastest Fourier Transform in the West) to bardzo szybka biblioteka transformat Fouriera.
FFTW jest najszybszą niezależną od sprzętu biblioteką tego typu. Inne biblioteki o porównywalnych osiągnięciach składają się z ręcznie optymalizowanego kodu asemblerowego, natomiast większość kodu FFTW jest generowana z zapisu w języku Ocaml. Ponadto FFTW w czasie rzeczywistym dostosowuje się do właściwości danej maszyny - nie tylko procesora, ale również wykorzystuje cechy pamięci cache.
FFTW jest biblioteką języka C, ale można jej używać także z Fortrana i C++.
Istnieją wersje FFTW dla SMP, a także dla obliczeń rozproszonych.
FFTW od wersji 1.3 jest dostępna na licencji GPL (wcześniej była darmowa dla użytku niekomercyjnego); autorzy umożliwiają również uzyskania FFTW na innej, nie-wolnej licencji.
Programy używające FFTW to m.in. GNU Octave i Matlab.
Informacje techniczne:
- najnowsza wersja to 3.1.3 (z 7 października 2008)
- pakiety Debiana:
Przykład użycia
Przykładowy kod (dla wersji 2 FFTW):
#include <fftw.h>
#include <math.h>
int main()
{
fftw_plan pl1,pl2;
fftw_complex in[128], mid[128], out[128];
int i;
for (i=0; i<128; i++)
{
in[i].re = sin (M_PI*i/16);
in[i].im = sin (M_PI*i/24);
}
pl1 = fftw_create_plan (128, FFTW_FORWARD, FFTW_ESTIMATE);
pl2 = fftw_create_plan (128, FFTW_BACKWARD, FFTW_ESTIMATE);
fftw_one (pl1, in, mid);
fftw_one (pl2, mid, out);
for (i=0; i<128; i++)
{
out[i].re /= 128;
out[i].im /= 128;
}
fftw_destroy_plan (pl2);
fftw_destroy_plan (pl1);
for (i=0; i<128; i++)
printf ("%d: in=(%f,%f), out=(%f,%f), d=(%f,%f)\n", i, in[i].re, in[i].im,
out[i].re, out[i].im, out[i].re - in[i].re, out[i].im - in[i].im);
return 0;
}