pyFDN.first_order_absorption#

pyFDN.first_order_absorption(rt_dc, rt_ny, delays, fs, crossover_frequency=None)[source]#

Design first-order shelving absorption filters according to specified reverb time.

Each delay line gets a first-order shelving filter whose gain matches the target decay (rt_dc at DC, rt_ny at Nyquist) for its delay length, with the shelf transition at crossover_frequency.

Reference: Jot, J. M., “Proportional parametric equalizers - Application to digital reverberation and environmental audio processing”, AES 2015.

Parameters:
  • rt_dc (float) – Reverberation time in seconds at DC.

  • rt_ny (float) – Reverberation time in seconds at Nyquist.

  • delays (array-like) – Delay lengths in samples, one per channel.

  • fs (float) – Sampling rate in Hz.

  • crossover_frequency (float, optional) – Shelf crossover frequency in Hz. Defaults to fs/8, the midpoint of the warped (bilinear) frequency axis. Values above fs/5 are clamped to fs/5 since a too high crossover leads to an unstable filter (fs/4 is the limit).

Returns:

One-section per-channel SOS bank of shape (1, 6, N) (the canonical SOS bank layout); section rows are [b0, b1, b2, a0, a1, a2] (b2 = a2 = 0 for these first-order filters).

Return type:

np.ndarray