Sometimes, beyond inspecting the block diagram, it may be necessary to
verify the output signal(s) in more detail. For this purpose, FAUST
has a useful ``architecture file'' named `plot.cpp` which
results in generation of a main C++ program that simply prints
the output signal(s) to the standard output. This printout can be
used to plot the output (using, *e.g.*, `gnuplot`) or compare it
to the output of some other program. A similar architecture file,
`matlabplot.cpp`, results in a program that outputs an input
file for Matlab or Octave that will define a matlab matrix containing
each FAUST output signal in a column of the matrix. These techniques
are discussed further in the following subsections.

This section gives an example of comparing the impulse response of the filter in Fig.5 to the output of a matlab version. Specifically, we will compare the printed output from the Faust-generated program to the output of the matlab test program shown in Fig.10.

SR = 44100; % Sampling rate fr = 1000; % Resonant frequency bw = 100; % Bandwidth g = 1; % Peak gain N = 10; % Samples to generate in test R = exp(-pi*bw/SR); % pole radius A = 2*pi*fr/SR; % pole angle (radians) firpart = g * [1 0 -1] * (1-R^2)/2; feedback = [1 -2*R*cos(A) R^2]; % freq-domain coeffs freqz(firpart,feedback); % freq-response display format long; h = impz(firpart,feedback,N) % print impulse response |

In our FAUST program, we need a test impulse, *e.g.*,

process = 1-1' : firpart : + ~ feedback with { ... <same as before> ... };The signal is the unit-step signal consisting of all ones, and is the unit step delayed by one sample. Therefore,

Suppose the file `cpgrir.dsp` (``Constant-Peak-Gain Resonator
Impulse-Response'') contains our test FAUST program. Then we can
generate the impulse-response printout as follows at the command line:

> faust -a plot.cpp -o cpgrir-print.cpp cpgrir.dsp > g++ -Wall -g -lm -lpthread cpgrir-print.cpp -o cpgrir-print > cpgrir-print -n 10(Commands similar to the first two lines above are carried out more conveniently using the

h = [ 0.00707331 0.0139039 0.013284 0.012405 0.0112882 0.00995947 0.00844865 0.00678877 0.00501544 0.00316602 ... ]The matlab version produces the following impulse response:

h = [ 0.00707328459864603 0.01390382707778288 0.01328399389241600 0.01240496991806334 0.01128815312793390 0.00995943544693653 0.00844861689634155 0.00678874919376101 0.00501542304704597 0.00316601431505539 ... ]Since matlab uses double-precision floating-point while FAUST used single-precision

> faust -double ... > faust -quad ...

Download aspf.pdf

[Comment on this page via email]

Copyright ©

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