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)

计算输入张量沿最后两个轴的二维快速傅里叶变换。

参数

  • 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)

计算输入张量沿最后一个轴的实值快速傅里叶变换。

计算输入张量最内侧维度上实值信号的一维离散傅里叶变换。

由于实值信号的离散傅里叶变换是厄米特对称的,RFFT 只返回 fft_length / 2 + 1 个 FFT 的唯一分量:零频率项,后跟 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: 表示序列步长(hop size)的整数。
  • 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)

计算输入张量沿最后一个轴的逆实值快速傅里叶变换。

计算输入张量最内侧维度上实值信号的逆一维离散傅里叶变换。

输入的最内侧维度假定为 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: 表示序列步长(hop size)的整数。
  • fft_length: 表示生成 stft 时所用 FFT 大小的整数。应为 int32 类型。
  • length: 表示输出将被精确裁剪到指定长度的整数。如果未指定,则不进行填充或裁剪。默认为 None
  • window: 字符串、窗口张量或 None。如果 window 是字符串,可用值包括 "hann""hamming"。如果 window 是张量,将直接用作窗口,其长度必须等于 sequence_length。如果 windowNone,则不使用窗口。默认为 "hann"
  • center: 是否在 x 两侧进行了填充,以便第 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])