Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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