pyFDN.dss_to_flamo#

pyFDN.dss_to_flamo(A, B, C, D, m, fs, nfft=65536, device=None, *, shell=True, dtype=None, post_delay=None, post_matrix=None, post_output=None)[source]#

Build a FLAMO model from delay state-space (A, B, C, D, m).

Signal flow: input -> B -> [recursion: delay -> (post_delay); fB = A -> (post_matrix)] -> C -> (post_output) -> output, with direct path D summed in parallel.

Parameters:
  • A (ndarray) – Feedback matrix. A 3-D array is a polynomial (FIR) matrix in z^{-1} convention (e.g. paraunitary) and is placed as a FLAMO Filter module.

  • B (ndarray) – Input gain.

  • C (ndarray) – Output gain.

  • D (ndarray) – Direct gain.

  • m (ndarray) – Delay lengths in samples (one per delay line).

  • fs (float) – Sampling rate in Hz.

  • nfft (int) – FFT size for FLAMO (default 2**16).

  • device (Any) – Device; default is cuda if available else cpu.

  • shell (bool) – If True (default), wrap the core in a Shell with FFT/iFFT. Use pyFDN.flamo_time_response() to obtain a NumPy impulse response. If False, return only the core (e.g. for use as post_delay in another dss_to_flamo).

  • dtype (Any) – Optional dtype for FLAMO delay/gain/filter modules (e.g., torch.float64). If None, wrapper defaults are used.

  • post_delay (Any) – In-loop filter applied to the delay output, inside the recursion – the same hook pyFDN.process_fdn() calls post_delay. An (n_sections, 6, N) SOS bank, a FLAMO module of input/output size N (e.g. a Schroeder allpass core from shell=False), or a sequence of both applied in order. See pyFDN.hook_module().

  • post_matrix (Any) – Filter applied to the feedback path after A.

  • post_output (Any) – Per-output filter applied to the wet signal after C; an (n_sections, 6, num_out) SOS bank, or a module.

Returns:

model – If shell=True, FLAMO Shell. Use pyFDN.flamo_time_response() for a NumPy impulse response. If shell=False, the core module (same I/O as B.shape[1] / C.shape[0]).

Return type:

Any