While many block diagrams are simple to write down in FAUST, such as
elementary series and/or parallel combinations of basic primitives,
there are others which are harder to immediately see, particularly
when there are multiple overlapping feedback loops. A *slew
limiter* is a simple example containing dual overlapping
feedback.^{5}

A general procedure for encoding block diagrams in FAUST, informally
called ``brute force Faustification,'' is obtained by following the
originally published theorem on the generality of FAUST as a
language for encoding block diagrams [7]. An
alternative approach, based on methods of *automatic control*, is
to first write down a *state-space model* of the system, from
which a FAUST description readily follows (see Appendix A). An
early implementation of this method was the Synth-A-Modeler Compiler
[1]. A disadvantage of this approach is that
the resulting FAUST can be less readable. Instead of a natural
left-to-right processing specification, it produces a general
state-space model which takes the form of a vector first-order
finite-difference recursion.

In this tutorial, apart from Appendix A, simple and immediately obvious translations of block diagrams into FAUST will be used, as these suffice most of the time and provide the most readable code. There is also usually a small performance advantage of the more intuitive encodings over the more general state-space formulation. The performance difference is small because the FAUST compiler does a good job of optimizing the computations implied by the sparse matrices of the state-space description.

Download aspf.pdf

[Comment on this page via email]

Copyright ©

Center for Computer Research in Music and Acoustics (CCRMA), Stanford University