예제 #1
0
    def collect_scan(self, f_range_mat, npoints_v=[1601], navg_v=[999], power_v=[-50], wait_v=[1], BW_v=[1e3]):
        x = []
        y = []
        range_mat = np.array(f_range_mat)
        len_loop = len(range_mat[:, 0])

        def vector_handling(vector):
            if len(vector) == 1:
                out = vector[0] * np.ones(len_loop)
            else:
                out = vector
            return out

        npoints = vector_handling(npoints_v)
        navg = vector_handling(npoints_v)
        power = vector_handling(power_v)
        wait = vector_handling(wait_v)
        BW = vector_handling(BW_v)

        for i in np.arange(len_loop):
            f_range = range_mat[i, :]
            dat_tmp = self.collect_single(f_range, npoints[i], navg[i], power[i], wait[i], BW[i])
            x = np.hstack((x, dat_tmp.x))
            y = np.hstack((y, dat_tmp.y))

        dat = dm.data_2d()
        dat.load_var(x, y)
        return dat
예제 #2
0
    def collect_single(self, f_range, npoints=1601, navg=999, power=-50, wait=1, BW=1e3):
        """This function reads S-parameter from the VNA using the specified setting:
        f_range: frequency range in form of a list [f_start, f_stop]
        npoints: the the number of frequency points to measure
        navg = number of averaging measurements (average coefficient)
        power = RF_out power in dB
        wait =  data collection time in seconds
        BW = IF bandwidth"""
        self.IFBW(BW)
        self.freq_npoints(npoints)
        self.freq_start(f_range[0])
        self.freq_stop(f_range[1])
        self.power(power)
        if navg == 0:
            self.average_state(0)
        else:
            self.average_state(1)
            self.average_count(navg)

        self.average_reset()
        time.sleep(wait)  # delay
        x = np.asarray(self.freq_read(), dtype="float")
        y = np.asarray(self.trace_read()[0], dtype="float")

        dat = dm.data_2d()
        dat.load_var(x, y)
        return dat
예제 #3
0
def VNA_read(fstart,fstop,power=-60,wait=60):
    x, y = vna_m.collect_sparam(fstart,fstop,power,wait)  
        
    dat = d_m.data_2d()
    dat.load_var(x,y)
    
    return dat
예제 #4
0
 def collect_single_ave(self,f_range,Name,Trace=1,Spar='S21',npoints=1601,navg = 100,power=-50,BW=1e3):
     '''This function reads S-parameter from the VNA using the specified setting:
     f_range: frequency range in form of a list [f_start, f_stop]
     npoints: the the number of frequency points to measure
     navg = number of averaging measurements (average coefficient)
     power = RF_out power in dB
     wait =  data collection time in seconds
     BW = IF bandwidth'''
     self.IFBW(BW)
     self.freq_npoints(npoints)    
     self.freq_start(f_range[0])
     self.freq_stop(f_range[1])
     self.power(power)
     if (navg==0):
         self.average_state(0)
     else:
         self.average_state(1)
         self.average_count(navg)
         
     self.average_reset()
     
     while(self.average_completed() == False):
         time.sleep(1)
     
     self.cmd('CALC'+str(Trace)+':PAR:EXT','\''+Name+'\', \''+Spar+'\'')        
     
     x = np.array(self.freq_read(Name),dtype='float')
     y = np.asarray(self.trace_read(),dtype='float') 
 
     dat = dm.data_2d()  
     dat.load_var(x,y)
     return dat
예제 #5
0
 def collect_scan_correct(self,f_range_mat,npoints_v=[1601],navg_v = [999],power_v=[-50],corr_power_v=[-10],wait_v=[10],corr_wait_v=[1],BW_v=[1e3]):
         dat_cor = self.collect_scan(f_range_mat,npoints_v,navg_v,corr_power_v,corr_wait_v,BW_v)        
         
         dat_mes = self.collect_scan(f_range_mat,npoints_v,navg_v,power_v,wait_v,BW_v)        
     
         dat = dm.data_2d()
         dat.load_var(dat_mes.x,dat_mes.y-dat_cor.y)
         return dat
예제 #6
0
    def collect_single_correct(
        self, f_range, npoints=1601, navg=999, power=-50, corr_power=-10, wait=10, corr_wait=1, BW=1e3
    ):
        dat_cor = self.collect_single(f_range, npoints, navg, corr_power, corr_wait, BW)
        dat_mes = self.collect_single(f_range, npoints, navg, power, wait, BW)

        dat = dm.data_2d()
        dat.load_var(dat_mes.x, dat_mes.y - dat_cor.y)
        return dat
예제 #7
0
 def collect_single_correct_ave(self,f_range,name,npoints=1601,navg=100,power=-50,corr_power=-10,corr_wait=1,BW=1e3):
         dat_cor = self.collect_single(f_range,name,npoints=npoints,navg=999,power=corr_power,wait=corr_wait,BW=1e3)        
         self.power(-70)            
         time.sleep(2)
         dat_mes = self.collect_single_ave(f_range,name,npoints=npoints,navg=navg,power=power,BW=BW)        
     
         dat = dm.data_2d()
         dat.load_var(dat_mes.x,dat_mes.y-dat_cor.y)
         return dat