Как использовать класс pyFFTW для 2-мерного преобразования Фурье?

Я хочу использовать pyFFTW для создания 2d FFT и IFFT. Тем не менее, документы были немного запутанными: https://pyfftw.readthedocs.io/en/latest/source/tutorial.html

Итак, по сути, код:

a = pyfftw.empty_aligned(128, dtype='complex128')
b = pyfftw.empty_aligned(128, dtype='complex128')

fft_object = pyfftw.FFTW(a, b)

Я не понял, что такое fft_object, и зачем ему нужны a и b в качестве входных данных или даже что здесь делают a и b. Являются ли они просто пустым шаблоном для имитации данных ввода и вывода? Какова функция этого процесса?

import numpy

# Generate some data
ar, ai = numpy.random.randn(2, 128)
a[:] = ar + 1j*ai

fft_a = fft_object()

Я также не понял, каким образом a был преобразован в fft_a, даже не было вызова функции. Как функция узнала, что вход был? (Я прочитал всю страницу и нашел упоминание в pyfftw.builders

fft_object = pyfftw.builders.fft(a)

Тем не менее, что такое fft_object, определенный pyfftw.builders.fft(a)? а что делали строители?)

Кроме того, если FFT был

pyfftw.FFTW(a, b, axes=(0,1))

будет ли это

pyfftw.FFTW(a, b, direction='FFTW_BACKWARD', axes=(0,1))#or
pyfftw.FFTW(a, b, direction='FFTW_BACKWARD', axes=(1,0))#or
pyfftw.FFTW(b, a, direction='FFTW_BACKWARD', axes=(0,1))#or
pyfftw.FFTW(b, a, direction='FFTW_BACKWARD', axes=(1,0))

?

Предположим, у меня есть матрица 3 на 3 x=np.ones([3,3]);

Как я могу сделать fft2(x) и ifft2(x)?

Кроме того, как я могу сделать rfft2(x) и irfft2(x)?(Rfft2 и irfft2 представляют быстрое преобразование Фурье в реальной области).

0 ответов

Другие вопросы по тегам