离散傅里叶变换 ( numpy.fft) #

SciPy 模块scipy.fft是更全面的超集numpy.fft,其中仅包含一组基本例程。

标准 FFT #

fft(a[, n, 轴, 范数])

计算一维离散傅里叶变换。

ifft(a[, n, 轴, 范数])

计算一维离散傅立叶逆变换。

fft2(a[, s, 轴, 范数])

计算二维离散傅里叶变换。

ifft2(a[, s, 轴, 范数])

计算二维离散傅立叶逆变换。

fftn(a[, s, 轴, 范数])

计算 N 维离散傅里叶变换。

ifftn(a[, s, 轴, 范数])

计算 N 维离散傅立叶逆变换。

实数 FFT #

rfft(a[, n, 轴, 范数])

计算实际输入的一维离散傅立叶变换。

irfft(a[, n, 轴, 范数])

计算 的倒数rfft

rfft2(a[, s, 轴, 范数])

计算实数数组的二维 FFT。

irfft2(a[, s, 轴, 范数])

计算 的倒数rfft2

rfftn(a[, s, 轴, 范数])

计算实数输入的 N 维离散傅里叶变换。

irfftn(a[, s, 轴, 范数])

计算 的倒数rfftn

埃尔米特 FFT #

hfft(a[, n, 轴, 范数])

计算具有埃尔米特对称性的信号(即实数频谱)的 FFT。

ihfft(a[, n, 轴, 范数])

计算具有埃尔米特对称性的信号的逆 FFT。

辅助例程#

fftfreq(n[,d])

返回离散傅立叶变换采样频率。

rfftfreq(n[,d])

返回离散傅里叶变换采样频率(用于 rfft、irfft)。

fftshift(x[, 轴])

将零频率分量移至频谱中心。

ifftshift(x[, 轴])

的倒数fftshift

背景信息#

傅里叶分析从根本上讲是一种将函数表示为周期性分量之和并从这些分量恢复函数的方法。当函数及其傅里叶变换都被离散化的对应物代替时,称为离散傅里叶变换(DFT)。 DFT 已成为数值计算的支柱,部分原因在于一种非常快速的计算算法,称为快速傅里叶变换 (FFT),该算法为 Gauss (1805) 所熟知,并由 Cooley 和 Cooley 以其当前形式揭示出来。图基[CT]。出版社等人。[NR] 提供了傅里叶分析及其应用的简单易懂的介绍。

由于离散傅里叶变换将其输入分离为以离散频率起作用的分量,因此它在数字信号处理中具有大量应用,例如用于滤波,并且在这种情况下,变换的离散输入通常被称为信号,存在于时域中。输出称为频谱变换,存在于频域中

实施细节#

定义 DFT 的方法有很多种,指数符号、归一化等各不相同。在此实现中,DFT 定义为

\[A_k = \sum_{m=0}^{n-1} a_m \exp\left\{-2\pi i{mk \over n}\right\} \qquad k = 0,\ldots,n-1.\]

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)**2np.angle(A)

逆 DFT 定义为

\[a_m = \frac{1}{n}\sum_{k=0}^{n-1}A_k\exp\left\{2\pi i{mk\over n}\right\} \qquad m = 0,\ldots,n-1.\]

它与正向变换的不同之处在于指数参数的符号和默认归一化\(1/n\)

输入促销#

numpy.fftfloat32将和数组分别提升complex64float64complex128数组。对于不提升输入数组的 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 定义为

\[A_{kl} = \sum_{m=0}^{M-1} \sum_{n=0}^{N-1} a_{mn}\exp\left\{-2\pi i \left({mk\over M}+{nl\over N}\right)\right\} \qquad k = 0, \ldots, M-1;\quad l = 0, \ldots, N-1,\]

它以明显的方式延伸到更高的维度,并且更高维度的逆也以同样的方式延伸。

参考

[ CT ]

Cooley, James W. 和 John W. Tukey,1965 年,“复杂傅里叶级数机器计算的算法”,数学。计算。 19:297-301。

[ NR ]

Press, W.、Teukolsky, S.、Vetterline, WT 和 Flannery, BP,2007 年,《数值食谱:科学计算的艺术》,第 1 章。 12-13。剑桥大学出版社,英国剑桥。

例子

例如,请参阅各种函数。