Частичное БПФ многомерного массива - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть трехмерный массив измерения (NX,NY,NZ), который представляет переменную в физическом пространстве, скажем, velocities, взятую из моделирования в трехмерной области.

1) Я хочу преобразовать Фурье только размеры X и Z, как мне использовать встроенную функцию fft в этом случае?В какой-то момент я хочу также вернуться в физическое пространство, но только на X, поэтому применяется тот же вопрос.

2) Я прочитал, что FFTW использует только 2 * N / 3 точки, если я укажу NXи NZ как число оставшихся мод или меньше?

3) Есть ли проблема с коэффициентом перед интегралом, определяющим преобразование Фурье, при использовании пакета FFTW?Предполагает ли этот пакет, что мой домен 2pix2pix2pi?

1 Ответ

0 голосов
/ 30 ноября 2018

1 °) Функция для 2D-БПФ - fft2, и она по умолчанию будет применяться к двум первым измерениям массива.То есть fft2(velocities) даст вам трехмерный массив с NZ преобразованиями Фурье по измерениям X и Y

Для выполнения БПФ по другим измерениямнеобходимо вручную разложить 2D-БПФ как два 1D-БПФ.fft будет работать по умолчанию для измерения 1 и производить столько образцов, сколько было на входе.fft(X[],n) делает то же самое, но вдоль измерения n .

Таким образом, вы можете вычислить 2D БПФ вашего 3D-массива вдоль измерений X и Z с помощью команды:

my_FFT = fft(fft(velocities),[],3);

2 °) Сэмплов будет столько же, сколько сэмплов.

3 °) Я считаю, что нормализация по размеру массива полностью применяется при обратном преобразовании, а не вообщена прямом преобразовании.

fft([1 0 0 0 0 0])
ans =
     1     1     1     1     1     1

Для поддержания нормализации следует применять коэффициент sqrt(NX*NZ) (умножить при выполнении БПФ, делить при выполнении ОБПФ).

...