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
註解
結果的封裝是「標準」的:如果
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