fft
functionkeras.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
functionkeras.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
functionkeras.ops.rfft(x, fft_length=None)
实值快速傅里叶变换沿输入的最后一个轴进行.
计算沿输入最内层维度的实值信号的1D离散傅里叶变换.
由于实值信号的离散傅里叶变换是埃尔米特对称(Hermitian-symmetric)的,RFFT仅返回FFT的fft_length / 2 + 1
个唯一分量:零频项,随后是fft_length / 2
个正频项.
沿RFFT计算的轴,如果fft_length
小于输入的相应维度,则该维度被裁剪.如果它更大,则该维度用零填充.
参数:
x: 输入张量.
fft_length: 一个整数,表示傅里叶变换的长度.如果未指定,则从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
functionkeras.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
.如果window
为None
,则不使用窗口.默认为"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
functionkeras.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
functionkeras.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大小.
length: 一个整数,表示输出被裁剪为精确长度.如果未指定,则不进行填充或裁剪.默认为None
.
window: 一个字符串、窗口张量或None
.如果window
是字符串,可用值为"hann"
和"hamming"
.如果window
是张量,它将直接用作窗口,其长度必须为sequence_length
.如果window
为None
,则不使用窗口.默认为"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])