def __init__(self): # .MODEL KT315 NPN (IS=10F BF=584.517 VAF=100 IKF=29.2714M ISE=131.803P # 3: + NE=2.08337 BR=1.95214 IKR=9.99996M ISC=100.316P RE=0 RC=0 RB=0 # 4: + CJE=27.3893P VJE=700.001M MJE=500.287M CJC=27.3893P VJC=700.001M # 5: + MJC=500.287M TF=450.287P XTF=499.984M VTF=10 ITF=10.2268M TR=153.383P) # Fianora_MainScripts.AbstractMainScript.__init__(self) self.options.verbose = 1 self.options.verbose_wrapper = 1 inf=10e10 #числовые значения изменены шоб было по 7 значимых IS = 11.23456e-15 BF = 584.5171 VAF = 112.3456 VAR = inf IKF = 29.27141e-3 # ток перехода к высококу уровню инжекции inf ISE = 131.8031e-12 # генерационно-рекомбинационный ток насыщения эмиттерного перех 0 NE = 2.083371 # коэфф. неидеальности ген-рек тока эмиттерного перех 1 NR = 1 # коэфф неидеальности для диффузного тока в инв режиме 1 NF = 1 # коэфф неидеальности для диффузионного тока в нормальном режиме 1 NC = 1 # коэфф неидеальности генерационно-рекомбинацоинного тока коллектора 1 BR = 1.952141 # инверсный коэфф усиления тока в схеме с ОЭ 1 IKR = 9.999961e-3 # ток перехода к высокому уровню инжекции в инверсном включении inf ISC = 100.3161e-12 # генерационно-рекомбинационный ток насыщения колекторного перех 0 RE = 1 # сопротивления эмиттера, коллектора, базы 0 0 0 RC = 5.48635 RB = 0 parameter_str_list = ['IS', 'BF', 'NR', 'NF', 'BR'] # список параметров btrue = [IS, BF, NR, NF, BR] Ve = np.diag([1.9e-5]*3) bstart = np.array(btrue)-np.array(btrue)*0.3 bend = np.array(btrue)+np.array(btrue)*0.3 binit = f_sf.uniformVector(bstart, bend) xstart = np.array([0.001, 0.001]) xend = np.array([1, 1]) N = 30 self.ec = f_sf.EstimationContext(bstart, bend, btrue, binit, xstart, xend, Ve, N) #упаковывание в контекст self.model = f_m.StringEMTransistorModel ('Q_NPN_KT513') self.measurer = f_me.ModelMeasurer(self.ec.Ve, self.model, self.ec.btrue) # сделали измерителя self.plan_measurer = f_me.PlanMeasurer(self.measurer) # сделали измеритель по плану self.planner = f_p.UniformPlanner(self.ec) #формирование цепочки self.estimator = f_e.NGEstimator() self.measdata=None self.plan = self.planner.give_us_a_plan(nocache = True) # чтоб каждый раз не менять план, как оно делается,
def __init__(self): # .MODEL KT315 NPN (IS=10F BF=584.517 VAF=100 IKF=29.2714M ISE=131.803P # 3: + NE=2.08337 BR=1.95214 IKR=9.99996M ISC=100.316P RE=0 RC=0 RB=0 # 4: + CJE=27.3893P VJE=700.001M MJE=500.287M CJC=27.3893P VJC=700.001M # 5: + MJC=500.287M TF=450.287P XTF=499.984M VTF=10 ITF=10.2268M TR=153.383P) # Fianora_MainScripts.AbstractMainScript.__init__(self) self.options.verbose = 1 self.options.verbose_wrapper = 1 inf = 10e10 # числовые значения изменены шоб было по 7 значимых IS = 11.23456e-15 BF = 584.5171 VAF = 112.3456 VAR = inf IKF = 29.27141e-3 # ток перехода к высококу уровню инжекции inf ISE = 131.8031e-12 # генерационно-рекомбинационный ток насыщения эмиттерного перех 0 NE = 2.083371 # коэфф. неидеальности ген-рек тока эмиттерного перех 1 NR = 1 # коэфф неидеальности для диффузного тока в инв режиме 1 NF = 1 # коэфф неидеальности для диффузионного тока в нормальном режиме 1 NC = 1 # коэфф неидеальности генерационно-рекомбинацоинного тока коллектора 1 BR = 1.952141 # инверсный коэфф усиления тока в схеме с ОЭ 1 IKR = 9.999961e-3 # ток перехода к высокому уровню инжекции в инверсном включении inf ISC = 100.3161e-12 # генерационно-рекомбинационный ток насыщения колекторного перех 0 RE = 1 # сопротивления эмиттера, коллектора, базы 0 0 0 RC = 5.48635 RB = 0 parameter_str_list = ["IS", "BF", "NR", "NF", "BR"] # список параметров btrue = [IS, BF, NR, NF, BR] Ve = np.diag([1.9e-5] * 3) bstart = np.array(btrue) - np.array(btrue) * 0.3 bend = np.array(btrue) + np.array(btrue) * 0.3 binit = f_sf.uniformVector(bstart, bend) xstart = np.array([0.001, 0.001]) xend = np.array([1, 1]) N = 30 self.ec = f_sf.EstimationContext(bstart, bend, btrue, binit, xstart, xend, Ve, N) # упаковывание в контекст self.model = f_m.StringEMTransistorModel("Q_NPN_KT513") self.measurer = f_me.ModelMeasurer(self.ec.Ve, self.model, self.ec.btrue) # сделали измерителя self.plan_measurer = f_me.PlanMeasurer(self.measurer) # сделали измеритель по плану self.planner = f_p.UniformPlanner(self.ec) # формирование цепочки self.estimator = f_e.NGEstimator() self.measdata = None self.plan = self.planner.give_us_a_plan(nocache=True) # чтоб каждый раз не менять план, как оно делается,
def countMeanVbForAprior_S4000(self, expplan:list): """ :return: среднее значение определителя [0] и его дисперсию [1] """ DS=0 #среднее определителя SD=0 #дисперсия определителя for sss in range(1, 30): #30 - количество попыток в выборке b=o_g.uniformVector (self.bstart, self.bend) Vb=self.countVbForPlan(expplan, b) D=np.linalg.det(Vb) if D: DS=(D+(sss-1)*DS)/sss #среднее определителя SD=((DS-D)*(DS-D)+(sss-1)*SD)/sss #дисперсия определителя return DS, SD
def countMeanVbForAprior_S4000(self, expplan: list): """ :return: среднее значение определителя [0] и его дисперсию [1] """ DS = 0 #среднее определителя SD = 0 #дисперсия определителя for sss in range(1, 30): #30 - количество попыток в выборке b = o_g.uniformVector(self.bstart, self.bend) Vb = self.countVbForPlan(expplan, b) D = np.linalg.det(Vb) if D: DS = (D + (sss - 1) * DS) / sss #среднее определителя SD = ((DS - D) * (DS - D) + (sss - 1) * SD) / sss #дисперсия определителя return DS, SD
def make_plan(self): res = list() for i in range(0, self.N): res.append(o_g.uniformVector(self.xstart, self.xend)) return res
def make_plan(self): res=list() for i in range(0, self.N): res.append(o_g.uniformVector(self.xstart, self.xend)) return res