當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch fftshift用法及代碼示例


本文簡要介紹python語言中 torch.fft.fftshift 的用法。

用法:

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

參數

  • input(Tensor) -FFT 順序的張量

  • dim(int,元組[int],可選的) - 要重新排列的尺寸。隻有此處指定的尺寸會重新排列,任何其他尺寸都將保留其原始順序。默認值:所有維度input.

重新排序由 fftn() 提供的 n 維 FFT 數據,使其首先具有負頻率項。

這將執行 n 維數據的周期性移位,以便將原點 (0, ..., 0) 移動到張量的中心。具體來說,到每個選定維度中的input.shape[dim] // 2

注意

按照慣例,FFT 首先返回正頻率項,然後按相反順序返回負頻率項,因此 Python 中所有 f[-i] 給出負頻率項。 fftshift() 將所有頻率重新排列為從負到正的升序,zero-frequency 項位於中心。

注意

對於偶數長度,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]) 上定義的,那麽我們可以通過首先應用 ifftshift() 來使用在非中心網格 ([0, N)) 上定義的標準 FFT。

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

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.fft.fftshift。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。