def analyse(data): config = data.config vcc = data.vcc m = data.measurements grouped = segmented_measurements(m, ["charge", "R"], as_index=1) def voltage(measurement): return u_an2v(measurement.Amiddle, vcc) def first(ls): return ls.values[0] def last(ls): return ls.values[-1] t = grouped["t"].agg(dict(t1=first, t2=last)) A = grouped["Amiddle"].agg(dict(A1=first, A2=last)) mreg = DataFrame([(charge, R, regc(g, R)) for (charge, R), g in grouped], columns=["charge", "R", "Creg"]) df = A.join(t) df = df.reset_index() df = df[df["charge"] == 0] del df["charge"] col = ColsProxy(df) col.Creg = mreg["Creg"] col.dt = col.t2 - col.t1 col.C = calculate_c(col.A1, col.A2, col.R, col.t1, col.t2) movecol(df, "Creg", 0) movecol(df, "C", 0) return df
def analyse(data): config = data.config vcc = data.vcc m = data.measurements grouped = segmented_measurements(m, ['charge', 'R'], as_index=1) def voltage(measurement): return u_an2v(measurement.Amiddle, vcc) def first(ls): return ls.values[0] def last(ls): return ls.values[-1] t = grouped['t'].agg(dict(t1=first, t2=last)) A = grouped['Amiddle'].agg(dict(A1=first, A2=last)) mreg = DataFrame([(charge, R, regc(g, R)) for (charge, R), g in grouped], columns=['charge', 'R', 'Creg']) df = A.join(t) df = df.reset_index() df = df[df['charge'] == 0] del df['charge'] col = ColsProxy(df) col.Creg = mreg['Creg'] col.dt = col.t2 - col.t1 col.C = calculate_c(col.A1, col.A2, col.R, col.t1, col.t2) movecol(df, 'Creg', 0) movecol(df, 'C', 0) return df
def extend(data): m = filter_measurements( data.measurements, ['pwm_value', 'rail'], ['Aout', 'Ain', 'Aamp']) R = data.config.R vcc = data.vcc data.Vmax = data.vcc data.Imax = data.vcc / R col = ColsProxy(m) col.Vin = an2v(col.Ain, vcc) col.Vout = an2v(col.Aout, vcc) col.Vamp = an2v(col.Aamp, vcc) col.Vx = col.Vout - col.Vin col.I = (col.Vin - col.Vamp) / R m = m.sort_index(by='Vx') col.I = pandas.rolling_median(col.I, window=5) data.measurements = m
def calculate_beta(m, vcc): col = ColsProxy(m) col.Ab=uarray((col.Ab,1)) col.Ac=uarray((col.Ac,1)) col.Ub = an2v(col.Ab, vcc) col.Uc = an2v(col.Ac, vcc) Rout = 20 pnp = col.polarity == 'PNP' npn = col.polarity == 'NPN' col.Urb[pnp] = col.Ub[pnp] col.Urb[npn] = vcc - col.Ub[npn] col.Urc[pnp] = col.Uc[pnp] col.Urc[npn] = vcc - col.Uc[npn] col.Ib = col.Urb / (col.Rb + Rout) col.Ic = col.Urc / (col.Rc + Rout) col.Ie = col.Ib + col.Ic col.beta = col.Ic / col.Ib[nominal_values(col.Ib) != 0] col.Ue[pnp] = vcc - (Rout * col.Ie[pnp]) col.Ue[npn] = Rout * col.Ie[npn] col.Ube[pnp] = -(col.Ub[pnp] - col.Ue[pnp]) col.Ube[npn] = (col.Ub[npn] - col.Ue[npn])
def calculate_beta(m, vcc): col = ColsProxy(m) col.Ab = uarray((col.Ab, 1)) col.Ac = uarray((col.Ac, 1)) col.Ub = an2v(col.Ab, vcc) col.Uc = an2v(col.Ac, vcc) Rout = 20 pnp = col.polarity == 'PNP' npn = col.polarity == 'NPN' col.Urb[pnp] = col.Ub[pnp] col.Urb[npn] = vcc - col.Ub[npn] col.Urc[pnp] = col.Uc[pnp] col.Urc[npn] = vcc - col.Uc[npn] col.Ib = col.Urb / (col.Rb + Rout) col.Ic = col.Urc / (col.Rc + Rout) col.Ie = col.Ib + col.Ic col.beta = col.Ic / col.Ib[nominal_values(col.Ib) != 0] col.Ue[pnp] = vcc - (Rout * col.Ie[pnp]) col.Ue[npn] = Rout * col.Ie[npn] col.Ube[pnp] = -(col.Ub[pnp] - col.Ue[pnp]) col.Ube[npn] = (col.Ub[npn] - col.Ue[npn])