torch.fft.irfftn¶
- torch.fft.irfftn(input, s=None, dim=None, norm=None, *, out=None) Tensor ¶
計算
rfftn()
的反轉換。input
被解釋為傅立葉域中的單邊厄米訊號 (Hermitian signal),如同rfftn()
所產生的。 根據厄米特性,輸出將會是實數值。注意
某些輸入頻率必須是實數值才能滿足厄米特性。 在這些情況下,虛數成分將被忽略。 例如,零頻率項中的任何虛數成分都無法在真實輸出中表示,因此始終會被忽略。
注意
厄米輸入的正確解釋取決於原始資料的長度,由
s
給定。 這是因為每個輸入形狀可能對應於奇數或偶數長度的訊號。 預設情況下,訊號被假定為偶數長度,並且奇數訊號將無法正確地往返 (round-trip)。 因此,建議始終傳遞訊號形狀s
。注意
在 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]
將在計算實數 FFT 之前,被零填充或修剪到長度s[i]
。 如果指定長度-1
,則不會在該維度中進行填充。 預設為最後一個維度的偶數輸出:s[-1] = 2*(input.size(dim[-1]) - 1)
。dim (Tuple[int], optional) – 要轉換的維度。 最後一個維度必須是半厄米壓縮維度。 預設值:所有維度,或者如果給定
s
,則為最後len(s)
個維度。norm (str, optional) –
正規化模式。 對於反向轉換 (
irfftn()
),這些對應於"forward"
- 無正規化"backward"
- 正規化為1/n
"ortho"
- 正規化為1/sqrt(n)
(使實數 IFFT 正交)
其中
n = prod(s)
是邏輯 IFFT 大小。 使用相同的正規化模式呼叫正向轉換 (rfftn()
) 將在兩個轉換之間應用1/n
的總體正規化。 這是使irfftn()
成為精確反轉換所必需的。預設值為
"backward"
(正規化為1/n
)。
- 關鍵字參數
out (Tensor, optional) – 輸出張量。
範例
>>> t = torch.rand(10, 9) >>> T = torch.fft.rfftn(t)
如果不指定
irfft()
的輸出長度,則輸出將無法正確地往返 (round-trip),因為輸入在最後一個維度中是奇數長度>>> torch.fft.irfftn(T).size() torch.Size([10, 8])
因此,建議始終傳遞訊號形狀
s
。>>> roundtrip = torch.fft.irfftn(T, t.size()) >>> roundtrip.size() torch.Size([10, 9]) >>> torch.testing.assert_close(roundtrip, t, check_stride=False)