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] )
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, )
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, )
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) )
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))
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, )
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)
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 )
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] )
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, )
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, )
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)
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)))
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
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):
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))