def estimate_frequency(self, always_query_sample_rate): """Estimates frequency and updates data. Guesses the most probable frequency by looking at changes in timestamps (RFC 3550 section 5.1), calculates clock drifts and sending time of packets. Updates `self.data_points` with changes in delay and send time. """ delta_timestamp = (self.data_points[-1].timestamp - self.data_points[0].timestamp) delta_arr_timestamp = float((self.data_points[-1].arrival_timestamp_ms - self.data_points[0].arrival_timestamp_ms)) freq_est = delta_timestamp / delta_arr_timestamp freq_vec = [8, 16, 32, 48, 90] freq = None for f in freq_vec: if abs((freq_est - f) / f) < 0.05: freq = f print("Estimated frequency: {:.3f}kHz".format(freq_est)) if freq is None or always_query_sample_rate: if not always_query_sample_rate: print ("Frequency could not be guessed.", end=" ") freq = int(misc.get_input("Input frequency (in kHz)> ")) else: print("Guessed frequency: {}kHz".format(freq)) for point in self.data_points: point.real_send_time_ms = (point.timestamp - self.data_points[0].timestamp) / freq point.delay = point.arrival_timestamp_ms -point.real_send_time_ms
def ChooseSsrc(self): """Queries user for SSRC.""" if len(self.ssrc_frequencies) == 1: chosen_ssrc = self.ssrc_frequencies.keys()[0] self.PrintSsrcInfo("", chosen_ssrc) return chosen_ssrc ssrc_is_incoming = misc.SsrcDirections(self.data_points) incoming = [ssrc for ssrc in ssrc_is_incoming if ssrc_is_incoming[ssrc]] outgoing = [ssrc for ssrc in ssrc_is_incoming if not ssrc_is_incoming[ssrc]] print("\nIncoming:\n") for (i, ssrc) in enumerate(incoming): self.PrintSsrcInfo(i, ssrc) print("\nOutgoing:\n") for (i, ssrc) in enumerate(outgoing): self.PrintSsrcInfo(i + len(incoming), ssrc) while True: chosen_index = int(misc.get_input("choose one> ")) if 0 <= chosen_index < len(self.ssrc_frequencies): return (incoming + outgoing)[chosen_index] else: print("Invalid index!")
def EstimateFrequency(self, always_query_sample_rate): """Estimates frequency and updates data. Guesses the most probable frequency by looking at changes in timestamps (RFC 3550 section 5.1), calculates clock drifts and sending time of packets. Updates `self.data_points` with changes in delay and send time. """ delta_timestamp = (self.data_points[-1].timestamp - self.data_points[0].timestamp) delta_arr_timestamp = float((self.data_points[-1].arrival_timestamp_ms - self.data_points[0].arrival_timestamp_ms)) freq_est = delta_timestamp / delta_arr_timestamp freq_vec = [8, 16, 32, 48, 90] freq = None for f in freq_vec: if abs((freq_est - f) / f) < 0.05: freq = f print("Estimated frequency: {:.3f}kHz".format(freq_est)) if freq is None or always_query_sample_rate: if not always_query_sample_rate: print ("Frequency could not be guessed.", end=" ") freq = int(misc.get_input("Input frequency (in kHz)> ")) else: print("Guessed frequency: {}kHz".format(freq)) for point in self.data_points: point.real_send_time_ms = (point.timestamp - self.data_points[0].timestamp) / freq point.delay = point.arrival_timestamp_ms - point.real_send_time_ms
def choose_ssrc(self): """Queries user for SSRC.""" if len(self.ssrc_frequencies) == 1: chosen_ssrc = self.ssrc_frequencies[0][-1] self.print_ssrc_info("", chosen_ssrc) return chosen_ssrc ssrc_is_incoming = misc.ssrc_directions(self.data_points) incoming = [ssrc for ssrc in ssrc_is_incoming if ssrc_is_incoming[ssrc]] outgoing = [ssrc for ssrc in ssrc_is_incoming if not ssrc_is_incoming[ssrc]] print("\nIncoming:\n") for (i, ssrc) in enumerate(incoming): self.print_ssrc_info(i, ssrc) print("\nOutgoing:\n") for (i, ssrc) in enumerate(outgoing): self.print_ssrc_info(i + len(incoming), ssrc) while True: chosen_index = int(misc.get_input("choose one> ")) if 0 <= chosen_index < len(self.ssrc_frequencies): return (incoming + outgoing)[chosen_index] else: print("Invalid index!")
def choose_ssrc(self): """Queries user for SSRC.""" if len(self.ssrc_frequencies) == 1: chosen_ssrc = self.ssrc_frequencies[0][-1] self.print_ssrc_info("", chosen_ssrc) return chosen_ssrc for (i, ssrc) in enumerate(self.ssrc_frequencies): self.print_ssrc_info(i, ssrc) while True: chosen_index = int(misc.get_input("choose one> ")) if 0 <= chosen_index < len(self.ssrc_frequencies): return list(self.ssrc_frequencies)[chosen_index] else: print("Invalid index!")
if __name__ == '__main__': import misc args = misc.read_args() EXAMPLE = args.example INPUT_PROBLEM = args.console_input GUI = not args.nogui GUI_FAST = args.fast GUI_SHOW_STEPS = args.show_steps ARC_CONSISTENCY = args.arc_consistency FORWARD_CHECK = (True if ARC_CONSISTENCY else args.forward_check) if INPUT_PROBLEM: problem = np.array(misc.get_input(), dtype=np.int32) else: problem = misc.get_example(EXAMPLE) if GUI: from GUI import start_GUI params = { 'FORWARD_CHECK': FORWARD_CHECK, 'ARC_CONSISTENCY': ARC_CONSISTENCY, 'SHOW_STEPS': GUI_SHOW_STEPS, 'FAST': GUI_FAST } start_GUI(problem, **params) else: start = time() solutions = solve(problem,