Esempio n. 1
0
def withoutInitial(const, radical, path, quantization, lock):
    u = Utiliters()
    occupancy = 30
    samples = 1820
    pattern = '48b7e'
    info = u.setup_logger('information', radical + 'info.log')
    startedI = datetime.datetime.now()
    print('Started Quantization Test, for quant %d at %s' % (quantization, startedI.strftime("%H:%M:%S %d/%m/%Y")))
    info.info('Started Quantization Test, for quant %d' % quantization)
    gerador = Signal()
    matrizes = Matrizes()
    verilog = XbYe()

    algov = verilog.getAlgo([pattern])
    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)
    matrix = matrizes.matrix()
    nome = radical + pattern + '_' + str(occupancy)

    bitsH = quantization
    bitsA = bitsH + 5
    align = bitsA
    mh, ma, mb = matrizes.generateFix(bitsH, bitsA)

    try:
        signalT = np.genfromtxt(path + 'signalT_' + pattern + '_' + str(occupancy) + '.csv', delimiter=',')
        signalN = np.genfromtxt(path + 'signalN_' + pattern + '_' + str(occupancy) + '.csv', delimiter=',')
    except:
        print('Error get saved signals')
        signalT, signalN, signalTf, signalNf = u.sgen(pattern, samples, b, fillAd, fillAe, matrix, path)

    for block in range(const['sB'], const['eB']):
        iterations = block * window
        for gain in range(const['sG'], const['eG']):
            bits = gain + 10
            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 = algov.sipo(signalS, gain, mh)
                x = algov.SSF([x, Hs, ma, iterations, bits, align, .25, 0])
                x = np.where(x < 0, 0, x)
                signalA[step:paso] = np.fix(np.divide(x, pow(2, gain)))
            rms = gerador.rms(signalA - signalT)

            with lock:
                with open(nome + '.csv', 'a') as file:
                    file.write(str(iterations) + u.s(quantization) + u.s(gain) + u.s(rms) + '\n')

    ended = datetime.datetime.now()
    print('Ended Quantization Test, for pseudoGain %d at %s after %s' % (
        quantization, ended.strftime("%H:%M:%S %d/%m/%Y"), u.totalTime(startedI)))
    info.info('Ended Quantization Test, for pseudoGain %d after %s' % (quantization, u.totalTime(startedI)))
Esempio n. 2
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