Struct Ladder Filter
pub struct LadderFilter { /* private fields */ }Expand description
Native single-channel nonlinear feedback ladder. Saturator model: u=tanh(dx-ky4), four RC stages prewarped/trapezoidal. Selected modal taps share history; no implicit output normalization or sample interpolation.
Instantaneous F=u-tanh(c-lambdau) is monotone (lambda=kG^4>=0), solved on the amplitude-scaled [0,tanh(abs(c))] bracket with odd symmetry and bounded 64/32 iterations. Native equation/tanh rounding and actual staged residual are observations, not exact circuit algebra. The solve uses at most 67/35 tanh evaluations; the staged residual adds one (68/36 total). No allocation, locks or I/O, no callback deadline guarantee.
k = 0 explicitly skips feedback history; poisoned stages still return NaN. Source +/-Inf intentionally saturates with finite history; NaN/history poison propagates until reset. Finite drive overflow to infinity saturates. No universal arbitrary-modulation, overflow/headroom or alias-free claim. set_design retains trapezoidal integrator memory; replace_design resets it. Caller owns smoothing, headroom, nonlinear aliasing and denormal policy. tanh uses platform native math: bit-exact cross-platform results are not promised. State is trapezoidal integrator memory s=y+v, not voltage y; retuning retains s. Native32 low-cutoff rounding floors are qualified separately; there is no implicit precision lift or denormal flush.
Implementations§
§impl LadderFilter
impl LadderFilter
pub fn new(design: LadderDesign) -> Self
pub fn design(&self) -> LadderDesign
pub fn capacitor_state(&self) -> [f64; 4]
pub fn last_solve(&self) -> LadderSolveInfo
pub fn is_bypassed(&self) -> bool
pub fn set_bypassed(&mut self, bypassed: bool)
pub fn set_design(&mut self, design: LadderDesign)
pub fn replace_design(&mut self, design: LadderDesign)
pub fn reset(&mut self)
pub fn reset(&mut self)
Clears capacitor/observation history, retaining design and bypass policy.
pub fn snap_to_zero(&mut self)
pub fn snap_to_zero(&mut self)
Explicitly clears only strictly subnormal capacitor states. No implicit callback-boundary snap; normal and nonfinite values remain unchanged.
pub fn process_sample(&mut self, x: f64) -> LadderOutputs
pub fn process(
&mut self,
input: &[f64],
output: &mut [f64],
mode: LadderMode,
) -> Result<(), LadderError>
pub fn process( &mut self, input: &[f64], output: &mut [f64], mode: LadderMode, ) -> Result<(), LadderError>
Equal-length scalar-channel block, capped at 65536 samples. Full admission before history/output; empty preserves last solve.
pub fn process_in_place( &mut self, buffer: &mut [f64], mode: LadderMode, ) -> Result<(), LadderError>
Trait Implementations§
§impl Clone for LadderFilter
impl Clone for LadderFilter
§fn clone(&self) -> LadderFilter
fn clone(&self) -> LadderFilter
1.0.0 (const: unstable) · §fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more