Я использую функцию C ++, чтобы найти обратное преобразование Фурье.
int inYSize = 170; int inXSize = 2280;
float* outData = new float[inYSize*inXSize];
fftwf_plan mReverse = fftwf_plan_dft_c2r_2d(inYSize, inXSize,(fftwf_complex*)temp, outdata,
FFTW_ESTIMATE);
fftwf_execute(mReverse);
Мой ввод — темп 2D-массива с комплексными числами. Все элементы имеют реальное значение 1 и мнимое 0.
Так что я ожидаю InverseFFT
такого массива должен быть 2D массив с реальными значениями. Выходной массив должен иметь значение SPIKE 0,0, а все остальные значения равны 0. Но я получаю все разные значения в выходном массиве даже после нормализации с общим размером массива. Что может быть причиной?
С FFTW не так уж и легко справиться, когда дело доходит до многомерного DFT и преобразования «сложное в реальное».
При выполнении преобразования C2R массива с основными строками MxN второе измерение сокращается пополам из-за симметрии результата: outData
в два раза больше, чем нужно, но это не является причиной вашей проблемы (и это не так, как вы делаете C2R, а не R2C).
Больше информации об этом извилистом вопросе: http://www.fftw.org/doc/One_002dDimensional-DFTs-of-Real-Data.html
«Полезный совет»: используйте только «более простой» способ C2C, используйте модуль вывода, если вы не знаете, как обрабатывать результаты, но не тратите свое время на преобразование n-D Complex в Real.
Из-за ограниченной точности, из-за численной реализации DFT, из-за неподчиненных выпитых битов, вы можете получить значения, которые не равны 0, даже если они очень малы. Это нормальное поведение алгоритма БПФ.
Помимо прочтения внимательно руководство пользователя (http://www.fftw.org/doc/) даже если это настоящая боль (я потерял несколько дней из-за этой библиотеки только для того, чтобы заставить работать 3D-преобразование, просто чтобы понять, как масштабировались данные)
Не стесняйтесь добавлять точность к вашему вопросу, и удачи с FFTW
С этой маленькой информацией трудно сказать. Я мог бы представить, что вы получаете спектральную утечку из-за выбора окна (см. Эта статья в Википедии для деталей о утечке).
Что вы можете сделать, это попробовать использовать другую оконную функцию, чтобы уменьшить утечку или переопределить размер вашего оконного окна.