Logowanie
 Implementacja FFT (FFTW) w j�zyku C/C++ w Visual Studio
Czasami zdarza si� nam, i� musimy w naszych programach doda� implementacj� algorytmu Szybkiej Transformaty Fouriera. Niestety to co mo�na znale�� w sieci cz�sto wo�a o pomst� do nieba . Poradnik ten przyda si� wszystkim studentom, in�ynierom czy po prostu pasjonatom programowania.

W poradniku tym poka�� jak w Windows, poprzez �rodowisko programistyczne Visual Studio i w j�zyku C/C++ doda� szybk� transformat� Fouriera FFT . Wykorzystam ku temu darmowy projekt o nazwie FFTW.

Co nam b�dzie ku temu potrzebne, oczywi�cie sama biblioteka FFTW. Znajdziesz j� pod adresem: http://fftw.org/install/windows.html

Wybieraj�c plik do �ci�gni�cia sprawd� dla jakiego systemu go potrzebujesz . Od razu dodam, �e wersja 32 bit doskonale dzia�a na systemie 64 bit. Czy warto szuka� zewn�trznych implementacji? Raczej nie, wi�kszo�� z nich ma wiele niedoci�gni�� i co najwa�niejsze nie dzia�aj� dla zmiennej ilo�ci pr�bek . Niestety ale wi�kszo�� z nich dzia�a dla liczby wsp�czynnik�w okre�lonych poprzez pot�g� liczby 2.

W �ci�gni�tej bibliotece znajdziemy kilka wa�nych plik�w. S� nimi:

libfftw3-3.def
libfftw3f-3.def
libfftw3l-3.def

libfftw3-3.dll
libfftw3f-3.dll
libfftw3l-3.dll


Jednak, aby Visual linkowa� wszystko bez b��d�w potrzeba bibliotek statycznych lib. Trzeba sobie je zatem samemu stworzy�. Przyda si� tutaj narz�dzie Visuala lib.exe
Ale niestety nie dzia�a ono ze zwyk�ego wiersza polece�. Potrzeba wykorzysta� wiersz polece� Visuala. W tym celu w Menu Start->Wszystkie Programy odnajd� folder Visuala i w nim Visual Studio Tools->Visual Studio 20xx Command Prompt.

Teraz musimy odnale�� folder, gdzie wypakowali�my pliki FFTW i tam wyda� kolejno polecenia:

link -lib /def:libfftw3-3.def /out:libfftw3-3.lib
link -lib /def:libfftw3f-3.def /out:libfftw3f-3.lib
link -lib /def:libfftw3l-3.def /out:libfftw3l-3.lib


Wynikiem tej operacji b�d� nowe pliki:
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib


To je oraz fftw3.h musimy teraz zaimportowa� do naszego projektu. A zatem w oknie Solution Explorer klikamy na Source prawym przyciskiem i z menu podr�cznego wybieramy Add->Existing Item...

Co dalej? Ano ju� jeste�my w domu. A zatem zaczynamy pisa� w�a�ciwy kod. Na pocz�tek standardowo, czyli opr�cz dajmy na to stdio.h dodajemy plik nag��wkowy fftw:

#include "fftw3.h"

W tej chwili nasza biblioteka FFTW powinna ju� dzia�a�, a zatem zr�bmy przyk�ad wykonuj�cy szybk� transformat� Fouriera, po czym na danych wynikowych wykonana zostanie transformata odwrotna. Prawid�owo dzia�aj�ce operacj� dadz� w wyniku to co by�o na wej�ciu.

Na koniec poka�my przyk�ad funkcji wykonaj_fft(), kt�ra zrealizuje to zadanie. Kod jest opatrzony komentarzem, wi�c wszystko powinno by� zrozumia�e.

