Функция rfftfreq
Функция torch.fft.rfftfreq вычисляет частоты дискретизации для
одномерного вещественного быстрого преобразования Фурье (БПФ).
Она возвращает одномерный тензор, содержащий частоты, соответствующие
коэффициентам, возвращаемым функцией rfft.
Первым параметром передаётся размер окна n (количество отсчётов),
вторым параметром можно указать шаг дискретизации d (по умолчанию равен 1).
Тип данных возвращаемого тензора - torch.float32 или torch.float64.
Синтаксис
torch.fft.rfftfreq(n, d=1.0, dtype=None, device=None)
Параметры
Основные параметры функции:
-
n- длина окна (количество точек во временной области). -
d- шаг дискретизации (расстояние между отсчётами), по умолчанию равен 1. -
dtype- желаемый тип данных результата (по умолчаниюtorch.float32). -
device- устройство, на котором будет создан тензор (по умолчанию текущее устройство).
Пример
Давайте вычислим частоты для 8 отсчётов с шагом дискретизации 1:
import torch
freqs = torch.fft.rfftfreq(8)
print(freqs)
Результат выполнения кода:
tensor([0.0000, 0.1250, 0.2500, 0.3750, 0.5000])
Обратите внимание, что количество частот равно n // 2 + 1 (для чётного n),
что соответствует количеству коэффициентов, возвращаемых функцией rfft.
Пример
Теперь вычислим частоты для 10 отсчётов с шагом дискретизации 0.5:
import torch
freqs = torch.fft.rfftfreq(10, d=0.5)
print(freqs)
Результат выполнения кода:
tensor([0.0000, 0.1000, 0.2000, 0.3000, 0.4000, 0.5000])
При увеличении шага дискретизации частоты становятся меньше,
так как максимальная частота (частота Найквиста) равна 1 / (2 * d).
Пример
Используем rfftfreq вместе с rfft для визуализации спектра сигнала:
import torch
# Создаём сигнал (сумма двух синусоид)
t = torch.linspace(0, 1, 100)
signal = torch.sin(2 * torch.pi * 5 * t) + 0.5 * torch.sin(2 * torch.pi * 12 * t)
# Выполняем вещественное БПФ
spectrum = torch.fft.rfft(signal)
freqs = torch.fft.rfftfreq(100, d=t[1] - t[0])
# Выводим первые несколько частот и амплитуд
print("Частоты:", freqs[:10])
print("Амплитуды:", torch.abs(spectrum[:10]))
Результат выполнения кода:
Частоты: tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
Амплитуды: tensor([1.1796, 1.2807, 0.9519, 0.7678, 0.7957, 47.7950, 0.8033, 0.7805, 0.9384, 1.2235])
На частотах 5 и 12 Гц наблюдаются пики амплитуды, что соответствует частотам синусоид в сигнале.