def create_usrp_sink(options): u = blks2.generic_usrp_sink_c( usrpx=options.usrpx, which=options.which, subdev_spec=options.tx_subdev_spec, interface=options.interface, mac_addr=options.mac_addr, fusb_block_size=options.fusb_block_size, fusb_nblocks=options.fusb_nblocks, lo_offset=options.lo_offset, gain=options.tx_gain, ) if options.show_tx_gain_range: print "Tx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(u.gain_range()) return u
def create_usrp_sink(options): u = blks2.generic_usrp_sink_c( usrpx=options.usrpx, which=options.which, subdev_spec=options.tx_subdev_spec, interface=options.interface, mac_addr=options.mac_addr, fusb_block_size=options.fusb_block_size, fusb_nblocks=options.fusb_nblocks, lo_offset=options.lo_offset, gain=options.tx_gain, ) if options.show_tx_gain_range: print "Tx Gain Range: minimum = %g, maximum = %g, step size = %g" % tuple( u.gain_range()) return u
def __init__(self, options, input_filename): gr.top_block.__init__(self) gr.enable_realtime_scheduling() if options.real: sizeof_input_samples = gr.sizeof_float else: sizeof_input_samples = gr.sizeof_gr_complex self.src = gr.file_source(sizeof_input_samples, input_filename, repeat = options.loop) self.u = generic_usrp_sink_c(interface = options.interface, mac_addr = options.mac_addr, subdev_spec = options.tx_subdev_spec) print 'Using %s' % str(self.u) print 'Possible tx frequency range: %s - %s' % \ (n2s(self.u.freq_range()[0]), n2s(self.u.freq_range()[1])) # we need to find the closest decimation rate the USRP can handle # to the input file's sampling rate try: ideal_interp = self.u.dac_rate() / options.rate # pick the closest interpolation rate interp = [x for x in self.u.get_interp_rates() if x <= ideal_interp][-1] self.u.set_interp(interp) except IndexError: sys.stderr.write('Failed to set USRP interpolation rate\n') raise SystemExit, 1 output_rate = self.u.dac_rate() / interp resamp_ratio = output_rate / options.rate # since the input file sample rate may not be exactly what our # output rate of the USRP (as determined by the interpolation rate), # we need to resample our input to the output rate num_filters = 32 cutoff = 0.99 * options.rate / 2. transition = 0.1 * options.rate / 2. resamp_taps = gr.firdes_low_pass(num_filters * 1.0, num_filters * options.rate, cutoff, transition) self.resamp = gr.pfb_arb_resampler_ccf(resamp_ratio, resamp_taps, num_filters) if options.gain is None: # if no gain was specified, use the mid-point in dB g = self.u.gain_range() options.gain = float(g[0]+g[1])/2 self.u.set_gain(options.gain) res = self.u.set_center_freq(options.freq) if not res: sys.stderr.write('Failed to set frequency\n') raise SystemExit, 1 if options.real: # our samples are real # we need to convert them to complex without a hilbert filter self.hilbert = gr.hilbert_fc(64) self.connect(self.src, self.hilbert, self.resamp, self.u) else: # our samples are complex self.connect(self.src, self.resamp, self.u)