|
|||||
|
| |||||
2. Описание работы с библиотекой численного преобразования Фурье FFTWБиблиотека FFTW - свободно распространяемая библиотека для выполнения быстрого дискретного преобразования Фурье. 2.1. Установка и подключение библиотеки для работы в Visual StudioУстановка бибилиотеки
Подключение библиотеки в Visual StudioДля того, чтобы использовать библиотеку FFTW нужно изменить свойства проекта (пункт меню Project->[имя проекта] Properties):
Подключение бибилиотеки в Visual Studio при помощи CMakeЕсли проект для Visual Studio создается с использованием CMake, нужно добавить в CMakeLists.txt: 2.2. Подключение библиотеки в Qt CreatorЧтобы подключить библиотеку FFTW к проекту в Qt Creator необходимо в файле проекта (*.pro) добавить строки: INCLUDEPATH += C:/lib/fftw64 2.3. Описание функций библиотеки 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сtrum.txt"); for(size_t i=0; i<data.size(); ++i) { out<<data[i]<<endl; } } ///////////////////////////////////////////////////////////////////////////// После выполнения программы, если все настроено верно, должен создаться файл "spectrum.txt". |