Skip to content

Conversation

@cboulay
Copy link
Member

@cboulay cboulay commented Jan 27, 2026

  • Replaces the non-streaming filtfilt/sosfiltfilt implementation with a two-stage CompositeProcessor: a forward causal ButterworthFilterTransformer followed by a new ButterworthBackwardFilterTransformer that buffers and applies the filter in reverse, making the zero-phase filter fully streaming-compatible
  • Adds settle_cutoff and max_pad_duration settings that compute pad length from the filter's actual impulse response settling time, replacing the old padtype/padlen parameters which relied on scipy's order-based heuristic (inadequate for filters with very low normalized frequencies, e.g. a 30 Hz lowpass at 30 kHz needs 2,292 samples to settle but scipy's heuristic gives only 15)
  • Significantly expands test coverage with 65 unit tests and 1 integration test covering pad length computation, warmup behavior, streaming chunked processing, axis position handling, zero-phase property verification, and the new settings parameters

… forward and a backward filter that operates on
@cboulay cboulay merged commit fb7d90b into dev Jan 27, 2026
14 checks passed
@cboulay cboulay deleted the udpate_zero_phase branch January 27, 2026 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants