summaryrefslogtreecommitdiff
path: root/numpy/dft/fftpack.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/dft/fftpack.py')
-rw-r--r--numpy/dft/fftpack.py323
1 files changed, 0 insertions, 323 deletions
diff --git a/numpy/dft/fftpack.py b/numpy/dft/fftpack.py
deleted file mode 100644
index 1cb24f2b7..000000000
--- a/numpy/dft/fftpack.py
+++ /dev/null
@@ -1,323 +0,0 @@
-"""
-Discrete Fourier Transforms - FFT.py
-
-The underlying code for these functions is an f2c translated and modified
-version of the FFTPACK routines.
-
-fft(a, n=None, axis=-1)
-ifft(a, n=None, axis=-1)
-rfft(a, n=None, axis=-1)
-irfft(a, n=None, axis=-1)
-hfft(a, n=None, axis=-1)
-ihfft(a, n=None, axis=-1)
-fftn(a, s=None, axes=None)
-ifftn(a, s=None, axes=None)
-rfftn(a, s=None, axes=None)
-irfftn(a, s=None, axes=None)
-fft2(a, s=None, axes=(-2,-1))
-ifft2(a, s=None, axes=(-2, -1))
-rfft2(a, s=None, axes=(-2,-1))
-irfft2(a, s=None, axes=(-2, -1))
-"""
-__all__ = ['fft','ifft', 'rfft', 'irfft', 'hfft', 'ihfft', 'rfftn',
- 'irfftn', 'rfft2', 'irfft2', 'fft2', 'ifft2', 'fftn', 'ifftn',
- 'refft', 'irefft','refftn','irefftn', 'refft2', 'irefft2']
-
-from numpy.core import asarray, zeros, swapaxes, shape, conjugate, \
- take
-import fftpack_lite as fftpack
-from helper import *
-
-_fft_cache = {}
-_real_fft_cache = {}
-
-def _raw_fft(a, n=None, axis=-1, init_function=fftpack.cffti,
- work_function=fftpack.cfftf, fft_cache = _fft_cache ):
- a = asarray(a)
-
- if n == None: n = a.shape[axis]
-
- try:
- wsave = fft_cache[n]
- except(KeyError):
- wsave = init_function(n)
- fft_cache[n] = wsave
-
- if a.shape[axis] != n:
- s = list(a.shape)
- if s[axis] > n:
- index = [slice(None)]*len(s)
- index[axis] = slice(0,n)
- a = a[index]
- else:
- index = [slice(None)]*len(s)
- index[axis] = slice(0,s[axis])
- s[axis] = n
- z = zeros(s, a.dtype.char)
- z[index] = a
- a = z
-
- if axis != -1:
- a = swapaxes(a, axis, -1)
- r = work_function(a, wsave)
- if axis != -1:
- r = swapaxes(r, axis, -1)
- return r
-
-
-def fft(a, n=None, axis=-1):
- """fft(a, n=None, axis=-1)
-
- Will return the n point discrete Fourier transform of a. n defaults to the
- length of a. If n is larger than a, then a will be zero-padded to make up
- the difference. If n is smaller than a, the first n items in a will be
- used.
-
- The packing of the result is "standard": If A = fft(a, n), then A[0]
- contains the zero-frequency term, A[1:n/2+1] contains the
- positive-frequency terms, and A[n/2+1:] contains the negative-frequency
- terms, in order of decreasingly negative frequency. So for an 8-point
- transform, the frequencies of the result are [ 0, 1, 2, 3, 4, -3, -2, -1].
-
- This is most efficient for n a power of two. This also stores a cache of
- working memory for different sizes of fft's, so you could theoretically
- run into memory problems if you call this too many times with too many
- different n's."""
-
- return _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
-
-
-def ifft(a, n=None, axis=-1):
- """ifft(a, n=None, axis=-1)
-
- Will return the n point inverse discrete Fourier transform of a. n
- defaults to the length of a. If n is larger than a, then a will be
- zero-padded to make up the difference. If n is smaller than a, then a will
- be truncated to reduce its size.
-
- The input array is expected to be packed the same way as the output of
- fft, as discussed in it's documentation.
-
- This is the inverse of fft: ifft(fft(a)) == a within numerical
- accuracy.
-
- This is most efficient for n a power of two. This also stores a cache of
- working memory for different sizes of fft's, so you could theoretically
- run into memory problems if you call this too many times with too many
- different n's."""
-
- a = asarray(a).astype(complex)
- if n == None:
- n = shape(a)[axis]
- return _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftb, _fft_cache) / n
-
-
-def rfft(a, n=None, axis=-1):
- """rfft(a, n=None, axis=-1)
-
- Will return the n point discrete Fourier transform of the real valued
- array a. n defaults to the length of a. n is the length of the input, not
- the output.
-
- The returned array will be the nonnegative frequency terms of the
- Hermite-symmetric, complex transform of the real array. So for an 8-point
- transform, the frequencies in the result are [ 0, 1, 2, 3, 4]. The first
- term will be real, as will the last if n is even. The negative frequency
- terms are not needed because they are the complex conjugates of the
- positive frequency terms. (This is what I mean when I say
- Hermite-symmetric.)
-
- This is most efficient for n a power of two."""
-
- a = asarray(a).astype(float)
- return _raw_fft(a, n, axis, fftpack.rffti, fftpack.rfftf, _real_fft_cache)
-
-
-def irfft(a, n=None, axis=-1):
- """irfft(a, n=None, axis=-1)
-
- Will return the real valued n point inverse discrete Fourier transform of
- a, where a contains the nonnegative frequency terms of a Hermite-symmetric
- sequence. n is the length of the result, not the input. If n is not
- supplied, the default is 2*(len(a)-1). If you want the length of the
- result to be odd, you have to say so.
-
- If you specify an n such that a must be zero-padded or truncated, the
- extra/removed values will be added/removed at high frequencies. One can
- thus resample a series to m points via Fourier interpolation by: a_resamp
- = irfft(rfft(a), m).
-
- This is the inverse of rfft:
- irfft(rfft(a), len(a)) == a
- within numerical accuracy."""
-
- a = asarray(a).astype(complex)
- if n == None:
- n = (shape(a)[axis] - 1) * 2
- return _raw_fft(a, n, axis, fftpack.rffti, fftpack.rfftb,
- _real_fft_cache) / n
-
-
-def hfft(a, n=None, axis=-1):
- """hfft(a, n=None, axis=-1)
- ihfft(a, n=None, axis=-1)
-
- These are a pair analogous to rfft/irfft, but for the
- opposite case: here the signal is real in the frequency domain and has
- Hermite symmetry in the time domain. So here it's hermite_fft for which
- you must supply the length of the result if it is to be odd.
-
- ihfft(hfft(a), len(a)) == a
- within numerical accuracy."""
-
- a = asarray(a).astype(complex)
- if n == None:
- n = (shape(a)[axis] - 1) * 2
- return irfft(conjugate(a), n, axis) * n
-
-
-def ihfft(a, n=None, axis=-1):
- """hfft(a, n=None, axis=-1)
- ihfft(a, n=None, axis=-1)
-
- These are a pair analogous to rfft/irfft, but for the
- opposite case: here the signal is real in the frequency domain and has
- Hermite symmetry in the time domain. So here it's hfft for which
- you must supply the length of the result if it is to be odd.
-
- ihfft(hfft(a), len(a)) == a
- within numerical accuracy."""
-
- a = asarray(a).astype(float)
- if n == None:
- n = shape(a)[axis]
- return conjugate(rfft(a, n, axis))/n
-
-
-def _cook_nd_args(a, s=None, axes=None, invreal=0):
- if s is None:
- shapeless = 1
- if axes == None:
- s = list(a.shape)
- else:
- s = take(a.shape, axes)
- else:
- shapeless = 0
- s = list(s)
- if axes == None:
- axes = range(-len(s), 0)
- if len(s) != len(axes):
- raise ValueError, "Shape and axes have different lengths."
- if invreal and shapeless:
- s[axes[-1]] = (s[axes[-1]] - 1) * 2
- return s, axes
-
-
-def _raw_fftnd(a, s=None, axes=None, function=fft):
- a = asarray(a)
- s, axes = _cook_nd_args(a, s, axes)
- itl = range(len(axes))
- itl.reverse()
- for ii in itl:
- a = function(a, n=s[ii], axis=axes[ii])
- return a
-
-
-def fftn(a, s=None, axes=None):
- """fftn(a, s=None, axes=None)
-
- The n-dimensional fft of a. s is a sequence giving the shape of the input
- an result along the transformed axes, as n for fft. Results are packed
- analogously to fft: the term for zero frequency in all axes is in the
- low-order corner, while the term for the Nyquist frequency in all axes is
- in the middle.
-
- If neither s nor axes is specified, the transform is taken along all
- axes. If s is specified and axes is not, the last len(s) axes are used.
- If axes are specified and s is not, the input shape along the specified
- axes is used. If s and axes are both specified and are not the same
- length, an exception is raised."""
-
- return _raw_fftnd(a,s,axes,fft)
-
-def ifftn(a, s=None, axes=None):
- """ifftn(a, s=None, axes=None)
-
- The inverse of fftn."""
-
- return _raw_fftnd(a, s, axes, ifft)
-
-
-def fft2(a, s=None, axes=(-2,-1)):
- """fft2(a, s=None, axes=(-2,-1))
-
- The 2d fft of a. This is really just fftn with different default
- behavior."""
-
- return _raw_fftnd(a,s,axes,fft)
-
-
-def ifft2(a, s=None, axes=(-2,-1)):
- """ifft2(a, s=None, axes=(-2, -1))
-
- The inverse of fft2d. This is really just ifftn with different
- default behavior."""
-
- return _raw_fftnd(a, s, axes, ifft)
-
-
-def rfftn(a, s=None, axes=None):
- """rfftn(a, s=None, axes=None)
-
- The n-dimensional discrete Fourier transform of a real array a. A real
- transform as rfft is performed along the axis specified by the last
- element of axes, then complex transforms as fft are performed along the
- other axes."""
-
- a = asarray(a).astype(float)
- s, axes = _cook_nd_args(a, s, axes)
- a = rfft(a, s[-1], axes[-1])
- for ii in range(len(axes)-1):
- a = fft(a, s[ii], axes[ii])
- return a
-
-def rfft2(a, s=None, axes=(-2,-1)):
- """rfft2(a, s=None, axes=(-2,-1))
-
- The 2d fft of the real valued array a. This is really just rfftn with
- different default behavior."""
-
- return rfftn(a, s, axes)
-
-def irfftn(a, s=None, axes=None):
- """irfftn(a, s=None, axes=None)
-
- The inverse of rfftn. The transform implemented in ifft is
- applied along all axes but the last, then the transform implemented in
- irfft is performed along the last axis. As with
- irfft, the length of the result along that axis must be
- specified if it is to be odd."""
-
- a = asarray(a).astype(complex)
- s, axes = _cook_nd_args(a, s, axes, invreal=1)
- for ii in range(len(axes)-1):
- a = ifft(a, s[ii], axes[ii])
- a = irfft(a, s[-1], axes[-1])
- return a
-
-def irfft2(a, s=None, axes=(-2,-1)):
- """irfft2(a, s=None, axes=(-2, -1))
-
- The inverse of rfft2. This is really just irfftn with
- different default behavior."""
-
- return irfftn(a, s, axes)
-
-# Deprecated names
-from numpy import deprecate
-refft = deprecate(rfft, 'refft', 'rfft')
-irefft = deprecate(irfft, 'irefft', 'irfft')
-refft2 = deprecate(rfft2, 'refft2', 'rfft2')
-irefft2 = deprecate(irfft2, 'irefft2', 'irfft2')
-refftn = deprecate(rfftn, 'refftn', 'rfftn')
-irefftn = deprecate(irfftn, 'irefftn', 'irfftn')