вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Описание работы с библиотекой численного преобразования Фурье FFTW

Подробно выполнение численного преобразования Фурье разбирается в лабораторной работе №3.

Описание функций библиотеки FFTW

План БПФ

Для выполнения преобразования Фурье при помощи библиотеки fftw необходимо вначале создать план, т.е. заполнить настройки БПФ:

// создание одномерного плана БПФ
// n - размерность выборки
// direction - направление (FFTW_FORWARD - прямое, FFTW_BACKWARD - обратное)
// flags - флаги, можно задать два флага: FFTW_IN_PLACE | FFTW_ESTIMATE
//            (FFTW_IN_PLACE - результат будет записываться в исходную выборку;
//             FFTW_ESTIMATE - используются внутренние настройки по умолчанию) 
fftw_plan fftw_create_plan(int n, fftw_direction direction, int flags);

Для работы с библиотекой можно создать класс FFT, тогда план надо создавать в конструкторе класса FFT. Пример создания одномерного плана:
m_plan_1D=fftw_create_plan(m_size, FFTW_BACKWARD, FFTW_IN_PLACE | FFTW_ESTIMATE);

Двумерный план создается аналогично:
m_plan_2D=fftw2d_create_plan(m_size_x, m_size_y, direct, FFTW_IN_PLACE | FFTW_ESTIMATE);

Удаление плана можно выполнить в деструкторе класса FFT:

// удаление плана БПФ 
// plan - план БПФ 
void fftw_destroy_plan(fftw_plan plan);
void fftw_destroy_plan(fftwnd_plan plan);

Выполнение БПФ

Простое (не сдвиговое) преобразование Фурье можно выполнить при помощи функции:

// выполнение одномерного простого БПФ в соответствии с планом
// plan - план БПФ 
// in - указатель на исходную выборку комплексных чисел
// out - указатель на результирующую выборку комплексных чисел 
//       (если out=NULL - результат записывается в исходную выборку 
void fftw_one(fftw_plan plan, fftw_complex *in, fftw_complex *out);

// выполнение двумерного простого БПФ в соответствии с планом
// plan - план БПФ 
// in - указатель на исходную выборку комплексных чисел
// out - указатель на результирующую выборку комплексных чисел 
//       (если out=NULL - результат записывается в исходную выборку 
void fftwnd_one(fftwnd_plan plan, fftw_complex *in, fftw_complex *out);

Чтобы выполнить полное сдвиговое приобразование Фурье нужно выполнить следующую последовать действий:

	// смещение выборки
	...
	// простое БПФ
	fftw_one(m_plan, (fftw_complex*) sample.m_data, NULL);
	// домножение полученного спектра на комплексное число с вещ. 1/sqrt(n*m) и мним. 0
	...
	// смещение спектра
	...

Настройки Visual Studio для работы с библиотекой FFTW

Для того, чтобы использовать библиотеку FFTW2st.lib, необходимо проделать следующие настройки (пункт меню Project->Settings):

Закладка "C/C++":

Закладка "Link":
добавить в строку списка используемых библиотек "FFTW2st.lib":

Для того, чтобы дома использовать библиотеку FFTW2st.lib, необходимо скопировать файлы:

  • файлы fftw.h - в папку с:\Program Files\Microsoft Visual Studio\VC98\Include\fftw;
  • файл FFTW2st.lib - в папку с:\Program Files\Microsoft Visual Studio\VC98\Lib.

Пути указаны для Visual Studio 6.0, если их не изменяли при установке.