FFTW

FFTW (ang. Fastest Fourier Transform in the West) – biblioteka do obliczania dyskretnych transformat Fouriera.

FFTW jest najszybszą niezależną od sprzętu biblioteką tego typu. Inne biblioteki o porównywalnych osiągach składają się z ręcznie optymalizowanego kodu asemblera, natomiast większość kodu FFTW jest generowana z zapisu w języku OCaml. Ponadto FFTW w czasie wykonania w fazie zwanej „planowaniem” dostosowuje się do właściwości danej maszyny – nie tylko procesora, ale również wykorzystuje cechy pamięci cache. Wykorzystuje do tego optymalizator, który stara się zdekomponować problem na prostsze podproblemy. FFTW wykorzystuje poza standardowymi wariantami algorytmu FFT Cooley-Tukeya (dobry dla potęg 2), również algorytmy przydatne dla potęg dużych liczb pierwszych – takie jak algorytm FFT Radera oraz algorytm FFT Bluesteina.

FFTW jest biblioteką języka C, ale można jej używać także z Fortrana, C++ oraz D. Istnieją wersje tej biblioteki dla architektury 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 jej na innej, niewolnej licencji. Programy używające FFTW to m.in. GNU Octave i MATLAB.

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

Zobacz też

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya