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 . 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 . 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.