コード例 #1
0
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")
コード例 #2
0
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()
コード例 #3
0
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()
コード例 #4
0
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()
コード例 #5
0
    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")
コード例 #6
0
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()
コード例 #7
0
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()
コード例 #8
0
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")
コード例 #9
0
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()
コード例 #10
0
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()
コード例 #11
0
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]")
コード例 #12
0
                        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,
コード例 #13
0
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()