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


Python PyTorch hfft用法及代碼示例


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

用法:

torch.fft.hfft(input, n=None, dim=- 1, norm=None, *, out=None) → Tensor

參數

  • input(Tensor) -表示 half-Hermitian 信號的輸入張量

  • n(int,可選的) -輸出信號長度。這決定了實際輸出的長度。如果給定,則在計算 Hermitian FFT 之前,輸入將被補零或修整到該長度。默認為偶數輸出:n=2*(input.size(dim) - 1)

  • dim(int,可選的) -沿其進行一維 Hermitian FFT 的維度。

  • norm(str,可選的) -

    標準化模式。對於正向變換(hfft()),這些對應於:

    • "forward" - 通過 1/n 標準化

    • "backward" - 沒有標準化

    • "ortho" - 通過 1/sqrt(n) 歸一化(使 Hermitian FFT 正交化)

    使用相同的歸一化模式調用反向變換 ( ihfft() ) 將在兩個變換之間應用 1/n 的整體歸一化。這是使 ihfft() 完全相反所必需的。

    默認為"backward"(無規範化)。

關鍵字參數

out(Tensor,可選的) -輸出張量。

計算 Hermitian 對稱 input 信號的一維離散傅裏葉變換。

注意

hfft() / ihfft() 類似於 rfft() / irfft() 。實數 FFT 期望 time-domain 中存在實數信號,並在 frequency-domain 中給出埃爾米特對稱性。 Hermitian FFT 則相反; time-domain 中為埃爾米特對稱,frequency-domain 中為實值。因此,需要特別注意長度參數 n ,與 irfft() 相同。

注意

因為信號在time-domain 中是 Hermitian,所以結果在頻域中將是實數。請注意,某些輸入頻率必須是實值才能滿足 Hermitian 屬性。在這些情況下,虛部將被忽略。例如,input[0] 中的任何虛部都會導致一個或多個複雜的頻率項,這些頻率項無法在實際輸出中表示,因此將始終被忽略。

注意

Hermitian 輸入的正確解釋取決於 n 給出的原始數據的長度。這是因為每個輸入形狀都可能對應於奇數或偶數長度的信號。默認情況下,假設信號為偶數長度,奇數信號不會正確round-trip。因此,建議始終傳遞信號長度 n

示例

取一個實值頻率信號並將其帶入時域給出 Hermitian 對稱輸出:

>>> t = torch.linspace(0, 1, 5)
>>> t
tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])
>>> T = torch.fft.ifft(t)
>>> T
tensor([ 0.5000-0.0000j, -0.1250-0.1720j, -0.1250-0.0406j, -0.1250+0.0406j,
        -0.1250+0.1720j])

請注意,T[1] == T[-1].conj()T[2] == T[-2].conj() 是多餘的。因此,我們可以在不考慮負頻率的情況下計算前向變換:

>>> torch.fft.hfft(T[:3], n=5)
tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])

irfft() 一樣,必須給出輸出長度才能恢複偶數長度的輸出:

>>> torch.fft.hfft(T[:3])
tensor([0.1250, 0.2809, 0.6250, 0.9691])

相關用法


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