Я работаю в C с Dev-C++2D реализация комплекса FFT
Я создал 2D массив комплексных чисел, как, например:
#include<complex.h>
double complex **x;
x = malloc(Nx * sizeof *X);
if (x)
{
for (i = 0; i < Nx; i++)
{
x[i] = malloc(Nx * sizeof *x[i]);
}
и наполнил ее с данными, которые я» построены с реальными и мнимыми частями, которые проверены и правильны.
Я просто хотел бы выполнить БПФ на этих данных (надеюсь, с помощью функции, принимающей только массив, его размеры и направление fft), которые преобразуют массив и также смогут выполнять инверсию.
Я смотрел такие библиотеки, как FFTW, но реализация остается непонятной для меня, несмотря на мои попытки понять.
Может кто-нибудь, пожалуйста, объяснит мне лучший способ сделать это? Спасибо
Реализация эффективного fft это действительно сложная задача, и именно поэтому fftw существует. Для композитных размеров взгляните на алгоритм [Cooley Tuckey] (http://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm). – francis
Хорошая простая библиотека FFT - [KissFFT] (http: // sourceforge.net/projects/kissfft /) - гораздо проще справиться с FFTW - попробуйте. –
Возможно, вы захотите уменьшить до двух (или даже одного) распределения памяти. Выделите 'x [0] = (X *) malloc (Nx * Nx * sizeof (X))' и цикл 'x [k + 1] = x [k] + Nx'. Единственная точка отказа, и вы можете получить доступ к столбцам как «x [j] [k] = x [0] [k + j * Nx]', 'j = 0, ..., Nx-1', т.е. последовательность арифметических индексов в плоскую матрицу. Это также может помочь с вертикальным БПФ. – LutzL