コード例 #1
0
ファイル: vna.py プロジェクト: ymz000/vna-2
    def cal_one_port(self):

        dut = self.network

        # Load recently measured files
        meas_short = self.load("cal/cal_short")
        meas_open = self.load("cal/cal_open")
        meas_load = self.load("cal/cal_load")

        if dut.f[-1] > meas_short.f[-1]:
            dut.crop(meas_short.f[0], meas_short.f[-1])

        frequency = dut.frequency

        meas_short = meas_short.interpolate(frequency)
        meas_open = meas_open.interpolate(frequency)
        meas_load = meas_load.interpolate(frequency)

        # Load cal kit files
        cal_kit_short = self.load("data/cal_kit/cal_short_interp")
        cal_kit_open = self.load("data/cal_kit/cal_open_interp")
        cal_kit_load = self.load("data/cal_kit/cal_load_interp")

        cal_kit_short = cal_kit_short.interpolate(frequency)
        cal_kit_open = cal_kit_open.interpolate(frequency)
        cal_kit_load = cal_kit_load.interpolate(frequency)

        cal = rf.OnePort(ideals=[cal_kit_open, cal_kit_short, cal_kit_load],
                         measured=[meas_open, meas_short, meas_load],
                         rcond=None)
        cal.run()

        self.network = cal.apply_cal(dut)
コード例 #2
0
ファイル: vna_driver.py プロジェクト: hongshui3000/vna
    def slot_calibrate_twoport(self, fstart, fstop, points):
        sweep_freqs = np.linspace(fstart, fstop, points) / 1e9
        cal_kit = self.generate_sdrkits_cal_standard(sweep_freqs)

        raw_input("connect short to port 1, then press enter to continue")
        self.cal_short_p1 = self.sweep(fstart, fstop, points)
        raw_input("connect load to port 1, then press enter to continue")
        self.cal_load_p1 = self.sweep(fstart, fstop, points)
        raw_input("connect open to port 1, then press enter to continue")
        self.cal_open_p1 = self.sweep(fstart, fstop, points)

        raw_input("connect short to port 2, then press enter to continue")
        self.cal_short_p2 = self.sweep(fstart, fstop, points)
        raw_input("connect load to port 2, then press enter to continue")
        self.cal_load_p2 = self.sweep(fstart, fstop, points)
        raw_input("connect open to port 2, then press enter to continue")
        self.cal_open_p2 = self.sweep(fstart, fstop, points)

        raw_input("connect thru, then press enter to continue")
        self.cal_thru = self.sweep(fstart, fstop, points)
        print('todo: finish writing two port calibration')
        pdb.set_trace()
        self.cal_twoport = rf.OnePort(\
                ideals = cal_kit,\
                measured = [self.cal_short, self.cal_open, self.cal_load])

        self.cal_twoport.run()
コード例 #3
0
ファイル: oneportmeas.py プロジェクト: adleksey/OnePortMeas
    def btn_coax_run(self):
        # SHORT
        if self.APP['coax_short_ideal']:
            self.DATA['coax_short_ch'] = rf.Network(
                frequency=self.DATA['coax_short_m'].frequency,
                s=[
                    -1
                    for x in range(self.DATA['coax_short_m'].frequency.npoints)
                ],
                z0=50,
                name='coax_short_ch')
        else:
            self.DATA['coax_short_ch'] = self.DATA[
                'coax_short_ch'].interpolate_from_f(
                    self.DATA['coax_short_m'].frequency)
        # OPEN
        if self.APP['coax_open_ideal']:
            self.DATA['coax_open_ch'] = rf.Network(
                frequency=self.DATA['coax_open_m'].frequency,
                s=[
                    1
                    for x in range(self.DATA['coax_open_m'].frequency.npoints)
                ],
                z0=50,
                name='coax_open_ch')
        else:
            self.DATA['coax_open_ch'] = self.DATA[
                'coax_open_ch'].interpolate_from_f(
                    self.DATA['coax_short_m'].frequency)
        # LOAD
        if self.APP['coax_load_ideal']:
            self.DATA['coax_load_ch'] = rf.Network(
                frequency=self.DATA['coax_load_m'].frequency,
                s=[
                    0
                    for x in range(self.DATA['coax_load_m'].frequency.npoints)
                ],
                z0=50,
                name='coax_load_ch')
        else:
            self.DATA['coax_load_ch'] = self.DATA[
                'coax_load_ch'].interpolate_from_f(
                    self.DATA['coax_short_m'].frequency)

        self.DATA['coax_cal'] = rf.OnePort(ideals=[
            self.DATA['coax_short_ch'], self.DATA['coax_open_ch'],
            self.DATA['coax_load_ch']
        ],
                                           measured=[
                                               self.DATA['coax_short_m'],
                                               self.DATA['coax_open_m'],
                                               self.DATA['coax_load_m']
                                           ])
        self.DATA['coax_cal'].run()
        self.ui.frameSOL.setEnabled(False)
        self.ui.btn_coax_run.setStyleSheet(self.style_btn_set)
        self.ui.btn_coax_run.setEnabled(False)
        self.ui.btn_coax_clear.setEnabled(True)
        self.clear_plot()
