{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
module Numeric.GSL.Fourier (
fft,
ifft
) where
import Numeric.LinearAlgebra.HMatrix
import Numeric.GSL.Internal
import Foreign.C.Types
import System.IO.Unsafe (unsafePerformIO)
genfft :: CInt -> c t -> Vector a
genfft code :: CInt
code v :: c t
v = IO (Vector a) -> Vector a
forall a. IO a -> a
unsafePerformIO (IO (Vector a) -> Vector a) -> IO (Vector a) -> Vector a
forall a b. (a -> b) -> a -> b
$ do
Vector a
r <- Int -> IO (Vector a)
forall a. Storable a => Int -> IO (Vector a)
createVector (c t -> IndexOf c
forall (c :: * -> *) t. Container c t => c t -> IndexOf c
size c t
v)
(c t
v c t
-> ((CInt -> Ptr a -> IO CInt) -> IO CInt)
-> TransRaw (c t) (CInt -> Ptr a -> IO CInt)
-> IO CInt
forall c b r.
TransArray c =>
c -> (b -> IO r) -> TransRaw c b -> IO r
`applyRaw` (Vector a
r Vector a
-> (IO CInt -> IO CInt) -> TransRaw (Vector a) (IO CInt) -> IO CInt
forall c b r.
TransArray c =>
c -> (b -> IO r) -> TransRaw c b -> IO r
`applyRaw` IO CInt -> IO CInt
forall a. a -> a
id)) (CInt -> TCV (TCV (IO CInt))
c_fft CInt
code) IO CInt -> String -> IO ()
#|"fft"
Vector a -> IO (Vector a)
forall (m :: * -> *) a. Monad m => a -> m a
return Vector a
r
foreign import ccall unsafe "gsl-aux.h fft" c_fft :: CInt -> TCV (TCV Res)
fft :: Vector (Complex Double) -> Vector (Complex Double)
fft :: Vector (Complex Double) -> Vector (Complex Double)
fft = CInt -> Vector (Complex Double) -> Vector (Complex Double)
forall (c :: * -> *) t a.
(Container c t, TransArray (c t), Storable a,
TransRaw (c t) (CInt -> Ptr a -> IO CInt) ~ TCV (TCV (IO CInt)),
IndexOf c ~ Int) =>
CInt -> c t -> Vector a
genfft 0
ifft :: Vector (Complex Double) -> Vector (Complex Double)
ifft :: Vector (Complex Double) -> Vector (Complex Double)
ifft = CInt -> Vector (Complex Double) -> Vector (Complex Double)
forall (c :: * -> *) t a.
(Container c t, TransArray (c t), Storable a,
TransRaw (c t) (CInt -> Ptr a -> IO CInt) ~ TCV (TCV (IO CInt)),
IndexOf c ~ Int) =>
CInt -> c t -> Vector a
genfft 1