scipy.fftpack.

fft#

scipy.fftpack.fft(x, n=None, axis=-1, overwrite_x=False)[source]#

返回實數或複數序列的離散傅立葉轉換。

返回的複數陣列包含 y(0), y(1),..., y(n-1),其中

y(j) = (x * exp(-2*pi*sqrt(-1)*j*np.arange(n)/n)).sum().

參數:
xarray_like

要進行傅立葉轉換的陣列。

nint, optional

傅立葉轉換的長度。如果 n < x.shape[axis],則會截斷 x。如果 n > x.shape[axis],則會對 x 進行零填充。預設結果為 n = x.shape[axis]

axisint, optional

計算 fft 的軸;預設值為最後一個軸 (即 axis=-1)。

overwrite_xbool, optional

如果為 True,則可以破壞 x 的內容;預設值為 False。

返回:
zcomplex ndarray

帶有元素

[y(0),y(1),..,y(n/2),y(1-n/2),...,y(-1)]        if n is even
[y(0),y(1),..,y((n-1)/2),y(-(n-1)/2),...,y(-1)]  if n is odd

其中

y(j) = sum[k=0..n-1] x[k] * exp(-sqrt(-1)*j*k* 2*pi/n), j = 0..n-1

參見

ifft

反向 FFT

rfft

實數序列的 FFT

註解

結果的封裝是「標準」的:如果 A = fft(a, n),則 A[0] 包含零頻率項,A[1:n/2] 包含正頻率項,而 A[n/2:] 包含負頻率項,依負頻率遞減順序排列。因此,對於 8 點轉換,結果的頻率為 [0, 1, 2, 3, -4, -3, -2, -1]。若要重新排列 fft 輸出,使零頻率分量居中,如 [-4, -3, -2, -1, 0, 1, 2, 3],請使用 fftshift

單精度和雙精度常式皆已實作。半精度輸入將轉換為單精度。非浮點輸入將轉換為雙精度。不支援長雙精度輸入。

n 是 2 的冪時,此函數效率最高;當 n 是質數時,效率最低。

請注意,如果 x 是實數值,則 A[j] == A[n-j].conjugate()。如果 x 是實數值且 n 是偶數,則 A[n/2] 是實數。

如果 x 的資料類型為實數,則會自動使用「實數 FFT」演算法,這大約可將計算時間減半。為了進一步提高效率,請使用 rfft,它會執行相同的計算,但僅輸出對稱頻譜的一半。如果資料既是實數又是對稱的,則 dct 可以再次將效率提高一倍,方法是從訊號的一半產生頻譜的一半。

範例

>>> import numpy as np
>>> from scipy.fftpack import fft, ifft
>>> x = np.arange(5)
>>> np.allclose(fft(ifft(x)), x, atol=1e-15)  # within numerical accuracy.
True