离散傅立叶变换 (numpy.fft

SciPy模块 scipy.fft 是更全面的 numpy.fft ,它只包含一组基本的例程。

标准快速傅立叶变换

fft (a) [, n, axis, norm] )

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

ifft (a) [, n, axis, norm] )

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

fft2 (a) [, s, axes, norm] )

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

ifft2 (a) [, s, axes, norm] )

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

fftn (a) [, s, axes, norm] )

计算n维离散傅立叶变换。

ifftn (a) [, s, axes, norm] )

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

实数傅立叶变换

rfft (a) [, n, axis, norm] )

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

irfft (a) [, n, axis, norm] )

计算 rfft .

rfft2 (a) [, s, axes, norm] )

计算实数组的二维FFT。

irfft2 (a) [, s, axes, norm] )

计算 rfft2 .

rfftn (a) [, s, axes, norm] )

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

irfftn (a) [, s, axes, norm] )

计算 rfftn .

埃尔米特快速傅里叶变换

hfft (a) [, n, axis, norm] )

计算具有赫米特对称性的信号的FFT,即真实频谱。

ihfft (a) [, n, axis, norm] )

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

助手例程

fftfreq n(n) [, d] )

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

rfftfreq n(n) [, d] )

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

fftshift (x) [, axes] )

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

ifftshift (x) [, axes] )

fftshift .

背景信息

傅立叶分析从根本上说是一种将函数表示为周期分量和的方法,也是从这些分量中恢复函数的方法。当函数和它的傅立叶变换都被离散化的对应变换所取代时,称为离散傅立叶变换(DFT)。DFT之所以成为数值计算的主流,部分原因在于它是一种非常快速的计算算法,称为快速傅立叶变换(fft),高斯(1805)知道它,并由库利和图基以其当前的形式出现。 [CT]. 出版社等。 [NR] 提供傅立叶分析及其应用的可访问的介绍。

由于离散傅立叶变换将其输入分离为在离散频率下贡献的分量,因此它在数字信号处理(例如滤波)中有大量的应用,在这种情况下,变换的离散输入通常被称为 信号 ,存在于 时域 . 输出称为 光谱转型 并且存在于 频域 .

实施细节

定义dft的方法有很多种,包括指数符号的变化、标准化等。在这个实现中,dft被定义为

System Message: WARNING/2 (A\u k=\sum\um=0}^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\})

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2018-12-01> (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) ! Argument of \split has an extra }. <inserted text> \par l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... Runaway argument? A\u k=\sum \um =0 ! Paragraph ended before \split was complete. <to be read again> \par l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Missing $ inserted. <inserted text> $ l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Missing \endgroup inserted. <inserted text> \endgroup l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Missing \endgroup inserted. <inserted text> \endgroup l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Display math should end with $$. <to be read again> \par l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Extra }, or forgotten \endgroup. <recently read> } l.14 \begin{split}A\u k=\sum\um=0} ^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... ! Missing $ inserted. <inserted text> $ l.14 \begin{split}A\u k=\sum\um=0}^ {n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右\... LaTeX Warning: Command \u invalid in math mode on input line 14. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ... l.14 \begin{split}A\u k=\sum\um=0}^{n-1}A\u m \exp\左\{-2\pi i{mk\在n}\右\... ! You can't use `\spacefactor' in math mode. \add@accent ...}\accent #1 #2\egroup \spacefactor \accent@spacefactor l.14 \begin{split}A\u k=\sum\um=0}^{n-1}A\u m \exp\左\{-2\pi i{mk\在n}\右\... ! Undefined control sequence. <recently read> \� l.14 ...in{split}A\u k=\sum\um=0}^{n-1}A\u m\exp\� ��\{-2\pi i{mk\在n}\右\}... ! Package inputenc Error: Invalid UTF-8 byte "B7. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...n{split}A\u k=\sum\um=0}^{n-1}A\u m\exp\� �\{-2\pi i{mk\在n}\右\}\... ! Package inputenc Error: Invalid UTF-8 byte "A6. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...{split}A\u k=\sum\um=0}^{n-1}A\u m\exp\左 \{-2\pi i{mk\在n}\右\}\e... ! Undefined control sequence. l.14 ...sum\um=0}^{n-1}A\u m\exp\左\{-2\pi i{mk\� ��n}\右\}\end{split} ! Package inputenc Error: Invalid UTF-8 byte "9C. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...um\um=0}^{n-1}A\u m\exp\左\{-2\pi i{mk\� �n}\右\}\end{split} ! Package inputenc Error: Invalid UTF-8 byte "A8. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...m\um=0}^{n-1}A\u m\exp\左\{-2\pi i{mk\在 n}\右\}\end{split} ! Undefined control sequence. l.14 ...=0}^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\� ��\}\end{split} ! Package inputenc Error: Invalid UTF-8 byte "8F. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...0}^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\� �\}\end{split} ! Package inputenc Error: Invalid UTF-8 byte "B3. See the inputenc package documentation for explanation. Type H <return> for immediate help. ... l.14 ...}^{n-1}A\u m\exp\左\{-2\pi i{mk\在n}\右 \}\end{split} ! Misplaced \crcr. \endsplit ->\crcr \egroup \egroup \iftagsleft@ \@xp \lendsplit@ \else \@xp \... l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! Extra }, or forgotten $. \endsplit ->\crcr \egroup \egroup \iftagsleft@ \@xp \lendsplit@ \else \@xp \... l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! Extra }, or forgotten $. \endsplit ->\crcr \egroup \egroup \iftagsleft@ \@xp \lendsplit@ \else \@xp \... l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! LaTeX Error: \begin{equation*} on input line 13 ended by \end{split}. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! Missing $ inserted. <inserted text> $ l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! Missing $ inserted. <inserted text> $ l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! Missing $ inserted. <inserted text> $ l.14 ...exp\左\{-2\pi i{mk\在n}\右\}\end{split} ! LaTeX Error: Bad math environment delimiter. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.15 \end{equation*} ! LaTeX Error: \begin{document} ended by \end{equation*}. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.15 \end{equation*} ! Missing $ inserted. <inserted text> $ l.15 \end{equation*} ! Display math should end with $$. <to be read again> \endgroup l.15 \end{equation*} ! Extra \endgroup. <recently read> \endgroup l.15 \end{equation*} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 488 bytes). Transcript written on math.log.

