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

Я хочу использовать pyFFTW для создания 2d fft и ifft.Тем не менее, документация была немного запутанной: https://pyfftw.readthedocs.io/en/latest/source/tutorial.html#the-workhorse-pyfftw-fftw-class

Так что, по сути, код:

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

fft_object = pyfftw.FFTW(a, b)

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

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))

, был бы ifft

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 представляют быстрое преобразование Фурье в реальной области).

...