Skip to content
Snippets Groups Projects
Commit d700612d authored by Henrik Tjäder's avatar Henrik Tjäder
Browse files

Added jitter and MOS calculations

parent ea220b28
No related branches found
No related tags found
No related merge requests found
......@@ -37,11 +37,13 @@ def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT):
global min_delay
global max_delay
global rt_delay_array
global jitter
min_delay = 100.
max_delay = 0.
rt_delay_array = array('f')
packet_count_rcvd = 0
cumulative_delay = 0.
jitter = 0.
try:
rcv_sock.bind(ADDR)
......@@ -144,6 +146,27 @@ def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT,
if rt_delay_array:
print('std.dev = ', np.std(rt_delay_array))
#CALCULATE JITTER
# Clear for a clean slate
jitter = 0
jitter_2 = 0
# Simple version, no weight
for rt0, rt1 in zip(rt_delay_array[:-1], rt_delay_array[1:]):
jitter_2 += np.fabs(rt0 - rt1)
jitter_2 = jitter_2 / (len(rt_delay_array) - 1)
# Version used in RFC 1889, also by iperf
for rt0, rt1 in zip(rt_delay_array[:-1], rt_delay_array[1:]):
jitter += (np.fabs(rt0 - rt1) - jitter) / 16.
#jitter = jitter / (len(rt_delay_array) - 1)
print("jitter = ", jitter)
print("jitter = ", jitter_2)
#NETWORK STABILITY BASED ON PACKET LOSS AND DELAY, VALUE 0-100
network_stability = 0
if packet_count_rcvd == 0:
......@@ -156,6 +179,26 @@ def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT,
print('avg.rtt = ', avg_packet_delay)
print('stability = ', network_stability)
# Calculating MOS
# http://en.wikipedia.org/wiki/Mean_opinion_score
#MOS Quality Impairment
#5 Excellent Imperceptible
#4 Good Perceptible but not annoying
#3 Fair Slightly annoying
#2 Poor Annoying
#1 Bad Very annoying
EffectiveLatency = avg_packet_delay + jitter * 2 + 10
if EffectiveLatency < 160:
R = 93.2 - (EffectiveLatency / 40)
else:
R = 93.2 - (EffectiveLatency - 120) / 10
# Now, let's deduct 2.5 R values per percentage of packet loss
R = R - ((packet_count_sent - packet_count_rcvd) * 2.5)
# Convert the R into an MOS value.(this is a known formula)
mos = 1 + (0.035) * R + (.000007) * R * (R-60) * (100-R)
print("MOS: ", mos)
#START THE THREADS FOR SENDER AND RECEIVER
if __name__ == "__main__":
......@@ -178,3 +221,5 @@ if __name__ == "__main__":
sender_thread.start()
while sender_thread.is_alive():
time.sleep(1)
# While testing, end after one iteration
sys.exit()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment