commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r5560 - gnuradio/branches/developers/jcorgan/snd/gr-so


From: jcorgan
Subject: [Commit-gnuradio] r5560 - gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python
Date: Mon, 28 May 2007 18:16:42 -0600 (MDT)

Author: jcorgan
Date: 2007-05-28 18:16:42 -0600 (Mon, 28 May 2007)
New Revision: 5560

Added:
   
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder_loopback.sh
Modified:
   gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/
   gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
   gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
   
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
Log:
Work in progress.


Property changes on: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python
___________________________________________________________________
Name: svn:ignore
   - Makefile
Makefile.in
run_tests
*.pyc
output.*

   + Makefile
Makefile.in
run_tests
*.pyc
loopback.dat


Modified: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am
===================================================================
--- gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am  
2007-05-28 21:41:22 UTC (rev 5559)
+++ gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/Makefile.am  
2007-05-29 00:16:42 UTC (rev 5560)
@@ -29,6 +29,7 @@
 ourlibdir    = $(grpyexecdir)
 
 EXTRA_DIST =           \
+       sounder_loopback.sh \
        qa_nothing.py   \
        run_tests.in
 

Modified: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py
===================================================================
--- gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py   
2007-05-28 21:41:22 UTC (rev 5559)
+++ gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder.py   
2007-05-29 00:16:42 UTC (rev 5560)
@@ -47,13 +47,15 @@
     return (0, 0)
 
 class sounder_tx:
-    def __init__(self, verbose=False):
+    def __init__(self, loopback=False,verbose=False):
+       self._loopback=loopback
        self._verbose = verbose
         self._u = usrp.sink_s(fpga_filename='usrp_sounder.rbf')
-        self._subdev_spec = usrp.pick_tx_subdevice(self._u)
-        self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
-        if self._verbose:
-            print "Using", self._subdev.name(), "for sounder transmitter."     
       
+       if not self._loopback:
+            self._subdev_spec = usrp.pick_tx_subdevice(self._u)
+            self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
+            if self._verbose:
+                print "Using", self._subdev.name(), "for sounder transmitter." 
           
         self._u.start()
 
     def tune(self, frequency):
@@ -64,27 +66,31 @@
             raise RuntimeError("Failed to set transmitter frequency.")
 
 class sounder_rx:
-    def __init__(self, subdev_spec=None, samples=-1, verbose=False, 
debug=False):
+    def 
__init__(self,subdev_spec=None,length=1,msgq=None,loopback=False,verbose=False,debug=False):
        self._subdev_spec = subdev_spec
-       self._samples = samples
+        self._length = length
+        self._msgq = msgq
+       self._loopback = loopback
        self._verbose = verbose
        self._debug = debug
                
         self._fg = gr.flow_graph()
         self._u = usrp.source_c(fpga_filename='usrp_sounder.rbf')
-        if self._subdev_spec == None:
-            self._subdev_spec = pick_subdevice(self._u)
-        self._u.set_mux(usrp.determine_rx_mux_value(self._u, 
self._subdev_spec))
-        self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
-        if self._verbose:
-            print "Using", self._subdev.name(), "for sounder receiver."
-        self._sink = gr.file_sink(gr.sizeof_gr_complex, "output.dat")
+       if not self._loopback:
+            if self._subdev_spec == None:
+                self._subdev_spec = pick_subdevice(self._u)
+            self._u.set_mux(usrp.determine_rx_mux_value(self._u, 
self._subdev_spec))
+            self._subdev = usrp.selected_subdev(self._u, self._subdev_spec)
+            if self._verbose:
+               print "Using", self._subdev.name(), "for sounder receiver."
 
-        if self._samples >= 0:
-            self._head = gr.head(gr.sizeof_gr_complex, self._samples)
-            self._fg.connect(self._u, self._head, self._sink)
-        else:
-            self._fg.connect(self._u, self._sink)
+        self._vblen = gr.sizeof_gr_complex*self._length
+       if self._debug:
+            print "Generating impulse vectors of length", self._length, "byte 
length", self._vblen
+            
+        self._s2v = gr.stream_to_vector(gr.sizeof_gr_complex, self._length)
+        self._sink = gr.message_sink(self._vblen, self._msgq, True)
+        self._fg.connect(self._u, self._s2v, self._sink)
 
     def tune(self, frequency):
         if self._verbose:
@@ -113,18 +119,18 @@
 
 
 class sounder:
-    def __init__(self,transmit=False,receive=False,loopback=False,
-                 
rx_subdev_spec=None,frequency=0.0,degree=10,samples=-1,verbose=False,debug=False):
+    def 
__init__(self,transmit=False,receive=False,loopback=False,rx_subdev_spec=None,
+                 
frequency=0.0,degree=10,length=1,msgq=None,verbose=False,debug=False):
         self._transmit = transmit
         self._receive = receive
         self._loopback = loopback
         self._rx_subdev_spec = rx_subdev_spec
         self._frequency = frequency
         self._degree = degree
-        self._samples = samples
+        self._length = length
+        self._msgq = msgq
         self._verbose = verbose
         self._debug = debug
-        
        self._mode = 0
        self._u = None
        self._trans = None
@@ -133,12 +139,13 @@
        self._receiving = False
                
        if self._transmit:
