def TransformSignal(self): # Как должна выглядеть оптимизированная # Трапеция, если все времёна != 0 y_optimized = [ None, self.SignalData.HighLevelFrequency, None, # Повторяющаяся точка на плато self.SignalData.LowLevelFrequency, None, None ] if self.SignalData.PlateauTime == 0: del y_optimized[2] if self.SignalData.StartTime == 0: del y_optimized[0] if self.SignalData.EndTime == 0: del y_optimized[-1] point_arr = self.SignalData.transformed_point_array if len(self.SignalData.point_array) >= len(y_optimized): for i in range (len(y_optimized)): if y_optimized[i] is None: p = Point(x=self.SignalData.point_array[i].x, y=y_optimized[i], to_send=False) else: p = Point(x=self.SignalData.point_array[i].x, y=y_optimized[i], to_send=True) point_arr.append(p)
def get_point_array(self): res = [] X_arr = self.get_X_arr() # TODO: Дублируемый код с EdgeSignal. Они оба наследуются модели, поэтому часть методов сделать абстрактными (например, get_X_arr, get_Y_arr) Y_arr = self.get_Y_arr() for x, y in zip(X_arr, Y_arr): res.append(Point(x=x, y=y, to_send=True)) return res
def get_point_array(self): res = [] X_arr = self.get_X_arr() Y_arr = self.get_Y_arr() for x, y in zip(X_arr, Y_arr): res.append(Point(x=x, y=y, to_send=True)) return res
def TestTimer(self): t0 = time.time() if not self.SendingStopped: current_point = self.current_point self.tasks_queue.put( Point(x=current_point.x, y=current_point.y, to_send=current_point.to_send)) self.CommandExecutionTime = time.time() - t0 self.FunctionWasCalled = True
def TransformSignal(self): # В функции UpdateSignalData мы создали # начальный сигнал, который записан в SignalData.point_array # надо его оптимизировать - какие точки отправлять, а какие нет point_arr = self.SignalData.point_array transformed_point_arr = self.SignalData.transformed_point_array points_len = len(point_arr) for i in range(points_len): if i == points_len - 1: # Первую и последнюю точки отправлять не надо p = Point(x=point_arr[i].x, y=point_arr[i].y, to_send=False) else: # Структура сигнала - набор "полочек", плато # В начале каждой полочки (чётный i-индекс) надо задавать частоту if i % 2 == 0: # Чётный индекс, по нему отправка значения p = Point(x=point_arr[i].x, y=point_arr[i].y, to_send=True) else: p = Point(x=point_arr[i].x, y=point_arr[i].y, to_send=False) transformed_point_arr.append(p)
def extend_edge_points(list_x, list_y, to_send_list): pts_arr = [] for x, y, to_send in zip(list_x, list_y, to_send_list): point = Point(x=x, y=y, to_send=to_send) pts_arr.append(point) SignalData.point_array_with_requests.extend(pts_arr)