Пример #1
0
def main(ic):
    """
    Start up everything and run main loop from here.
    """
    # setup a logger
    log = iono_logger.logger("rx-")

    s = ic.s

    # register signals to be caught
    signal.signal(signal.SIGUSR1, orderlyExit)

    log.log("Sweep freqs:")
    log.log(str(s.freqs))
    log.log("Sweep length %1.2f s Freq step %1.2f" %
            (s.sweep_len_s, s.freq_dur))

    # Configuring USRP
    sample_rate = ic.sample_rate

    # number of samples per freq
    N = int(sample_rate * s.freq_dur)

    # configure usrp
    usrp = uhd.usrp.MultiUSRP("addr=%s,recv_buff_size=500000000" %
                              (ic.rx_addr))
    usrp.set_rx_rate(sample_rate)
    subdev_spec = uhd.usrp.SubdevSpec(ic.rx_subdev)
    usrp.set_rx_subdev_spec(subdev_spec)

    # Synchronizing clock
    gl.sync_clock(usrp, log, min_sync_time=ic.min_gps_lock_time)

    # figure out when to start the cycle.
    t_now = usrp.get_time_now().get_real_secs()
    t_now_dt = datetime.fromtimestamp(t_now)
    # add 5 secs for setup time
    t0 = np.uint64(
        np.floor((t_now + 5.0) / (s.sweep_len_s)) * s.sweep_len_s +
        s.sweep_len_s)
    t0_dt = datetime.fromtimestamp(t0)
    print("starting next sweep at %1.2f (%s) in %1.2f s, time now %1.2f (%s)" %
          (t0, t0_dt.strftime("%FT%T.%f")[:-3], t0 - t_now, t_now,
           t_now_dt.strftime("%FT%T.%f")[:-3]))

    # start with initial frequency
    tune_req = uhd.libpyuhd.types.tune_request(s.freq(0))
    usrp.set_rx_freq(tune_req)

    # start reading data
    housekeeping_thread = threading.Thread(target=housekeeping,
                                           args=(usrp, log, ic))
    housekeeping_thread.daemon = True
    housekeeping_thread.start()

    # infinitely loop on receive
    receive_continuous(usrp, t0, t_now, ic, log)
Пример #2
0
def main():
    """
    Start up everything and run main loop from here.
    """
    # setup a logger
    logfile = "logs/rx-%d.log" % (time.time())
    os.system("mkdir -p logs")
    log = l.logger(logfile)
    log.log("Starting receiver")
    os.system("rm rx-current.log;ln -s %s rx-current.log" % (logfile))

    ic = iono_config.get_config()

    s = ic.s
    log.log("Sweep freqs:")
    log.log(str(s.freqs))
    log.log("Sweep length %1.2f s Freq step %1.2f" %
            (s.sweep_len_s, s.freq_dur))

    # Configuring USRP
    sample_rate = ic.sample_rate

    # number of samples per freq
    N = int(sample_rate * s.freq_dur)

    # configure usrp
    usrp = uhd.usrp.MultiUSRP("addr=%s,recv_buff_size=500000000" %
                              (ic.rx_addr))
    usrp.set_rx_rate(sample_rate)
    subdev_spec = uhd.usrp.SubdevSpec(ic.rx_subdev)
    usrp.set_rx_subdev_spec(subdev_spec)

    # Synchronizing clock
    gl.sync_clock(usrp, log, min_sync_time=ic.min_gps_lock_time)

    # figure out when to start the cycle.
    t_now = usrp.get_time_now().get_real_secs()
    t0 = np.uint64(
        np.floor(t_now / (s.sweep_len_s)) * s.sweep_len_s + s.sweep_len_s)
    print("starting next sweep at %1.2f in %1.2f s, time now %1.2f" %
          (t0, t0 - t_now, t_now))

    # start with initial frequency
    tune_req = uhd.libpyuhd.types.tune_request(s.freq(0))
    usrp.set_rx_freq(tune_req)

    # start reading data
    housekeeping_thread = threading.Thread(target=housekeeping,
                                           args=(usrp, log, ic))
    housekeeping_thread.daemon = True
    housekeeping_thread.start()

    # infinitely loop on receive
    receive_continuous(usrp, t0, t_now, ic, log)
