scipy.fftpack.fft¶
- scipy.fftpack.fft(x, n=None, axis=- 1, overwrite_x=False)[源代码]¶
返回实序列或复序列的离散傅立叶变换。
返回的复数组包含
y(0), y(1),..., y(n-1)
,在哪里y(j) = (x * exp(-2*pi*sqrt(-1)*j*np.arange(n)/n)).sum()
。- 参数
- xarray_like
数组到傅里叶变换。
- n整型,可选
傅里叶变换的长度。如果
n < x.shape[axis]
, x 被截断。如果n > x.shape[axis]
, x 是零填充的。默认情况下,结果为n = x.shape[axis]
。- axis整型,可选
沿其计算FFT的轴;缺省值在最后一个轴上(即,
axis=-1
)。- overwrite_x布尔值,可选
如果为True,则 x 可以销毁;默认值为false。
- 退货
- z复数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
通过从一半的信号产生一半的频谱,可以再次将效率提高一倍。示例
>>> from scipy.fftpack import fft, ifft >>> x = np.arange(5) >>> np.allclose(fft(ifft(x)), x, atol=1e-15) # within numerical accuracy. True