Пример #1
0
 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], 
         )
Пример #2
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')
     
     
     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)
         )
Пример #3
0
    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()
Пример #4
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')
        #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))
Пример #5
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)
Пример #6
0
    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),
        )
Пример #7
0
            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)