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') 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') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length self.X.s[:, 0, 0] *= 1e-1 self.Y.s[:, 0, 0] *= 1e-1 self.X.s[:, 1, 1] *= 1e-1 self.Y.s[:, 1, 1] *= 1e-1 ideals = None r = wg.delay_short(20, 'deg') self.actuals=[wg.thru( name='thru'), rf.two_port_reflect(r,r),\ wg.attenuator(-3,True, 45,'deg')] measured = [self.measure(k) for k in self.actuals] self.cal = rf.TRL(ideals=None, measured=measured, isolation=measured[1], switch_terms=(self.gamma_f, self.gamma_r))
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') self.gamma_f = wg.random(n_ports=1, name='gamma_f') self.gamma_r = wg.random(n_ports=1, name='gamma_r') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length #self.X.s[:,0,0] *=1e-1 #self.Y.s[:,0,0] *=1e-1 #self.X.s[:,1,1] *=1e-1 #self.Y.s[:,1,1] *=1e-1 ideals = None actuals = [ wg.thru(name='thru'), wg.short(nports=2, name='short'), wg.attenuator(-3, True, 45, 'deg') ] self.actuals = actuals measured = [self.measure(k) for k in actuals] self.cal = rf.TRL(ideals=ideals, measured=measured, switch_terms=(self.gamma_f, self.gamma_r))
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') 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') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length #self.X.s[:,0,0] *=1e-1 #self.Y.s[:,0,0] *=1e-1 #self.X.s[:,1,1] *=1e-1 #self.Y.s[:,1,1] *=1e-1 actuals = [ wg.thru( name='thru'), rf.two_port_reflect(wg.load(-.9-.1j),wg.load(-.9-.1j)), wg.attenuator(-3,True, 45,'deg') #wg.line(45,'deg',name='line'), ] self.actuals=actuals ideals = [ wg.thru( name='thru'), wg.short(nports=2, name='short'), wg.line(90,'deg',name='line'), ] measured = [self.measure(k) for k in actuals] self.cal = rf.TRL( ideals = ideals, measured = measured, isolation = measured[1], switch_terms = (self.gamma_f, self.gamma_r) )
def test_init_with_nones(self): wg= self.wg actuals = [ wg.thru( name='thru'), wg.short(nports=2, name='short'), wg.line(45,'deg',name='line'), ] ideals = [ None, wg.short(nports=2, name='short'), None, ] measured = [self.measure(k) for k in actuals] self.cal = rf.TRL( ideals = ideals, measured = measured, switch_terms = (self.gamma_f, self.gamma_r) ) self.cal.run()
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') 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') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length #self.X.s[:,0,0] *=1e-1 #self.Y.s[:,0,0] *=1e-1 #self.X.s[:,1,1] *=1e-1 #self.Y.s[:,1,1] *=1e-1 ideals = None actuals = [ wg.thru(name='thru'), wg.short(nports=2, name='short'), wg.open(nports=2, name='open'), wg.attenuator(-3, True, 45, 'deg'), wg.attenuator(-6, True, 90, 'deg'), wg.attenuator(-8, True, 145, 'deg'), ] self.actuals = actuals measured = [self.measure(k) for k in actuals] self.cal = rf.TRL( ideals=[None, -1, 1, None, None, None], measured=measured, isolation=measured[1], switch_terms=(self.gamma_f, self.gamma_r), n_reflects=2, )
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') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length #self.X.s[:,0,0] *=1e-1 #self.Y.s[:,0,0] *=1e-1 #self.X.s[:,1,1] *=1e-1 #self.Y.s[:,1,1] *=1e-1 ideals = None actuals = [ wg.thru(name='thru'), wg.short(nports=2, name='short'), wg.short(nports=2, name='open'), wg.attenuator(-3, True, 45, 'deg'), wg.attenuator(-6, True, 90, 'deg'), wg.attenuator(-8, True, 145, 'deg'), ] self.actuals = actuals measured = [self.measure(k) for k in actuals] self.cal = rf.TRL( ideals=ideals, measured=measured, switch_terms=(self.gamma_f, self.gamma_r), n_reflects=2, )
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') # make error networks have s21,s12 >> s11,s22 so that TRL # can guess at line length self.X.s[:,0,0] *=1e-1 self.Y.s[:,0,0] *=1e-1 self.X.s[:,1,1] *=1e-1 self.Y.s[:,1,1] *=1e-1 actuals = [ wg.thru( name='thru'), wg.short(nports=2, name='short'), wg.line(45,'deg',name='line'), ] ideals = [ wg.thru( name='thru'), wg.short(nports=2, name='short'), wg.line(90,'deg',name='line'), ] measured = [self.measure(k) for k in actuals] self.cal = rf.TRL( ideals = ideals, measured = measured, 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)
my_ideals = [None, -1, None] my_measured = [\ THRU, REFLECT, LINE, ] #%% ## create a Calibration instance trl = rf.TRL(\ measured = my_measured, ideals = my_ideals, estimate_line = True, switch_terms = SWITCH_TERMS, ) # run calibration algorithm trl.run() #%% setup measurements f_start = THRU.f[0] f_stop = THRU.f[-1] f_npoints = len(THRU.f) # f_start = 8E9 # f_stop = 12E9