Вернуться наверх
aco.ifmo.ru photonic
вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


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

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

Библиотека FFTW - свободно распространяемая библиотека для выполнения быстрого дискретного преобразования Фурье.

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

План БПФ

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

// создание одномерного плана БПФ
// n - размерность выборки
// in  - указатель на исходную выборку комплексных чисел
// out - указатель на результирующую выборку комплексных чисел 
//       (в качестве результирующей выборки можно задать ту же выборку, что и исходная)
// direction - направление (FFTW_FORWARD - прямое, FFTW_BACKWARD - обратное)
// flags - флаги, можно задать флаг FFTW_ESTIMATE (используются внутренние настройки по умолчанию) 
fftw_plan fftw_plan_dft_1d(int n, 
                           fftw_complex* sample_in, 
                           fftw_complex* sample_out, 
                           fftw_direction direction, 
                           int flags);

Двумерный план создается аналогично:

fftw_plan fftw_plan_dft_2d(int n,
                           int m, 
                           fftw_complex* sample_in, 
                           fftw_complex* sample_out, 
                           fftw_direction direction, 
                           int flags);

Удаление плана после выполнения БПФ:

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

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

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

// выполнение одномерного простого БПФ в соответствии с планом
// plan - план БПФ 
void fftw_execute(fftw_plan plan);

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

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

Пример выполнения одномерного преобразования Фурье

/////////////////////////////////////////////////////////////////////////////
// Тест: проверка работы библиотеки fftw
// 
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
#include <fstream>
#include <complex>
#include <vector>

#include <fftw3.h>

using namespace std;
/////////////////////////////////////////////////////////////////////////////
void main()
{
   // создаем одномерную выборку, все значения которой равны 1
   vector<complex<double> > data(64, 1.);

   // создаем план для библиотеки fftw
   fftw_plan plan=fftw_plan_dft_1d(data.size(), (fftw_complex*) &data[0], (fftw_complex*) &data[0], FFTW_FORWARD, FFTW_ESTIMATE);

   // преобразование Фурье
   fftw_execute(plan);
   fftw_destroy_plan(plan);

   // выводим в файл результат преобразования Фурье (должна получиться Дельта-функция)
   ofstream out("speсtr.txt");
   for(size_t i=0; i<data.size(); ++i)
   {
      out<<data[i]<<endl;
   }
}
/////////////////////////////////////////////////////////////////////////////

После выполнения программы, если все настроено верно, должен создаться файл "spectr.txt".


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

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

  1. Выбрать конфигурацию "All Configurations"
  2. В разделе "Свойства конфигурации -> Каталоги VC++" добавить в "Каталоги включения" и "Каталоги библиотек" путь $(VCInstallDir)fftw;

  3. В разделе "Свойства конфигурации -> Компоновщик -> Ввод" добавить в "Дополнительные зависимости" библиотеку libfftw3-3.lib;

Установка библиотеки

Для того, чтобы использовать библиотеку FFTW на домашнем компьютере (для Visual Studio 2015), необходимо:

  1. разархивировать файлы из fftw.zip в C:\Program Files\Microsoft Visual Studio 14.0\VC\fftw\
  2. в переменную окружения PATH (меню Пуск->Панель управления->Система и безопасность->Система->Дополнительные параметры системы, кнопка Переменные среды) добавить путь C:\Program Files\Microsoft Visual Studio 14.0\VC\fftw\


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

Чтобы подключить библиотеку FFTW к проекту в Qt Creator необходимо в файле проекта (*.pro) добавить строки:

INCLUDEPATH += C:/Qt/lib/fftw/
LIBS += C:/Qt/lib/fftw/libfftw3-3.a\ C:/Qt/lib/fftw/libfftw3f-3.a\ C:/Qt/lib/fftw/libfftw3l-3.a

Для того, чтобы использовать библиотеку FFTW на домашнем компьютере, необходимо:

  1. разархивировать файлы из fftw_qtcreator.zip в C:/Qt/lib/fftw
  2. в переменную окружения PATH (меню Пуск->Панель управления->Система и безопасность->Система->Дополнительные параметры системы, кнопка Переменные среды) добавить путь C:/Qt/lib/fftw
  3. при компиляции выбрать MinGW 32-bit