Пример #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]
            )
Пример #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,
        )
Пример #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,
         )
Пример #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)
         )
Пример #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))
Пример #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,
        )
Пример #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)
Пример #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 )
Пример #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]
            )
Пример #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,
         )
Пример #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,
        )
Пример #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)
Пример #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)
         )
#     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)))
Пример #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
Пример #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):
Пример #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))