-----------------------------------------------------------------------------
-- |
-- Module      :  DSP.Flowgraph
-- Copyright   :  (c) Matthew Donadio 2003
-- License     :  GPL
--
-- Maintainer  :  m.p.donadio@ieee.org
-- Stability   :  experimental
-- Portability :  portable
--
-- Flowgraph functions
--
-- DO NOT USE YET
--
-----------------------------------------------------------------------------

module DSP.Flowgraph where

-----------------------------------------------------------------------------

-- | Cascade of functions, eg
--
-- @cascade [ f1, f2, f3 ] x == (f3 . f2 . f1) x@

cascade :: Num a => [[a] -> [a]] -- ^ [f_n(x)]
        -> [a] -- ^ x[n]
        -> [a] -- ^ y[n]

cascade []     = id
cascade (f:fs) = cascade fs . f

-----------------------------------------------------------------------------

-- | Gain node
--
-- @y[n] = a * x[n]@

gain :: Num a => a -- ^ a
     -> [a] -- ^ x[n]
     -> [a] -- ^ y[n]

gain x = map (x*)

-----------------------------------------------------------------------------

-- | Bias node
--
-- @y[n] = x[n] + a@

bias :: Num a => a -- ^ a
     -> [a] -- ^ x[n]
     -> [a] -- ^ y[n]

bias x = map (x+)

-----------------------------------------------------------------------------

-- | Adder node
--
-- @z[n] = x[n] + y[n]@

adder :: Num a => [a] -- ^ x[n]
      -> [a] -- ^ y[n]
      -> [a] -- ^ z[n]

adder = zipWith (+)