Ejemplo n.º 1
0
    def setUp(self):
        
        self.n_ports = 2
        self.wg = rf.RectangularWaveguide(rf.F(75,100,2), a=100*rf.mil,z0=50)
        wg= self.wg 
        #wg.frequency = rf.F.from_f([100])
        
        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')
        
        
        actuals = [
            wg.short(nports=2, name='short'),
            wg.open(nports=2, name='open'),
            wg.match(nports=2, name='match'),
            wg.impedance_mismatch(50,45)**wg.line(20,'deg',name='line')**wg.impedance_mismatch(45,50)

            ]
        
        ideals = [
            wg.short(nports=2, name='short'),
            wg.open(nports=2, name='open'),
            wg.match(nports=2, name='match'),
            wg.thru(name='thru'),
            ]
            
        measured = [self.measure(k) for k in actuals]
        
        self.cal = rf.UnknownThru(
            ideals = ideals,
            measured = measured,
            switch_terms = [self.gamma_f, self.gamma_r]
            )
Ejemplo n.º 2
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'),
        ]
        actuals = [
            wg.short(name='short'),
            wg.delay_short(10., 'deg', name='ew'),
            wg.delay_short(80., 'deg', name='qw'),
            wg.match(name='load'),
        ]
        measured = [self.measure(k) for k in actuals]

        self.cal = rf.SDDL(
            is_reciprocal=True,
            ideals=ideals,
            measured=measured,
        )
Ejemplo n.º 3
0
 def setUp(self):
     self.n_ports = 2
     self.wg = rf.RectangularWaveguide(rf.F(75,100,11), a=100*rf.mil,z0=50)
     wg  = self.wg
     wg.frequency = rf.F.from_f([100])
     self.wg = wg
     self.Xf = wg.random(n_ports =2, name = 'Xf')
     self.Xr = wg.random(n_ports =2, name = 'Xr')
     self.Yf = wg.random(n_ports =2, name='Yf')
     self.Yr = wg.random(n_ports =2, name='Yr')
    
     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.SOLT(
         ideals = ideals,
         measured = measured,
         )
Ejemplo n.º 4
0
 def setUp(self):
     self.n_ports = 2
     self.wg = rf.RectangularWaveguide(rf.F(75,100,3), a=100*rf.mil,z0=50)
     wg= self.wg
     wg.frequency = rf.F.from_f([100])
     
     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)
         )
Ejemplo n.º 5
0
    def setUp(self):
        self.n_ports = 2
        self.wg = rf.RectangularWaveguide(rf.F(75, 100, 3),
                                          a=100 * rf.mil,
                                          z0=50)
        wg = self.wg
        wg.frequency = rf.F.from_f([100])

        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_sets = []
        for ideal in ideals:
            ns = rf.NetworkSet([self.measure(ideal) for k in range(3)])
            measured_sets.append(ns)

        self.calset = Dot(cal_class=EightTerm,
                          ideals=ideals,
                          measured_sets=measured_sets,
                          switch_terms=(self.gamma_f, self.gamma_r))
Ejemplo n.º 6
0
    def setUp(self):
        #raise SkipTest('Doesnt work yet')
        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')
        #self.E.s[0,:,:] = npy.array([[.1j,1],[1j,1j+2]])
        #print self.E.s[0]

        ideals = [
            wg.short(name='short'),
            wg.delay_short(45., 'deg', name='ew'),
            wg.delay_short(90., 'deg', name='qw'),
            wg.load(.2 + .2j, name='load'),
        ]
        actuals = [
            wg.short(name='short'),
            wg.delay_short(10., 'deg', name='ew'),
            wg.delay_short(80., 'deg', name='qw'),
            wg.load(.2 + .2j, name='load'),
        ]
        measured = [self.measure(k) for k in actuals]

        self.cal = rf.SDDLWeikle(
            is_reciprocal=True,
            ideals=ideals,
            measured=measured,
        )
Ejemplo n.º 7
0
    def test_line(self):
        '''
        '''
        fname = os.path.join(self.files_dir,\
                'rectangularWaveguideWR10,200mil.s2p')

        qucs_ntwk = rf.Network(fname)
        wg = rf.RectangularWaveguide(frequency=qucs_ntwk.frequency,
                                     a=100 * rf.mil)
        skrf_ntwk = wg.thru(z0=50)**wg.line(200 * rf.mil, 'm')**wg.thru(z0=50)
        self.assertEqual(qucs_ntwk, skrf_ntwk)
