0

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

4

0 回答 0