离散傅里叶变换#
SciPy 模块 scipy.fft 是 numpy.fft 更全面的超集,后者只包含一组基本的例程.
标准 FFT#
实数 FFT#
厄米 FFT#
辅助例程#
背景信息#
傅里叶分析从根本上讲是一种将函数表达为周期分量之和,并从这些分量中恢复函数的方法.当函数及其傅里叶变换都被离散化对应物代替时,它被称为离散傅里叶变换(DFT).DFT 已经成为数值计算的主要内容,部分原因是计算它的一个非常快速的算法,称为快速傅里叶变换(FFT),它早为高斯(1805 年)所知,并由 Cooley 和 Tukey [CT] 以现在的形式公之于众.Press et al. [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" 的别名,用于向后兼容.
实数和 Hermitian 变换#
当输入是纯实数时,其变换是 Hermitian 的,即,频率 \(f_k\) 处的频率分量是频率 \(-f_k\) 处的频率分量的复共轭,这意味着对于实数输入,负频率分量中没有信息不是已经可以从正频率分量中获得. rfft 函数系列旨在对实数输入进行操作,并通过仅计算正频率分量(直到并包括奈奎斯特频率)来利用此对称性. 因此, n 个输入点产生 n/2+1 个复数输出点. 此系列的逆运算假设其输入具有相同的对称性,并且对于 n 个点的输出,使用 n/2+1 个输入点.
相应地,当频谱是纯实数时,信号是 Hermitian 的. 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.
示例#
例如,参见各种函数.