Ejemplo n.º 8
0
 def wg_make_stds(self):
     self.DATA['wg'] = rf.RectangularWaveguide(
         frequency=self.DATA['wg_short_m'].frequency,
         a=float(self.ui.edit_wg_a.text()) * rf.milli,
         b=float(self.ui.edit_wg_b.text()) * rf.milli,
         z0=50)
     self.DATA['wg_short'] = self.DATA['wg'].short()
     self.DATA['wg_offset'] = self.DATA['wg'].delay_short(
         d=float(self.ui.edit_wg_l4_length.text()) * rf.milli, unit='m')
     self.DATA['wg_match'] = self.DATA['wg'].match()
     self.APP['waveguide'] = True
     self.ui.edit_wg_a.setEnabled(False)
     self.ui.edit_wg_b.setEnabled(False)
     self.ui.edit_wg_l4_length.setEnabled(False)
 def test_conductor_loss(self):
     '''
     This only compares the magnitude of the generated line, because
     the loss approximation doesnt account for reactance of field on
     sidewalls.
     '''
     ntwk = rf.Network(os.path.join(self.pwd, 'wr1p5_1in_swg_Al_0rough.s2p'))
     wg = rf.RectangularWaveguide(
         ntwk.frequency,
         15*rf.mil,
         z0=50,
         rho = 1/(3.8e7),
         )
     self.assertTrue(
         max(abs(wg.line(1*rf.inch).s_mag[:,1,0] - ntwk.s_mag[:,1,0]))<1e-3 )
Ejemplo n.º 10
0
    def setUp(self):
        
        self.n_ports = 2
        self.wg = rf.RectangularWaveguide(rf.F(75,100,2), a=100*rf.mil,z0=50)
        wg= self.wg 
        #wg.frequency = rf.F.from_f([100])
        
        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')
        
        
        def delay_shorts(d1,d2):
            ds1 = wg.delay_short(d1,'deg')
            ds2 = wg.delay_short(d2,'deg')
            return rf.two_port_reflect(ds1,ds2)
        
        actuals = [
            wg.short(nports=2, name='short'),
            delay_shorts(65,130),
            delay_shorts(120,75),
            wg.load(.2+.2j,nports=2, name='match'),
            wg.impedance_mismatch(50,45)**wg.line(20,'deg',name='line')**wg.impedance_mismatch(45,50)

            ]
        
        ideals = [
            wg.short(nports=2, name='short'),
            delay_shorts(45,90),
            delay_shorts(90,45),
            wg.load(.2+.2j,nports=2, name='match'),
            wg.thru(name='thru'),
            ]
            
        measured = [self.measure(k) for k in actuals]
        
        self.cal = rf.MRC(
            ideals = ideals,
            measured = measured,
            switch_terms = [self.gamma_f, self.gamma_r]
            )
Ejemplo n.º 11
0
 def setUp(self):
     self.n_ports = 1
     self.wg = rf.RectangularWaveguide(rf.F(75,100,11), a=100*rf.mil,z0=50)
     wg = self.wg
     wg.frequency = rf.F.from_f([100])
     
     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,
         )
Ejemplo n.º 12
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.º 13
0
    def setUp(self):
        self.wg = rf.RectangularWaveguide(rf.F(75, 100, 11),
                                          a=100 * rf.mil,
                                          z0=50)
        wg = self.wg
        self.n_ports = 1
        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_sets = []
        for ideal in ideals:
            ns = rf.NetworkSet([self.measure(ideal) for k in range(3)])
            measured_sets.append(ns)

        self.calset = Dot(cal_class=OnePort,
                          ideals=ideals,
                          measured_sets=measured_sets,
                          is_reciprocal=True)
Ejemplo n.º 14
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.º 15
0
#     temp.z0 = waveguide.z0
#     element = left.inv ** temp ** right.inv  
#     alpha_temp = -a0*b0*(1+element.s[:,0,0]-element.s[:,1,0])/waveguide.k0
#     alpha[:,ii] = alpha_temp/np.amax(np.abs(alpha_temp))
# # set up subplot grid

#%%
dict_o_ntwks = rf.read_all(set_data_folder, contains = '.s2p')

a0 = 14E-3
b0 = 0.762E-3

