pyFDN.homogeneous_allpass_fdn#

pyFDN.homogeneous_allpass_fdn(G, X, *, verbose=False, tol=1e-12)[source]#

Generate allpass FDN with homogeneous decay: V = [A,b;c,d] uniallpass, A = U @ G.

Assumptions (as in the Cauchy/CORDIC-style construction you are using):
  • G is diagonal (N,N), real

  • X is diagonal (N,N), real, positive

  • Define R = G^2 X (diagonal). Build a Cauchy-like K_{ij} = 1/(p_i - r_j), with p = diag(X), r = diag(R)

  • Recover rank-1 factors beta, alpha such that

    inv(K) = diag(beta) @ K.T @ diag(alpha)

    and then set

    U = diag(sqrt(beta)) @ K @ diag(sqrt(alpha))

    (up to global sign conventions)

Return type:

tuple[ndarray, ndarray, ndarray, ndarray, ndarray]

Returns:

  • A ((N, N) ndarray)

  • b ((N, 1) ndarray)

  • c ((1, N) ndarray)

  • d ((1, 1) ndarray)

  • U ((N, N) ndarray)