def runExpt(cparVal, cserVal, S11mV_ref, useRef): # useRef: use the pregenerated S11mV_ref as a reference to compute # reflection. If this option is 0, then the compute_wobble will instead # generated S11 in mV format instead of dB format if meas_time: start_time = time.time() # enable power and signal path nmrObj.assertControlSignal(nmrObj.RX1_2L_msk | nmrObj.RX_SEL2_msk | nmrObj.RX_FL_msk) nmrObj.assertControlSignal(nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk | nmrObj.PSU_5V_TX_N_EN_msk | nmrObj.PSU_5V_ADC_EN_msk | nmrObj.PSU_5V_ANA_P_EN_msk | nmrObj.PSU_5V_ANA_N_EN_msk) # change matching network values (twice because sometimes it doesnt' work # once due to transient nmrObj.setMatchingNetwork(cparVal, cserVal) nmrObj.setMatchingNetwork(cparVal, cserVal) # do measurement nmrObj.wobble(sta_freq, sto_freq, spac_freq, samp_freq) # disable all to save power nmrObj.deassertAll() if meas_time: elapsed_time = time.time() - start_time start_time = time.time() # reset the start time print("### time elapsed for running wobble exec: %.3f" % (elapsed_time)) # compute the generated data meas_folder = parse_simple_info(data_parent_folder, 'current_folder.txt') S11dB, S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq = compute_wobble( nmrObj, data_parent_folder, meas_folder[0], -10, S11mV_ref, useRef, en_fig, fig_num) print( '\t\tfmin={:0.3f} fmax={:0.3f} bw={:0.3f} minS11={:0.2f} minS11_freq={:0.3f} cparVal={:d} cserVal={:d}' .format(S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq, cparVal, cserVal)) if meas_time: elapsed_time = time.time() - start_time print("### time elapsed for compute_wobble: %.3f" % (elapsed_time)) return S11dB, minS11_freq
def wobb_meas(data_parent_folder, cparIdx, cserIdx, s11_obj, en_fig): startfreq = 3 stopfreq = 5.5 spacfreq = 0.02 sampfreq = 25 wobb_samples = int(sampfreq / spacfreq) command = ("./thesis_nmr_de1soc_hdl2.0_wobble" + " " + str(cparIdx) + " " + str(cserIdx) + " " + str(startfreq) + " " + str(stopfreq) + " " + str(spacfreq) + " " + str(sampfreq) + " " + str(wobb_samples)) os.system(command + ' > /dev/null') meas_folder = parse_simple_info(data_parent_folder, 'current_folder.txt') S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq = compute_wobble( data_parent_folder, meas_folder[0], s11_obj, en_fig) #print('fmin={0:0.3f} fmax={1:0.3f} bw={2:0.3f}'.format(S11_fmin, S11_fmax, S11_bw)) return S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq
def runExpt(cparVal, cserVal, minReflxTable): if meas_time: start_time = time.time() nmrObj.assertControlSignal(nmrObj.RX_IN_SEL_2_msk | nmrObj.PAMP_IN_SEL_RX_msk) nmrObj.assertControlSignal(nmrObj.AMP_HP_LT1210_EN_msk | nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk) # change matching network values (twice because sometimes it doesnt' work once due to transient nmrObj.setMatchingNetwork(cparVal, cserVal) nmrObj.setMatchingNetwork(cparVal, cserVal) # do measurement nmrObj.wobble(freqSta, freqSto, freqSpa, freqSamp) # disable all to save power nmrObj.deassertControlSignal(nmrObj.AMP_HP_LT1210_EN_msk | nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk) nmrObj.deassertControlSignal(nmrObj.RX_IN_SEL_2_msk | nmrObj.PAMP_IN_SEL_RX_msk) if meas_time: elapsed_time = time.time() - start_time start_time = time.time() # reset the start time print("### time elapsed for running wobble exec: %.3f" % (elapsed_time)) # compute the generated data meas_folder = parse_simple_info(data_parent_folder, 'current_folder.txt') S11mV, S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq = compute_wobble( nmrObj, data_parent_folder, meas_folder[0], S11_min, en_fig, fig_num) print( '\t\tfmin={:0.3f} fmax={:0.3f} bw={:0.3f} minS11={:0.2f} minS11_freq={:0.3f} cparVal={:d} cserVal={:d}' .format(S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq, cparVal, cserVal)) if meas_time: elapsed_time = time.time() - start_time print("### time elapsed for compute_wobble: %.3f" % (elapsed_time)) # update the table minReflxTable = updateTable(minReflxTable, S11mV, cparVal, cserVal) # move the measurement folder to the main folder swfolder_ind = swfolder + '/' + str('Cp_[{:d}]__Cs_[{:d}]'.format( cparVal, cserVal)) if en_fig: shutil.move(data_parent_folder + '/' + meas_folder[0] + '/wobble.png', swfolder + '/' + str('plot_Cp_[{:d}]__Cs_[{:d}].png'.format( cparVal, cserVal))) # move the figure if keepRawData: # write gain values to a file RawDataFile = open( swfolder + '/S11_Cp_[{:d}]__Cs_[{:d}].txt'.format(cparVal, cserVal), 'w') RawDataFile.write('freq(MHz)\t min-voltage(mV)\n') RawDataFile.close() with open( swfolder + '/S11_Cp_[{:d}]__Cs_[{:d}].txt'.format(cparVal, cserVal), 'a') as f: for (a, b) in zip(freqSw, S11mV): f.write('{:-8.3f},{:-8.3f}\n'.format(a, b)) shutil.rmtree(data_parent_folder + '/' + meas_folder[0]) # move the data folder else: shutil.rmtree(data_parent_folder + '/' + meas_folder[0]) return S11mV, minS11_freq, minReflxTable
while True: nmrObj.assertControlSignal(nmrObj.RX_IN_SEL_1_msk | nmrObj.PAMP_IN_SEL_TEST_msk) nmrObj.assertControlSignal(nmrObj.AMP_HP_LT1210_EN_msk | nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk) time.sleep(0.1) sta_freq = 1 sto_freq = 4 spac_freq = 0.01 samp_freq = 25 nmrObj.wobble(sta_freq, sto_freq, spac_freq, samp_freq) nmrObj.deassertControlSignal(nmrObj.AMP_HP_LT1210_EN_msk | nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk) nmrObj.deassertControlSignal(nmrObj.RX_IN_SEL_1_msk | nmrObj.PAMP_IN_SEL_TEST_msk) S11_min = -10 meas_folder = parse_simple_info(data_parent_folder, 'current_folder.txt') # meas_folder[0] = "nmr_wobb_2018_06_25_12_44_48" S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq = compute_wobble( data_parent_folder, meas_folder[0], S11_min, en_fig, fig_num) print( 'fmin={0:0.3f} fmax={1:0.3f} bw={2:0.3f} minS11={3:0.2f} minS11_freq={4:0.2f}' .format(S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq))
def runExpt( cparVal, cserVal, S11mV_ref, useRef ): # useRef: use the pregenerated S11mV_ref as a reference to compute reflection. If this option is 0, then the compute_wobble will instead generated S11 in mV format instead of dB format # global variable global exptnum global minReflxTable global minReflxTable_tmp exptnum = exptnum + 1 if meas_time: start_time = time.time() # enable power and signal path nmrObj.assertControlSignal( nmrObj.RX1_2L_msk | nmrObj.RX_SEL2_msk | nmrObj.RX_FL_msk ) nmrObj.assertControlSignal( nmrObj.PSU_15V_TX_P_EN_msk | nmrObj.PSU_15V_TX_N_EN_msk | nmrObj.PSU_5V_TX_N_EN_msk | nmrObj.PSU_5V_ADC_EN_msk | nmrObj.PSU_5V_ANA_P_EN_msk | nmrObj.PSU_5V_ANA_N_EN_msk ) # change matching network values (twice because sometimes it doesnt' work once due to transient nmrObj.setMatchingNetwork( cparVal, cserVal ) nmrObj.setMatchingNetwork( cparVal, cserVal ) # do measurement nmrObj.wobble( freqSta, freqSto, freqSpa, freqSamp ) # disable all to save power nmrObj.deassertAll() if meas_time : elapsed_time = time.time() - start_time start_time = time.time() # reset the start time print( "### time elapsed for running wobble exec: %.3f" % ( elapsed_time ) ) # compute the generated data meas_folder = parse_simple_info( data_parent_folder, 'current_folder.txt' ) S11dB, S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq = compute_wobble( nmrObj, data_parent_folder, meas_folder[0], S11_min, S11mV_ref, useRef, en_fig, fig_num ) print( '\t\tfmin={:0.3f} fmax={:0.3f} bw={:0.3f} minS11={:0.2f} minS11_freq={:0.3f} cparVal={:d} cserVal={:d}'.format( S11_fmin, S11_fmax, S11_bw, minS11, minS11_freq, cparVal, cserVal ) ) if meas_time : elapsed_time = time.time() - start_time print( "### time elapsed for compute_wobble: %.3f" % ( elapsed_time ) ) # update the table minReflxTable = updateTable( minReflxTable, S11dB, cparVal, cserVal ) minReflxTable_tmp = updateTable( minReflxTable_tmp, S11dB, cparVal, cserVal ) # move the measurement folder to the main folder swfolder_ind = swfolder + '/' + str( 'Cp_[{:d}]__Cs_[{:d}]'.format( cparVal, cserVal ) ) if en_fig: shutil.move( data_parent_folder + '/' + meas_folder[0] + '/wobble.png', swfolder + '/' + str( 'plt{:03d}_Cp_[{:d}]__Cs_[{:d}].png'.format( exptnum, cparVal, cserVal ) ) ) # move the figure if keepRawData: # write gain values to a file RawDataFile = open( swfolder + '/S11_Cp_[{:d}]__Cs_[{:d}].txt'.format( cparVal, cserVal ), 'w' ) RawDataFile.write( 'freq(MHz)\t min-voltage(mV)\n' ) RawDataFile.close() with open( swfolder + '/S11_Cp_[{:d}]__Cs_[{:d}].txt'.format( cparVal, cserVal ), 'a' ) as f: for ( a, b ) in zip ( freqSw, S11dB ): f.write( '{:-8.3f},{:-8.3f}\n' .format( a, b ) ) shutil.rmtree ( data_parent_folder + '/' + meas_folder[0] ) # remove the data folder else: shutil.rmtree( data_parent_folder + '/' + meas_folder[0] ) # remove the data folder return S11dB, minS11_freq