vector-fftw
Safe HaskellNone
LanguageHaskell2010

Numeric.FFT.Vector.Invertible.Multi

Description

This module provides normalized multi-dimensional versions of the transforms in fftw.

The forwards transforms in this module are identical to those in Numeric.FFT.Vector.Unnormalized. The backwards transforms are normalized to be their inverse operations (approximately, due to floating point precision).

For more information on the underlying transforms, see http://www.fftw.org/fftw3_doc/What-FFTW-Really-Computes.html.

Since: 0.2

Synopsis

Creating and executing Plans

run :: (Vector v a, Vector v b, Storable a, Storable b) => Transform a b -> v a -> v b Source #

Create and run a Plan for the given transform.

plan :: (Storable a, Storable b) => Transform a b -> Int -> Plan a b Source #

Create a Plan of a specific size. This function is equivalent to planOfType Estimate.

execute :: (Vector v a, Vector v b, Storable a, Storable b) => Plan a b -> v a -> v b Source #

Run a plan on the given Vector.

If planInputSize p /= length v, then calling execute p v will throw an exception.

Complex-to-complex transforms

dft :: TransformND (Complex Double) (Complex Double) Source #

A forward discrete Fourier transform. The output and input sizes are the same (n).

idft :: TransformND (Complex Double) (Complex Double) Source #

A backward discrete Fourier transform which is the inverse of dft. The output and input sizes are the same (n).

Real-to-complex transforms

dftR2C :: TransformND Double (Complex Double) Source #

A forward discrete Fourier transform with real data. If the input size is n0 * ... * nk, the output size will be n0 * ... * nk `div` 2 + 1.

dftC2R :: TransformND (Complex Double) Double Source #

A normalized backward discrete Fourier transform which is the left inverse of dftR2C. (Specifically, run dftC2R . run dftR2C == id.)

This Transform behaves differently than the others:

  • Calling planND dftC2R dims where dims = [n0, ..., nk] creates a Plan whose output size is dims, and whose input size is [n0, ..., nk `div` 2 + 1].
  • If length v == n0 * ... * nk, then length (run dftC2R v) == n0 * ... * 2*(nk-1).