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

要进行傅里叶变换的数组。

nint, 可选

傅里叶变换的长度。如果 n < x.shape[axis], 则 x 被截断。如果 n > x.shape[axis], 则 x 用零填充。默认结果为 n = x.shape[axis]

axisint, 可选

计算 fft 的轴;默认值是最后一个轴(即,axis=-1)。

overwrite_xbool, 可选

如果为 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 可以通过从信号的一半生成频谱的一半来再次使效率加倍。

示例

>>> 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