一般来说,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定义为

System Message: WARNING/2 (a\u m=\frac{1}{n}\sum{k=0}^{n-1}a\u k\exp\left\{2\pi i{mk\over n}\right\})

latex exited with error [stdout] This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) restricted \write18 enabled. entering extended mode (./math.tex LaTeX2e <2018-12-01> (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size12.clo)) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty) (./math.aux) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) LaTeX Warning: Command \u invalid in math mode on input line 14. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ... l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} ! You can't use `\spacefactor' in math mode. \add@accent ...}\accent #1 #2\egroup \spacefactor \accent@spacefactor l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} LaTeX Warning: Command \u invalid in math mode on input line 14. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ... l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} ! You can't use `\spacefactor' in math mode. \add@accent ...}\accent #1 #2\egroup \spacefactor \accent@spacefactor l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} Package amsmath Warning: Foreign command \over; (amsmath) \frac or \genfrac should be used instead (amsmath) on input line 14. LaTeX Warning: Command \u invalid in math mode on input line 14. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ... l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} ! You can't use `\spacefactor' in math mode. \add@accent ...}\accent #1 #2\egroup \spacefactor \accent@spacefactor l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} LaTeX Warning: Command \u invalid in math mode on input line 14. ! Please use \mathaccent for accents in math mode. \add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ... l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} ! You can't use `\spacefactor' in math mode. \add@accent ...}\accent #1 #2\egroup \spacefactor \accent@spacefactor l.14 ...left\{2\pi i{mk\over n}\right\}\end{split} [1] (./math.aux) ) (see the transcript file for additional information) Output written on math.dvi (1 page, 680 bytes). Transcript written on math.log.

它不同于前向变换的指数参数的符号和默认的标准化 1/n .

类型提升

numpy.fft 促进 float32complex64 数组到 float64complex128 数组。有关不提升输入数组的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进行图像分析和过滤。快速傅立叶变换的计算效率意味着它也可以是一种快速计算大卷积的方法,利用时域卷积等于频域逐点乘法的性质。

更高的尺寸

在二维中,DFT定义为

A{kl}=\sum{m=0}^{m-1}\sum{n=0}^{n-1}

它以明显的方式延伸到更高的维度,而在更高维度中的反义词也以同样的方式延伸。

工具书类

CT

Cooley,James W.和John W.Tukey,1965,“复杂傅立叶级数的机器计算算法”, 数学。计算机。 19:29 7301。

NR

Press,W.,Teukolsky,S.,Vetterline,W.T.,和Flannery,B.P.,2007年, 数字配方:科学计算的艺术 ,12-13。剑桥大学出版社,英国剑桥。

实例

有关示例,请参见各种函数。