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,504]. 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.
![]() |