The Faust example reverb_designer.dsp brings up a
FDN reverberator in which the signal out of each delay line is
split into five bands so that
can be controlled
independently in each band. The 16 delay-line lengths are distributed
exponentially between a minimum and maximum length set by two
min/max-length sliders, but rounded to the nearest integer-power of a
distinct prime, as introduced above in §3.7.3). The FDN
reverberator is implemented in Faust's effect.lib. The
band-splitting is carried out by the filterbank function in
Faust's filter.lib.

The Faust function filterbank(order,freqs) implements a
filter bank having the needed properties using Butterworth
lowpass/highpass band-splitting arranged in a dyadic tree (normally a
good choice for audio filter banks). That is, the whole spectrum is
split at the highest crossover frequency, the lowpass region is then
split into two bands at the next crossover frequency down, and so on,
splitting the lowpass band at each stage in the dyadic tree
[457,502]. The number of poles in each
Butterworth lowpass/highpass filter is specified by order,
and freqs contains a list of desired crossover frequencies
separating the bands. A certain amount of dispersion is also
introduced, since the filter bank is causal and delay-equalized (so
that the bands may be summed without phase cancellation artifacts at
the band edges). Also note that the lower bands are effectively
produced by higher order filters than the upper bands. When the
reverberation time is longer than the dispersion delay, the dispersion
should not be audible as such, although it can affect the ``sound'' of
the reverberation. In general, however, artificial reverberators
normally benefit from additional allpass dispersion.

Figure 3.12 shows the block diagram of a
FDN
reverberator made from Faust's reverb_designer.dsp by
changing 16 to 4. Figure 3.13 shows the Faust block diagram of
the associated Hadamard matrix multiplication. As it shows,
multiplication by a Hadamard matrix can be implemented (ignoring the
normalizing scale factor) as a series of block sums and differences
(often called butterflies or shufflers) in which the
block size decreases by a factor of 2 each stage. Figures for the
remaining components of the reverberator may be perused via the shell
command faust2firefox reverb_designer.dsp followed by
clicking on the blocks in the browser.

Figure 3.12:
FDN reverberator implemented
in the Faust example reverb_designer.dsp, but scaled down
from order 16 to order 4.