numpy.fft.hfft#

fft.hfft(a, n=None, axis=-1, norm=None, out=None)[source]#

計算具有 Hermitian 對稱性(即實數頻譜)訊號的 FFT。

參數:
aarray_like (類陣列)

輸入陣列。

nint, 選項

輸出轉換軸的長度。對於 n 個輸出點,需要 n//2 + 1 個輸入點。如果輸入長度超過此值,則會被裁剪。如果短於此值,則會以零填充。如果未給定 n,則會取 2*(m-1),其中 m 是沿著 axis 指定軸的輸入長度。

axisint, 選項

計算 FFT 的軸。如果未給定,則使用最後一個軸。

norm{“backward”, “ortho”, “forward”}, 選項

正規化模式(請參閱 numpy.fft)。預設為 “backward”。表示正向/反向轉換對中的哪個方向被縮放以及使用哪個正規化因子。

版本 1.20.0 新增: 新增了 “backward”、“forward” 值。

outndarray, 選項

如果提供,結果將放置在此陣列中。它應該具有適當的形狀和 dtype。

版本 2.0.0 新增。

回傳值:
outndarray

沿著 axis 指示的軸轉換,或如果未指定 axis 則沿著最後一個軸轉換,經過截斷或零填充的輸入。轉換軸的長度為 n,或者,如果未給定 n,則為 2*m - 2,其中 m 是輸入轉換軸的長度。若要獲得奇數個輸出點,則必須指定 n,例如在典型情況下為 2*m - 1

拋出:
IndexError

如果 axis 不是 a 的有效軸。

另請參閱

rfft

計算實數輸入的一維 FFT。

ihfft

hfft 的反函數。

註解

hfft/ihfft 是一對類似於 rfft/irfft 的函數對,但適用於相反的情況:此處訊號在時域中具有 Hermitian 對稱性,在頻域中為實數。因此,對於 hfft,如果結果長度為奇數,則必須提供長度。

  • 偶數:ihfft(hfft(a, 2*len(a) - 2)) == a,在捨入誤差範圍內,

  • 奇數:ihfft(hfft(a, 2*len(a) - 1)) == a,在捨入誤差範圍內。

hermitian 輸入的正確解釋取決於原始資料的長度,由 n 給定。這是因為每個輸入形狀可能對應於奇數或偶數長度的訊號。預設情況下,hfft 假設偶數輸出長度,這會將最後一個條目放在 Nyquist 頻率;與其對稱對應部分混疊。根據 Hermitian 對稱性,該值因此被視為純實數。為了避免遺失資訊,必須給出完整訊號的形狀。

範例

>>> import numpy as np
>>> signal = np.array([1, 2, 3, 4, 3, 2])
>>> np.fft.fft(signal)
array([15.+0.j,  -4.+0.j,   0.+0.j,  -1.-0.j,   0.+0.j,  -4.+0.j]) # may vary
>>> np.fft.hfft(signal[:4]) # Input first half of signal
array([15.,  -4.,   0.,  -1.,   0.,  -4.])
>>> np.fft.hfft(signal, 6)  # Input entire signal and truncate
array([15.,  -4.,   0.,  -1.,   0.,  -4.])
>>> signal = np.array([[1, 1.j], [-1.j, 2]])
>>> np.conj(signal.T) - signal   # check Hermitian symmetry
array([[ 0.-0.j,  -0.+0.j], # may vary
       [ 0.+0.j,  0.-0.j]])
>>> freq_spectrum = np.fft.hfft(signal)
>>> freq_spectrum
array([[ 1.,  1.],
       [ 2., -2.]])