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 same three hooks, in the same three positions and under the same three names, that
pyFDN.process_fdn()takes in numpy –post_delayon the shared delay output (so it shapes both what leaves the network and what is fed back),post_matrixon the feedback path only,post_outputon the wet signal only. AnFDNBuildhas a field of each name, holding the SOS bank a hook bakes down to; a hook holding something that does not bake – a nested core, a time-varying matrix – simply has no build field to go in.- 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: