这是离散傅立叶变换及其相关函数的包。使用之前必须先import torch.fft
。
torch.fft.fft(input, n=None, dim=-1, norm=None) → Tensor
一维傅立叶变换。
参数:
- input (Tensor):输入张量
- n (int, optional) :信号长度,如果给定,那么输入张量要么被zero-padding到信号长度,要么被剪裁到信号长度。
- dim (int, optional):做一维傅立叶变换的维度。
- norm (str, optional):归一化模式。
- “forward” - normalize by 1/n
- “backward” - no normalization
- “ortho” - normalize by 1/sqrt(n) (making the FFT orthonormal)
例子:
>>> import torch.fft
>>> t = torch.arange(4)
>>> t
tensor([0, 1, 2, 3])
>>> torch.fft.fft(t)
tensor([ 6.+0.j, -2.+2.j, -2.+0.j, -2.-2.j])
>>> t = tensor([0.+1.j, 2.+3.j, 4.+5.j, 6.+7.j])
>>> torch.fft.fft(t)
tensor([12.+16.j, -8.+0.j, -4.-4.j, 0.-8.j])
torch.fft.ifft(input, n=None, dim=-1, norm=None) → Tensor
一维傅立叶逆变换。
参数: 与一维傅立叶变换一致。
例子:
>>> import torch.fft
>>> t = torch.tensor([ 6.+0.j, -2.+2.j, -2.+0.j, -2.-2.j])
>>> torch.fft.ifft(t)
tensor([0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j])
torch.fft.fftn(input, s=None, dim=None, norm=None) → Tensor
N维傅立叶变换。
参数:
- input (Tensor):输入张量
- s (Tuple[int], optional):信号尺寸,如果给定,那么输入张量要变换的维度要么被zero-padding到信号尺寸,要么被剪裁到信号尺寸。
- dim (Tuple[int], optional):做N维傅立叶变换的维度。
- norm (str, optional):归一化模式。
- “forward” - normalize by 1/n
- “backward” - no normalization
- “ortho” - normalize by 1/sqrt(n) (making the FFT orthonormal)。
n = prod(s)
,是s中所有元素的乘积。
例子:
>>> import torch.fft
>>> x = torch.rand(10, 10, dtype=torch.complex64)
>>> fftn = torch.fft.fftn(t)
由于离散傅立叶变换是可分的,因此二维的离散傅立叶变换等价于两个一维的离散傅立叶变换。
>>> two_ffts = torch.fft.fft(torch.fft.fft(x, dim=0), dim=1)
>>> torch.allclose(fftn, two_ffts)
torch.fft.ifftn(input, s=None, dim=None, norm=None) → Tensor
N维傅立叶逆变换。
参数: 与维维傅立叶变换一致。
例子:
>>> import torch.fft
>>> x = torch.rand(10, 10, dtype=torch.complex64)
>>> ifftn = torch.fft.ifftn(t)
由于离散傅立叶逆变换是可分的,因此二维的离散傅立叶逆变换等价于两个一维的离散傅立叶逆变换。
>>> two_iffts = torch.fft.ifft(torch.fft.ifft(x, dim=0), dim=1)
>>> torch.allclose(ifftn, two_iffts)
torch.fft.fftshift(input, dim=None) → Tensor
把转换后的频域图的低频部分放到图像中间,仅起到便于观察的作用。适用于N维。
参数:
- input (Tensor):输入的频域张量。
- dim (int, Tuple[int], optional):做顺序调换的维度。
例子:
>>> f = torch.fft.fftfreq(4)
>>> f
tensor([ 0.0000, 0.2500, -0.5000, -0.2500])
>>> torch.fft.fftshift(f)
tensor([-0.5000, -0.2500, 0.0000, 0.2500])
torch.fft.ifftshift(input, dim=None) → Tensor
fftshift()的逆变换。
参数: 与fftshift参数一致。
例子:
>>> f = torch.fft.fftfreq(5)
>>> f
tensor([ 0.0000, 0.2000, 0.4000, -0.4000, -0.2000])
>>> shifted = torch.fft.fftshift(f)
>>> torch.fft.ifftshift(shifted)
tensor([ 0.0000, 0.2000, 0.4000, -0.4000, -0.2000])