vector-fftw-0.1.3: A binding to the fftw library for one-dimensional vectors.

Safe HaskellNone

Numeric.FFT.Vector.Unitary

Contents

Description

This module provides normalized versions of the transforms in fftw.

All of the transforms are normalized so that

  • Each transform is unitary, i.e., preserves the inner product and the sum-of-squares norm of its input.
  • Each backwards transform is the inverse of the corresponding forwards transform.

(Both conditions only hold 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.

Synopsis

Creating and executing Plans

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

Create and run a Plan for the given transform.

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

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 bSource

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 :: Transform (Complex Double) (Complex Double)Source

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

y_k = (1/sqrt n) sum_(j=0)^(n-1) x_j e^(-2pi i j k/n)

idft :: Transform (Complex Double) (Complex Double)Source

An inverse discrete Fourier transform. The output and input sizes are the same (n).

y_k = (1/sqrt n) sum_(j=0)^(n-1) x_j e^(2pi i j k/n)

Real-to-complex transforms

dftR2C :: Transform Double (Complex Double)Source

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

dftC2R :: Transform (Complex Double) DoubleSource

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 plan dftC2R n creates a Plan whose output size is n, and whose input size is n `div` 2 + 1.
  • If length v == n, then length (run dftC2R v) == 2*(n-1).

Discrete cosine transforms

Some normalized real-even (DCT). The input and output sizes are the same (n).

dct2 :: Transform Double DoubleSource

A type-2 discrete cosine transform. Its inverse is dct3.

y_k = w(k) sum_(j=0)^(n-1) x_j cos(pi(j+1/2)k/n); where w(0)=1/sqrt n, and w(k)=sqrt(2/n) for k>0.

idct2 :: Transform Double DoubleSource

A type-3 discrete cosine transform which is the inverse of dct2.

y_k = (-1)^k w(n-1) x_(n-1) + 2 sum_(j=0)^(n-2) w(j) x_j sin(pi(j+1)(k+1/2)/n); where w(0)=1/sqrt(n), and w(k)=1/sqrt(2n) for k>0.

dct4 :: Transform Double DoubleSource

A type-4 discrete cosine transform. It is its own inverse.

y_k = (1/sqrt n) sum_(j=0)^(n-1) x_j cos(pi(j+1/2)(k+1/2)/n)