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:

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;
}

Linki zewnętrzne

Źródło: „haslo,FFTW