irfft#

nvmath.fft.irfft(
x,
*,
axes=None,
options=None,
execution=None,
prolog=None,
epilog=None,
stream=None,
)[source]#

irfft(operand, axes=None, options=None, execution=None, prolog=None, epilog=None, stream=None)

对提供的复数操作数执行 N 维复数到实数 (C2R) FFT。方向隐式为逆向。

参数:
  • operand – 张量(类似 ndarray 的对象)。当前支持的类型为 numpy.ndarraycupy.ndarraytorch.Tensor

  • axes – 执行 FFT 的维度。 axes[-1] 是 rfft 的“最后变换”轴。目前,要求轴是连续的,并且包含第一个或最后一个维度。仅支持高达 3D 的 FFT。

  • options – 以 FFTOptions 对象的形式指定 FFT 的选项。或者,也可以提供包含 FFTOptions 构造函数参数的 dict。如果未指定,则值将设置为默认构造的 FFTOptions 对象。

  • prolog – 以 LTO-IR 格式提供设备可调用函数,用作加载回调,类型为 DeviceCallable 的对象。或者,也可以提供包含 DeviceCallable 构造函数参数的 dict。 默认值是无 prolog。目前,仅 CUDA 执行支持回调。

  • epilog – 以 LTO-IR 格式提供设备可调用函数,用作存储回调,类型为 DeviceCallable 的对象。或者,也可以提供包含 DeviceCallable 构造函数参数的 dict。 默认值是无 epilog。目前,仅 CUDA 执行支持回调。

  • stream – 提供用于执行操作的 CUDA 流。可接受的输入包括 cudaStream_t(作为 Python int)、cupy.cuda.Streamtorch.cuda.Stream。如果未提供流,将使用操作数包中的当前流。

返回值:

一个实数张量,它保留在与输入操作数相同的设备上,并且属于相同的包。如果 FFTOptions.last_axis_sizeeven,则结果中最后变换轴的范围将为 (operand.shape[axes[-1]] - 1) * 2;如果 FFTOptions.last_axis_sizeodd,则范围将为 operand.shape[axes[-1]] * 2 - 1

另请参阅

fft(), ifft(), FFT.

示例

>>> import cupy as cp
>>> import nvmath

在 GPU 上创建一个 3-D 对称 complex128 ndarray

>>> shape = 512, 768, 256
>>> a = nvmath.fft.rfft(cp.random.rand(*shape, dtype=cp.float64))

使用 irfft() 包装器执行 3-D C2R FFT。结果 r 是一个 CuPy float64 ndarray

>>> r = nvmath.fft.irfft(a)
>>> r.dtype
dtype('float64')

注释

  • 此函数执行逆 C2R N-D FFT,类似于 irfftn,但与各种数值包中的 irfft 不同。

  • 此函数是围绕 FFT 的便捷包装器,专门用于单次使用。可以通过将 FFTOptions.fft_type 设置为 'C2R' 并在调用 FFT.execute() 时传递参数 direction='inverse',使用有状态 API 执行相同的计算。

  • 此函数的输入必须是 Hermitian 对称的,否则结果是未定义的。 虽然对称性要求部分通过输入和结果之间最后变换维度中的不同范围来捕获,但还有其他 约束。作为一个具体的例子,一维变换要求输入的第一个元素(以及最后一个元素,如果范围是偶数)是纯实数值的。此外,如果使用 R2C FFT 生成 irfft 的输入,并且最后一个轴大小为奇数,则必须将 FFTOptions.last_axis_size 设置为 odd 才能恢复原始信号。

  • 有关更多详细信息,请参阅 C2R 示例奇数 C2R 示例