Функция fft.fft2
Функция fft.fft2 выполняет двумерное быстрое преобразование Фурье (БПФ) над входным тензором. Она вычисляет дискретное преобразование Фурье по двум последним осям тензора. Функция принимает входной тензор, а также опциональные параметры для указания размера преобразования, нормализации и размерности. Результатом является комплексный тензор той же формы, что и входной.
Синтаксис
torch.fft.fft2(input, s=None, dim=(-2, -1), norm=None)
Параметры функции:
-
input- входной тензор для преобразования; -
s- кортеж из двух чисел, определяющий размер выходного тензора после преобразования (по умолчаниюNone, что означает использование исходного размера); -
dim- кортеж из двух чисел, указывающий оси, по которым выполняется преобразование (по умолчанию(-2, -1), то есть две последние оси); -
norm- строка, определяющая тип нормализации ('backward'- стандартное БПФ,'forward'- нормализация по размеру преобразования,'ortho'- ортогональная нормализация).
Пример
Давайте выполним двумерное преобразование Фурье над матрицей 3x3:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
], dtype=torch.float)
res = torch.fft.fft2(t)
print(res)
Результат выполнения кода:
tensor([
[45.0000+0.j, -4.5000+2.5981j, -4.5000-2.5981j],
[-13.5000+7.7942j, 0.0000+0.j, 0.0000+0.j],
[-13.5000-7.7942j, 0.0000+0.j, 0.0000+0.j],
])
Пример
Используем параметр s для изменения размера выходного тензора. Если размер больше исходного, выполняется дополнение нулями:
import torch
t = torch.tensor([
[1, 2],
[3, 4],
], dtype=torch.float)
res = torch.fft.fft2(t, s=(4, 4))
print(res.shape)
print(res)
Результат выполнения кода:
torch.Size([4, 4])
tensor([
[10.0000+0.j, 0.0000+0.j, -2.0000+0.j, 0.0000+0.j],
[-2.0000+2.j, 0.0000+0.j, 0.0000+0.j, 0.0000+0.j],
[-2.0000+0.j, 0.0000+0.j, -2.0000+0.j, 0.0000+0.j],
[-2.0000-2.j, 0.0000+0.j, 0.0000+0.j, 0.0000+0.j],
])
Пример
Применим ортогональную нормализацию с помощью параметра norm:
import torch
t = torch.tensor([
[1, 1],
[1, 1],
], dtype=torch.float)
res = torch.fft.fft2(t, norm='ortho')
print(res)
Результат выполнения кода:
tensor([
[2.0000+0.j, 0.0000+0.j],
[0.0000+0.j, 0.0000+0.j],
])
Пример
Изменим оси для преобразования с помощью параметра dim. В трехмерном тензоре выполним преобразование по осям 0 и 2:
import torch
t = torch.randn(2, 3, 4)
res = torch.fft.fft2(t, dim=(0, 2))
print(res.shape)
Результат выполнения кода:
torch.Size([2, 3, 4])
Смотрите также
-
функцию
fft.fft,
которая выполняет одномерное преобразование Фурье -
функцию
fft.ifft2,
которая выполняет обратное двумерное преобразование Фурье -
функцию
fft.fftn,
которая выполняет преобразование Фурье по произвольному количеству осей -
функцию
fft.rfft,
которая выполняет одномерное преобразование для вещественных сигналов