pyFDN.process_fdn#

pyFDN.process_fdn(input_signal, delays, A, B, C, D, *, post_delay=None, post_matrix=None, post_output=None)[source]#

Simulate the feedback delay network using block processing.

Recursion per block: delay output -> optional post-delay filter -> output gains C, and in the feedback path: absorbed delay output -> feedback matrix A -> optional post-matrix filter -> + B input. The wet signal is processed with an optional post-output filter before being added to the direct signal.

Parameters:
  • input_signal (ArrayLike) – Input of shape (num_samples,) or (num_samples, num_inputs).

  • delays (ArrayLike) – Delay lengths in samples, shape (N,).

  • A (ArrayLike) – Feedback matrix: static (N, N) or FIR polynomial (N, N, order) in z^{-1} convention.

  • B (ArrayLike) – Static input, output, and direct gains.

  • C (ArrayLike) – Static input, output, and direct gains.

  • D (ArrayLike) – Static input, output, and direct gains.

  • post_delay (Any | None) – An optional filter applied to the delay output before feedback processing. Must implement a filter method that accepts and processes the delay output. Typically per-delay-line absorption, e.g. pyFDN.td.SOSBank.

  • post_matrix (Any | None) – An optional filter applied to the feedback signal after the feedback matrix multiplication. Must implement a filter method that accepts and processes the feedback signal (e.g. pyFDN.td.TimeVaryingMatrix).

  • post_output (Any | None) – An optional filter applied to the wet signal (output signal) before it is added to the direct signal. Must implement a filter method that accepts and processes the wet signal.

Returns:

output – Shape (num_samples, num_outputs), squeezed.

Return type:

ndarray