Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
 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)
         )
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
    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,
        )
Ejemplo n.º 6
0
    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,
        )
Ejemplo n.º 7
0
 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)
         )
Ejemplo n.º 8
0
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