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

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.)

Synopsis

# Creating and executing `Plan`s

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

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)`

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

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

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`).

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`.

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`.

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)`