Sun Apr 18 09:53:48 EDT 2010

DSP language - combinators

Maybe I should stop whining about the difficulty of implementing a
combinator language for DSP, and just go ahead and do it without
thinking too much.  Build another one to throw away.

Currently I see two major structural components that somehow need to
be expressed:

  * Iterative systems: functions defined as limit points of
    trajectories of dynamical systems.  Such dynamical systems are
    themselves whe whole point of the language.

  * Generalized resampling which "transpose" or "rotate" time and
    space information.

This is essentially a variant of the fixed point combinator and a
"rotate" operation that can relate between time and space operations.

What I don't see yet: how to take the functional representations and
map them to an implementation with looping and buffering.

Maybe the next step should just be to make these operations
expressible in some high level form such that it can be interpreted
merely as functions, and then perform abstract evaluation on those

Let's resume an important trick from Feldspar[1].  The Indexed type
represents a vector or sequence as an index function :: Integer ->
value.  The `map' operator is then defined as a composition of this
function.  This can be understood as loop fusion.

          map f (Indexed 1 ixf) = Indexed 1 (f . ixf)

This is quite profound; it is so simple.

[1] entry://20100316-115313
[2] http://dsl4dsp.inf.elte.hu/