---
title: FFT_2D
description: "| 硬件型号 | 支持情况 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/SiP/SIP_API_0030.html
sourcePath: /source/zh/canncommercial/900/API/SiP/SIP_API_0030.html
indexId: b213ac286131af4994adc3c8f9c733ab4dfa1a2378e42b12824d1ccf9e898bbb55
---
# FFT_2D

#### 产品支持情况

| 硬件型号 | 支持情况 |
| --- | --- |
| Atlas 200I/500 A2 推理产品 | 不支持 |
| Atlas 推理系列产品 | 不支持 |
| Atlas 训练系列产品 | 不支持 |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | 支持 |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | 支持 |


#### 功能描述

接口功能

- 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对象。 |
| input | Input | const aclTensor \* | 公式中的x，Device侧的Tensor，数据类型仅支持COMPELX64，数据格式支持ND，输入的shape为（batchSize，fftSizeX，fftSizeY）。 |
| output | Output | aclTensor \* | 公式中的y，Device侧的Tensor，数据类型仅支持COMPELX64，数据格式支持ND，输入的shape为（batchSize，fftSizeX，fftSizeY）。 |


- asdFftExecC2R| 参数名称 | Input/Output | 类型 | 描述 |
| --- | --- | --- | --- |
| handle | Input | asdFftHandle | FFT算子的句柄，需要手动申请创建asdFftHandle对象。 |
| input | Input | const aclTensor \* | 公式中的x，Device侧的Tensor，数据类型仅支持COMPELX64，数据格式支持ND，输入的shape为（batchSize，fftSizeX，fftSizeY/2+1）。 |
| output | Output | aclTensor \* | 公式中的y，Device侧的Tensor，数据类型仅支持FLOAT32，数据格式支持ND，输入的shape为（batchSize，fftSizeX，fftSizeY）。 |


- asdFftExecR2C| 参数名称 | Input/Output | 类型 | 描述 |
| --- | --- | --- | --- |
| handle | Input | asdFftHandle | FFT算子的句柄，需要手动申请创建asdFftHandle对象。 |
| input | Input | const aclTensor \* | 公式中的x，Device侧的Tensor，数据类型仅支持FLOAT32，数据格式支持ND，输入的shape为（batchSize，fftSizeX，fftSizeY）。 |
| output | 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
  无。


#### 调用示例

算子的调用示例参见FFT_2D。
