pyFDN.dss_to_pr#

pyFDN.dss_to_pr(delays, A, B, C, D, *, mode='eig', deflation_type='fullDeflation', quality_threshold=1e-10, maximum_iterations=50, refinement_tol=1e-12, reject_unstable_poles=False, svd_refine=True, symmetrize=True, verbose=False, Fs=1.0, nfft=65536, dtype=None, device=None)[source]#

Modal decomposition of an FDN from raw DSS matrices.

H(z) = C·(diag(z^m_i) A)^{-1}·B + D = Σ_k residue_k / (1 p_k z^{-1}) + D

Parameters:
  • delays (array-like of int, shape (N,)) – Per-line delays in samples.

  • A (array-like (N, N)) – Static feedback matrix.

  • B (array-like (N, n_in))

  • C (array-like (n_out, N))

  • D (array-like (n_out, n_in))

  • mode ({"eig", "roots", "eai"}, default "eig") –

    Pole-extraction algorithm.

    • "eig" — eigenvalues of the minimal state-space realization.

    • "roots" — roots of the generalized characteristic polynomial.

    • "eai" — Ehrlich-Aberth iteration in w = 1/z via FLAMO (delegates to pyFDN.translate.flamo_to_pr.flamo_to_pr()).

Return type:

tuple[ndarray, ndarray, ndarray, ndarray, dict[str, Any]]

Returns:

  • residues (ndarray (n_poles_reduced, n_out, n_in), complex)

  • poles (ndarray (n_poles_reduced,), complex)

  • direct (ndarray (n_out, n_in), complex)

  • is_conjugate (ndarray of bool (n_poles_reduced,))

  • meta (dict)