diff --git a/klippy/extras/probe_eddy_current.py b/klippy/extras/probe_eddy_current.py index f2831fbf1..99dddad44 100644 --- a/klippy/extras/probe_eddy_current.py +++ b/klippy/extras/probe_eddy_current.py @@ -515,8 +515,8 @@ class EddyTap: sps = self._sensor_helper.get_samples_per_second() design = trigger_analog.DigitalFilter(sps, cfg_error) design.add_lowpass(25.0, 4) - # Create the derivative (sample to sample difference) post filter - self._filter_design = trigger_analog.DerivativeFilter(design) + design.add_derivative() + self._filter_design = design # Create SOS filter cmd_queue = self._trigger_analog.get_dispatch().get_command_queue() mcu = self._sensor_helper.get_mcu() diff --git a/klippy/extras/trigger_analog.py b/klippy/extras/trigger_analog.py index 71af1ea65..04ae6cf8a 100644 --- a/klippy/extras/trigger_analog.py +++ b/klippy/extras/trigger_analog.py @@ -51,6 +51,9 @@ class DigitalFilter: fs=self.sample_frequency) f = signal.tf2sos(b, a)[0] self.filter_sections.append(f) + def add_derivative(self): + # Sample to sample difference (derivative) as stage in SOS filter + self.filter_sections.append((1., -1., 0., 1., 0., 0.)) def setup_initial_state(self): if not self.filter_sections: return @@ -66,22 +69,6 @@ class DigitalFilter: return [[0., 0.]] * len(self.filter_sections) return self.initial_state -# Produce sample to sample difference (derivative) of a DigitalFilter -class DerivativeFilter: - def __init__(self, main_filter): - self._main_filter = main_filter - - def get_main_filter(self): - return self._main_filter - - def get_filter_sections(self): - s = list(self._main_filter.get_filter_sections()) - return s + [(1., -1., 0., 1., 0., 0.)] - - def get_initial_state(self): - s = list(self._main_filter.get_initial_state()) - return s + [(-1., 0.)] - # Control an `sos_filter` object on the MCU class MCU_SosFilter: # max_sections should be the largest number of sections you expect