Files
gr-ieee802-11/workspace/parse.py
T
2015-11-30 07:01:05 -08:00

79 lines
1.8 KiB
Python
Executable File

#!/usr/bin/python
import glob, os, re, sys
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import scipy.stats as ss
log_info = []
table = {}
enc_table = ["BPSK 1/2", "BPSK 3/4", "QPSK 1/2",
"QPSK 3/4", "16QAM 1/2", "16QAM 3/4",
"64QAM 2/3", "64QAM 3/4"]
path = sys.argv[1]
ntrials = int(sys.argv[2])
snr_list = []
def mean_confidence_interval(data, confidence=0.95):
a = 1.0 * np.array(data)
n = len(a)
m, se = np.mean(a), ss.sem(a)
h = se * ss.t._ppf((1 + confidence)/2., n-1)
return m, h
for filename in glob.glob(os.path.join(path, "*.log")):
params = filename.split("/")[1].split("_")
print params
try:
trial = int(params[1])
npkts = int(params[2])
snr = float(params[3])
encode = int(params[4])
except AssertionError:
print "Log filename parse failed; exiting!"
sys.exit()
pdrate = sum(1 for line in open(filename))/float(npkts)
if snr not in snr_list:
snr_list.append(snr)
if encode not in table:
table[encode] = {}
if snr not in table[encode]:
table[encode][snr] = []
table[encode][snr].append(pdrate)
snr_list.sort()
for enc in sorted(table.keys()): # sort so legend labels are in order
# Check first that we got all datapoints for each trial
for snr in table[enc].keys():
try:
assert len(table[enc][snr]) == ntrials
except AssertionError:
print "You don't have enough datapoints; exiting!"
sys.exit()
y = [mean_confidence_interval(table[enc][snr]) for snr in snr_list]
# print enc_table[enc], snr_list, y
plt.errorbar(snr_list, [m for m,h in y],
yerr=[h for m,h in y],
marker='o',
label="%s" % enc_table[enc])
plt.ylabel("PDR")
plt.xlabel("SNR")
plt.title("Delivery rate vs. SNR for different encoding schemes")
plt.legend(loc="upper left")
plt.savefig(os.path.join(path,"plot.png"))
plt.show()