-           self._trans = sounder_tx(verbose=self._verbose)
+           self._trans = 
sounder_tx(loopback=self._loopback,verbose=self._verbose)
             self._u = self._trans._u
             
        if self._receive:
-            self._rcvr = sounder_rx(subdev_spec=self._rx_subdev_spec, 
samples=self._samples,
-                                   verbose=self._verbose, debug=self._debug)
+            self._rcvr = 
sounder_rx(subdev_spec=self._rx_subdev_spec,length=self._length,
+                                   
msgq=self._msgq,loopback=self._loopback,verbose=self._verbose, 
+                                   debug=self._debug)
            self._u = self._rcvr._u # either receiver or transmitter object 
will do
        
        self.set_reset(True)
@@ -150,7 +157,6 @@
                
     def tune(self, frequency):
         self._frequency = frequency
-        print self._rcvr
        if self._rcvr:
             self._rcvr.tune(frequency)
        if self._trans:
@@ -184,11 +190,8 @@
            self._write_mode()
            self._rcvr.start()
            self._receiving = True
-           if self._samples >= 0:
-               self._rcvr.wait()
        else:
-           if self._samples < 0:
-                self._rcvr.stop()
+            self._rcvr.stop()
            self._mode &= ~bmFR_MODE_RX
            self._write_mode()
            self._receiving = False
@@ -216,8 +219,10 @@
        self._write_mode()
 
     def start(self):
-        self.enable_tx(self._transmit)
-       self.enable_rx(self._receive)
+        if self._transmit:
+            self.enable_tx(True)
+        if self._receive:
+            self.enable_rx(True)
 
     def __del__(self):
        if self._transmitting:

Added: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder_loopback.sh
===================================================================
--- 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder_loopback.sh
                          (rev 0)
+++ 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder_loopback.sh
  2007-05-29 00:16:42 UTC (rev 5560)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+# Note this runs the installed script, not the one in the tree
+usrp_sounder.py -r -l -t -d12 -v -F loopback.dat -D


Property changes on: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/sounder_loopback.sh
___________________________________________________________________
Name: svn:executable
   + *

Modified: 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py  
    2007-05-28 21:41:22 UTC (rev 5559)
+++ 
gnuradio/branches/developers/jcorgan/snd/gr-sounder/src/python/usrp_sounder.py  
    2007-05-29 00:16:42 UTC (rev 5560)
@@ -20,6 +20,7 @@
 # Boston, MA 02110-1301, USA.
 # 
 
+from gnuradio import gr
 from gnuradio.sounder import sounder
 from gnuradio import eng_notation
 from gnuradio.eng_option import eng_option
@@ -40,33 +41,61 @@
                       help="enable sounding transmitter")
     parser.add_option("-r", "--receive", action="store_true", default=False,
                       help="enable sounding receiver")
-    parser.add_option("-n", "--samples", type="int", default=-1,
-                      help="number of samples to capture on receive, default 
is infinite")
     parser.add_option("-l", "--loopback", action="store_true", default=False,
                       help="enable digital loopback, default is disabled")
     parser.add_option("-v", "--verbose", action="store_true", default=False,
                       help="enable verbose output, default is disabled")
     parser.add_option("-D", "--debug", action="store_true", default=False,
                       help="enable debugging output, default is disabled")
-
+    parser.add_option("-F", "--filename", default=None,
+                     help="log received impulse responses to file")
+                     
     (options, args) = parser.parse_args()
 
     if len(args) != 0 or not (options.transmit | options.receive):
         parser.print_help()
         sys.exit(1)
 
+    if options.receive and (options.filename == None):
+       print "Must supply filename when receiving."
+       sys.exit(1)
+
+    if options.degree > 12 or options.degree < 2:
+       print "PN code degree must be between 2 and 12"
+       sys.exit(1)
+
+    length = int(2**options.degree-1)
     if options.verbose:
-        print "Using PN code degree of", options.degree, "length", 
2**options.degree-1
+        print "Using PN code degree of", options.degree, "length", length
        if options.loopback == False:
             print "Sounding frequency range is", n2s(options.frequency-16e6), 
"to", n2s(options.frequency+16e6)
-    
+       if options.filename != None:
+           print "Logging impulse records to file: ", options.filename
+           
+    msgq = gr.msg_queue()
     s = 
sounder(transmit=options.transmit,receive=options.receive,loopback=options.loopback,
                 
rx_subdev_spec=options.rx_subdev_spec,frequency=options.frequency,degree=options.degree,
-                
samples=options.samples,verbose=options.verbose,debug=options.debug)
+                
length=length,msgq=msgq,verbose=options.verbose,debug=options.debug)
+    s.start()
 
-    s.start()
-    if options.samples < 0:
-        raw_input("Press enter to exit.")
-       
+    if options.receive:
+       f = open(options.filename, "wb")
+       print "Enter CTRL-C to stop."
+        try:
+            while (1):
+                msg = msgq.delete_head()
+               if msg.type() == 1:
+                   break
+               rec = msg.to_string()[:length*gr.sizeof_gr_complex]
+               if options.debug:
+                   print "Received impulse vector of length", len(rec)
+               f.write(rec)
+               
+        except KeyboardInterrupt:
+            pass
+    else:
+        if options.transmit:
+            raw_input("Press return to exit.")
+        
 if __name__ == "__main__":
     main()





reply via email to

[Prev in Thread] Current Thread [Next in Thread]