accelerate-fourier-1.0.0.5: Fast Fourier transform and convolution using the Accelerate framework

Description

The implementations in this module work entirely in the Acc domain. This means that they can be applied to any array without knowing their extent on the Haskell side. The downside is, that they cannot share any preprocessing.

Synopsis

# Documentation

type Transform sh a = Acc (Array sh a) -> Acc (Array sh a) Source #

transform :: (Slice sh, Shape sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Automatically choose transformation algorithms according to the size of the array. However, they are not as sophisticated as the algorithms in Data.Array.Accelerate.Fourier.Planned.

ditSplitRadix :: (Slice sh, Shape sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Split-Radix for power-of-two sizes.

dit2 :: (Slice sh, Shape sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Decimation in time for power-of-two sizes.

dit235 :: (Slice sh, Shape sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Decimation in time for sizes that are composites of the factors 2, 3 and 5. These sizes are known as 5-smooth numbers or the Hamming sequence. http://oeis.org/A051037.

Next greater or equal 5-smooth number as needed by dit235.

transformChirp2 :: (Shape sh, Slice sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Transformation of arbitrary length based on Bluestein on a power-of-two size.

transformChirp235 :: (Shape sh, Slice sh, RealFloat a, FromIntegral Int a) => Exp (Sign a) -> Transform (sh :. Int) (Complex a) Source #

Transformation of arbitrary length based on Bluestein on a 5-smooth size.

data Sign a Source #

Instances

 cst a => IsProduct cst (Sign a) Source # Associated Typestype ProdRepr (Sign a) :: * MethodsfromProd :: proxy cst -> Sign a -> ProdRepr (Sign a)toProd :: proxy cst -> ProdRepr (Sign a) -> Sign aprod :: proxy cst -> Sign a -> ProdR cst (ProdRepr (Sign a)) (Lift Exp a, Elt (Plain a)) => Lift Exp (Sign a) Source # Associated Typestype Plain (Sign a) :: * # Methodslift :: Sign a -> Exp (Plain (Sign a)) # Elt a => Unlift Exp (Sign (Exp a)) Source # Methodsunlift :: Exp (Plain (Sign (Exp a))) -> Sign (Exp a) # Eq a => Eq (Sign a) Source # Methods(==) :: Sign a -> Sign a -> Bool #(/=) :: Sign a -> Sign a -> Bool # Show a => Show (Sign a) Source # MethodsshowsPrec :: Int -> Sign a -> ShowS #show :: Sign a -> String #showList :: [Sign a] -> ShowS # Num a => Arbitrary (Sign a) Source # Methodsarbitrary :: Gen (Sign a) #shrink :: Sign a -> [Sign a] # Elt a => Elt (Sign a) Source # MethodseltType :: Sign a -> TupleType (EltRepr (Sign a))fromElt :: Sign a -> EltRepr (Sign a)toElt :: EltRepr (Sign a) -> Sign a type EltRepr (Sign a) Source # type EltRepr (Sign a) = EltRepr a type ProdRepr (Sign a) Source # type ProdRepr (Sign a) = ((), a) type Plain (Sign a) Source # type Plain (Sign a) = Sign (Plain a)

forward :: Num a => Exp (Sign a) Source #

inverse :: Num a => Exp (Sign a) Source #

data SubTransform a Source #

Constructors

 SubTransform (forall sh. (Shape sh, Slice sh) => Transform (sh :. Int) a)