昇腾社区首页
中文
注册

FFT_2D

接口功能描述

  • asdFftMakePlan2D

    算子功能:初始化二维FFT配置。

  • asdFftExecC2C

    算子功能:执行复数到复数的FFT变换。

  • asdFftExecC2R

    算子功能:执行复数到实数的FFT变换。

  • asdFftExecR2C

    算子功能:执行实数到复数的FFT变换。

计算公式

傅里叶变换(Fourier transform)是一种线性积分变换,用于信号在时域和频域之间的变换,在物理学和工程学中有许多应用。对应给定长度为N的信号,DFT表达式如下:

将系数矩阵(N*N)和时域信号(N*1)看作两个Tensor,在NPU上直接使用矩阵乘,可完成DFT;但时间复杂度太高,因此需要快速傅里叶变换。其基本原理是利用三角函数在复数域的旋转对称性,将序列拆分成子序列,通过蝶形运算以降低计算的复杂度:

接口原型

  • AspbStatus asdFftMakePlan2D(asdFftHandle handle, int64_t fftSizeX, int64_t fftSizeY, asdFftType fftType, asdFftDirection direction, int32_t batchSize)
  • AspbStatus asdFftExecC2C(asdFftHandle handle, const aclTensor *input, const aclTensor *output)
  • AspbStatus asdFftExecC2R(asdFftHandle handle, const aclTensor *input, const aclTensor *output)
  • AspbStatus asdFftExecR2C(asdFftHandle handle, const aclTensor *input, const aclTensor *output)

参数列表

  • asdFftMakePlan2D

    参数名称

    Input/OutPut

    类型

    描述

    handle

    InPut

    asdFftHandle

    FFT算子的句柄,需要手动申请创建asdFftHandle对象。

    fftSizeX

    InPut

    int64_t

    公式中的M,FFT信号长度(第一维)。

    fftSizeY

    InPut

    int64_t

    公式中的N,FFT信号长度(第二维)。

    fftType

    InPut

    asdFftType

    FFT变换类型,全部如下:

        - ASCEND_FFT_C2C
        - ASCEND_FFT_C2R
        - ASCEND_FFT_R2C

    direction

    InPut

    asdFftDirection

    选择FFT执行正向变换或反向变换:

        - ASCEND_FFT_FORWARD
        - ASCEND_FFT_INVERSE

    batchSize

    InPut

    int32_t

    FFT变换批处理操作中的数据批次数量。

  • asdFftExecC2C

    参数名称

    Input/OutPut

    类型

    描述

    handle

    InPut

    asdFftHandle

    FFT算子的句柄,需要手动申请创建asdFftHandle对象。

    inData

    InPut

    const aclTensor *

    公式中的x,Device侧的Tensor,数据类型仅支持COMPELX64,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY)。

    outData

    OutPut

    aclTensor *

    公式中的y,Device侧的Tensor,数据类型仅支持COMPELX64,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY)。

  • asdFftExecC2R

    参数名称

    Input/OutPut

    类型

    描述

    handle

    InPut

    asdFftHandle

    FFT算子的句柄,需要手动申请创建asdFftHandle对象。

    inData

    InPut

    const aclTensor *

    公式中的x,Device侧的Tensor,数据类型仅支持COMPELX64,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY/2+1)。

    outData

    OutPut

    aclTensor *

    公式中的y,Device侧的Tensor,数据类型仅支持FLOAT32,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY)。

  • asdFftExecR2C

    参数名称

    Input/OutPut

    类型

    描述

    handle

    InPut

    asdFftHandle

    FFT算子的句柄,需要手动申请创建asdFftHandle对象。

    inData

    InPut

    const aclTensor *

    公式中的x,Device侧的Tensor,数据类型仅支持FLOAT32,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY)。

    outData

    OutPut

    aclTensor *

    公式中的y,Device侧的Tensor,数据类型仅支持COMPELX64,数据格式支持ND,输入的shape为(batchSize,fftSizeX,fftSizeY/2+1)。

规格约束

FFT_2D均不支持本地更新,即不允许输入tensor和输出tensor是同一个tensor。

  • asdFftMakePlan2D
    • fftSizeX、fftSizeY需保证不超过2^27且分解质因数后不包含超过199的质因子;
    • batchSize在存储允许范围内应无额外约束;
    • 输入的元素个数理论支持[1,2^30]。
    • 输入的元素不支持inf、-inf和nan,如果输入中包含这些值, 那么结果为未定义。
  • asdFftExecC2C

    无。

  • asdFftExecC2R

    无。

  • asdFftExecR2C

    无。