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)