Пример #3
0
def main(config):
    """
    The main loop for the ionosonde transmitter
    """
    global Exit

    # setup a logger
    log = iono_logger.logger("tx-")

    # this is the sweep configuration
    s = ic.s

    # register signals to be caught
    signal.signal(signal.SIGUSR1, orderlyExit)

    sample_rate = ic.sample_rate

    # use the address configured for the transmitter
    usrp = uhd.usrp.MultiUSRP("addr=%s" % (ic.tx_addr))
    usrp.set_tx_rate(sample_rate)
    usrp.set_rx_rate(sample_rate)

    rx_subdev_spec = uhd.usrp.SubdevSpec(ic.rx_subdev)
    tx_subdev_spec = uhd.usrp.SubdevSpec(ic.tx_subdev)

    usrp.set_tx_subdev_spec(tx_subdev_spec)
    usrp.set_rx_subdev_spec(rx_subdev_spec)

    # wait until GPS is locked, then align USRP time with global ref
    gl.sync_clock(usrp, log, min_sync_time=ic.min_gps_lock_time)
    gps_mon = gl.gpsdo_monitor(usrp, log, ic.gps_holdover_time)

    # start with first frequency on tx and rx
    tune_req = uhd.libpyuhd.types.tune_request(s.freq(0))
    usrp.set_tx_freq(tune_req)
    usrp.set_rx_freq(tune_req)

    # hold SWR measurement about half of the transmit waveform length, so
    # we have no timing issues
    swr_buffer = n.empty(int(0.5 * sample_rate * s.freq_dur),
                         dtype=n.complex64)

    # figure out when to start the cycle
    t_now = usrp.get_time_now().get_real_secs()
    t0 = n.uint64(
        n.floor(t_now / (s.sweep_len_s)) * s.sweep_len_s + s.sweep_len_s)
    print("starting next sweep at %1.2f" % (s.sweep_len_s))

    gpio_state = 0
    while not Exit:
        t0_dt = datetime.fromtimestamp(t0)
        log.log("Starting sweep at %1.2f (%s)" %
                (t0, t0_dt.strftime("%FT%T.%f")[:-3]))
        for i in range(s.n_freqs):
            f0, dt = s.pars(i)

            print("f=%f code %s" % (f0 / 1e6, s.code(i)))
            transmit_waveform(usrp, n.uint64(t0 + dt), s.waveform(i),
                              swr_buffer, f0, log, ic)

            # tune to next frequency 0.0 s before end
            next_freq_idx = (i + 1) % s.n_freqs
            tune_at(usrp,
                    t0 + dt + s.freq_dur - 0.05,
                    ic,
                    f0=s.freq(next_freq_idx),
                    gpio_state=gpio_state)
            gpio_state = (gpio_state + 1) % 2

            # check that GPS is still locked.
            gps_mon.check()

        t0 += n.uint64(s.sweep_len_s)
Пример #4
0
def main():
    """
    The main loop for the ionosonde transmitter
    """
    t_start=time.time()
    os.system("mkdir -p logs")
    logfname="logs/tx-%d.log"%(t_start)
    log=l.logger(logfname)
    os.system("ln -sf %s tx-current.log"%(logfname))
    log.log("Starting TX sweep",print_msg=True)

    # this is the sweep configuration
    ic=iono_config.get_config()
    s=ic.s
    
    sample_rate=ic.sample_rate
    
    # use the address configured for the transmitter
    usrp = uhd.usrp.MultiUSRP("addr=%s"%(ic.tx_addr))
    usrp.set_tx_rate(sample_rate)
    usrp.set_rx_rate(sample_rate)
    
    rx_subdev_spec=uhd.usrp.SubdevSpec(ic.rx_subdev)
    tx_subdev_spec=uhd.usrp.SubdevSpec(ic.tx_subdev)
    
    usrp.set_tx_subdev_spec(tx_subdev_spec)
    usrp.set_rx_subdev_spec(rx_subdev_spec)

    # wait until GPS is locked, then align USRP time with global ref
    gl.sync_clock(usrp,log,min_sync_time=ic.min_gps_lock_time)
    gps_mon=gl.gpsdo_monitor(usrp,log,ic.gps_holdover_time)
    
    # start with first frequency on tx and rx
    tune_req=uhd.libpyuhd.types.tune_request(s.freq(0))
    usrp.set_tx_freq(tune_req)
    usrp.set_rx_freq(tune_req)

    # hold SWR measurement about half of the transmit waveform length, so
    # we have no timing issues
    swr_buffer=n.empty(int(0.5*sample_rate*s.freq_dur),dtype=n.complex64)
     
    # figure out when to start the cycle
    t_now=usrp.get_time_now().get_real_secs()    
    t0=n.uint64(n.floor(t_now/(s.sweep_len_s))*s.sweep_len_s+s.sweep_len_s)
    print("starting next sweep at %1.2f"%(s.sweep_len_s))

    gpio_state=0
    while True:
        log.log("Starting sweep at %1.2f"%(t0))
        for i in range(s.n_freqs):
            f0,dt=s.pars(i)
            
            print("f=%f code %s"%(f0/1e6,s.code(i)))
            transmit_waveform(usrp,n.uint64(t0+dt),s.waveform(i),swr_buffer,f0,log,ic)                
            
            # tune to next frequency 0.0 s before end
            next_freq_idx=(i+1)%s.n_freqs
            tune_at(usrp,t0+dt+s.freq_dur-0.05,ic,f0=s.freq(next_freq_idx),gpio_state=gpio_state)
            gpio_state=(gpio_state+1)%2
            
            # check that GPS is still locked.
            gps_mon.check()

        t0+=n.uint64(s.sweep_len_s)