{-# 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 code v = unsafePerformIO $ do
r <- createVector (size v)
(v `applyRaw` (r `applyRaw` id)) (c_fft code) #|"fft"
return r
foreign import ccall unsafe "gsl-aux.h fft" c_fft :: CInt -> TCV (TCV Res)
fft :: Vector (Complex Double) -> Vector (Complex Double)
fft = genfft 0
ifft :: Vector (Complex Double) -> Vector (Complex Double)
ifft = genfft 1