first_ntwk = dict_o_ntwks['trl_corrected_voltage_indx_0']
waveguide = rf.RectangularWaveguide(frequency = first_ntwk.frequency, 
                                    a = a0, 
                                    b = b0, 
                                    ep_r = 3.45, 
                                    nports =2,
                                    )
left= waveguide.line(5E-3, 'm')
right = left
alpha = np.zeros((len(first_ntwk.f), 256), dtype = complex)
for ii in range(256):
    meas_ntwk =dict_o_ntwks['trl_corrected_voltage_indx_' + str(ii)]

    s11_prime = meas_ntwk.s[:,0,0]/(np.exp(-1j*waveguide.k0*1E-2))
    s21_prime = meas_ntwk.s[:,1,0]/(np.exp(-1j*waveguide.k0*1E-2))                            
    alpha_temp = -a0*b0*1j*(1+s11_prime-s21_prime)/waveguide.k0
    # alpha_temp = -1j*(1+s11_prime-s21_prime)/waveguide.k0
    
    alpha[:,ii] = alpha_temp
alpha_max = (np.amax(np.abs(alpha), axis =(1)))
Ejemplo n.º 16
0
from nose.tools import nottest
from nose.plugins.skip import SkipTest

from skrf.calibration import OnePort, PHN, SDDL, TRL, SOLT, UnknownThru, EightTerm, TwoPortOnePath, EnhancedResponse, TwelveTerm, SixteenTerm, LMR16, terminate, determine_line, determine_reflect, NISTMultilineTRL

from skrf import two_port_reflect
from skrf.networkSet import NetworkSet

# number of frequency points to test calibration at .
# i choose 1 for speed, but given that many tests employ *random*
# networks values >100 are better for  initialy verification
global NPTS
NPTS = 1

WG_lossless = rf.RectangularWaveguide(rf.F(75, 100, NPTS),
                                      a=100 * rf.mil,
                                      z0=50)
WG = rf.RectangularWaveguide(rf.F(75, 100, NPTS),
                             a=100 * rf.mil,
                             z0=50,
                             rho='gold')


class DetermineTest(unittest.TestCase):
    def setUp(self):
        self.wg = WG
        wg = self.wg
        self.X = wg.random(n_ports=2, name='X')
        self.Y = wg.random(n_ports=2, name='Y')

        #thru
Ejemplo n.º 17
0
import numpy as npy
from numpy.random import rand
from nose.tools import nottest
from nose.plugins.skip import SkipTest

from skrf.calibration import OnePort, PHN, SDDL, TRL, SOLT, UnknownThru, EightTerm, TwoPortOnePath, EnhancedResponse, TwelveTerm, terminate

from skrf.networkSet import NetworkSet

# number of frequency points to test calibration at
# i choose 1 for speed, but given that many tests employ *random*
# networks values >100 are better for  initialy verification
global NPTS
NPTS = 1

WG = rf.RectangularWaveguide(rf.F(75, 100, NPTS), a=100 * rf.mil, z0=50)


class CalibrationTest(object):
    '''
    This is the generic Calibration test case which all Calibration 
    Subclasses should be able to pass. They must implement
    '''
    def test_accuracy_of_dut_correction(self):
        a = self.wg.random(n_ports=self.n_ports, name='actual')
        m = self.measure(a)
        c = self.cal.apply_cal(m)
        c.name = 'corrected'
        self.assertEqual(c, a)

    def test_error_ntwk(self):
Ejemplo n.º 18
0
dut_corrected.frequency.unit = 'ghz'

dut_corrected.plot_s_deg(ax=ax1)
dut_corrected.plot_s_db(ax=ax2)

# save results
dut_corrected.write_touchstone()
#%%
fig, ax = plt.subplots()
dut_corrected.plot_s_db()
ax.set_ylim(-1, .1)

#%%

RT = rf.RectangularWaveguide(frequency=measurement.frequency,
                             a=14E-3,
                             b=0.762E-3,
                             ep_r=3.45)
left = RT.line(5E-3, 'm', z0=50, embed=True)
right = left

point_alpha = left.inv**dut_corrected**right.inv
alpha = -(1 + point_alpha.s[:, 0, 0] - point_alpha.s[:, 1, 0]) / RT.k0
alpha = alpha / np.amax(np.abs(alpha))

fig = plt.figure(1)
# set up subplot grid
gridspec.GridSpec(2, 2)
plt.subplot2grid((2, 2), (0, 0))
plt.plot(dut_corrected.f, np.abs(alpha))

plt.subplot2grid((2, 2), (1, 0))