FFT_2D
接口功能描述
计算公式
傅里叶变换(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)。