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

参见

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 通过从一半的信号产生一半的频谱,可以再次将效率提高一倍。

示例

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