torch.fft.hfft2¶
- torch.fft.hfft2(input, s=None, dim=(-2, -1), norm=None, *, out=None) Tensor ¶
計算 Hermitian 對稱
input
訊號的二維離散傅立葉變換。等同於hfftn()
,但預設情況下僅轉換最後兩個維度。input
在時域中被解釋為單邊 Hermitian 訊號。 根據 Hermitian 特性,傅立葉變換將是實數值。注意
在 GPU 架構 SM53 或更高版本的 CUDA 上支援 torch.half 和 torch.chalf。 但是,它僅支援每個轉換維度中訊號長度為 2 的冪次方。使用預設引數時,最後一個維度的大小應為 (2^n + 1),因為引數 s 預設為偶數輸出大小 = 2 * (last_dim_size - 1)。
- 參數
input (Tensor) – 輸入張量
s (Tuple[int], optional) – 轉換維度中的訊號大小。 如果給定,每個維度
dim[i]
將在計算 Hermitian FFT 之前被零填充或修剪到長度s[i]
。 如果指定長度-1
,則不會在該維度中進行填充。 預設為最後一個維度的偶數輸出:s[-1] = 2*(input.size(dim[-1]) - 1)
。dim (Tuple[int], optional) – 要轉換的維度。 最後一個維度必須是半 Hermitian 壓縮維度。 預設值:最後兩個維度。
norm (str, optional) –
正規化模式。 對於正向轉換 (
hfft2()
),這些對應於"forward"
- 按1/n
正規化"backward"
- 無正規化"ortho"
- 按1/sqrt(n)
正規化 (使 Hermitian FFT 正交)
其中
n = prod(s)
是邏輯 FFT 大小。 使用相同的正規化模式呼叫反向轉換 (ihfft2()
) 將在兩個轉換之間應用1/n
的整體正規化。 這是使ihfft2()
成為精確逆轉換所必需的。預設值為
"backward"
(無正規化)。
- 關鍵字引數
out (Tensor, optional) – 輸出張量。
範例
從實數頻域訊號開始,我們可以產生一個 Hermitian 對稱時域訊號: >>> T = torch.rand(10, 9) >>> t = torch.fft.ihfft2(T)
如果不指定
hfftn()
的輸出長度,則輸出將無法正確進行往返,因為輸入在最後一個維度中是奇數長度>>> torch.fft.hfft2(t).size() torch.Size([10, 10])
因此,建議始終傳遞訊號形狀
s
。>>> roundtrip = torch.fft.hfft2(t, T.size()) >>> roundtrip.size() torch.Size([10, 9]) >>> torch.allclose(roundtrip, T) True