void wykonaj_fft(){
   int i;
   double *in; //dane wej�ciowe dla FFT
   double *in2;//dane wyj�ciowe dla IFFT
   int n;//liczba wsp�czynnik�w
   fftw_complex *out;//wyj�cie FFT
   fftw_plan plan_backward;//dla wykonania IFFT
   fftw_plan plan_forward;//dla wykonania FFT


//Nale�y alokowa� pami�� dla wszystkich danych
   in = (double *) malloc ( sizeof ( double ) * 10 );
   out = (fftw_complex *) malloc ( sizeof ( fftw_complex ) * 10 );
   in2 = (double *) malloc ( sizeof ( double ) * 10 );

//Liczba danych
   n=10;
//Inicjacja danych
   for (i=0; i<10; i++)
      in[i] =(i+1)/3;

//rozpoczynamy FFT
   plan_forward = fftw_plan_dft_r2c_1d ( n, in, out, FFTW_ESTIMATE );
   fftw_execute ( plan_forward );

//Ile wsp�czynnik�w bez symetrii (FFT jest symetryczna)? Jest ich ( n / 2 ) + 1

//Wypiszmy przyk�adowy wynik FFT
//(tablica jest dwukolumnowa, w pierwszej cz�ci jest cz�� rzeczywista,
// a w drugiej urojona)

      printf ("%f %f\n", out[0][0], out[1][1] );

//Wykonajmy odwrotn� FFT
   plan_backward = fftw_plan_dft_c2r_1d ( n, out, in2, FFTW_ESTIMATE );
   fftw_execute ( plan_backward );

//Sprawdzamy wynik
   for (i=0; i<10; i++)
      printf("%f\n" in2[i] / ( double ) ( n ));
}


I to w zasadzie wszystko. Gdyby� mia�/mia�a jakie� problemy, zapraszam na nasze FORUM, a z ch�ci� pomo�emy.
 Reklama

 Komentarze
#1 | puchuk dnia 29/06/2011 20:01
B�g mi ci� zes�a�. Dzi�kuj� za ten opis !
#2 | MW dnia 20/05/2016 21:22
A co z linkowaniem? Po wykonaniu krok po kroku przedstawionego tutaj manuala pojawiaja sie ciagle b��dy Linkrea. Tam tez potrzebujemy cos odpowiednio ustawic?
 Dodaj komentarz
Dla wszystkich komentarzy wymagana jest ich akceptacja przez moderatora.

Nick:



AntyBOT (dla niezalogowanych): Napisz s�owo hotfix wielkimi literami

/articles.php?article_id=359

 Artyku�y
Polecany artyku�


Jak walczy� z pobieraczkiem? Jak odst�pi� od umowy? O tym w artykule.
 Ostatnie komentarze
gryPrzez: Maciak Plock [dnia: Apr 03, 2020]
wynik jest wysoko w google, przy...
gryPrzez: MAMBA [dnia: Mar 24, 2020]
Warning: Only 61104 of 61105 MBy...
gryPrzez: Random32 [dnia: Mar 18, 2020]
Witam, u mnie na polskim Window...
gryPrzez: muffintodebil [dnia: Mar 04, 2020]
aha gosicu to niezly jestes zaaw...
gryPrzez: Maciek [dnia: Feb 20, 2020]
2 karty 512 kupione na allegro: ...
gryPrzez: xd [dnia: Feb 05, 2020]
zrobi�em spos�b Vin/7 na dziesi�...
gryPrzez: gtremik [dnia: Jan 25, 2020]
Dzi�ki seba86mu :) Dzia�a
gryPrzez: Mirek [dnia: Jan 22, 2020]
A jest rozwi�zanie dla Windowsa 10?
 Gry
Polecany artyku�


Quake

Klasyk FPS w wersji flash.
 Programy
Polecany artyku�


Tapin Radio Darmowa aplikacja s�u��ca do s�uchania i nagrywania radia internetowego
 Recenzje
Polecana recenzja


Sleeping Dogs
Policjant pod przykrywk� rozpracowuje Triad�.
 Facebook