packages feed

feldspar-language-0.5.0.1: Examples/Math/Convolution.hs

module Examples.Math.Convolution where

import qualified Prelude
import Feldspar
import Feldspar.Wrap
import Feldspar.Vector
import Feldspar.Compiler
import Feldspar.Matrix

-- | Generic (not compilable) convolution function
convolution :: (Numeric a) => Vector1 a -> Vector1 a -> Vector1 a
convolution kernel input = map ((scalarProd kernel) . reverse) $ inits input

-- | Wrappers to define the size and element type of vectors in 'convolution'
convolutionInstance :: Data [Float] -> Data [Float] -> Data [Float]
convolutionInstance kernel input = desugar $ convolution kernel' input'
    where
        input'  = thawVector' 256 input
        kernel' = thawVector'  16 kernel

-- | Wrappers to define the size and element type of vectors in 'convolution'
convolution_wrapped :: Data' D16 [Float] ->  Data' D256 [Float] ->  Data [Float]
convolution_wrapped = wrap (convolution :: Vector1 Float -> Vector1 Float -> Vector1 Float)