def setUp(self): raise SkipTest() self.n_ports = 2 self.wg = rf.RectangularWaveguide(rf.F(75,100,NPTS), a=100*rf.mil,z0=50) wg= self.wg self.X = wg.random(n_ports =2, name = 'X') self.Y = wg.random(n_ports =2, name='Y') ideals = [ wg.short(nports=2, name='short'), wg.open(nports=2, name='open'), wg.match(nports=2, name='load'), wg.thru(name='thru'), ] measured = [self.measure(k) for k in ideals] cal1 = rf.TwelveTerm( ideals = ideals, measured = measured, n_thrus=1, ) #coefs = rf.convert_12term_2_8term(cal1.coefs) #gamma_f = wg.load(coefs['forward switch term']) gamma_f, gamma_r = (cal1.coefs_ntwks['forward switch term'], cal1.coefs_ntwks['reverse switch term']) self.cal = rf.EightTerm( ideals = ideals, measured = measured, switch_terms = [gamma_f, gamma_r], )
def setUp(self): self.n_ports = 2 self.wg = rf.RectangularWaveguide(rf.F(75,100,NPTS), a=100*rf.mil,z0=50) wg= self.wg self.X = wg.random(n_ports =2, name = 'X') self.Y = wg.random(n_ports =2, name='Y') self.gamma_f = wg.random(n_ports =1, name='gamma_f') self.gamma_r = wg.random(n_ports =1, name='gamma_r') ideals = [ wg.short(nports=2, name='short'), wg.open(nports=2, name='open'), wg.match(nports=2, name='load'), wg.thru(name='thru'), ] measured = [self.measure(k) for k in ideals] self.cal = rf.EightTerm( ideals = ideals, measured = measured, switch_terms = (self.gamma_f, self.gamma_r) )
def setUp(self): raise SkipTest() self.n_ports = 2 self.wg = WG wg = self.wg self.X = wg.random(n_ports=2, name='X') self.Y = wg.random(n_ports=2, name='Y') ideals = [ wg.short(nports=2, name='short'), wg.open(nports=2, name='open'), wg.match(nports=2, name='load'), wg.thru(name='thru'), ] measured = [self.measure_std(k) for k in ideals] cal1 = rf.TwoPortOnePath(ideals=ideals, measured=measured) switch_terms = (cal1.coefs_ntwks['forward switch term'], cal1.coefs_ntwks['reverse switch term']) measured = [self.measure(k) for k in ideals] self.cal = rf.EightTerm( ideals=ideals, measured=measured, switch_terms=switch_terms, ) raise ValueError()
def setUp(self): self.n_ports = 2 self.wg = WG wg = self.wg self.X = wg.random(n_ports=2, name='X') self.Y = wg.random(n_ports=2, name='Y') #Isolation terms self.If = wg.random(n_ports=1, name='If') self.Ir = wg.random(n_ports=1, name='Ir') self.gamma_f = wg.random(n_ports=1, name='gamma_f') self.gamma_r = wg.random(n_ports=1, name='gamma_r') ideals = [ wg.short(nports=2, name='short'), wg.open(nports=2, name='open'), wg.match(nports=2, name='load'), wg.thru(name='thru'), ] measured = [self.measure(k) for k in ideals] self.cal = rf.EightTerm(ideals=ideals, measured=measured, isolation=measured[2], switch_terms=(self.gamma_f, self.gamma_r))
def main(): parser = argparse.ArgumentParser( description='two port VNA calibration script.') parser.add_argument('--solt', action='store_true', help='apply SOLT calibration') parser.add_argument('--trl', action='store_true', help='apply TRL calibration') parser.add_argument('filename', help='s2p file to process') parser.add_argument('--title', default='$|S|$', help='plot title') args = parser.parse_args() cal = None if args.solt: # load cal measurements cal_load = rf.Network('../cal_twoport/load.s2p') cal_open = rf.Network('../cal_twoport/open.s2p') cal_short = rf.Network('../cal_twoport/short.s2p') cal_thru = rf.Network('../cal_twoport/thru.s2p') cal_iso = rf.Network('../cal_twoport/isolation.s2p') cal_sw_fwd = rf.Network('../cal_twoport/sw_fwd.s1p') cal_sw_rev = rf.Network('../cal_twoport/sw_rev.s1p') measured_cal = [cal_short, cal_open, cal_load, cal_thru] # create ideal cal networks, SLOT calibration ideal_cal = create_kirkby(cal_thru.frequency) # #ideal_cal = create_sdrkits_ideal(cal_thru.frequency) #cal = rf.TwelveTerm(ideals = ideal_cal, measured = measured_cal, n_thrus = 1, isolation = cal_iso) cal = rf.EightTerm(ideals=ideal_cal, measured=measured_cal, switch_terms=(cal_sw_rev, cal_sw_fwd)) elif args.trl: cal_reflect = rf.Network('../cal_twoport/trl_reflect.s2p') cal_thru = rf.Network('../cal_twoport/trl_thru.s2p') cal_line = rf.Network('../cal_twoport/trl_line.s2p') cal_sw_fwd = rf.Network('../cal_twoport/trl_sw_fwd.s1p') cal_sw_rev = rf.Network('../cal_twoport/trl_sw_rev.s1p') measured_cal = [cal_thru, cal_reflect, cal_line] media = rf.media.DefinedGammaZ0(cal_reflect.frequency, z0=50) ideal_open = media.open( ) # TODO: simulate reflect to estimate ideal behavior.. openems? ideal_cal = [None, ideal_open, None] cal = rf.TRL(measured=measured_cal, ideals=ideal_cal, estimate_line=True, switch_terms=(cal_sw_rev, cal_sw_fwd)) else: print('no cal type selected..') cal.run() show() # subplot(2,1,1) plot_s2p_file(args.filename, cal, show=False) grid(True) title(args.title) # subplot(2,1,2) # plot_s2p_file(args.filename, cal, show = False, smith = True) show() plot_coefs(cal, cal_line.f)
def setUp(self): self.n_ports = 2 self.wg = WG wg = self.wg #Port 0: VNA port 0 #Port 1: DUT port 0 #Port 2: DUT port 1 #Port 3: VNA port 1 self.Z = wg.random(n_ports=4, name='Z') self.gamma_f = wg.random(n_ports=1, name='gamma_f') self.gamma_r = wg.random(n_ports=1, name='gamma_r') o = wg.open(nports=1, name='open') s = wg.short(nports=1, name='short') m = wg.match(nports=1, name='load') om = rf.two_port_reflect(o, m) mo = rf.two_port_reflect(m, o) oo = rf.two_port_reflect(o, o) ss = rf.two_port_reflect(s, s) thru = wg.thru(name='thru') ideals = [thru, om, mo, oo, ss] measured = [self.measure(k) for k in ideals] self.cal16 = rf.SixteenTerm(measured=measured, ideals=ideals, switch_terms=(self.gamma_f, self.gamma_r)) r = wg.load(.95 + .1j, nports=1) m = wg.match(nports=1) mm = rf.two_port_reflect(m, m) rm = rf.two_port_reflect(r, m) mr = rf.two_port_reflect(m, r) rr = rf.two_port_reflect(r, r) ideals = [thru, mm, rr, rm, mr] measured = [self.measure(k) for k in ideals] self.cal_lmr16 = rf.LMR16( measured=measured, ideals=[thru], ideal_is_reflect=False, #Automatic sign detection doesn't work if the #error terms aren't symmetric enough sign=1, switch_terms=(self.gamma_f, self.gamma_r)) #Same error network, but without leakage terms #Primary leakage self.Z.s[:, 3, 0] = 0 # forward isolation self.Z.s[:, 0, 3] = 0 # reverse isolation self.Z.s[:, 2, 1] = 0 # forward port isolation self.Z.s[:, 1, 2] = 0 # reverse port isolation #Cross leakage self.Z.s[:, 3, 1] = 0 # forward port 2 isolation self.Z.s[:, 1, 3] = 0 # reverse port 2 isolation self.Z.s[:, 2, 0] = 0 # forward port 1 isolation self.Z.s[:, 0, 2] = 0 # reverse port 1 isolation measured = [self.measure(k) for k in ideals] self.cal8 = rf.EightTerm( measured=measured, ideals=ideals, switch_terms=(self.gamma_f, self.gamma_r), )
ideals =[os_i, so_i, ll_i, through_i], n_thrus = 1, ) cal.run() if 0: cal = skrf.SixteenTerm(\ measured = [ss, os, so, ll, through], ideals = [ss_i, os_i, so_i, ll_i, through_i], ) cal.run() coefs = cal.coefs if 0: cal = skrf.EightTerm(\ measured = [os, so, ll, through], ideals = [os_i, so_i, ll_i, through_i] ) cal.run() plt.figure() dut = cal.apply_cal(dut) dut.plot_s_db() axes = plt.gca() axes.set_ylim([-60,0]) plt.show(block=True)