pyFDN.assemble_fdn_core#
- pyFDN.assemble_fdn_core(*, input_gain, feedback, delays, output_gain, direct=None, post_delay=None, post_matrix=None, post_output=None)[source]#
Wire pre-built FLAMO modules into an FDN core (no FFT/iFFT wrapping).
Single source of truth for the FDN signal flow, shared by the render path (
pyFDN.dss_to_flamo()) and the training builder (pyFDN.train.trainable_from_build()). All arguments are already-built FLAMOdsp/systemmodules; this only composes them, so leaf names and topology stay identical across both callers (and match the namespyFDN.extract_build()requires).Signal flow:
input_gain -> [recursion: fF = delay -> (post_delay) fB = feedback -> (post_matrix)] -> output_gain -> (post_output)
with the direct path
directsummed in parallel when provided.The three optional filter slots are the hooks
pyFDN.process_dss()takes and anFDNBuildstores:post_delayon the delay output (shaping both the output and the feedback),post_matrixon the feedback path only,post_outputon the wet signal only.- Parameters:
input_gain (
Any) – Input gainB(namedinput_gain) and output gainC(namedoutput_gain).output_gain (
Any) – Input gainB(namedinput_gain) and output gainC(namedoutput_gain).feedback (
Any) – Feedback matrix placed on the recursion feedback branch (fB); a plainGain/Filter(render) or a parametrizedMatrix(training).delays (
Any) – Delay module on the recursion forward branch (nameddelay).direct (
Any) – Direct pathD. WhenNonethe core is the plain feedforwardSeries(noParallelwrapper) – this keepscore.feedback_loopreachable for losses such assparsity_loss. When provided the core isParallel(brA=fdn_branch, brB=direct).post_delay (
Any) – In-loop filter after the delays (namedpost_delay). Any module of input/output size N: aAttenuationFilteror a plainsos_filter_module()for attenuation, or a whole nested core such as a Schroeder allpass. Only an SOS filter here is extractable into anFDNBuild.post_matrix (
Any) – Filter on the feedback path after the feedback matrix (namedpost_matrix); the position a time-varying mixing stage occupies. Adding it names the feedback branchmixing_matrixrather than leaving the matrix bare onfB, which is wherepyFDN.extract_build()looks for it either way.post_output (
Any) – Per-output filter after the output gain (namedpost_output); typically anOutputEQ.
- Returns:
core – The FDN core, ready for
wrap_fdn_shell().- Return type: