Spec-Zone.ru › PyTorch 1

torch.fft.fftshift

torch.fft.fftshift(input, dim=None) → Tensor

Переупорядочивает данные n-мерного преобразования Фурье, полученные с помощью fftn(), так, чтобы отрицательные частоты располагались первыми.

Это выполняет периодическое смещение n-мерных данных таким образом, что начало (0, ..., 0) перемещается в центр тензора. В частности, в input.shape[dim] // 2 в каждом выбранном измерении.

Примечание

По соглашению, преобразование Фурье возвращает положительные частоты первыми, за которыми следуют отрицательные частоты в обратном порядке, так что f[-i] для всех 0<i≤n/20 < i \leq n/2 в Python возвращает отрицательные частоты. fftshift() переупорядочивает все частоты в порядке возрастания от отрицательных к положительным, с нулевой частотой в центре.

Примечание

Для чётных длин, частота Найквиста в f[n/2] может рассматриваться как отрицательная или положительная. fftshift() всегда помещает частоту Найквиста в индекс 0. Это соответствует соглашению, используемому в fftfreq().

Параметры:
  • input (Tensor) – тензор в порядке Фурье
  • dim (int, Tuple[int], optional) – Измерения для переупорядочения. Только указанные здесь измерения будут переупорядочены, все остальные измерения останутся в исходном порядке. По умолчанию: все измерения тензора input.

Пример

>>> 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API