Функция irfft
Функция irfft выполняет обратное одномерное дискретное преобразование Фурье
для комплексного входного спектра, возвращая действительный выходной сигнал.
Это обратная операция для функции rfft. Первым параметром передаётся
комплексный тензор спектра, вторым - желаемая длина выходного сигнала n.
Также можно указать размерность для преобразования и нормализацию.
Синтаксис
torch.fft.irfft(input, n=None, dim=-1, norm=None, *, out=None)
Параметры
Основные параметры функции:
-
input- комплексный тензор спектра (обычно результат работыrfft) -
n- длина выходного действительного сигнала. Если не указан, то вычисляется как 2*(input.size(dim) - 1) -
dim- размерность, по которой выполняется преобразование. По умолчанию -1 -
norm- режим нормализации: "backward" (по умолчанию), "forward" или "ortho"
Пример
Давайте создадим действительный сигнал, выполним прямое преобразование rfft,
а затем восстановим его с помощью irfft:
import torch
# Исходный действительный сигнал
t = torch.tensor([1.0, 2.0, 3.0, 4.0])
# Прямое преобразование rfft
spectrum = torch.fft.rfft(t)
print(spectrum)
# Обратное преобразование irfft
res = torch.fft.irfft(spectrum, n=4)
print(res)
Результат выполнения кода:
tensor([10.+0.j, -2.+2.j, -2.+0.j])
tensor([1., 2., 3., 4.])
Пример
Давайте выполним обратное преобразование для спектра с указанием длины выходного сигнала больше исходной. Это приведёт к интерполяции в частотной области:
import torch
t = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
spectrum = torch.fft.rfft(t)
# Восстанавливаем сигнал длиной 8
res = torch.fft.irfft(spectrum, n=8)
print(res)
Результат выполнения кода:
tensor([ 1.0000, 1.4679, 2.0000, 2.5321, 3.0000, 3.4679, 4.0000, 4.5321])
Пример
Давайте воспользуемся параметром dim для выполнения
преобразования по первому измерению (строкам) двумерного тензора:
import torch
# Двумерный действительный сигнал
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
# Прямое преобразование по строкам (dim=0)
spectrum = torch.fft.rfft(t, dim=0)
# Обратное преобразование по строкам
res = torch.fft.irfft(spectrum, n=2, dim=0)
print(res)
Результат выполнения кода:
tensor([
[1., 2., 3.],
[4., 5., 6.],
])
Пример
Давайте рассмотрим использование параметра norm
с режимом "ortho" (ортогональная нормализация):
import torch
t = torch.tensor([1.0, 2.0, 3.0, 4.0])
spectrum = torch.fft.rfft(t, norm="ortho")
# Обратное преобразование с ортогональной нормализацией
res = torch.fft.irfft(spectrum, n=4, norm="ortho")
print(res)
Результат выполнения кода:
tensor([1., 2., 3., 4.])
Смотрите также
-
функцию
rfft,
которая выполняет прямое преобразование Фурье для действительных сигналов -
функцию
fft,
которая выполняет одномерное преобразование Фурье для комплексных сигналов -
функцию
ifft,
которая выполняет обратное преобразование Фурье для комплексных сигналов -
функцию
hfft,
которая выполняет преобразование для действительных сигналов с эрмитовой симметрией