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 [455,500]. 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 Hamard 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.
FDNs as Digital Waveguide Networks