Skip to main content
Ctrl+K
pyFDN - Home pyFDN - Home
  • Overview
  • Installation
  • Usage
  • Examples Gallery
  • API Reference
    • pyFDN
    • Contributing
    • Credits
    • History
  • GitHub
  • Overview
  • Installation
  • Usage
  • Examples Gallery
  • API Reference
  • pyFDN
  • Contributing
  • Credits
  • History
  • GitHub
  • Examples Gallery

Examples Gallery#

Rendered Marimo notebooks demonstrating pyFDN. The gallery is generated automatically from every example_*.py file under examples/.

Getting Started#

process_fdn — Pure DSS Simulation

Demonstrates pyFDN.process_fdn for time-domain simulation of a feedback delay network with static matrices. A dry audio signal is run through the FDN to produce reverberation.

Vanilla FDN (FLAMO)

Build a vanilla FDN with pyFDN.dss_to_flamo, optionally alter delays and feedforward (e.g. diagonal gain, no absorption), plot IRs, and run a dry signal through the model.

Absorption & Filters#

Absorption GEQ in an FDN

Demonstrates pyFDN.absorption_geq: frequency-dependent absorption designed as a 10-band graphic EQ (11 biquad sections) targeting a given reverberation time curve.

Converting a room impulse response into an FDN

Estimates the frequency-dependent decay of a measured room impulse response and designs an FDN to match it:

Translation Examples#

Delay state-space to state-space

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.

Delay state-space to transfer function

Convert the delay state-space form of an FDN into matrix transfer function form (dss_to_tf). Verify by comparing the impulse response from the TF with the one from direct delay state-space simulation (dss_to_impz).

DSS→PR example

Uses dss_to_pr with modes eig, roots (pure-NumPy pole finding) and eai (Ehrlich–Aberth iteration in w = 1/z via FLAMO). Compares the time-domain IR from dss_to_impz with the modal reconstruction from each mode.

FLAMO→PR (Notebook)

In-depth math documentation of the refinement fix, with an SOS filter in the loop and plotting.

Allpass FDN Examples#

Allpass but not uniallpass FDN

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).

Allpass FDN completion

For a given feedback matrix A, the goal is to construct b, c, and d such that the FDN is uniallpass.

Allpass FDN embedded in a larger FDN

Single input, stereo output. The signal flow is:

FDN with Schroeder allpass filters in the loop

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).

Gardner’s Nested Allpass FDN

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).

Homogeneous allpass FDN (MIMO)

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.

Homogeneous allpass FDN (SISO)

Example for an allpass FDN with homogeneous decay so that all poles have the same decay rate.

Poletti’s Allpass FDN (MIMO)

Example for Poletti’s unitary reverberator: a multi-input multi-output (MIMO) allpass feedback delay network with reduced colouration.

Schroeder’s Series Allpass FDN

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#

Coupled Rooms FDN Example

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.

Scattering Delay Network (SDN) Demo

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#

Colorless FDN

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.

Colorless FDN, trained in-notebook

The companion to Colorless FDN, which loads pre-optimized parameters from .mat files. Here we run the optimization ourselves with pyFDN’s training API, following “Differentiable Feedback Delay Network for Colorless Reverberation”, Dal Santo, Prawda, Schlecht, Välimäki, DAFx23 (and its “tiny colorless FDN” follow-up):

Decorrelation in feedback delay networks

Analyses the decorrelation properties of an FDN with a velvet-noise scattering feedback matrix.

Denser Reverberation with Delay Feedback Matrix

This example compares three FDN topologies and their echo density (Abel & Huang 2006):

FDN design tradeoff

FDN design typically needs to balance modal and echo density with computational complexity:

FDN eigenvectors (mode shapes)

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$.

FDN Gallery

Overview of feedback matrices and full FDN systems available in pyFDN.

FDN with spread modal decay

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).

Frequency-dependent pole boundaries

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

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 pyFDN.dss2impz.

Nearest Sign-Agnostic Orthogonal Matrix

Given a non-negative matrix B (e.g., measured energy flow between delay lines), find the orthogonal matrix U that minimises ‖B − |U|‖_F where |·| is element-wise absolute value.

Random FDN statistics

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.

Scattering feedback matrices

Demonstration of different types of scattering (FIR paraunitary) feedback matrices from filter_matrix_gallery:

Time Varying FDN

Open the rendered marimo notebook.

Time-domain FDN vs FLAMO with GEQ absorption

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.

previous

Usage

next

API Reference

On this page
  • Getting Started
  • Absorption & Filters
  • Translation Examples
  • Allpass FDN Examples
  • Special FDNs
  • FDN Design & Analysis

© Copyright 2026, Artificial Audio Lab.

Created using Sphinx 9.0.4.

Built with the PyData Sphinx Theme 0.19.0.