@@ -41,6 +41,7 @@ class AdditionalPointAlgorithm(enum.Enum):
4141 """ Available additional point algorithms for the decimate process """
4242 high_second_derivative = 1
4343 distance_minimization = 2
44+ evenly_intermediate = 3
4445
4546
4647 @staticmethod
@@ -326,6 +327,31 @@ def get_edge_points(self, signal: list, base_points: list, threshold: float = 25
326327 return edge_points
327328
328329
330+ def get_evenly_intermediate_points (self , signal : list , base_points : list ) -> list :
331+ """ Get an aditional evenly intermediated point between 2 base points
332+
333+ Args:
334+ signal (list): the predicted signal
335+ base_points (list): current base points
336+
337+ Returns:
338+ list: list with index of the evenly intermediated points (additional points)
339+ """
340+ if len (base_points ) < 2 :
341+ return []
342+
343+ base_points .sort ()
344+ additional_points = []
345+ for i in range (len (base_points ) - 1 ):
346+ diff = base_points [i + 1 ] - base_points [i ]
347+ if diff < 3 :
348+ continue
349+
350+ additional_points .append (base_points [i ] + round (diff / 2 ))
351+
352+ self .logger .info ("Found {} evenly intermediate point candidates" .format (len (additional_points )))
353+ return additional_points
354+
329355
330356 def get_local_min_max_points (self , signal : list , filter_len : int = 1 ) -> list :
331357 """ Get the local max and min positions in given signal
@@ -579,6 +605,8 @@ def decimate(self,
579605 additional_indexes = self .get_high_second_derivative_points (signal , alpha = self .params .high_second_derivative_points_threshold )
580606 elif algo == self .AdditionalPointAlgorithm .distance_minimization :
581607 additional_indexes = self .get_edge_points (signal , decimated_indexes , threshold = self .params .distance_minimization_threshold )
608+ elif algo == self .AdditionalPointAlgorithm .evenly_intermediate :
609+ additional_indexes = self .get_evenly_intermediate_points (signal , decimated_indexes )
582610 else :
583611 raise NotImplementedError ("Selected Additional Points Algorithm is not implemented" )
584612
0 commit comments