[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r6737 - gnuradio/branches/releases/3.1/gr-utils/src/py
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r6737 - gnuradio/branches/releases/3.1/gr-utils/src/python |
Date: |
Mon, 29 Oct 2007 09:53:50 -0600 (MDT) |
Author: jcorgan
Date: 2007-10-29 09:53:47 -0600 (Mon, 29 Oct 2007)
New Revision: 6737
Modified:
gnuradio/branches/releases/3.1/gr-utils/src/python/usrp_oscope.py
Log:
Applied changesets r6720 and r6732 on trunk to release branch.
Modified: gnuradio/branches/releases/3.1/gr-utils/src/python/usrp_oscope.py
===================================================================
--- gnuradio/branches/releases/3.1/gr-utils/src/python/usrp_oscope.py
2007-10-29 07:14:26 UTC (rev 6736)
+++ gnuradio/branches/releases/3.1/gr-utils/src/python/usrp_oscope.py
2007-10-29 15:53:47 UTC (rev 6737)
@@ -30,6 +30,7 @@
from optparse import OptionParser
import wx
import sys
+from usrpm import usrp_dbid
def pick_subdevice(u):
@@ -64,6 +65,10 @@
help="set gain in dB (default is midpoint)")
parser.add_option("-8", "--width-8", action="store_true",
default=False,
help="Enable 8-bit samples across USB")
+ parser.add_option("-C", "--basic-complex", action="store_true",
default=False,
+ help="Use both inputs of a basicRX or LFRX as a
single Complex input channel")
+ parser.add_option("-D", "--basic-dualchan", action="store_true",
default=False,
+ help="Use both inputs of a basicRX or LFRX as
seperate Real input channels")
parser.add_option("-n", "--frame-decim", type="int", default=1,
help="set oscope frame decimation factor to n
[default=1]")
parser.add_option("-v", "--v-scale", type="eng_float", default=1000,
@@ -78,11 +83,13 @@
self.show_debug_info = True
# build the graph
-
- self.u = usrp.source_c(decim_rate=options.decim)
+ if options.basic_dualchan:
+ self.num_inputs=2
+ else:
+ self.num_inputs=1
+ self.u = usrp.source_c(nchan=self.num_inputs,decim_rate=options.decim)
if options.rx_subdev_spec is None:
options.rx_subdev_spec = pick_subdevice(self.u)
- self.u.set_mux(usrp.determine_rx_mux_value(self.u,
options.rx_subdev_spec))
if options.width_8:
width = 8
@@ -94,14 +101,47 @@
# determine the daughterboard subdevice we're using
self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec)
+ if (options.basic_complex or options.basic_dualchan ):
+ if ((self.subdev.dbid()==usrp_dbid.BASIC_RX) or
(self.subdev.dbid()==usrp_dbid.LF_RX)):
+ side = options.rx_subdev_spec[0] # side A = 0, side B = 1
+ if options.basic_complex:
+ #force Basic_RX and LF_RX in complex mode (use both I and Q
channel)
+ print "Receiver daughterboard forced in complex mode. Both
inputs will combined to form a single complex channel."
+ self.dualchan=False
+ if side==0:
+ self.u.set_mux(0x00000010) #enable adc 0 and 1 to form a
single complex input on side A
+ else: #side ==1
+ self.u.set_mux(0x00000032) #enable adc 3 and 2 to form a
single complex input on side B
+ elif options.basic_dualchan:
+ #force Basic_RX and LF_RX in dualchan mode (use input A for
channel 0 and input B for channel 1)
+ print "Receiver daughterboard forced in dualchannel mode. Each
input will be used to form a seperate channel."
+ self.dualchan=True
+ if side==0:
+ self.u.set_mux(gru.hexint(0xf0f0f1f0)) #enable adc 0, side A
to form a real input on channel 0 and adc1,side A to form a real input on
channel 1
+ else: #side ==1
+ self.u.set_mux(0xf0f0f3f2) #enable adc 2, side B to form a
real input on channel 0 and adc3,side B to form a real input on channel 1
+ else:
+ sys.stderr.write('options basic_dualchan or basic_complex is only
supported for Basic Rx or LFRX at the moment\n')
+ sys.exit(1)
+ else:
+ self.dualchan=False
+ self.u.set_mux(usrp.determine_rx_mux_value(self.u,
options.rx_subdev_spec))
input_rate = self.u.adc_freq() / self.u.decim_rate()
self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate,
frame_decim=options.frame_decim,
v_scale=options.v_scale,
- t_scale=options.t_scale)
- self.connect(self.u, self.scope)
+ t_scale=options.t_scale,
+ num_inputs=self.num_inputs)
+ if self.dualchan:
+ # deinterleave two channels from FPGA
+ self.di = gr.deinterleave(gr.sizeof_gr_complex)
+ self.connect(self.u,self.di)
+ self.connect((self.di,0),(self.scope,0))
+ self.connect((self.di,1),(self.scope,1))
+ else:
+ self.connect(self.u, self.scope)
self._build_gui(vbox)
@@ -113,9 +153,13 @@
options.gain = float(g[0]+g[1])/2
if options.freq is None:
- # if no freq was specified, use the mid-point
- r = self.subdev.freq_range()
- options.freq = float(r[0]+r[1])/2
+ if ((self.subdev.dbid()==usrp_dbid.BASIC_RX) or
(self.subdev.dbid()==usrp_dbid.LF_RX)):
+ #for Basic RX and LFRX if no freq is specified you probably want
0.0 Hz and not 45 GHz
+ options.freq=0.0
+ else:
+ # if no freq was specified, use the mid-point
+ r = self.subdev.freq_range()
+ options.freq = float(r[0]+r[1])/2
self.set_gain(options.gain)
@@ -125,9 +169,15 @@
self.myform['dbname'].set_value(self.subdev.name())
self.myform['baseband'].set_value(0)
self.myform['ddc'].set_value(0)
+ if self.num_inputs==2:
+ self.myform['baseband2'].set_value(0)
+ self.myform['ddc2'].set_value(0)
if not(self.set_freq(options.freq)):
self._set_status_msg("Failed to set initial frequency")
+ if self.num_inputs==2:
+ if not(self.set_freq2(options.freq)):
+ self._set_status_msg("Failed to set initial frequency for channel
2")
def _set_status_msg(self, msg):
@@ -137,7 +187,9 @@
def _form_set_freq(kv):
return self.set_freq(kv['freq'])
-
+
+ def _form_set_freq2(kv):
+ return self.set_freq2(kv['freq2'])
vbox.Add(self.scope.win, 10, wx.EXPAND)
# add control area at the bottom
@@ -147,8 +199,11 @@
myform['freq'] = form.float_field(
parent=self.panel, sizer=hbox, label="Center freq", weight=1,
callback=myform.check_input_and_call(_form_set_freq,
self._set_status_msg))
-
- hbox.Add((5,0), 0, 0)
+ if self.num_inputs==2:
+ myform['freq2'] = form.float_field(
+ parent=self.panel, sizer=hbox, label="Center freq2", weight=1,
+ callback=myform.check_input_and_call(_form_set_freq2,
self._set_status_msg))
+ hbox.Add((5,0), 0, 0)
g = self.subdev.gain_range()
myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox,
label="Gain",
weight=3,
@@ -201,6 +256,13 @@
hbox.Add((5,0), 1)
myform['ddc'] = form.static_float_field(
parent=panel, sizer=hbox, label="DDC")
+ if self.num_inputs==2:
+ hbox.Add((1,0), 1)
+ myform['baseband2'] = form.static_float_field(
+ parent=panel, sizer=hbox, label="BB2")
+ hbox.Add((1,0), 1)
+ myform['ddc2'] = form.static_float_field(
+ parent=panel, sizer=hbox, label="DDC2")
hbox.Add((5,0), 0)
vbox.Add(hbox, 0, wx.EXPAND)
@@ -229,6 +291,29 @@
return False
+ def set_freq2(self, target_freq):
+ """
+ Set the center frequency of we're interested in for the second channel.
+
+ @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.
+ """
+ r = usrp.tune(self.u, 1, self.subdev, target_freq)
+
+ if r:
+ self.myform['freq2'].set_value(target_freq) # update displayed
value
+ if self.show_debug_info:
+ self.myform['baseband2'].set_value(r.baseband_freq)
+ self.myform['ddc2'].set_value(r.dxc_freq)
+ return True
+
+ return False
+
def set_gain(self, gain):
self.myform['gain'].set_value(gain) # update displayed value
self.subdev.set_gain(gain)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r6737 - gnuradio/branches/releases/3.1/gr-utils/src/python,
jcorgan <=