昇腾社区首页
中文
注册
开发者
下载

Istft

产品支持情况

硬件型号

支持情况

Atlas 200I/500 A2 推理产品

不支持

Atlas 推理系列产品

不支持

Atlas 训练系列产品

不支持

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

支持

Atlas A3 推理系列产品 / Atlas A3 训练系列产品

不支持

功能描述

接口功能

  • asdFftIstftMakePlan:
  • asdFftExecIstft:

计算公式

istft函数用于进行逆短时傅里叶变换,它的目标是将stft得到的频域数据转换回时域信号,是stft的逆运算。短时距傅里叶变换是可逆的,也就是说原本的信号可以借由反短时距傅里叶变换将短时距傅里叶变换后的信号还原。其中最广为接受的反短时距傅里叶变换方法是重叠-相加之卷积法。

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

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

而重叠-相加之卷积法( Overlap-add method ) 是一种区块卷积 ( block convolution, sectioned convolution ),可以有效的计算一个很长的信号x[n] 和一个FIR滤波器h[n]的离散卷积。

其中h[m]在[1, M]之外为零。

函数原型

  • AspbStatus asdFftIstftMakePlan(asdFftHandle handle, const aclTensor *input, const int64_t nFft,const int64_t hopLengthOpt, const int64_t winLengthOpt,const bool center, const bool normalized, const bool onesidedOpt,const int64_t lengthOpt, const bool returnComplex)
  • AspbStatus asdFftExecIstft(asdFftHandle handle, const aclTensor *input, const aclTensor *windowOpt, const aclTensor *output)

参数说明

  • asdFftIstftMakePlan

    参数名称

    Input/Output

    类型

    描述

    handle

    Input

    asdFftHandle

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

    input

    Input

    aclTensor *

    公式中的x,Device侧的Tensor,数据格式支持ND,格式预期与stft输出相同。

    数据类型:仅支持COMPELX64

    shape:(B, N, T)

    其中,

    • B是批处理维度
    • N是频率样本的数量,对于onesided为true, 输入为 (n_fft // 2) + 1,否则为 n_fft。
    • T是帧的数量,对于中心填充的stft 为 1 + length // hop_length,否则为1 + (length - n_fft) // hop_length。

    nFft

    Input

    int64_t

    傅里叶变换的大小

    hopLengthOpt

    Input

    int64_t

    相邻滑动窗口帧之间的距离,0 < hopLengthOpt <= nFft

    winLengthOpt

    Input

    int64_t

    窗口帧长度,winLengthOpt = nFft

    center

    Input

    bool

    表示是否对input的两侧进行了填充,默认等于true,当前版本只支持true

    normalized

    Input

    bool

    表示STFT是否已标准化,默认等于false,当前版本只支持false

    onesidedOpt

    Input

    bool

    表示STFT是否为onesided,默认等于false,当前版本只支持false

    lengthOpt

    Input

    int64_t

    信号将被修剪的量(即原始信号长度),对于中心填充的stft,默认为 (T - 1) * hop_length,否则为 n_fft + (T - 1) * hop_length,其中 T 是输入帧的数量。

    当前版本不支持该参数,默认为0

    returnComplex

    Input

    bool

    输出是否应为复数,默认为True,当前版本只支持True

  • asdFftExecIstft

    参数名称

    Input/Output

    类型

    描述

    handle

    Input

    asdFftHandle

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

    input

    Input

    aclTensor *

    公式中的x,Device侧的Tensor,数据格式支持ND,格式预期与stft输出相同。

    数据类型:仅支持COMPELX64

    shape:(B, N, T)

    其中,

    • B是批处理维度
    • N是频率样本的数量,对于onesided为true, 输入为 (n_fft // 2) + 1,否则为 n_fft。
    • T是帧的数量,对于中心填充的 stft 为 1 + length // hop_length,否则为1 + (length - n_fft) // hop_length

    windowOpt

    Input

    aclTensor *

    Device侧的Tensor,数据格式支持ND

    shape:[win_length]

    数据类型:仅支持COMPELX64

    output

    Output

    aclTensor *

    Device侧的Tensor,数据格式支持ND。

    shape:支持2维,(B, length)

    数据类型:仅支持COMPLEX64

返回值说明

返回值相关说明参见返回值

约束说明

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

▪ 为了使istft能够正确地重构信号,n_fft、hop_length、win_length、window、center和normalized这些参数必须与之前进行stft变换时使用的参数保持一致。

▪ 输入的元素不支持inf、-inf和nan,如果输入中包含这些值, 那么结果为未定义。

  • asdFftIstftMakePlan

    ▪ nFft需保证不超过2^27且分解质因数后不包含超过199的质因子。

    ▪ 当前功能实现所限,nFft大于等于32768且为2的幂的时候,会修改输入数据,需提前做好备份。

  • asdFftExecIstft

    ▪windowOpt tensor数值不能有接近零的最小值,否则结果未定义。

调用示例

算子的调用示例参见Istft