def make_pre_measurements_actions(): """ Makes all the actions in preparation for the measurements: - initizalize ROACH and generator communications. - creating plotting and data saving elements - setting initial registers in FPGA - turning on generator power """ global roach, rf_generator, fig, lines roach = cd.initialize_roach(roach_ip) rf_generator = rm.open_resource(rf_generator_name) print("Setting up plotting and data saving elements...") fig, lines = create_figure() make_data_directory() print("done") print("Setting accumulation register to " + str(acc_len) + "...") roach.write_int(cal_acc_len_reg, acc_len) print("done") print("Resseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Setting instruments power and outputs...") rf_generator.write("power " + str(rf_power)) rf_generator.write("outp on") print("done")
def main(): # initialize roach roach = cd.initialize_roach(roach_ip, boffile=None) # create figure fig, lines = create_figure(16, bandwidth, dBFS) # initial setting of registers print("Setting and resetting registers...") roach.write_int(acc_len_reg, acc_len) roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") # writing unitary constants into the calibration phase bank print("Setting and phasors in register bank...") for addr in range(16): write_phasor_reg(roach, 1 + 0j, [addr], ['cal_phase_re', 'cal_phase_im'], ['cal_phase_addr'], 'cal_phase_we', 32, 17) print("done") # animation definition def animate(_): # get spectral data specdata_list = get_specdata(roach, specbrams, 2, bram_addr_width, bram_word_width, bram_data_type) for line, specdata in zip(lines, specdata_list): specdata = cd.scale_and_dBFS_specdata(specdata, acc_len, dBFS) line.set_data(freqs, specdata) return lines ani = FuncAnimation(fig, animate, blit=True) plt.show()
def main(): # initialization roach = cd.initialize_roach(roach_ip) print("Setting model registers...") roach.write_int(acc_len_reg, acc_len) roach.write_int(filter_gain_reg, filter_gain) roach.write_int(filter_acc_reg, filter_acc) roach.write_int(filter_chnl_reg, filter_chnl) roach.write_int(filter_on_reg, 0) print("done") print("Resseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Setting GUI elements...") fig, lines = create_window(roach) print("done.") # animation function def animate(_): for line, specbrams in zip(lines, specbrams_list): # update acc_len acc_len = roach.read_uint(acc_len_reg) # get spectral data specdata = cd.read_interleave_data(roach, specbrams, spec_addr_width, spec_word_width, spec_data_type) specdata = cd.scale_and_dBFS_specdata(specdata, acc_len, dBFS) line.set_data(freqs, specdata) return lines anim = animation.FuncAnimation(fig, animate, blit=True) Tk.mainloop()
def main(): # initialize roach roach = cd.initialize_roach(roach_ip, boffile=boffile) # create figures fig, lines = create_figure() # initial setting of registers print("Setting accumulation registers.") accs = compute_accs() for acc, acc_reg in zip(accs, acc_regs): roach.write_int(acc_reg, acc) print("Resseting counter registers.") roach.write_int(count_reg, 1) roach.write_int(count_reg, 0) print("done.") # animation definition def animate(_): for line, bram in zip(lines, bram_list): # get spectral data frbdata = cd.read_data(roach, bram, bram_addr_width, bram_word_width, bram_data_type) frbdata = 10*np.log10(frbdata+1) line.set_data(range(len(frbdata)),frbdata) return lines ani = FuncAnimation(fig, animate, blit=True) plt.show()
def initialize(self, cal_acclen, bf_acclen): """ Create roach communication object, initialize model accumulators and set initial input calibration to ideal. :param cal_acclen: calibration accumulation length. :param bf_acclen: beam forming accumulation length. """ # initialize roach self.roach = cd.initialize_roach(self.roach_ip, boffile=None) # initial setting of registers print("Setting and resetting registers...") self.roach.write_int(self.cal_acclen_reg, cal_acclen) self.roach.write_int(self.cal_cntrst_reg, 1) self.roach.write_int(self.cal_cntrst_reg, 0) self.roach.write_int(self.bf_acclen_reg, bf_acclen) self.roach.write_int(self.bf_cntrst_reg, 1) self.roach.write_int(self.bf_cntrst_reg, 0) print("done") # writing unitary constants into the calibration phase bank print("Setting ideal constants for bf initialization...") for addr in range(self.ninputs): write_phasor_reg(self.roach, 1+0j, [addr], self.cal_phase_regs, self.cal_addr_regs, self.cal_we_reg, 32, 17) print("done")
def main(): global roach, rf_generator, fig, line0, line1, line2, line3 start_time = time.time() roach = cd.initialize_roach(roach_ip) noise_source = cd.Instrument(noise_source_ip) print("Setting up plotting and data saving elements...") fig, line0, line1, line2, line3 = create_figure() make_data_directory() print("done") print("Setting accumulation register to " + str(acc_len) + "...") roach.write_int(acc_len_reg, acc_len) print("done") print("Resseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Turning noise source off...") #noise_source.write('OUTPUT CH1,OFF') time.sleep(1) print("done") ##################### # Start Measurement # ##################### print("Getting calibration data...") a2, b2, ab = get_caldata() print("done") print("Saving data...") np.savez(datadir + "/caldata", a2=a2, b2=b2, ab=ab) print("done") print("Printing data...") print_data() print("done") print("Compressing data...") compress_data() print("done") print("Finished. Total time: " + str(int(time.time() - start_time)) + "[s]") print("Close plots to finish.") plt.show()
def main(): # initialize fpga = cd.initialize_roach('192.168.1.12', boffile='qdr_ct_test.bof.gz', upload=True) # calibrate qdr my_qdr = cd.Qdr(fpga, 'qdr0') my_qdr.qdr_cal(fail_hard=True, verbosity=1) time.sleep(0.1) # read data fpga.write_int('qdr_en', 1) time.sleep(2) # create check data check_data = create_check_data() # create figure fig, line_orig, line_tran = create_figure() # animation definition def animate(_): # get data orig_data = np.frombuffer(fpga.read('original', (2**8) * (2**8) * 4, 0), dtype='>u4') tran_data = np.frombuffer(fpga.read('transpose', (2**8) * (2**8) * 4, 0), dtype='>u4') # check data correctness if not np.array_equal(tran_data, check_data): print("ERROR: read data not equal to expected data!") print("Read data:") print(tran_data) print("Expected data:") print(check_data) # plot data line_orig.set_data(range(2**16), orig_data) line_tran.set_data(range(2**16), tran_data) return [] ani = FuncAnimation(fig, animate, blit=True) plt.show()
def make_pre_measurements_actions(): """ Makes all the actions in preparation for the measurements: - Extract calibration data. - initizalize ROACH and generator communications. - creating plotting and data saving elements - setting initial registers in FPGA - turning on generator power """ global roach, rf_generator, lo1_generator, lo2_generator, caldir, fig, lines roach = cd.initialize_roach(roach_ip) lo1_generator = rm.open_resource(lo1_generator_name) lo2_generator = rm.open_resource(lo2_generator_name) rf_generator = rm.open_resource(rf_generator_name) print("Extracting compressed calibration data...") caldir = caltar[:-7] tarfile.open(caltar).extractall(path=caldir) print("done.") print("Setting up plotting and data saving elements...") if show_plots: fig, lines = create_figure() make_data_directory() print("done") print("Setting accumulation register to " + str(acc_len) + "...") roach.write_int(syn_acc_len_reg, acc_len) print("done") print("Resseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Setting instruments power and outputs...") lo1_generator.write("power " + str(lo1_power)) lo1_generator.write("freq:mult " + str(lo1_mult)) lo2_generator.write("power " + str(lo2_power)) rf_generator.write("power " + str(rf_power)) rf_generator.write("freq:mult " + str(rf_mult)) lo1_generator.write("outp on") lo2_generator.write("outp on") rf_generator.write("outp on") print("done")
def main(): # initialize roach roach = cd.initialize_roach(roach_ip, boffile=boffile, timeout=120) time.sleep(1) # create figure img, cbar = create_colormap_fig(extent) # get spectrogram data print("Getting DRAM data...") specgram_data = get_dram_spectrogram_data(roach, dram_addr_width, dram_word_width, dram_data_type) print("done") # plot spectrogram img.set_data(specgram_data) img.set_clim(vmin=np.min(specgram_data), vmax=np.max(specgram_data)) cbar.update_normal(img) plt.show()
def main(): # initialize roach communication roach = cd.initialize_roach(roach_ip, boffile=None) # create figure fig, rects = create_figure(pow_regs) # initial setting of registers print("Setting and resetting registers...") roach.write_int(acc_len_reg, acc_len) roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") # animation definition def animate(_): powdata = get_powdata(roach, pow_regs) for rect, pow in zip(rects, powdata): rect.set_height(pow) return rects ani = FuncAnimation(fig, animate, blit=True) plt.show()
def main(): global roach, rf_generator, fig, line0, line1, line2, line3 start_time = time.time() roach = cd.initialize_roach(roach_ip) rf_generator = cd.Instrument(rf_generator_ip) print("Setting up plotting and data saving elements...") fig, line0, line1, line2, line3 = create_figure() make_data_directory() print("done") print("Setting accumulation register to " + str(acc_len) + "...") roach.write_int(acc_len_reg, acc_len) print("done") print("Resseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Setting instruments power and outputs...") rf_generator.write("power " + str(rf_power)) rf_generator.write("outp on") print("done") ##################### # Start Measurement # ##################### print("Starting tone sweep in upper sideband...") sweep_time = time.time() rf_freqs = lo_freq + if_freqs a2_toneusb, b2_toneusb, ab_toneusb = get_caldata(rf_freqs, "usb") print("done (" + str(int(time.time() - sweep_time)) + "[s])") print("Starting tone sweep in lower sideband...") sweep_time = time.time() rf_freqs = lo_freq - if_freqs a2_tonelsb, b2_tonelsb, ab_tonelsb = get_caldata(rf_freqs, "lsb") print("done (" + str(int(time.time() - sweep_time)) + "[s])") print("Turning off instruments...") rf_generator.write("outp off") print("done") print("Saving data...") np.savez(datadir + "/caldata", a2_toneusb=a2_toneusb, b2_toneusb=b2_toneusb, ab_toneusb=ab_toneusb, a2_tonelsb=a2_tonelsb, b2_tonelsb=b2_tonelsb, ab_tonelsb=ab_tonelsb) print("done") print("Printing data...") print_data() print("done") print("Compressing data...") compress_data() print("done") print("Finished. Total time: " + str(int(time.time() - start_time)) + "[s]")
help="Boffile to load into the FPGA.") parser.add_argument( "-u", "--upload", dest="upload", action="store_true", help="If used, upload .bof from PC memory (ROACH2 only).") parser.add_argument("-cd", "--caldir", dest="caldir", default="", help="Directory with the calibration data.") args = parser.parse_args() roach = cd.initialize_roach(args.ip, boffile=args.boffile, upload=args.upload) bm_load_constants(roach, args.caltar, args.caldir) def dss_load_constants(roach, caldir): """ Load load digital sideband separation constants. :param roach: FpgaClient object to communicate with roach. :param caldir: directory with the calibration data. """ consts_lsb, consts_usb = compute_consts(caldir) load_comp_constants(roach, consts_usb, bram_consts_usb_re, bram_consts_usb_im) load_comp_constants(roach, consts_lsb, bram_consts_lsb_re,
def main(): global roach, rf_generator, fig, line3 start_time = time.time() roach = cd.initialize_roach(roach_ip) noise_source = cd.Instrument(noise_source_ip) print("Setting up plotting and data saving elements...") fig, lines = create_figure() line3 = lines[6] make_data_directory() print("done") print("Setting accumulation register to " + str(acc_len) + "...") roach.write_int(acc_len_reg, acc_len) print("done") print("Reseting counter registers...") roach.write_int(cnt_rst_reg, 1) roach.write_int(cnt_rst_reg, 0) print("done") print("Turning noise source off...") noise_source.write('OUTPUT CH1,OFF') #noise_source.write('OUTPUT CH2,OFF') time.sleep(1) ##################### # Start Measurement # ##################### # loading calibration constants if load_consts: dbm_load_constants(roach, load_ideal, 1+0j, caldir) print("Getting lnr cold data...") rf_cold, lo_cold = get_lnrdata(lines[0], lines[2], lines[4]) print("done") #raw_input("Change source to hot and press any key...") print("Turning noise source on...") noise_source.write('OUTPUT CH1,ON') #noise_source.write('OUTPUT CH2,ON') time.sleep(1) print("done") print("Getting lnr hot data...") rf_hot, lo_hot = get_lnrdata(lines[1], lines[3], lines[5]) print("done") print("Saving data...") np.savez(datadir+"/lnrdata", rf_cold=rf_cold,lo_cold=lo_cold, rf_hot =rf_hot, lo_hot =lo_hot) print("done") print("Printing data...") print_data() print("done") print("Compressing data...") compress_data() print("done") print("Finished. Total time: " + str(int(time.time() - start_time)) + "[s]") print("Close plots to finish.") plt.show()