torch.fft.hfft¶
- torch.fft.hfft(input, n=None, dim=-1, norm=None, *, out=None) Tensor ¶
計算 Hermitian 對稱
input
訊號的一維離散傅立葉轉換。注意
hfft()
/ihfft()
類似於rfft()
/irfft()
。實數 FFT 期望時域中的實數訊號,並在頻域中產生 Hermitian 對稱性。 Hermitian FFT 則相反;在時域中具有 Hermitian 對稱性,在頻域中具有實數值。因此,需要特別注意長度參數n
,就像使用irfft()
一樣。注意
因為訊號在時域中是 Hermitian 的,所以結果在頻域中將會是實數。請注意,某些輸入頻率必須是實數值才能滿足 Hermitian 屬性。 在這些情況下,虛數分量將被忽略。 例如,
input[0]
中的任何虛數分量都會導致一個或多個複數頻率項,這些項無法在實數輸出中表示,因此將始終被忽略。注意
Hermitian 輸入的正確解釋取決於原始資料的長度,由
n
給定。 這是因為每個輸入形狀都可能對應於奇數或偶數長度的訊號。 預設情況下,訊號被假定為偶數長度,奇數訊號將無法正確往返。 因此,建議始終傳遞訊號長度n
。注意
在 GPU 架構 SM53 或更高版本的 CUDA 上支援 torch.half 和 torch.chalf。 但是,它僅支援每個轉換維度中的 2 的冪次訊號長度。 使用預設參數,轉換後維度的大小應為 (2^n + 1),因為參數 n 預設為偶數輸出大小 = 2 * (transformed_dim_size - 1)
- 參數
input (Tensor) – 表示半 Hermitian 訊號的輸入張量
n (int, optional) – 輸出訊號長度。 這決定了實數輸出的長度。 如果給定,則在計算 Hermitian FFT 之前,輸入將被零填充或修剪到此長度。 預設為偶數輸出:
n=2*(input.size(dim) - 1)
。dim (int, optional) – 沿其取得一維 Hermitian FFT 的維度。
norm (str, optional) –
標準化模式。 對於正向轉換 (
hfft()
),這些對應於"forward"
- 按1/n
進行標準化"backward"
- 無標準化"ortho"
- 按1/sqrt(n)
進行標準化 (使 Hermitian FFT 正交)
使用相同的標準化模式調用反向轉換 (
ihfft()
) 將在兩個轉換之間應用1/n
的整體標準化。 這是使ihfft()
成為精確反向轉換所必需的。預設值為
"backward"
(無標準化)。
- 關鍵字參數
out (Tensor, optional) – 輸出張量。
範例
取得實數值頻率訊號並將其帶入時域會產生 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])