Keras 3 API 文件 / 運算 API / FFT 運算

FFT 運算

[原始碼]

fft 函數

keras.ops.fft(x)

沿輸入的最後一個軸計算快速傅立葉轉換。

引數

  • x:輸入張量的實部和虛部的元組。元組中的兩個張量都應為浮點類型。

回傳

一個包含兩個張量的元組 - 輸出張量的實部和虛部。

範例

>>> x = (
...     keras.ops.convert_to_tensor([1., 2.]),
...     keras.ops.convert_to_tensor([0., 1.]),
... )
>>> fft(x)
(array([ 3., -1.], dtype=float32), array([ 1., -1.], dtype=float32))

[原始碼]

fft2 函數

keras.ops.fft2(x)

沿輸入的最後兩個軸計算 2D 快速傅立葉轉換。

引數

  • x:輸入張量的實部和虛部的元組。元組中的兩個張量都應為浮點類型。

回傳

一個包含兩個張量的元組 - 輸出的實部和虛部。

範例

>>> x = (
...     keras.ops.convert_to_tensor([[1., 2.], [2., 1.]]),
...     keras.ops.convert_to_tensor([[0., 1.], [1., 0.]]),
... )
>>> fft2(x)
(array([[ 6.,  0.],
    [ 0., -2.]], dtype=float32), array([[ 2.,  0.],
    [ 0., -2.]], dtype=float32))

[原始碼]

rfft 函數

keras.ops.rfft(x, fft_length=None)

沿輸入的最後一個軸進行實值快速傅立葉轉換。

計算實值訊號在輸入最內層維度上的 1D 離散傅立葉轉換。

由於實值訊號的離散傅立葉轉換是 Hermitian 對稱的,因此 RFFT 僅回傳 FFT 的 fft_length / 2 + 1 個獨特成分:零頻率項,後跟 fft_length / 2 個正頻率項。

沿著計算 RFFT 的軸,如果 fft_length 小於輸入的相應維度,則會裁剪該維度。如果它較大,則會用零填充該維度。

引數

  • x:輸入張量。
  • fft_length:一個整數,表示 fft 長度的數字。如果未指定,則從 x 最後一個軸的長度推斷。預設值為 None

回傳

一個包含兩個張量的元組 - 輸出的實部和虛部。

範例

>>> x = keras.ops.convert_to_tensor([0.0, 1.0, 2.0, 3.0, 4.0])
>>> rfft(x)
(array([10.0, -2.5, -2.5]), array([0.0, 3.4409548, 0.81229924]))
>>> rfft(x, 3)
(array([3.0, -1.5]), array([0.0, 0.8660254]))

[原始碼]

stft 函數

keras.ops.stft(
    x, sequence_length, sequence_stride, fft_length, window="hann", center=True
)

沿輸入的最後一個軸進行短時傅立葉轉換。

STFT 計算輸入短重疊視窗的傅立葉轉換。這提供了訊號的頻率成分,因為它們隨時間變化。

引數

  • x:輸入張量。
  • sequence_length:一個整數,表示序列長度。
  • sequence_stride:一個整數,表示序列跳躍大小。
  • fft_length:一個整數,表示要應用的 FFT 的大小。如果未指定,則使用包含 sequence_length 的最小 2 的冪。
  • window:一個字串、視窗張量或 None。如果 window 是一個字串,則可用值為 "hann""hamming"。如果 window 是一個張量,它將直接用作視窗,並且其長度必須為 sequence_length。如果 windowNone,則不使用視窗化。預設值為 "hann"
  • center:是否在 x 的兩側填充,以便第 t 個序列以時間 t * sequence_stride 為中心。否則,第 t 個序列從時間 t * sequence_stride 開始。預設值為 True

回傳

一個包含兩個張量的元組 - STFT 輸出的實部和虛部。

範例

>>> x = keras.ops.convert_to_tensor([0.0, 1.0, 2.0, 3.0, 4.0])
>>> stft(x, 3, 2, 3)
(array([[0.75, -0.375],
   [3.75, -1.875],
   [5.25, -2.625]]), array([[0.0, 0.64951905],
   [0.0, 0.64951905],
   [0.0, -0.64951905]]))

[原始碼]

irfft 函數

keras.ops.irfft(x, fft_length=None)

沿最後一個軸進行反實值快速傅立葉轉換。

計算實值訊號在輸入最內層維度上的反 1D 離散傅立葉轉換。

輸入的最內層維度被假定為 RFFT 的結果:實值訊號 DFT 的 fft_length / 2 + 1 個獨特成分。如果未提供 fft_length,則從輸入最內層維度的大小計算 (fft_length = 2 * (inner - 1))。如果用於計算的 FFT 長度為奇數,則應提供,因為無法正確推斷。

沿著計算 IRFFT 的軸,如果 fft_length / 2 + 1 小於輸入的相應維度,則會裁剪該維度。如果它較大,則會用零填充該維度。

引數

  • x:輸入張量的實部和虛部的元組。元組中的兩個張量都應為浮點類型。
  • fft_length:一個整數,表示 fft 長度的數字。如果未指定,則從 x 最後一個軸的長度推斷。預設值為 None

回傳

一個張量,包含沿 x 最後一個軸的反實值快速傅立葉轉換。

範例

>>> real = keras.ops.convert_to_tensor([0.0, 1.0, 2.0, 3.0, 4.0])
>>> imag = keras.ops.convert_to_tensor([0.0, 1.0, 2.0, 3.0, 4.0])
>>> irfft((real, imag))
array([0.66666667, -0.9106836, 0.24401694])
>>> irfft(rfft(real, 5), 5)
array([0.0, 1.0, 2.0, 3.0, 4.0])

[原始碼]

istft 函數

keras.ops.istft(
    x,
    sequence_length,
    sequence_stride,
    fft_length,
    length=None,
    window="hann",
    center=True,
)

沿輸入的最後一個軸進行反短時傅立葉轉換。

若要重建原始波形,參數應與 stft 中的參數相同。

引數

  • x:輸入張量的實部和虛部的元組。元組中的兩個張量都應為浮點類型。
  • sequence_length:一個整數,表示序列長度。
  • sequence_stride:一個整數,表示序列跳躍大小。
  • fft_length:一個整數,表示產生 stft 的 FFT 的大小。應為 int32 類型。
  • length:一個整數,表示輸出被裁剪為精確長度。如果未指定,則不進行填充或裁剪。預設值為 None
  • window:一個字串、視窗張量或 None。如果 window 是一個字串,則可用值為 "hann""hamming"。如果 window 是一個張量,它將直接用作視窗,並且其長度必須為 sequence_length。如果 windowNone,則不使用視窗化。預設值為 "hann"
  • centerx 是否在兩側填充,以便第 t 個序列以時間 t * sequence_stride 為中心。預設值為 True

回傳

一個張量,包含沿 x 最後一個軸的反短時傅立葉轉換。

範例

>>> x = keras.ops.convert_to_tensor([0.0, 1.0, 2.0, 3.0, 4.0])
>>> istft(stft(x, 1, 1, 1), 1, 1, 1)
array([0.0, 1.0, 2.0, 3.0, 4.0])