torch.fft.fftshift
-
torch.fft.fftshift(input, dim=None) → Tensor -
Переупорядочивает данные n-мерного преобразования Фурье, полученные с помощью
fftn(), так, чтобы отрицательные частоты располагались первыми.Это выполняет периодическое смещение n-мерных данных таким образом, что начало
(0, ..., 0)перемещается в центр тензора. В частности, вinput.shape[dim] // 2в каждом выбранном измерении.Примечание
По соглашению, преобразование Фурье возвращает положительные частоты первыми, за которыми следуют отрицательные частоты в обратном порядке, так что
f[-i]для всех в Python возвращает отрицательные частоты.fftshift()переупорядочивает все частоты в порядке возрастания от отрицательных к положительным, с нулевой частотой в центре.Примечание
Для чётных длин, частота Найквиста в
f[n/2]может рассматриваться как отрицательная или положительная.fftshift()всегда помещает частоту Найквиста в индекс 0. Это соответствует соглашению, используемому вfftfreq().- Параметры:
Пример
>>> 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])
Обратите внимание, что частота Найквиста в
f[2]была перемещена в начало тензора.Это также работает для многомерных преобразований:
>>> x = torch.fft.fftfreq(5, d=1/5) + 0.1 * torch.fft.fftfreq(5, d=1/5).unsqueeze(1) >>> x tensor([[ 0.0000, 1.0000, 2.0000, -2.0000, -1.0000], [ 0.1000, 1.1000, 2.1000, -1.9000, -0.9000], [ 0.2000, 1.2000, 2.2000, -1.8000, -0.8000], [-0.2000, 0.8000, 1.8000, -2.2000, -1.2000], [-0.1000, 0.9000, 1.9000, -2.1000, -1.1000]])>>> torch.fft.fftshift(x) tensor([[-2.2000, -1.2000, -0.2000, 0.8000, 1.8000], [-2.1000, -1.1000, -0.1000, 0.9000, 1.9000], [-2.0000, -1.0000, 0.0000, 1.0000, 2.0000], [-1.9000, -0.9000, 0.1000, 1.1000, 2.1000], [-1.8000, -0.8000, 0.2000, 1.2000, 2.2000]])fftshift()также может быть полезен для пространственных данных. Если наши данные определены на центрированной сетке ([-(N//2), (N-1)//2]) , то мы можем использовать стандартное преобразование Фурье, определённое на нецентрированной сетке ([0, N)) , предварительно применивifftshift().>>> x_centered = torch.arange(-5, 5) >>> x_uncentered = torch.fft.ifftshift(x_centered) >>> fft_uncentered = torch.fft.fft(x_uncentered)
Аналогично, мы можем преобразовать компоненты области частот в центрированную конвенцию, применив
fftshift().>>> fft_centered = torch.fft.fftshift(fft_uncentered)
Обратное преобразование, из центрированного пространства Фурье обратно к центрированным пространственным данным, может быть выполнено путём применения обратных смещений в обратном порядке:
>>> x_centered_2 = torch.fft.fftshift(torch.fft.ifft(torch.fft.ifftshift(fft_centered))) >>> torch.testing.assert_close(x_centered.to(torch.complex64), x_centered_2, check_stride=False)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.fft.fftshift.html