aclStft
产品支持情况
产品 | 是否支持 |
---|---|
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object] | √ |
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object] | √ |
[object Object]Atlas 200I/500 A2 推理产品[object Object] | × |
[object Object]Atlas 推理系列产品 [object Object] | × |
[object Object]Atlas 训练系列产品[object Object] | × |
功能说明
- 算子功能: 计算输入在滑动窗口内的傅里叶变换。
- 计算公式: 其中,为FFT的频点;为滑动窗口的index;为1维或2维tensor,当是1维时,其为一个时序采样序列,当是2维时,其为多个时序采样序列;为滑动窗口大小;为1维tensor,是STFT的窗函数(例如hann_window),其长度为;为旋转因子。
函数原型
每个算子分为undefined,必须先调用“aclStftGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclStft”接口执行计算。
aclnnStatus aclStftGetWorkspaceSize(const aclTensor *self, const aclTensor *windowOptional, aclTensor *out, int64_t nFft, int64_t hopLength, int64_t winLength, bool normalized, bool onesided, bool returnComplex, uint64_t *workspaceSize, aclOpExecutor **executor)
aclnnStatus aclStft(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)
aclStftGetWorkspaceSize
参数说明:
self(aclTensor*,计算输入):待计算的输入,要求是一个1D/2D的Tensor,shape为(L)/(B, L),其中,L为时序采样序列的长度,B为时序采样序列的个数。数据类型支持FLOAT32、DOUBLE、COMPLEX64、COMPLEX128,支持undefined,undefined要求为ND。
windowOptional(aclTensor*,计算输入):要求是一个1D的Tensor,shape为(winLength),winLength为STFT窗函数的长度。数据类型支持FLOAT32、DOUBLE、COMPLEX64、COMPLEX128,且数据类型与self保持一致,undefined要求为ND。
out(aclTensor*,计算输出):self在window内的傅里叶变换结果,要求是一个2D/3D/4D的Tensor,数据类型支持FLOAT32、DOUBLE、COMPLEX64、COMPLEX128,支持undefined,undefined要求为ND。
- 如果returnComplex=True,out是shape为[N, T]或者[B, N, T]的复数tensor。
- 如果returnComplex=False,out是shape为[N, T, 2]或者[B, N, T, 2]的实数tensor。
其中,N=nFft(onesided=False)或者(nFft // 2 + 1)(onesided=True);T是滑动窗口的个数,T = (L - nFft) // hopLength + 1。
nFft(int64_t,计算输入):Host侧的int,FFT的点数(大于0)。
hopLength(int64_t,计算输入):Host侧的int,滑动窗口的间隔(大于0)。
winLength(int64_t,计算输入):Host侧的int,window的大小(大于0)。
normalized(bool,计算输入):Host侧的bool,是否对傅里叶变换结果进行标准化。
onesided(bool,计算输入):Host侧的bool,是否返回全部的结果或者一半结果。
returnComplex(bool,计算输入):Host侧的bool,确认返回值是complex tensor或者是实、虚部分开的tensor。
workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
返回值:
返回aclnnStatus状态码,具体参见undefined。
[object Object]
aclStft
参数说明:
- workspace(void*,入参):在Device侧申请的workspace内存地址。
- workspaceSize(uint64_t,入参):在Device侧申请的workspace大小,由第一段接口aclStftGetWorkspaceSize获取。
- executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
- stream(aclrtStream,入参):指定执行任务的Stream。
返回值:
aclnnStatus: 返回状态码,具体参见undefined。
约束说明
输入self与PyTorch接口的不同:PyTorch接口的输入self为原始输入;aclStftGetWorkspaceSize的入参self是原始输入经过前端PyTorch补pad后得到的结果。
PyTorch接口调用STFT时,self数据类型仅支持FLOAT32、DOUBLE。
nFft <= L。
winLength <= nFft。
当normalized=True时,
self、windowOptional、returnComplex、out输入和输出数据类型的对应关系如下:
self windowOptional returnComplex out FLOAT32 FLOAT32 True COMPLEX64 DOUBLE DOUBLE True COMPLEX128 COMPLEX64 COMPLEX64 True COMPLEX64 COMPLEX128 COMPLEX128 True COMPLEX128 FLOAT32 FLOAT32 False FLOAT32 DOUBLE DOUBLE False DOUBLE COMPLEX64 COMPLEX64 False FLOAT32 COMPLEX128 COMPLEX128 False DOUBLE
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。