def evaluateDataSet(strLabel, strWorkingDir, lsFilePath, dRectDuration=2.0, dSMDuration=2.0, dSCDuration=0.1, eng=None, strCoder=None, n=23, k=12, m=1, r=3, nInterleaving=25, bSourceEncoding=True, bReconciliation=True, bOutputData=False, lsOutputData=None, hKeyOutput = None): """ Given the parameter values, this function evaluates performance on a specific data set. """ lsResult = [] for fn in lsFilePath: lsDataResult = sd.evaluateSingleData(strWorkingDir, fn, dRectDuration = dRectDuration, dSCDuration = dSCDuration, dSMDuration = dSMDuration, eng=eng, strCoder=strCoder, n=n, k=k, m=m, r=r, nInterleaving=nInterleaving, bSourceEncoding=bSourceEncoding, bReconciliation=bReconciliation, bOutputaData = bOutputData, lsOutputData = lsOutputData, hKeyOutput = hKeyOutput) lsResult.extend(lsDataResult) dfResult = pd.DataFrame(lsResult) srMean = dfResult.mean() srMean.name = strLabel+"_mean" srStd = dfResult.std() srStd.name = strLabel+"_std" return srMean, srStd, dfResult
def evaluateShapeCodingParams(eng): """ This function evaluate the parameter of shape coding """ # select data strWorkingDir = "../../data/evaluation/BER/" strFileNamePattern= None lsFilePath = cf.getFileList(strWorkingDir, strFileNamePattern) # params lsSCWnd = np.arange(0.05, 0.3, 0.05) dRectWnd = 2.0 dSMWnd = 2.0 strCoder = ecc.CODER_GOLAY m = 1 n = 23 k = 12 r = 2 nInterleaving = 25 print "%s: n=%d, k=%d, m=%d, r=%d, interleave=%d" % \ (strCoder, n, k, m, r, nInterleaving) # test lsResult = [] for dCodingWnd in lsSCWnd: print "evalauting SCWnd=%.2f..." % dCodingWnd for fn in lsFilePath: lsDataResult = sd.evaluateSingleData(strWorkingDir, fn, dRectDuration = dRectWnd, dSMDurction = dSMWnd, dSCDuration = dCodingWnd, eng=eng, strCoder=strCoder, n=n, k=k, m=m, r=r, nInterleaving=nInterleaving) lsResult.extend(lsDataResult) dfResult = pd.DataFrame(lsResult) gp = dfResult.groupby(dfResult[sd.WND_SC]) dfMean = gp.mean() return dfMean, dfResult
def evaluateReconciliationParams(eng): """ Evaluate the effect of reconciliation parameters, i.e., m, k, on system performance Paramters: --------- lsFileList: list of data files eng: instance of matlab engine strCoder: name of coder lsM: the possible values of m lsR: the possible values of r Returns: a pandas.DataFrame consisted of all performance result """ # select data strWorkingDir = "../../data/evaluation/reconciliation/" strFileNamePattern= None lsFilePath = cf.getFileList(strWorkingDir, strFileNamePattern) # parameter strCoder = ecc.CODER_RS lsM = [4,] lsR = range(1, 8) dRectWnd = 2.0 dSMWnd = 2.0 dSCWnd = 0.15 # evaluate lsResult = [] if (strCoder == ecc.CODER_RS): for m in lsM: for r in lsR: n = 2**m - 1 k = n - 2*r if(k<1 or n*m>=500): break print "testing m=%d, r=%d..." % (m, r) for fn in lsFilePath: lsDataResult = sd.evaluateSingleData(strWorkingDir, fn, dRectDuration=dRectWnd, dSMDuration=dSMWnd, dSCDuration=dSCWnd, eng=eng, strCoder=strCoder, n=n, k=k, m=m, r=r) lsResult.extend(lsDataResult) elif strCoder == ecc.CODER_GOLAY: n = 23 k = 12 m = 1 r = 2 for fn in lsFilePath: lsDataResult = sd.evaluateSingleData(strWorkingDir, fn, dRectDuration=dRectWnd, dSMDuration=dSMWnd, dSCDuration=dSCWnd, eng=eng, strCoder=strCoder, n=n, k=k, m=m, r=r) lsResult.extend(lsDataResult) # result dfResult = pd.DataFrame(lsResult) dcMatchingRate = {} for r in lsR: nMatchedKey = (dfResult[sd.ERR_USER_EC][ (dfResult[sd.R]==r) & \ (dfResult[sd.ERR_USER_EC]==0) ]).count() nTotalKey = dfResult[sd.ERR_USER_EC][dfResult[sd.R]==r].count() dMatchingRate = nMatchedKey * 1.0 / nTotalKey dcMatchingRate[r] = dMatchingRate srMatchingRate = pd.Series(dcMatchingRate) return dfSummary, dfResult, srMatchingRate