コード例 #1
0
def rodar(patterns, radical, sinais, occupancy, lock, metodos, load=None):
    u = Utiliters()
    info = u.setup_logger('information', radical + 'info.log')
    startedI = datetime.now()
    print('Started ROC generate for occupancy %d at  %s' %
          (occupancy, startedI.strftime("%H:%M:%S %d/%m/%Y")))
    info.info('Started ROC generate for occupancy %d' % (occupancy))
    algo = Algorithms()
    gerador = Signal()
    matrizes = Matrizes()
    matrix = matrizes.matrix()
    samples = 1820

    for pattern in patterns:
        if load is None:
            data = panda.DataFrame([])
            nome = radical + pattern + '_' + str(occupancy) + '.csv'
        else:
            nome = load + pattern + '_' + str(occupancy) + '.csv'
            data = panda.read_csv(nome)

        bunch = pattern.rsplit('b', 1)
        empty = bunch[1].rsplit('e', 1)
        b = int(bunch[0])
        e = int(empty[0])
        bwindow = b + 6
        window = b + e
        halfA = e - int(math.ceil(e / 2))
        halfCd = int(math.ceil((bwindow - window) / 2))
        halfCe = int(bwindow - window - halfCd)
        if halfCd > 0:
            fillCd = np.zeros(halfCd)
        else:
            fillCd = np.arange(0)
        if halfCe > 0:
            fillCe = np.zeros(halfCe)
        else:
            fillCe = np.arange(0)
        fillAd = np.zeros(halfA)
        fillAe = np.zeros(e - halfA)
        fill = [fillAd, fillAe, fillCd, fillCe]
        H, A, B = matrizes.generate(b)
        h = matrix[0:7, 5]
        try:
            signalT = np.genfromtxt(sinais + 'signalT_' + pattern + '_' +
                                    str(occupancy) + '.csv',
                                    delimiter=',')
            signalN = np.genfromtxt(sinais + 'signalN_' + pattern + '_' +
                                    str(occupancy) + '.csv',
                                    delimiter=',')
            signalTf = np.genfromtxt(sinais + 'fir/signalT_' + pattern + '_' +
                                     str(occupancy) + '.csv',
                                     delimiter=',')
            signalNf = np.genfromtxt(sinais + 'fir/signalN_' + pattern + '_' +
                                     str(occupancy) + '.csv',
                                     delimiter=',')
        except:
            print('Error get saved signals')
            signalT, signalN, signalTf, signalNf = u.sgen(
                pattern, samples, b, fillAd, fillAe, matrix, sinais)
        const = {
            'iterations': 331,
            'occupancy': occupancy,
            'pattern': pattern,
            'signalT': signalT,
            'signalN': signalN
        }
        opt = {'samples': samples}
        nnzST = np.count_nonzero(signalT)
        nzST = len(signalT) - nnzST
        pike = int(np.max(signalN) + 1)

        if ('FDIP' in metodos) or ('MF' in metodos):
            started = datetime.now()
            print('Started ROC generate for old with occupancy %d at  %s' %
                  (occupancy, started.strftime("%H:%M:%S %d/%m/%Y")))
            info.info('Started ROC generate for old with occupancy %d' %
                      (occupancy))
            metodo = 'FDIP'
            if metodo in metodos:
                const['metodo'] = metodo
                constf = const
                constf['signalNf'] = signalNf
                constf['signalTf'] = signalTf
                roc = gerador.roc(algo.getRMSfloat(constf)['signal'], signalT)
                roc = roc.rename(
                    columns={
                        s: metodo + ':' + str(occupancy) + ':' + s
                        for s in list(roc.columns.values)
                    })
                data = panda.concat([data, roc], axis=1, sort=False)
                with lock:
                    data.to_csv(nome, index=False)

            metodo = 'MF'
            if metodo in metodos:
                signalMf, roc = algo.MatchedFw_roc(signalN, h, samples, b, e,
                                                   fill, signalT)
                roc = roc.rename(
                    columns={
                        s: 'MF:' + str(occupancy) + ':' + s
                        for s in list(roc.columns.values)
                    })
                data = panda.concat([data, roc], axis=1, sort=False)
                with lock:
                    data.to_csv(nome, index=False)

            ended = datetime.now()
            print(
                'Ended ROC generate for old with occupancy %d at  %s after %s'
                % (occupancy, ended.strftime("%H:%M:%S %d/%m/%Y"),
                   u.totalTime(started)))
            info.info('Ended ROC generate for old with occupancy %d after %s' %
                      (occupancy, u.totalTime(started)))

        if (' MF ' in metodos) or ('OMP ' in metodos) or ('LS-OMP' in metodos):
            started = datetime.now()
            print('Started ROC generate for Greedy with occupancy %d at  %s' %
                  (occupancy, started.strftime("%H:%M:%S %d/%m/%Y")))
            info.info('Started ROC generate for Greedy with occupancy %d' %
                      (occupancy))

            metodo = ' MP '
            if metodo in metodos:
                threshold, pdr, far = 0, 5, 5
                res = []
                while (float('{:.2f}'.format(pdr)) > 0.01) or (float(
                        '{:.2f}'.format(far)) > 0.01):
                    faA, pdA = 0, 0
                    signalA = np.zeros(window * samples)
                    for i in range(samples):
                        step = (i * window)
                        paso = step + window
                        if (e > 6):
                            paso = paso - (e - 6)
                        signalTw = np.concatenate(
                            (fillCd, signalT[step:paso], fillCe))
                        signalSw = np.concatenate(
                            (fillCd, signalN[step:paso], fillCe))

                        step += halfA
                        paso = step + b

                        x, fa, pd = algo.MP_roc(threshold, signalSw, signalTw,
                                                b, H)
                        signalA[step:paso] = x
                        faA += fa
                        pdA += pd
                    far = (faA / nzST)
                    pdr = (pdA / nnzST)
                    tmp = '%d,%.6f,%.6f,%.6f' % (
                        threshold, gerador.rms(signalA - signalT), far, pdr)
                    if threshold < pike:
                        threshold += 1
                    else:
                        if threshold == pike:
                            threshold = math.ceil(pike / 100) * 100
                        else:
                            threshold += 100
                    res.append([float(s) for s in tmp.split(',')])
                roc = panda.DataFrame(
                    res,
                    columns=[
                        'MP:' + str(occupancy) + ':threshold',
                        'MP:' + str(occupancy) + ':RMS',
                        'MP:' + str(occupancy) + ':FA',
                        'MP:' + str(occupancy) + ':DP'
                    ])

                data = panda.concat([data, roc], axis=1, sort=False)
                with lock:
                    data.to_csv(nome, index=False)

            metodo = 'OMP '
            if metodo in metodos:
                threshold, pdr, far = 0, 5, 5
                res = []
                while (float('{:.2f}'.format(pdr)) > 0.01) or (float(
                        '{:.2f}'.format(far)) > 0.01):
                    faA, pdA = 0, 0
                    signalA = np.zeros(window * samples)
                    for i in range(samples):
                        step = (i * window)
                        paso = step + window
                        if (e > 6):
                            paso = paso - (e - 6)
                        signalTw = np.concatenate(
                            (fillCd, signalT[step:paso], fillCe))
                        signalSw = np.concatenate(
                            (fillCd, signalN[step:paso], fillCe))

                        step += halfA
                        paso = step + b

                        x, fa, pd = algo.OMP_roc(threshold, signalSw, signalTw,
                                                 b, H)
                        signalA[step:paso] = x
                        faA += fa
                        pdA += pd
                    far = (faA / nzST)
                    pdr = (pdA / nnzST)
                    tmp = '%d,%.6f,%.6f,%.6f' % (
                        threshold, gerador.rms(signalA - signalT), far, pdr)
                    if (threshold < pike):
                        threshold += 1
                    else:
                        if threshold == pike:
                            threshold = math.ceil(pike / 100) * 100
                        else:
                            threshold += 100
                    res.append([float(s) for s in tmp.split(',')])
                roc = panda.DataFrame(
                    res,
                    columns=[
                        'OMP:' + str(occupancy) + ':threshold',
                        'OMP:' + str(occupancy) + ':RMS',
                        'OMP:' + str(occupancy) + ':FA',
                        'OMP:' + str(occupancy) + ':DP'
                    ])

                data = panda.concat([data, roc], axis=1, sort=False)
                with lock:
                    data.to_csv(nome, index=False)

            metodo = 'LS-OMP'
            if metodo in metodos:
                threshold, pdr, far = 0, 5, 5
                res = []
                while (float('{:.2f}'.format(pdr)) > 0.01) or (float(
                        '{:.2f}'.format(far)) > 0.01):
                    faA, pdA = 0, 0
                    signalA = np.zeros(window * samples)
                    for i in range(samples):
                        step = (i * window)
                        paso = step + window
                        if (e > 6):
                            paso = paso - (e - 6)
                        signalTw = np.concatenate(
                            (fillCd, signalT[step:paso], fillCe))
                        signalSw = np.concatenate(
                            (fillCd, signalN[step:paso], fillCe))

                        step += halfA
                        paso = step + b

                        x, fa, pd = algo.LS_OMP_roc(threshold, signalSw,
                                                    signalTw, b, H)
                        signalA[step:paso] = x
                        faA += fa
                        pdA += pd
                    far = (faA / nzST)
                    pdr = (pdA / nnzST)
                    tmp = '%d,%.6f,%.6f,%.6f' % (
                        threshold, gerador.rms(signalA - signalT), far, pdr)
                    if (threshold < pike):
                        threshold += 1
                    else:
                        if threshold == pike:
                            threshold = math.ceil(pike / 100) * 100
                        else:
                            threshold += 100
                    res.append([float(s) for s in tmp.split(',')])
                roc = panda.DataFrame(
                    res,
                    columns=[
                        'LS-OMP:' + str(occupancy) + ':threshold',
                        'LS-OMP:' + str(occupancy) + ':RMS',
                        'LS-OMP:' + str(occupancy) + ':FA',
                        'LS-OMP:' + str(occupancy) + ':DP'
                    ])
                data = panda.concat([data, roc], axis=1, sort=False)
                with lock:
                    data.to_csv(nome, index=False)

            ended = datetime.now()
            print(
                'Ended ROC generate for Greedy with occupancy %d at  %s after %s'
                % (occupancy, ended.strftime("%H:%M:%S %d/%m/%Y"),
                   u.totalTime(started)))
            info.info(
                'Ended ROC generate for Greedy with occupancy %d after %s' %
                (occupancy, u.totalTime(started)))

        started = datetime.now()
        print('Started ROC generate for Shrinkage with occupancy %d at  %s' %
              (occupancy, started.strftime("%H:%M:%S %d/%m/%Y")))
        info.info('Started ROC generate for Shrinkage with occupancy %d' %
                  (occupancy))

        metodo = 'DS'
        if metodo in metodos:
            const['metodo'] = metodo
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'GD '
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'GDi'
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSF '
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSFi'
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSFls '
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSFlsi'
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSFlsc '
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'SSFlsci'
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = .25
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'PCD '
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = math.inf
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        metodo = 'PCDi'
        if metodo in metodos:
            metodo = metodo.strip()
            const['metodo'] = metodo
            opt['mi'] = math.inf
            roc = gerador.roc(algo.getRMSfloat(const, opt)['signal'], signalT)
            roc = roc.rename(
                columns={
                    s: metodo + ':' + str(occupancy) + ':' + s
                    for s in list(roc.columns.values)
                })
            data = panda.concat([data, roc], axis=1, sort=False)
            with lock:
                data.to_csv(nome, index=False)

        ended = datetime.now()
        print(
            'Ended ROC generate for Shrinkage with occupancy %d at  %s after %s'
            % (occupancy, ended.strftime("%H:%M:%S %d/%m/%Y"),
               u.totalTime(started)))
        info.info(
            'Ended ROC generate for Shrinkage with occupancy %d after %s' %
            (occupancy, u.totalTime(started)))
    ended = datetime.now()
    print('Ended ROC generate for occupancy %d at  %s after %s' %
          (occupancy, ended.strftime("%H:%M:%S %d/%m/%Y"),
           u.totalTime(startedI)))
    info.info('Ended ROC generate for occupancy %d after %s' %
              (occupancy, u.totalTime(startedI)))
