我想使用 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))
会不会是
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 代表实域中的快速傅立叶变换)。