离散傅里叶变换#
SciPy 模块 scipy.fft 是 numpy.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 个实数频域点中使用 n/2+1 个复数时域点来利用这种对称性。
在更高维度中,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.
示例#
有关示例,请参阅各种函数。