Exemplo n.º 1
0
  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
Exemplo n.º 2
0
  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!")
Exemplo n.º 3
0
  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
Exemplo n.º 4
0
  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!")
Exemplo n.º 5
0
  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!")
Exemplo n.º 6
0
    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!")
Exemplo n.º 7
0
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,