コード例 #2
0
    window = b + e
    halfA = e - int(math.ceil(e / 2))
    halfCd = int(math.ceil((bwindow - window) / 2))
    halfCe = int(bwindow - window - halfCd)
    fillAd = np.zeros(halfA)
    fillAe = np.zeros(e - halfA)
    if halfCd > 0:
        fillCd = np.zeros(halfCd)
    else:
        fillCd = np.arange(0)
    if halfCe > 0:
        fillCe = np.zeros(halfCe)
    else:
        fillCe = np.arange(0)
    fill = [fillAd, fillAe, fillCd, fillCe]
    H, A, B = matrizes.generate(b)
    matrix = matrizes.matrix()
    h = matrix[0:7, 5]
    iterations = 108

    allOccupancies = [1, 5, 10, 20, 30, 40, 50, 60, 90]
    allMethods = ['FIR', 'MF', 'MP', 'OMP', 'LS-OMP', 'GD', 'SSF', 'PCD', 'TAS', 'GDi', 'SSFi', 'PCDi', 'TASi']

    # occupancies utilized in some articles
    occupancies = [30, 60, 90]

    # main methods of all families tested
    methods = ['FIR', 'LS-OMP', 'TAS', 'PCDi']

    const = collections.OrderedDict(
        {'methods': methods, 'iterations': iterations, 'b': b, 'e': e, 'h': h, 'H': H, 'A': A, 'B': B, 'fill': fill,
コード例 #3
0
    def getRMSfloat(self, const, opt=None):
        if opt is None:
            opt = {}
        gerador = Signal()
        util = Utiliters()
        matrizes = Matrizes()
        iterations = const['iterations']
        occupancy = const['occupancy']
        pattern = const['pattern']
        signalT = const['signalT']
        signalN = const['signalN']
        metodo = const['metodo']
        if 'FDIP' in metodo:
            try:
                if 'order' in opt:
                    order = opt['order']
                else:
                    order = 26
                signalA = self.FDIP(order, const['signalNf'],
                                    const['signalTf'], signalN)
                result = {
                    'rms': gerador.rms(signalA - signalT),
                    'signal': signalA
                }
                return result
            except:
                return None

        if 'lambda' in opt:
            lamb = opt['lambda']
        else:
            lamb = 0
        if 'mi' in opt:
            mi = opt['mi']
        else:
            mi = math.inf
        if 'samples' in opt:
            samples = opt['samples']
        else:
            samples = 1820
        bunch = pattern.rsplit('b', 1)
        empty = bunch[1].rsplit('e', 1)
        b = int(bunch[0])
        e = int(empty[0])
        bwindow = b + 6
        window = b + e
        halfA = e - int(math.ceil(e / 2))
        halfCd = int(math.ceil((bwindow - window) / 2))
        halfCe = int(bwindow - window - halfCd)
        if halfCd > 0:
            fillCd = np.zeros(halfCd)
        else:
            fillCd = np.arange(0)
        if halfCe > 0:
            fillCe = np.zeros(halfCe)
        else:
            fillCe = np.arange(0)
        if 'maxB' in opt:
            maxB = opt['maxB']
        else:
            maxB = None
        H, A, B = matrizes.generate(b, maxB)
        if 'DS' in metodo:
            AA = np.vstack((np.hstack(
                (A, np.negative(A))), np.hstack((np.negative(A), A))))
            uns = np.ones(b)

        if 'MF' in metodo:
            fillAd = np.zeros(halfA)
            fillAe = np.zeros(e - halfA)
            fill = [fillAd, fillAe, fillCd, fillCe]
            matrix = matrizes.matrix()
            h = matrix[0:7, 5]
            if 'threshold' in opt:
                threshold = opt['threshold']
            else:
                threshold = util.getBestThreshold(metodo, occupancy)
            signalA = self.MatchedFw(signalN, h, threshold, samples, b, e,
                                     fill)
            result = {'rms': gerador.rms(signalA - signalT), 'signal': signalA}
            return result

        if 'constPCD' in opt:
            constPCD = opt['constPCD']
        else:
            constPCD = util.getPcdConst(A)
        if 'nu' in opt:
            nu = opt['nu']
        else:
            nu = util.getNuConst(occupancy)
        signalA = np.zeros(window * samples)
        for ite in range(samples):
            step = (ite * window)
            paso = step + window
            if (e > 6):
                paso = paso - (e - 6)
            signalS = np.concatenate((fillCd, signalN[step:paso], fillCe))
            step += halfA
            paso = step + b
            if 'DS' in metodo:
                signalA[step:paso] = self.DantzigSelec(signalS, b, H, AA, uns)
                continue

            if 'LS-OMP' in metodo:
                if 'threshold' in opt:
                    threshold = opt['threshold']
                else:
                    threshold = util.getBestThreshold(metodo, occupancy)
                signalA[step:paso] = self.LS_OMP(threshold, signalS, b, H)
                continue

            if 'OMP' in metodo:
                if 'threshold' in opt:
                    threshold = opt['threshold']
                else:
                    threshold = util.getBestThreshold(metodo, occupancy)
                signalA[step:paso] = self.OMP(threshold, signalS, b, H)
                continue

            if 'MP' in metodo:
                if 'threshold' in opt:
                    threshold = opt['threshold']
                else:
                    threshold = util.getBestThreshold(metodo, occupancy)
                signalA[step:paso] = self.MP(threshold, signalS, b, H)
                continue

            Hs = H.T.dot(signalS)

            if 'i' in metodo:
                x = B.dot(signalS)
            else:
                x = signalS[3:b + 3]
            for i in range(iterations):
                if 'GDP' in metodo:
                    x = self.GDP(x, Hs, A, mi)
                elif 'GD' in metodo:
                    x = self.GD(x, Hs, A, mi)
                elif 'SSFlsc' in metodo:
                    x = self.SSFlsc(x, Hs, A, mi, lamb, nu)
                elif 'SSFls' in metodo:
                    x = self.SSFls(x, Hs, A, mi, lamb, constPCD)
                elif 'SSF' in metodo:
                    x = self.SSF(x, Hs, A, mi, lamb)
                elif 'PCD' in metodo:
                    x = self.PCD(x, Hs, A, mi, lamb, constPCD)
            x = np.where(x < 0, 0, x)
            signalA[step:paso] = x
        result = {
            'rms': '%.6g' % gerador.rms(signalA - signalT),
            'signal': signalA
        }
        return result
コード例 #4
0
def rodar(patterns, metodos, radical, sinais, occupancy, lock):
    u = Utiliters()
    info = u.setup_logger('information', radical + 'info.log')
    startedI = datetime.datetime.now()
    print('Started Mi full Test with occupancy %d at %s' %
          (occupancy, startedI.strftime("%H:%M:%S %d/%m/%Y")))
    info.info('Started Mi full Test with occupancy %d' % occupancy)
    algo = Algorithms()
    matrizes = Matrizes()
    samples = 1820
    iterations = 331

    for pattern in patterns:
        nome = radical + pattern + '_' + str(occupancy)
        bunch = pattern.rsplit('b', 1)
        empty = bunch[1].rsplit('e', 1)
        b = int(bunch[0])
        e = int(empty[0])
        u = Utiliters()
        bwindow = b + 6
        window = b + e
        halfA = e - int(math.ceil(e / 2))
        halfCd = int(math.ceil((bwindow - window) / 2))
        halfCe = int(bwindow - window - halfCd)
        fillAd = np.zeros(halfA)
        fillAe = np.zeros(e - halfA)
        if halfCd > 0:
            fillCd = np.zeros(halfCd)
        else:
            fillCd = np.arange(0)
        if halfCe > 0:
            fillCe = np.zeros(halfCe)
        else:
            fillCe = np.arange(0)
        H, A, B = matrizes.generate(b)
        matrix = matrizes.matrix()
        try:
            signalN = np.genfromtxt(sinais + 'signalN_' + pattern + '_' +
                                    str(occupancy) + '.csv',
                                    delimiter=',')
        except:
            print('Error get saved signals')
            signalT, signalN, signalTf, signalNf = u.sgen(
                pattern, samples, b, fillAd, fillAe, matrix, sinais)

        colunas = ['Window']
        for metodo in metodos:
            for ite in range(1, iterations):
                colunas.append(metodo + ':' + str(occupancy) + ':mu:' +
                               str(ite))
        data = panda.DataFrame([], columns=colunas)

        for its in range(samples):
            step = (its * window)
            paso = step + window
            if (e > 6):
                paso = paso - (e - 6)
            signalS = np.concatenate((fillCd, signalN[step:paso], fillCe))
            step += halfA

            Hs = H.T.dot(signalS)
            row = [its]
            for metodo in metodos:
                musL = []
                for ite in range(1, iterations):
                    if 'i' in metodo:
                        x = B.dot(signalS)
                    else:
                        x = signalS[3:b + 3]
                    muA, mu = 0.0, 0.0
                    for i in range(ite):
                        if 'GDP' in metodo:
                            x, mu = algo.GDP(x, Hs, A, returnMu=True)
                        elif 'GD' in metodo:
                            x, mu = algo.GD(x, Hs, A, returnMu=True)
                        elif 'SSFlsc' in metodo:
                            x, mu = algo.SSFlsc(x, Hs, A, returnMu=True)
                        elif 'SSFls' in metodo:
                            x, mu = algo.SSFls(x, Hs, A, returnMu=True)
                        elif 'SSF' in metodo:
                            x, mu = algo.SSF(x, Hs, A, returnMu=True)
                        elif 'PCD' in metodo:
                            x, mu = algo.PCD(x, Hs, A, returnMu=True)
                        muA += mu
                    musL.append('%.6f' % (muA / ite))
                row.extend(musL)
            l = len(data)
            data.loc[l] = row
            with lock:
                data.to_csv(nome + '.csv', index=False)
    ended = datetime.datetime.now()
    print('Ended Mi full Test with occupancy %d at  %s after %s' %
          (occupancy, ended.strftime("%H:%M:%S %d/%m/%Y"),
           u.totalTime(startedI)))
    info.info('Ended Mi full Test with occupancy %d after %s' %
              (occupancy, u.totalTime(startedI)))
コード例 #5
0
    def getRMSfix(self, const, opt):
        if opt is None:
            opt = {}
        gerador = Signal()
        matrizes = Matrizes()
        util = Utiliters()
        iterations = const['iterations']
        occupancy = const['occupancy']
        pattern = const['pattern']
        signalT = const['signalT']
        signalN = const['signalN']
        metodo = const['metodo']
        if 'lambda' in opt:
            lamb = opt['lambda']
        else:
            lamb = 0
        if 'mi' in opt:
            mi = opt['mi']
        else:
            mi = math.inf
        if 'samples' in opt:
            samples = opt['samples']
        else:
            samples = 1820
        if 'gain' in opt:
            gain = opt['gain']
        else:
            gain = 0
        if 'bitsH' in opt:
            bitsH = opt['bitsH']
        else:
            bitsH = 5
        if 'bitsB' in opt:
            bitsB = opt['bitsB']
        else:
            bitsB = None
        bits = gain + 10
        bitsA = bitsH + 5
        align = bitsA
        bunch = pattern.rsplit('b', 1)
        empty = bunch[1].rsplit('e', 1)
        b = int(bunch[0])
        e = int(empty[0])
        bwindow = b + 6
        window = b + e
        halfA = e - int(math.ceil(e / 2))
        halfCd = int(math.ceil((bwindow - window) / 2))
        halfCe = int(bwindow - window - halfCd)
        if halfCd > 0:
            fillCd = np.zeros(halfCd)
        else:
            fillCd = np.arange(0)
        if halfCe > 0:
            fillCe = np.zeros(halfCe)
        else:
            fillCe = np.arange(0)
        mh, ma, mb = matrizes.generateFix(bitsH, bitsA, bitsB)
        H, A, B = matrizes.generate(b)
        if 'constPCD' in opt:
            constPCDv = opt['constPCD']
        else:
            constPCD = util.getPcdConst(A)
            constPCDv = int(np.round(constPCD * math.pow(2, gain)))
        if 'nu' in opt:
            nuV = opt['nu']
        else:
            nu = util.getNuConst(occupancy)
            nuV = int(np.round(nu * math.pow(2, gain)))
        signalA = np.zeros(window * samples)
        for ite in range(samples):
            step = (ite * window)
            paso = step + window
            if (e > 6):
                paso = paso - (e - 6)
            signalS = np.concatenate((fillCd, signalN[step:paso], fillCe))
            step += halfA
            paso = step + b

            Hs, x = self.sipo(signalS, gain, mh, mb, bitsB)
            if 'GDP' in metodo:
                x = self.GDP([x, Hs, ma, iterations, bits, align, mi])
            elif 'GD' in metodo:
                x = self.GD([x, Hs, ma, iterations, bits, align, mi])
            elif 'SSFlsc' in metodo:
                x = self.TAS([x, Hs, ma, iterations, bits, align, mi, lamb, gain, nuV])
            elif 'SSFls' in metodo:
                x = self.TAS([x, Hs, ma, iterations, bits, align, mi, lamb, gain, nuV])
            elif 'SSF' in metodo:
                x = self.SSF([x, Hs, ma, iterations, bits, align, mi, lamb])
            elif 'PCD' in metodo:
                x = self.PCD([x, Hs, ma, iterations, bits, align, mi, lamb, gain, constPCDv])
            x = np.where(x < 0, 0, x)
            signalA[step:paso] = np.fix(np.divide(x, pow(2, gain)))
        result = {'rms': '%.6g' % gerador.rms(signalA - signalT), 'signal': signalA}
        return result