コード例 #4
0
ファイル: vna_driver.py プロジェクト: hongshui3000/vna
    def slot_calibrate_oneport(self, fstart, fstop, points):
        sweep_freqs = np.linspace(fstart, fstop, points) / 1e9
        cal_kit = self.sdrkits_cal_oneport(sweep_freqs)

        raw_input("connect short, then press enter to continue")
        self.cal_short = self.sweep(fstart, fstop, points)

        raw_input("connect load, then press enter to continue")
        self.cal_load = self.sweep(fstart, fstop, points)

        raw_input("connect open, then press enter to continue")
        self.cal_open = self.sweep(fstart, fstop, points)

        self.cal_oneport = rf.OnePort(\
                ideals = cal_kit,\
                measured = [self.cal_short, self.cal_open, self.cal_load])

        self.cal_oneport.run()
コード例 #5
0
    def take_simple_cal(self, load=False):
        self.esp.position = 0
        time.sleep(1)
        '''
		get networks
		'''
        meas = {}
        for x in range(0, 6):
            name = 'ds,' + str(x)
            self.esp.position = -0.04 * x
            time.sleep(1)
            n = self.zva.get_network(name=name)
            meas[name] = n
        '''
		get perfect load
		'''
        if load:
            name = 'pl'
            self.esp.position = 0
            time.sleep(8)
            n = self.zva.get_network(name=name)
            meas[name] = n
        delta = 40
        freq = meas.values()[0].frequency
        air = Freespace(frequency=freq, z0=50)
        si = Freespace(frequency=freq, ep_r=11.7, z0=50)
        if load:
            ideals = [
                air.delay_short(k * delta, 'um', name='ds,%i' % k)
                for k in range(6)
            ] + [air.match(name='pl')]
        else:
            ideals = [
                air.delay_short(k * delta, 'um', name='ds,%i' % k)
                for k in range(6)
            ]  #**si.delay_short(350,'um')
        cal_q = rf.OnePort(measured=meas,
                           ideals=ideals,
                           sloppy_input=True,
                           is_reciprocal=False)
        self.esp.position = 0
        cal_q.plot_caled_ntwks(ls='', marker='.')
        return cal_q
コード例 #6
0
 def setUp(self):
     self.n_ports = 1
     self.wg = rf.RectangularWaveguide(rf.F(75,100,NPTS), a=100*rf.mil,z0=50)
     wg = self.wg
             
     self.E = wg.random(n_ports =2, name = 'E')
     
     ideals = [
             wg.short( name='short'),
             wg.delay_short( 45.,'deg',name='ew'),
             wg.delay_short( 90.,'deg',name='qw'),
             wg.match( name='load'),
             ]
     measured = [self.measure(k) for k in ideals]
     
     self.cal = rf.OnePort(
         is_reciprocal = True, 
         ideals = ideals, 
         measured = measured,
         )
コード例 #7
0
    def setUp(self):
        self.n_ports = 1
        self.wg = WG
        wg = self.wg

        self.E = wg.random(n_ports=2, name='E')

        ideals = [
            wg.short(name='short'),
            wg.delay_short(45., 'deg', name='ew'),
            wg.delay_short(90., 'deg', name='qw'),
            wg.match(name='load'),
        ]
        measured = [self.measure(k) for k in ideals]

        self.cal = rf.OnePort(
            is_reciprocal=True,
            ideals=ideals,
            measured=measured,
        )
コード例 #8
0
                         z0=50)

# read in actual vat3+
vat3_mini = rf.Network('VAT-3+___PLus25degC.s2p')
pdb.set_trace()
mini_open = rf.media.Freespace(vat3_mini.frequency).open()
vat3_mini = rf.connect(vat3_mini, 0, mini_open, 0)

#sdrkit_open.write_touchstone('ideal_open.s1p')
#sdrkit_short.write_touchstone('ideal_short.s1p')
#sdrkit_load.write_touchstone('ideal_load.s1p')

my_ideals = [sdrkit_short, sdrkit_open, sdrkit_load]
my_measured = [cal_short, cal_open, cal_load]

cal = rf.OnePort(ideals=my_ideals, measured=my_measured)
cal.run()

source_match = cal.coefs_3term_ntwks['source match']
directivity = cal.coefs_3term_ntwks['directivity']
reflection_tracking = cal.coefs_3term_ntwks['reflection tracking']

if False:
    source_match.plot_s_db()
    directivity.plot_s_db()
    reflection_tracking.plot_s_db()

barrel_cal = cal.apply_cal(barrel)

anne_cal = cal.apply_cal(anne)
vat3_cal = cal.apply_cal(vat3)
コード例 #9
0
    o_i = skrf.Network(s=open_sparam, f=freqs, f_unit='Hz')

    short_reactance = tline_input(np.zeros(len(freqs), dtype=np.complex), short_offset_z0, short_offset_t, freqs)
    short_sparam = gamma(short_reactance, 50)

    s_i = skrf.Network(s=short_sparam, f=freqs, f_unit='Hz')
    l_sparam = [gamma(tline_input(50, load_offset_z0, load_offset_t, f), 50) for f in freqs]
    l_i = skrf.Network(s=l_sparam, f=freqs, f_unit='Hz')

    return s_i, o_i, l_i

o = skrf.Network('open.s1p')
s = skrf.Network('short.s1p')
l = skrf.Network('load.s1p')
dut = skrf.Network(sys.argv[1])

freqs = o.f

s_i, o_i, l_i = make_standards()

cal = skrf.OnePort(\
        measured = [o, s, l],
        ideals =[o_i, s_i, l_i]
        )

plt.figure()
dut_cal = cal.apply_cal(dut)
dut_cal.plot_s_db()
plt.show(block=True)