trigger_analog: Merge DerivativeFilter into DigitalFilter

Replace the DerivativeFilter() class with a new add_derivative()
method in DigitalFilter() class.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2026-04-04 19:49:32 -04:00
parent f05c66cb9e
commit 28c236df46
2 changed files with 5 additions and 18 deletions

View File

@@ -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()

View File

@@ -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