离散傅里叶变换 (numpy.fft
)#
SciPy 模块 scipy.fft
是 numpy.fft
的更全面且功能更强大的超集,后者仅包含一组基本的例程。
标准 FFT#
实数 FFT#
厄米特 FFT#
辅助例程#
背景信息#
傅里叶分析从根本上来说是一种将函数表示为周期分量之和的方法,以及从这些分量中恢复函数的方法。当函数及其傅里叶变换都被替换为离散的对应物时,它被称为离散傅里叶变换 (DFT)。DFT 已经成为数值计算的支柱,部分原因在于一个非常快速的计算它的算法,称为快速傅里叶变换 (FFT),高斯 (1805) 就知道这个算法,并由 Cooley 和 Tukey [CT] 以其当前形式阐明。Press 等人 [NR] 提供了对傅里叶分析及其应用的可访问介绍。
因为离散傅里叶变换将它的输入分离成在离散频率下贡献的分量,所以在数字信号处理中它有大量的应用,例如用于滤波,在这种情况下,变换的离散输入通常被称为信号,它存在于时域中。输出被称为频谱或变换,并存在于频域中。
实现细节#
有很多方法可以定义 DFT,在指数的符号、归一化等方面有所不同。在这个实现中,DFT 定义为
DFT 通常是为复数输入和输出定义的,并且线性频率为 \(f\) 的单频分量由复指数 \(a_m = \exp\{2\pi i\,f m\Delta t\}\) 表示,其中 \(\Delta t\) 是采样间隔。
结果中的值遵循所谓的“标准”顺序:如果A = fft(a, n)
,则A[0]
包含零频率项(信号的总和),对于实数输入,它始终是纯实数。然后A[1:n/2]
包含正频率项,而A[n/2+1:]
包含负频率项,频率递减。对于偶数个输入点,A[n/2]
表示正负奈奎斯特频率,对于实数输入也为纯实数。对于奇数个输入点,A[(n-1)/2]
包含最大的正频率,而A[(n+1)/2]
包含最大的负频率。np.fft.fftfreq(n)
例程返回一个数组,给出输出中相应元素的频率。np.fft.fftshift(A)
例程将变换及其频率移位,使零频率分量位于中间,而np.fft.ifftshift(A)
则撤销该移位。
当输入a是时域信号且A = fft(a)
时,np.abs(A)
是其幅度谱,np.abs(A)**2
是其功率谱。相位谱由np.angle(A)
获得。
逆DFT定义为
它与正向变换的区别在于指数参数的符号以及默认的\(1/n\)归一化。
类型提升#
numpy.fft
将float32
和complex64
数组分别提升到float64
和complex128
数组。对于不提升输入数组的FFT实现,请参见scipy.fftpack
。
归一化#
norm
参数指示正向/逆变换对中的哪个方向进行缩放以及使用什么归一化因子。默认归一化("backward"
)对正向变换不进行缩放,对逆变换进行\(1/n\)缩放。通过将关键字参数norm
设置为"ortho"
,可以获得酉变换,这样正向和逆变换都将被\(1/\sqrt{n}\)缩放。最后,将关键字参数norm
设置为"forward"
将使正向变换被\(1/n\)缩放,而逆变换不进行缩放(即与默认的"backward"
完全相反)。None是默认选项"backward"
的别名,用于向后兼容。
实变换和厄米特变换#
当输入是纯实数时,其变换是厄米特变换,即频率\(f_k\)处的分量是频率\(-f_k\)处的分量的复共轭,这意味着对于实数输入,负频率分量中没有正频率分量中尚未提供的信息。rfft
函数族旨在对实数输入进行运算,并通过仅计算正频率分量(直到并包括奈奎斯特频率)来利用这种对称性。因此,n
个输入点会产生n/2+1
个复数输出点。此函数族的逆变换假设其输入具有相同的对称性,并且对于n
个点的输出,它使用n/2+1
个输入点。
相应地,当频谱是纯实数时,信号是厄米特信号。hfft
函数族通过在输入(时域)中使用n/2+1
个复数点来利用这种对称性,从而在频域中产生n
个实数点。
在更高维度中,FFT 用于例如图像分析和滤波。FFT 的计算效率意味着它也可以成为计算大型卷积的更快方法,利用的是时域中的卷积等效于频域中的逐点乘法的属性。
更高维度#
在二维情况下,DFT 定义为
这可以很容易地扩展到更高维度,更高维度的逆变换也可以以相同的方式扩展。
参考文献#
Cooley, James W., and John W. Tukey, 1965, “An algorithm for the machine calculation of complex Fourier series,” Math. Comput. 19: 297-301。
Press, W., Teukolsky, S., Vetterline, W.T., and Flannery, B.P., 2007, Numerical Recipes: The Art of Scientific Computing, ch. 12-13. Cambridge Univ. Press, Cambridge, UK。
示例#
有关示例,请参见各种函数。