DFT

DFT - 20

版本

  • 名稱: DFT (GitHub)

  • 網域: main

  • since_version: 20

  • function: False

  • support_level: 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://scipy-docs.dev.org.tw/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]。指定 axissignal_dim 等於 dft_length

類型限制

  • T1 in ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型限制為浮點數張量。

  • T2 in ( tensor(int32), tensor(int64) )

    將純量長度類型限制為整數。

DFT - 17

版本

  • 名稱: DFT (GitHub)

  • 網域: main

  • since_version: 17

  • function: False

  • support_level: 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 in ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型限制為浮點數張量。

  • T2 in ( tensor(int32), tensor(int64) )

    將純量長度類型約束為 int64_t。