Safe Haskell | None |
---|---|
Language | Haskell98 |
This module provides normalized 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.
- run :: (Vector v a, Vector v b, Storable a, Storable b) => Transform a b -> v a -> v b
- plan :: (Storable a, Storable b) => Transform a b -> Int -> Plan a b
- execute :: (Vector v a, Vector v b, Storable a, Storable b) => Plan a b -> v a -> v b
- dft :: Transform (Complex Double) (Complex Double)
- idft :: Transform (Complex Double) (Complex Double)
- dftR2C :: Transform Double (Complex Double)
- dftC2R :: Transform (Complex Double) Double
- dct1 :: Transform Double Double
- idct1 :: Transform Double Double
- dct2 :: Transform Double Double
- idct2 :: Transform Double Double
- dct3 :: Transform Double Double
- idct3 :: Transform Double Double
- dct4 :: Transform Double Double
- idct4 :: Transform Double Double
- dst1 :: Transform Double Double
- idst1 :: Transform Double Double
- dst2 :: Transform Double Double
- idst2 :: Transform Double Double
- dst3 :: Transform Double Double
- idst3 :: Transform Double Double
- dst4 :: Transform Double Double
- idst4 :: Transform Double Double
Creating and executing Plan
s
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
, then calling
planInputSize
p /= length vexecute p v
will throw an exception.
Complex-to-complex transforms
dft :: Transform (Complex Double) (Complex Double) Source #
A forward discrete Fourier transform. The output and input sizes are the same (n
).
y_k = sum_(j=0)^(n-1) x_j e^(-2pi i j k/n)
idft :: Transform (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
).
y_k = (1/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) 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
plan dftC2R n
creates aPlan
whose output size isn
, and whose input size isn `div` 2 + 1
. - If
length v == n
, thenlength (run dftC2R v) == 2*(n-1)
.
Real-to-real transforms
The real-even (DCT) and real-odd (DST) transforms. The input and output sizes
are the same (n
).
dct1 :: Transform Double Double Source #
A type-1 discrete cosine transform.
y_k = x_0 + (-1)^k x_(n-1) + 2 sum_(j=1)^(n-2) x_j cos(pi j k/(n-1))
idct1 :: Transform Double Double Source #
A type-1 discrete cosine transform which is the inverse of dct1
.
y_k = (1/(2(n-1)) [x_0 + (-1)^k x_(n-1) + 2 sum_(j=1)^(n-2) x_j cos(pi j k/(n-1))]
dct2 :: Transform Double Double Source #
A type-2 discrete cosine transform.
y_k = 2 sum_(j=0)^(n-1) x_j cos(pi(j+1/2)k/n)
idct2 :: Transform Double Double Source #
A type-3 discrete cosine transform which is the inverse of dct2
.
y_k = (1/(2n)) [x_0 + 2 sum_(j=1)^(n-1) x_j cos(pi j(k+1/2)/n)]
dct3 :: Transform Double Double Source #
A type-3 discrete cosine transform.
y_k = x_0 + 2 sum_(j=1)^(n-1) x_j cos(pi j(k+1/2)/n)
idct3 :: Transform Double Double Source #
A type-2 discrete cosine transform which is the inverse of dct3
.
y_k = (1/n) sum_(j=0)^(n-1) x_j cos(pi(j+1/2)k/n)
dct4 :: Transform Double Double Source #
A type-4 discrete cosine transform.
y_k = 2 sum_(j=0)^(n-1) x_j cos(pi(j+1/2)(k+1/2)/n)
idct4 :: Transform Double Double Source #
A type-4 discrete cosine transform which is the inverse of dct4
.
y_k = (1/n) sum_(j=0)^(n-1) x_j cos(pi(j+1/2)(k+1/2)/n)
Discrete sine transforms
dst1 :: Transform Double Double Source #
A type-1 discrete sine transform.
y_k = 2 sum_(j=0)^(n-1) x_j sin(pi(j+1)(k+1)/(n+1))
idst1 :: Transform Double Double Source #
A type-1 discrete sine transform which is the inverse of dst1
.
y_k = (1/(n+1)) sum_(j=0)^(n-1) x_j sin(pi(j+1)(k+1)/(n+1))
dst2 :: Transform Double Double Source #
A type-2 discrete sine transform.
y_k = 2 sum_(j=0)^(n-1) x_j sin(pi(j+1/2)(k+1)/n)
idst2 :: Transform Double Double Source #
A type-3 discrete sine transform which is the inverse of dst2
.
y_k = (1/(2n)) [(-1)^k x_(n-1) + 2 sum_(j=0)^(n-2) x_j sin(pi(j+1)(k+1/2)/n)]
dst3 :: Transform Double Double Source #
A type-3 discrete sine transform.
y_k = (-1)^k x_(n-1) + 2 sum_(j=0)^(n-2) x_j sin(pi(j+1)(k+1/2)/n)
idst3 :: Transform Double Double Source #
A type-2 discrete sine transform which is the inverse of dst3
.
y_k = (1/n) sum_(j=0)^(n-1) x_j sin(pi(j+1/2)(k+1)/n)