如何使用pyFFTW类进行2d傅立叶变换?

时间:2018-12-18 22:34:13

标签: python fft fftw pyfftw

我想使用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,为什么它需要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的方式,甚至没有函数调用。函数如何知道a是输入? (我阅读了整个页面,并在pyfftw.builders

中找到了提及
fft_object = pyfftw.builders.fft(a)

不过,pyfftw.builders.fft(a)定义的fft_object是什么?以及建设者在做什么?)

另外,如果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 x 3的矩阵x = np.ones([3,3]);

我该如何做fft2(x)和ifft2(x)?

进一步,我该怎么做rfft2(x)和irfft2(x)?(rfft2和irfft2代表实域中的快速傅立叶变换)。

0 个答案:

没有答案