Examples Gallery#
Rendered Marimo notebooks demonstrating pyFDN. The gallery is generated
automatically from every example_*.py file under examples/.
Getting Started#
Demonstrates |
|
Build a vanilla FDN with |
Absorption & Filters#
Demonstrates |
|
Estimates the frequency-dependent decay of a measured room impulse response and designs an FDN to match it: |
Translation Examples#
This example converts an FDN in delay state-space form (separate delay lengths and feedback matrix) into a single state-space system, and checks that the impulse response matches the delay-state-space implementation. |
|
Convert the delay state-space form of an FDN into matrix transfer function form ( |
|
Uses |
|
In-depth math documentation of the refinement fix, with an SOS filter in the loop and plotting. |
Allpass FDN Examples#
Example of an FDN that is allpass only for specific delay lengths, not for arbitrary delays. So it is not uniallpass (allpass for any choice of delays). |
|
For a given feedback matrix A, the goal is to construct b, c, and d such that the FDN is uniallpass. |
|
Single input, stereo output. The signal flow is: |
|
Schroeder allpass filters can be placed behind the delays in the FDN loop to increase echo density. The rendering is done with FLAMO (gain and delay modules). |
|
Example for the nested allpass structure: an FDN built by iteratively nesting a feedforward/back allpass around the previous system. SISO (single input, single output). |
|
Example for an allpass FDN with homogeneous decay so that all poles have the same decay rate. Compared to the SISO case, the MIMO has considerably more degrees of freedom. |
|
Example for an allpass FDN with homogeneous decay so that all poles have the same decay rate. |
|
Example for Poletti’s unitary reverberator: a multi-input multi-output (MIMO) allpass feedback delay network with reduced colouration. |
|
Example for Schroeder’s series (cascade) allpass: a cascade of first-order allpass sections realized as an FDN with diagonal feedback matrix. SISO. |
Special FDNs#
This example models two acoustically coupled rooms with a Feedback Delay Network (FDN): one small room with a short reverberation time (RT), one large room with a long RT. Each room is an independent FDN with frequency-dependent RT (first-order shelving absorption) and its own output EQ. |
|
This example uses the Scattering Delay Network (SDN) to compute room acoustics coefficients (delays, feedback matrix, wall filters) from geometry and wall absorption, then builds a FLAMO model to render the impulse response. |
FDN Design & Analysis#
FDN optimized for reduced metallic ringing (perceptually colorless reverberation). Original method published in “Differentiable Feedback Delay Network for Colorless Reverberation,” G Dal Santo, K Prawda, SJ Schlecht, V Välimäki, 26th International Conference on Digital Audio Effects (DAFx23), 244-251. |
|
The companion to Colorless FDN, which loads pre-optimized parameters from |
|
Analyses the decorrelation properties of an FDN with a velvet-noise scattering feedback matrix. |
|
This example compares three FDN topologies and their echo density (Abel & Huang 2006): |
|
FDN design typically needs to balance modal and echo density with computational complexity: |
|
Demonstrates how to compute the mode shapes of an FDN from the left and right eigenvectors of the loop polynomial $P(z) = D_m(z) - A$. |
|
Overview of feedback matrices and full FDN systems available in pyFDN. |
|
Demonstrates an FDN without homogeneous decay, but with a certain decay spread, as is typically observed in shoebox rooms and scattering delay networks. The spread is evaluated via the modal decomposition. |
|
Filter feedback delay network (FFDN) with paraunitary feedback matrix |
An FDN with a paraunitary (FIR, lossless) scattering matrix in the loop. The example computes the impulse response by time-domain recursion and by modal decomposition, and verifies that the system is lossless (all poles on the unit circle). |
FDN with frequency-dependent absorption filters, but not with homogeneous (delay-proportional) decay. Still, boundaries for the pole magnitudes can be computed from the singular values of the loop transfer function and tested against the actual poles. |
|
Interpolate between two orthogonal matrices so that each interpolant is orthogonal (geodesic on the orthogonal group). Then use three of these matrices as FDN feedback matrices and plot their impulse responses via |
|
Given a non-negative matrix B (e.g., measured energy flow between delay lines), find the orthogonal matrix U that minimises |
|
Statistics of the modal decomposition of a random FDN. The pole angles are almost equidistributed on the unit circle, while the residue magnitudes are spread across a large range. |
|
Demonstration of different types of scattering (FIR paraunitary) feedback matrices from |
|
Open the rendered marimo notebook. |
|
The same FDN with frequency-dependent absorption is rendered by two independent implementations and the impulse responses are compared: |
All notebooks can also be browsed in the repository’s examples directory.