def test_loss_ratio_gap_packets(self):
        packets = []
        for i in range(10):
            # Only id and arrival time matter here
            packet = Packet(i, None, None)
            packet.arrival_time_ms = 10.0 * i
            packets.append(packet)

        for i in range(20, 30):
            # Only id and arrival time matter here
            packet = Packet(i, None, None)
            packet.arrival_time_ms = 10.0 * i 
            packets.append(packet)

        # Short time windows won't trigger loss computation.
        for t in range(0, 200, 10):
            self.assertEqual(loss_ratio(packets, t), 0.0)

        for i in range(10):
            time_window_ms = 200 + 10*i
            loss = 1.0 - float(11 + i)/(21 + i)
            self.assertEqual(loss_ratio(packets, time_window_ms), loss)
    def test_loss_ratio_gap_packets(self):
        packets = []
        for i in range(10):
            # Only id and arrival time matter here
            packet = Packet(i, None, None)
            packet.arrival_time_ms = 10.0 * i
            packets.append(packet)

        for i in range(20, 30):
            # Only id and arrival time matter here
            packet = Packet(i, None, None)
            packet.arrival_time_ms = 10.0 * i
            packets.append(packet)

        # Short time windows won't trigger loss computation.
        for t in range(0, 200, 10):
            self.assertEqual(loss_ratio(packets, t), 0.0)

        for i in range(10):
            time_window_ms = 200 + 10 * i
            loss = 1.0 - float(11 + i) / (21 + i)
            self.assertEqual(loss_ratio(packets, time_window_ms), loss)
Example #3
0
 def receive_packet(self, packet):
     self.time_ms.append(packet.arrival_time_ms)
     self.packets.append(packet)
     # Use delay as a signal.
     # 1) Subtract Baseline.
     # 2) Apply Median filter.
     # 3) Apply Exponential Smoothing Filter.
     # 4) Non-linear Estimate queuing delay warping.
     delay_ms = packet.arrival_time_ms - packet.send_time_ms
     self.baseline_delay_ms = min(self.baseline_delay_ms, delay_ms)
     self.delay_signals_ms.append(delay_ms - self.baseline_delay_ms)
     self.median_filtered_delays_ms.append(self.__median_filter())
     self.exp_smoothed_delays_ms.append(self.__exp_smoothing_filter())
     self.est_queuing_delays_ms.append(self.__non_linear_warping())
     self.loss_ratios.append(loss_ratio(self.packets, NadaReceiver.LOSS_RATIO_TIME_WINDOW_MS))
     self.receiving_rates_kbps.append(receiving_rate_kbps(self.packets, NadaReceiver.RECEIVING_RATE_TIME_WINDOW_MS))
     self.congestion_signals_ms.append(self.est_queuing_delays_ms[-1] + NadaReceiver.LOSS_PENALTY_MS * self.loss_ratios[-1])
 def test_loss_ratio_single_packet(self):
     # Only id and arrival time matter here
     packet = Packet(1, None, None)
     packet.arrival_time_ms = 10.0
     self.assertEqual(loss_ratio([packet], 0.0), 0.0)
     self.assertEqual(loss_ratio([packet], 50.0), 0.0)
 def test_loss_ratio_no_packets(self):
     self.assertEqual(loss_ratio(None, 0.0), 0.0)
     self.assertEqual(loss_ratio(None, 50.0), 0.0)
     self.assertEqual(loss_ratio([], 0.0), 0.0)
     self.assertEqual(loss_ratio([], 50.0), 0.0)
 def test_loss_ratio_single_packet(self):
     # Only id and arrival time matter here
     packet = Packet(1, None, None)
     packet.arrival_time_ms = 10.0
     self.assertEqual(loss_ratio([packet], 0.0), 0.0)
     self.assertEqual(loss_ratio([packet], 50.0), 0.0)
 def test_loss_ratio_no_packets(self):
     self.assertEqual(loss_ratio(None, 0.0), 0.0)
     self.assertEqual(loss_ratio(None, 50.0), 0.0)
     self.assertEqual(loss_ratio([], 0.0), 0.0)
     self.assertEqual(loss_ratio([], 50.0), 0.0)