DFT

DFT - 20

版本

  • 名称: DFT (GitHub)

  • : main

  • 版本: 20

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符从 版本 20 开始可用。

摘要

计算输入的离散傅里叶变换 (DFT)。

假设输入的形状为 [M, N],其中 N 是 DFT 计算的维度,M 表示概念上的“所有其他维度”,形状为 [M, N] 的 DFT y[m, k] 定义为

\[y[m, k] = \sum_{n=0}^{N-1} e^{-2 \pi j \frac{k n}{N} } x[m, n] ,\]

逆变换定义为

\[x[m, n] = \frac{1}{N} \sum_{k=0}^{N-1} e^{2 \pi j \frac{k n}{N} } y[m, k] ,\]

其中 \(j\) 是虚数单位。

输出的实际形状在“输出”部分指定。

参考: https://docs.scipy.org.cn/doc/scipy/tutorial/fft.html

属性

  • inverse - INT (默认值为 '0')

    是否执行逆离散傅里叶变换。默认值为 0,对应于 false

  • onesided - INT (默认值为 '0')

    如果 onesided1 且输入为实数,则仅返回 k[0, 1, 2, ..., floor(n_fft/2) + 1] 中的值,因为实数到复数傅里叶变换满足共轭对称性,即 X[m, k] = X[m, n_fft-k]*,其中 m 表示 DFT 未应用的“所有其他维度”。如果输入张量为复数,则单边输出不可行。值可以是 01。默认值为 0

输入

1 到 3 个输入。

  • input (异构) - T1

    对于实数输入,预期形状为: [signal_dim0][signal_dim1][signal_dim2]...[signal_dimN][1]。对于复数输入,预期形状为: [signal_dim0][signal_dim1][signal_dim2]...[signal_dimN][2]。最后一个维度表示值的实部和虚部,按此顺序排列。

  • dft_length (可选,异构) - T2

    信号长度作为标量。如果大于轴维度,则信号将被零填充到 dft_length。如果小于轴维度,则仅使用前 dft_length 个值作为信号。

  • axis (可选,异构) - tensor(int64)

    作为标量的轴,在该轴上执行 DFT。默认值为 -2 (最后一个信号轴)。负值表示从后面开始计数维度。接受的范围是 \([-r, -2] \cup [0, r-2]\),其中 r = rank(input)。最后一个维度用于表示复数,因此是无效轴。

输出

  • output (异构) - T1

    输入向量的傅里叶变换。如果 onesided0,则预期形状为: [signal_dim0][signal_dim1][signal_dim2]...[signal_dimN][2]。如果 axis=0onesided1,则预期形状为: [floor(signal_dim0/2)+1][signal_dim1][signal_dim2]...[signal_dimN][2]。如果 axis=1onesided1,则预期形状为: [signal_dim0][floor(signal_dim1/2)+1][signal_dim2]...[signal_dimN][2]。如果 axis=Nonesided1,则预期形状为: [signal_dim0][signal_dim1][signal_dim2]...[floor(signal_dimN/2)+1][2]。指定 axis 上的 signal_dim 等于 dft_length

类型约束

  • T1 在 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) ) 中

    将输入和输出类型约束为浮点张量。

  • T2 在 ( tensor(int32), tensor(int64) ) 中

    将标量长度类型约束为整数。

DFT - 17

版本

  • 名称: DFT (GitHub)

  • : main

  • 版本: 17

  • 函数: False

  • 支持级别: SupportType.COMMON

  • 形状推断: True

此版本的运算符从 版本 17 开始可用。

摘要

计算输入的离散傅里叶变换。

属性

  • axis - INT (默认值为 '1')

    执行 DFT 的轴。默认情况下,此值为 1,对应于批次索引后的第一个维度。负值表示从后向前计数维度。接受范围为 \([-r, -2] \cup [0, r-2]\),其中 r = rank(input)。最后一个维度用于表示复数,因此不是有效的轴。

  • inverse - INT (默认值为 '0')

    是否执行逆离散傅里叶变换。默认情况下,此值为 0,对应于 false。

  • onesided - INT (默认值为 '0')

    如果 onesided 为 1,则仅返回 w 在 [0, 1, 2, …, floor(n_fft/2) + 1] 中的值,因为实数到复数的傅里叶变换满足共轭对称性,即 X[m, w] = X[m, n_fft-w]*。注意,如果输入或窗口张量为复数,则 onesided 输出是不可能的。使用实数输入启用 onesided 会执行实数快速傅里叶变换 (RFFT)。当使用实数或复数值输入调用时,默认值为 0。值可以为 0 或 1。

输入

1 到 2 个输入。

  • input (异构) - T1

    对于实数输入,预期形状为:[batch_idx][signal_dim1][signal_dim2]…[signal_dimN][1]。对于复数输入,预期形状为:[batch_idx][signal_dim1][signal_dim2]…[signal_dimN][2]。第一个维度是批次维度。接下来的 N 个维度对应于信号的维度。最后一个维度表示按此顺序排列的值的实部和虚部。

  • dft_length (可选,异构) - T2

    信号长度作为标量。如果大于轴维度,则信号将被零填充到 dft_length。如果小于轴维度,则仅使用前 dft_length 个值作为信号。这是一个可选值。

输出

  • output (异构) - T1

    输入向量的傅里叶变换。如果 onesided 为 0,则预期形状为:[batch_idx][signal_dim1][signal_dim2]…[signal_dimN][2]。如果 axis=1 且 onesided 为 1,则预期形状为:[batch_idx][floor(signal_dim1/2)+1][signal_dim2]…[signal_dimN][2]。如果 axis=2 且 onesided 为 1,则预期形状为:[batch_idx][signal_dim1][floor(signal_dim2/2)+1]…[signal_dimN][2]。如果 axis=N 且 onesided 为 1,则预期形状为:[batch_idx][signal_dim1][signal_dim2]…[floor(signal_dimN/2)+1][2]。指定轴上的 signal_dim 等于 dft_length。

类型约束

  • T1 在 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) ) 中

    将输入和输出类型约束为浮点张量。

  • T2 在 ( tensor(int32), tensor(int64) ) 中

    将标量长度类型约束为 int64_t。