parser.add_option("-I", "--interferometer", action="store_true", default=False, help="Interferometer mode")
parser.add_option("-D", "--switch_mode", action="store_true", default=False, help="Dicke Switching mode")
parser.add_option("-P", "--reference_divisor", type="eng_float", default=1.0, help="Reference Divisor")
- parser.add_option("-U", "--ref_fifo", default="@@@@")
+ parser.add_option("-U", "--ref_fifo", default=None)
+ parser.add_option("-k", "--notch_taps", type="int", default=64, help="Number of notch taps")
parser.add_option("-n", "--notches", action="store_true",
default=False, help="Notch frequencies after all other args")
+ parser.add_option("-Y", "--interface", default=None)
+ parser.add_option("-H", "--mac_addr", default=None)
+
+ # Added this documentation
+
(options, args) = parser.parse_args()
self.setimode = options.setimode
self.switch_state = 0
self.reference_divisor = options.reference_divisor
self.ref_fifo = options.ref_fifo
+ self.usrp2 = False
+ self.decim = options.decim
+ self.rx_subdev_spec = options.rx_subdev_spec
+
+ if (options.interface != None and options.mac_addr != None):
+ self.mac_addr = options.mac_addr
+ self.interface = options.interface
+ self.usrp2 = True
- self.NOTCH_TAPS = 16
+ self.NOTCH_TAPS = options.notch_taps
self.notches = Numeric.zeros(self.NOTCH_TAPS,Numeric.Float64)
# Get notch locations
j = 0
self.use_notches = options.notches
- if (self.ref_fifo != "@@@@"):
- self.ref_fifo_file = open (self.ref_fifo, "w")
+ if (self.ref_fifo != None):
+ self.ref_fifo_file = open (self.ref_fifo, "r")
modecount = 0
for modes in (self.dual_mode, self.interferometer):
#
if (self.setimode):
options.decim = 256
-
- if (self.dual_mode == False and self.interferometer == False):
- self.u = usrp.source_c(decim_rate=options.decim)
- self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec))
- # determine the daughterboard subdevice we're using
- self.subdev[0] = usrp.selected_subdev(self.u, options.rx_subdev_spec)
- self.subdev[1] = self.subdev[0]
- self.cardtype = self.subdev[0].dbid()
- else:
- self.u=usrp.source_c(decim_rate=options.decim, nchan=2)
- self.subdev[0] = usrp.selected_subdev(self.u, (0, 0))
- self.subdev[1] = usrp.selected_subdev(self.u, (1, 0))
- self.cardtype = self.subdev[0].dbid()
- self.u.set_mux(0x32103210)
- c1 = self.subdev[0].name()
- c2 = self.subdev[1].name()
- if (c1 != c2):
- print "Must have identical cardtypes for --dual_mode or --interferometer"
- sys.exit(1)
- #
- # Set 8-bit mode
- #
- width = 8
- shift = 8
- format = self.u.make_format(width, shift)
- r = self.u.set_format(format)
+
+ if (self.dual_mode == True and self.decim <= 4):
+ print "Cannot use decim <= 4 with dual_mode"
+ sys.exit(1)
+
+ self.setup_usrp()
# Set initial declination
self.decln = options.decln
#
if (self.dual_mode == True):
- self.setup_dual (self.setimode,self.use_notches)
+ self.setup_dual (self.setimode)
if (self.interferometer == True):
- self.setup_interferometer(self.setimode,self.use_notches)
+ self.setup_interferometer(self.setimode)
if (self.normal_mode == True):
- self.setup_normal(self.setimode,self.use_notches)
+ self.setup_normal(self.setimode)
if (self.setimode == True):
self.setup_seti()
self.myform['dbname'].set_value(self.subdev[0].name())
# Set analog baseband filtering, if DBS_RX
- if self.cardtype in (usrp_dbid.DBS_RX, usrp_dbid.DBS_RX_REV_2_1):
+ if self.cardtype == usrp_dbid.DBS_RX:
lbw = (self.u.adc_freq() / self.u.decim_rate()) / 2
if lbw < 1.0e6:
lbw = 1.0e6
Set the center frequency we're interested in.
@param target_freq: frequency in Hz
- @rypte: bool
- Tuning is a two step process. First we ask the front-end to
- tune as close to the desired frequency as it can. Then we use
- the result of that operation and our target_frequency to
- determine the value for the digital down converter.
"""
#
- # Everything except BASIC_RX should support usrp.tune()
#
- if not (self.cardtype == usrp_dbid.BASIC_RX):
- r = usrp.tune(self.u, self.subdev[0].which(), self.subdev[0], target_freq)
- r = usrp.tune(self.u, self.subdev[1].which(), self.subdev[1], target_freq)
- else:
- r = self.u.set_rx_freq(0, target_freq)
- f = self.u.rx_freq(0)
- if abs(f-target_freq) > 2.0e3:
- r = 0
+ r = usrp.tune(self.u, self.subdev[0].which(), self.subdev[0], target_freq)
+ r = usrp.tune(self.u, self.subdev[1].which(), self.subdev[1], target_freq)
if r:
self.myform['freq'].set_value(target_freq) # update displayed value
#
self.centerfreq = target_freq
self.observing -= delta
self.scope.set_baseband_freq (self.observing)
-
self.myform['baseband'].set_value(r.baseband_freq)
self.myform['ddc'].set_value(r.dxc_freq)
delfreq = -1
if self.use_notches == True:
for i in range(0,len(self.notches)):
- if abs(self.notches[i] - dfreq) < ((self.bw/self.NOTCH_TAPS)/2):
+ if self.notches[i] != 0 and abs(self.notches[i] - dfreq) < ((self.bw/self.NOTCH_TAPS)/2.0):
delfreq = i
break
j = 0
diff = i - self.observing
if int(i) == 0:
break
+ if ((i < (self.observing - self.bw/2)) or (i > (self.observing + self.bw/2))):
+ continue
if (diff > 0):
idx = diff / binwidth
idx = round(idx)
idx = round(idx)
idx = (self.NOTCH_TAPS/2) - idx
idx = int(idx+(self.NOTCH_TAPS/2))
- if (idx < 0 or idx > (self.NOTCH_TAPS)):
+ if (idx < 0 or idx >= (self.NOTCH_TAPS)):
break
tmptaps[idx] = complex(0.0, 0.0)
#
# Setup dual-channel (two antenna, usual orthogonal polarity probes in the same waveguide)
#
- def setup_dual(self, setimode,notches):
+ def setup_dual(self, setimode):
self.setup_radiometer_common(2)
def setup_seti(self):
self.connect (self.shead, self.fft_bandpass, self.scope)
return
-
+
+ def setup_usrp(self):
+ if (self.usrp2 == False):
+ if (self.dual_mode == False and self.interferometer == False):
+ if (self.decim > 4):
+ self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192)
+ else:
+ self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192, fpga_filename="std_4rx_0tx.rbf")
+ self.u.set_mux(usrp.determine_rx_mux_value(self.u, self.rx_subdev_spec))
+ # determine the daughterboard subdevice we're using
+ self.subdev[0] = usrp.selected_subdev(self.u, self.rx_subdev_spec)
+ self.subdev[1] = self.subdev[0]
+ self.cardtype = self.subdev[0].dbid()
+ else:
+ self.u=usrp.source_c(decim_rate=self.decim, nchan=2,fusb_block_size=8192)
+ self.subdev[0] = usrp.selected_subdev(self.u, (0, 0))
+ self.subdev[1] = usrp.selected_subdev(self.u, (1, 0))
+ self.cardtype = self.subdev[0].dbid()
+ self.u.set_mux(0x32103210)
+ c1 = self.subdev[0].name()
+ c2 = self.subdev[1].name()
+ if (c1 != c2):
+ print "Must have identical cardtypes for --dual_mode or --interferometer"
+ sys.exit(1)
+ #
+ # Set 8-bit mode
+ #
+
+ width = 8
+ shift = 8
+ format = self.u.make_format(width, shift)
+ r = self.u.set_format(format)
+ else:
+ if (self.dual_mode == True or self.interferometer == True):
+ print "Cannot use dual_mode or interferometer with single USRP2"
+ sys.exit(1)
+ self.u = usrp2.source_32fc(self.interface, self.mac_addr)
+ self.u.set_decim (self.decim)
+ self.cardtype = self.u.daughterboard_id()
def main ():
app = stdgui2.stdapp(app_flow_graph, "RADIO ASTRONOMY SPECTRAL/CONTINUUM RECEIVER: $Revision$", nstatus=1)