123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- """
- Discrete Fourier Transform (:mod:`numpy.fft`)
- =============================================
- .. currentmodule:: numpy.fft
- Standard FFTs
- -------------
- .. autosummary::
- :toctree: generated/
- fft Discrete Fourier transform.
- ifft Inverse discrete Fourier transform.
- fft2 Discrete Fourier transform in two dimensions.
- ifft2 Inverse discrete Fourier transform in two dimensions.
- fftn Discrete Fourier transform in N-dimensions.
- ifftn Inverse discrete Fourier transform in N dimensions.
- Real FFTs
- ---------
- .. autosummary::
- :toctree: generated/
- rfft Real discrete Fourier transform.
- irfft Inverse real discrete Fourier transform.
- rfft2 Real discrete Fourier transform in two dimensions.
- irfft2 Inverse real discrete Fourier transform in two dimensions.
- rfftn Real discrete Fourier transform in N dimensions.
- irfftn Inverse real discrete Fourier transform in N dimensions.
- Hermitian FFTs
- --------------
- .. autosummary::
- :toctree: generated/
- hfft Hermitian discrete Fourier transform.
- ihfft Inverse Hermitian discrete Fourier transform.
- Helper routines
- ---------------
- .. autosummary::
- :toctree: generated/
- fftfreq Discrete Fourier Transform sample frequencies.
- rfftfreq DFT sample frequencies (for usage with rfft, irfft).
- fftshift Shift zero-frequency component to center of spectrum.
- ifftshift Inverse of fftshift.
- Background information
- ----------------------
- Fourier analysis is fundamentally a method for expressing a function as a
- sum of periodic components, and for recovering the function from those
- components. When both the function and its Fourier transform are
- replaced with discretized counterparts, it is called the discrete Fourier
- transform (DFT). The DFT has become a mainstay of numerical computing in
- part because of a very fast algorithm for computing it, called the Fast
- Fourier Transform (FFT), which was known to Gauss (1805) and was brought
- to light in its current form by Cooley and Tukey [CT]_. Press et al. [NR]_
- provide an accessible introduction to Fourier analysis and its
- applications.
- Because the discrete Fourier transform separates its input into
- components that contribute at discrete frequencies, it has a great number
- of applications in digital signal processing, e.g., for filtering, and in
- this context the discretized input to the transform is customarily
- referred to as a *signal*, which exists in the *time domain*. The output
- is called a *spectrum* or *transform* and exists in the *frequency
- domain*.
- Implementation details
- ----------------------
- There are many ways to define the DFT, varying in the sign of the
- exponent, normalization, etc. In this implementation, the DFT is defined
- as
- .. math::
- A_k = \\sum_{m=0}^{n-1} a_m \\exp\\left\\{-2\\pi i{mk \\over n}\\right\\}
- \\qquad k = 0,\\ldots,n-1.
- The DFT is in general defined for complex inputs and outputs, and a
- single-frequency component at linear frequency :math:`f` is
- represented by a complex exponential
- :math:`a_m = \\exp\\{2\\pi i\\,f m\\Delta t\\}`, where :math:`\\Delta t`
- is the sampling interval.
- The values in the result follow so-called "standard" order: If ``A =
- fft(a, n)``, then ``A[0]`` contains the zero-frequency term (the sum of
- the signal), which is always purely real for real inputs. Then ``A[1:n/2]``
- contains the positive-frequency terms, and ``A[n/2+1:]`` contains the
- negative-frequency terms, in order of decreasingly negative frequency.
- For an even number of input points, ``A[n/2]`` represents both positive and
- negative Nyquist frequency, and is also purely real for real input. For
- an odd number of input points, ``A[(n-1)/2]`` contains the largest positive
- frequency, while ``A[(n+1)/2]`` contains the largest negative frequency.
- The routine ``np.fft.fftfreq(n)`` returns an array giving the frequencies
- of corresponding elements in the output. The routine
- ``np.fft.fftshift(A)`` shifts transforms and their frequencies to put the
- zero-frequency components in the middle, and ``np.fft.ifftshift(A)`` undoes
- that shift.
- When the input `a` is a time-domain signal and ``A = fft(a)``, ``np.abs(A)``
- is its amplitude spectrum and ``np.abs(A)**2`` is its power spectrum.
- The phase spectrum is obtained by ``np.angle(A)``.
- The inverse DFT is defined as
- .. math::
- 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.
- It differs from the forward transform by the sign of the exponential
- argument and the default normalization by :math:`1/n`.
- Normalization
- -------------
- The default normalization has the direct transforms unscaled and the inverse
- transforms are scaled by :math:`1/n`. It is possible to obtain unitary
- transforms by setting the keyword argument ``norm`` to ``"ortho"`` (default is
- `None`) so that both direct and inverse transforms will be scaled by
- :math:`1/\\sqrt{n}`.
- Real and Hermitian transforms
- -----------------------------
- When the input is purely real, its transform is Hermitian, i.e., the
- component at frequency :math:`f_k` is the complex conjugate of the
- component at frequency :math:`-f_k`, which means that for real
- inputs there is no information in the negative frequency components that
- is not already available from the positive frequency components.
- The family of `rfft` functions is
- designed to operate on real inputs, and exploits this symmetry by
- computing only the positive frequency components, up to and including the
- Nyquist frequency. Thus, ``n`` input points produce ``n/2+1`` complex
- output points. The inverses of this family assumes the same symmetry of
- its input, and for an output of ``n`` points uses ``n/2+1`` input points.
- Correspondingly, when the spectrum is purely real, the signal is
- Hermitian. The `hfft` family of functions exploits this symmetry by
- using ``n/2+1`` complex points in the input (time) domain for ``n`` real
- points in the frequency domain.
- In higher dimensions, FFTs are used, e.g., for image analysis and
- filtering. The computational efficiency of the FFT means that it can
- also be a faster way to compute large convolutions, using the property
- that a convolution in the time domain is equivalent to a point-by-point
- multiplication in the frequency domain.
- Higher dimensions
- -----------------
- In two dimensions, the DFT is defined as
- .. math::
- 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,
- which extends in the obvious way to higher dimensions, and the inverses
- in higher dimensions also extend in the same way.
- References
- ----------
- .. [CT] Cooley, James W., and John W. Tukey, 1965, "An algorithm for the
- machine calculation of complex Fourier series," *Math. Comput.*
- 19: 297-301.
- .. [NR] 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.
- Examples
- --------
- For examples, see the various functions.
- """
- from __future__ import division, absolute_import, print_function
- depends = ['core']
|