@@ -20,6 +20,7 @@ class SignalParameter:
2020 distance_minimization_threshold : float = float (HYPERPARAMETER ['signal' ]['distance_minimization_threshold' ])
2121 high_second_derivative_points_threshold : float = float (HYPERPARAMETER ['signal' ]['high_second_derivative_points_threshold' ])
2222 direction_change_filter_len : int = int (HYPERPARAMETER ['signal' ]['direction_change_filter_len' ])
23+ additional_points_repetitions : int = int (HYPERPARAMETER ['signal' ]['additional_points_repetitions' ])
2324
2425
2526class Signal :
@@ -570,16 +571,23 @@ def decimate(self,
570571 else :
571572 raise NotImplementedError ("Selected Base Point Algorithm is not implemented" )
572573
573- for algo in additional_points_algorithms :
574- if algo == self .AdditionalPointAlgorithm .high_second_derivative :
575- additional_indexes = self .get_high_second_derivative_points (signal , alpha = self .params .high_second_derivative_points_threshold )
576- elif algo == self .AdditionalPointAlgorithm .distance_minimization :
577- additional_indexes = self .get_edge_points (signal , decimated_indexes , threshold = self .params .distance_minimization_threshold )
578- else :
579- raise NotImplementedError ("Selected Additional Points Algorithm is not implemented" )
574+ for run_idx in range (self .params .additional_points_repetitions ):
575+ self .logger .info ("Run Additional Points Algorithms #%d" , run_idx + 1 )
576+ len_before_merge = len (decimated_indexes )
577+ for algo in additional_points_algorithms :
578+ if algo == self .AdditionalPointAlgorithm .high_second_derivative :
579+ additional_indexes = self .get_high_second_derivative_points (signal , alpha = self .params .high_second_derivative_points_threshold )
580+ elif algo == self .AdditionalPointAlgorithm .distance_minimization :
581+ additional_indexes = self .get_edge_points (signal , decimated_indexes , threshold = self .params .distance_minimization_threshold )
582+ else :
583+ raise NotImplementedError ("Selected Additional Points Algorithm is not implemented" )
584+
585+ if len (additional_indexes ) > 0 :
586+ decimated_indexes = self .merge_points (signal , decimated_indexes , additional_indexes )
580587
581- if len (additional_indexes ) > 0 :
582- decimated_indexes = self .merge_points (signal , decimated_indexes , additional_indexes )
588+ if len_before_merge >= len (decimated_indexes ):
589+ self .logger .info ("Additional Points Early Stop" )
590+ break
583591
584592 if len (decimated_indexes ) == 0 and len (signal ) > 100 :
585593 self .logger .info ("Insert start and end point" )
0 commit comments