Функция ifft2
Функция ifft2 выполняет обратное двумерное быстрое преобразование Фурье (БПФ) над комплексным тензором. Она принимает тензор с комплексными значениями (в формате complex64 или complex128) и возвращает тензор той же формы, но уже в временной (пространственной) области. По умолчанию преобразование выполняется по двум последним осям, но это можно изменить с помощью параметра dim.
Параметр norm управляет режимом нормализации. Он может принимать значения 'backward' (нормализация по умолчанию, возвращает обратное преобразование без дополнительного масштабирования), 'forward' (масштабирует на 1/n, где n - произведение размеров преобразуемых осей) или 'ortho' (ортогональная нормализация, масштабирует на 1/sqrt(n)). Параметр s позволяет задать выходной размер, при необходимости выполняя обрезку или дополнение нулями.
Синтаксис
torch.fft.ifft2(input, s=None, dim=(-2, -1), norm='backward', *, out=None)
Пример
Выполним обратное преобразование над комплексным тензором, полученным после прямого преобразования:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
], dtype=torch.float)
# Прямое преобразование
fft_t = torch.fft.fft2(t)
print(fft_t)
# Обратное преобразование
ifft_t = torch.fft.ifft2(fft_t)
print(ifft_t)
Результат выполнения кода:
tensor([
[21.+0.j, -3.+1.732j, -3.-1.732j],
[-9.+5.196j, 0.-0.j, 0.-0.j],
])
tensor([
[1.+0.j, 2.+0.j, 3.+0.j],
[4.+0.j, 5.+0.j, 6.+0.j],
])
Пример
Используем параметр s, чтобы задать другой размер выходного тензора. В этом случае тензор будет дополнен нулями или обрезан:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
], dtype=torch.float)
fft_t = torch.fft.fft2(t)
ifft_t = torch.fft.ifft2(fft_t, s=(3, 4))
print(ifft_t)
Результат выполнения кода:
tensor([
[ 1.+0.j, 2.+0.j, 3.+0.j, 0.+0.j],
[ 4.+0.j, 5.+0.j, 6.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
])
Пример
Изменим оси, по которым выполняется преобразование, с помощью параметра dim. По умолчанию это две последние оси, но можно указать любые:
import torch
t = torch.randn(2, 3, 4, dtype=torch.complex64)
# Выполняем обратное преобразование по осям 0 и 2
res = torch.fft.ifft2(t, dim=(0, 2))
print(res.shape)
Результат выполнения кода:
torch.Size([2, 3, 4])
Пример
Продемонстрируем работу с разными режимами нормализации. При ортогональной нормализации прямое и обратное преобразования будут взаимно обратными без дополнительного масштабирования:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
], dtype=torch.float)
# Прямое преобразование с ортогональной нормализацией
fft_t = torch.fft.fft2(t, norm='ortho')
# Обратное преобразование с той же нормализацией
ifft_t = torch.fft.ifft2(fft_t, norm='ortho')
print(ifft_t)
Результат выполнения кода:
tensor([
[1.+0.j, 2.+0.j, 3.+0.j],
[4.+0.j, 5.+0.j, 6.+0.j],
])