commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5982 - gnuradio/trunk/gr-pager/src


From: jcorgan
Subject: [Commit-gnuradio] r5982 - gnuradio/trunk/gr-pager/src
Date: Mon, 16 Jul 2007 00:46:07 -0600 (MDT)

Author: jcorgan
Date: 2007-07-16 00:46:06 -0600 (Mon, 16 Jul 2007)
New Revision: 5982

Modified:
   gnuradio/trunk/gr-pager/src/flex_demod.py
   gnuradio/trunk/gr-pager/src/pager.i
   gnuradio/trunk/gr-pager/src/pager_flex_sync.cc
   gnuradio/trunk/gr-pager/src/pager_flex_sync.h
   gnuradio/trunk/gr-pager/src/pager_slicer_fb.h
   gnuradio/trunk/gr-pager/src/usrp_flex.py
Log:
Implemented AFC loop in gr-pager

Modified: gnuradio/trunk/gr-pager/src/flex_demod.py
===================================================================
--- gnuradio/trunk/gr-pager/src/flex_demod.py   2007-07-16 05:42:22 UTC (rev 
5981)
+++ gnuradio/trunk/gr-pager/src/flex_demod.py   2007-07-16 06:46:06 UTC (rev 
5982)
@@ -42,13 +42,13 @@
        self.connect(self, quad)
        
         rsamp = blks2.rational_resampler_fff(16, 25)
-        slicer = pager_swig.slicer_fb(5e-5) # DC removal averaging filter 
constant
-       sync = pager_swig.flex_sync(16000)
+        self.slicer = pager_swig.slicer_fb(5e-6) # DC removal averaging filter 
constant
+       self.sync = pager_swig.flex_sync()
 
-        self.connect(quad, rsamp, slicer, sync)
+        self.connect(quad, rsamp, self.slicer, self.sync)
 
        for i in range(4):
-           self.connect((sync, i), pager_swig.flex_deinterleave(), 
pager_swig.flex_parse(queue, freq))
+           self.connect((self.sync, i), pager_swig.flex_deinterleave(), 
pager_swig.flex_parse(queue, freq))
 
        if log:
            suffix = '_'+ "%3.3f" % (freq/1e6,) + '.dat'
@@ -57,5 +57,8 @@
            slicer_sink = gr.file_sink(gr.sizeof_char, 'slicer'+suffix)
            self.connect(rsamp, rsamp_sink)
            self.connect(quad, quad_sink)
-           self.connect(slicer, slicer_sink)
-           
\ No newline at end of file
+           self.connect(self.slicer, slicer_sink)
+
+    def dc_offset(self):
+       return self.slicer.dc_offset()
+                   
\ No newline at end of file

Modified: gnuradio/trunk/gr-pager/src/pager.i
===================================================================
--- gnuradio/trunk/gr-pager/src/pager.i 2007-07-16 05:42:22 UTC (rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager.i 2007-07-16 06:46:06 UTC (rev 5982)
@@ -47,18 +47,19 @@
     pager_slicer_fb(float alpha);
 
 public:
+    float dc_offset() const { return d_avg; }
 };
 
 // ----------------------------------------------------------------
 
 GR_SWIG_BLOCK_MAGIC(pager,flex_sync);
 
-pager_flex_sync_sptr pager_make_flex_sync(int rate);
+pager_flex_sync_sptr pager_make_flex_sync();
 
 class pager_flex_sync : public gr_block
 {
 private:
-    pager_flex_sync(int rate);
+    pager_flex_sync();
 
 public:
 };

Modified: gnuradio/trunk/gr-pager/src/pager_flex_sync.cc
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_flex_sync.cc      2007-07-16 05:42:22 UTC 
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_flex_sync.cc      2007-07-16 06:46:06 UTC 
(rev 5982)
@@ -30,9 +30,9 @@
 #include <gr_io_signature.h>
 #include <gr_count_bits.h>
 
-pager_flex_sync_sptr pager_make_flex_sync(int rate)
+pager_flex_sync_sptr pager_make_flex_sync()
 {
-    return pager_flex_sync_sptr(new pager_flex_sync(rate));
+    return pager_flex_sync_sptr(new pager_flex_sync());
 }
 
 // FLEX sync block takes input from sliced baseband stream [0-3] at specified 
@@ -41,13 +41,12 @@
 // worth of bits on each output phase for the data portion of the frame. 
Unused phases
 // get all zeros, which are considered idle code words.
 
-pager_flex_sync::pager_flex_sync(int rate) :
+pager_flex_sync::pager_flex_sync() :
     gr_block ("flex_sync",
     gr_make_io_signature (1, 1, sizeof(unsigned char)),
     gr_make_io_signature (4, 4, sizeof(unsigned char))),
-    d_sync(rate/1600) // Maximum samples per baud
+    d_sync(10) // Fixed at 10 samples per baud (@ 1600 baud)
 {
-    d_rate = rate;
     enter_idle();
 }
 
@@ -120,7 +119,7 @@
     d_mode = 0;
     d_baudrate = 1600;
     d_levels = 2;
-    d_spb = d_rate/d_baudrate;
+    d_spb = 16000/d_baudrate;
     d_bit_a = 0;
     d_bit_b = 0;
     d_bit_c = 0;
@@ -141,7 +140,6 @@
     d_end = d_index;
     d_center = index_avg(d_start, d_end); // Center of goodness
     d_count = 0;
-    //printf("SYNC1:%08X ", flex_modes[d_mode].sync);
 }
 
 void pager_flex_sync::enter_sync2()
@@ -150,7 +148,7 @@
     d_count = 0;
     d_baudrate = flex_modes[d_mode].baud;
     d_levels = flex_modes[d_mode].levels;
-    d_spb = d_rate/d_baudrate;
+    d_spb = 16000/d_baudrate;
 
     if (d_baudrate == 3200) {
         // Oversampling buffer just got halved

Modified: gnuradio/trunk/gr-pager/src/pager_flex_sync.h
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_flex_sync.h       2007-07-16 05:42:22 UTC 
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_flex_sync.h       2007-07-16 06:46:06 UTC 
(rev 5982)
@@ -28,7 +28,7 @@
 typedef boost::shared_ptr<pager_flex_sync> pager_flex_sync_sptr;
 typedef std::vector<gr_int64> gr_int64_vector;
 
-pager_flex_sync_sptr pager_make_flex_sync(int rate);
+pager_flex_sync_sptr pager_make_flex_sync();
 
 /*!
  * \brief flex sync description
@@ -39,8 +39,8 @@
 {
 private:
     // Constructors
-    friend pager_flex_sync_sptr pager_make_flex_sync(int rate);
-    pager_flex_sync(int rate);
+    friend pager_flex_sync_sptr pager_make_flex_sync();
+    pager_flex_sync();
    
     // State machine transitions
     void enter_idle();
@@ -58,7 +58,6 @@
     enum state_t { ST_IDLE, ST_SYNCING, ST_SYNC1, ST_SYNC2, ST_DATA };
     state_t d_state;     
 
-    int d_rate;     // Incoming sample rate
     int d_index;    // Index into current baud
     int d_start;    // Start of good sync 
     int d_center;   // Center of bit

Modified: gnuradio/trunk/gr-pager/src/pager_slicer_fb.h
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_slicer_fb.h       2007-07-16 05:42:22 UTC 
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_slicer_fb.h       2007-07-16 06:46:06 UTC 
(rev 5982)
@@ -49,6 +49,8 @@
     int work (int noutput_items,
               gr_vector_const_void_star &input_items, 
               gr_vector_void_star &output_items);
+
+    float dc_offset() const { return d_avg; }
 };
 
 #endif /* INCLUDED_PAGER_SLICER_FB_H */

Modified: gnuradio/trunk/gr-pager/src/usrp_flex.py
===================================================================
--- gnuradio/trunk/gr-pager/src/usrp_flex.py    2007-07-16 05:42:22 UTC (rev 
5981)
+++ gnuradio/trunk/gr-pager/src/usrp_flex.py    2007-07-16 06:46:06 UTC (rev 
5982)
@@ -52,7 +52,10 @@
     def __init__(self, options, queue):
         gr.top_block.__init__(self, "usrp_flex")
         self.options = options
-
+       self.offset = 0.0
+       self.adj_time = time.time()
+       self.verbose = options.verbose
+                       
        if options.from_file is None:
             # Set up USRP source with specified RX daughterboard
             self.src = usrp.source_c()
@@ -104,20 +107,31 @@
        if options.verbose:
            print "Channel filter has", len(taps), "taps."
 
-        chan = gr.freq_xlating_fir_filter_ccf(10,    # Decimation rate
+        self.chan = gr.freq_xlating_fir_filter_ccf(10,    # Decimation rate
                                               taps,  # Filter taps
                                               0.0,   # Offset frequency
                                               250e3) # Sample rate
 
        if options.log:
            chan_sink = gr.file_sink(gr.sizeof_gr_complex, 'chan.dat')
-           self.connect(chan, chan_sink)
+           self.connect(self.chan, chan_sink)
 
         # FLEX protocol demodulator
-        flex = pager.flex_demod(queue, options.frequency, options.verbose, 
options.log)
+        self.flex = pager.flex_demod(queue, options.frequency, 
options.verbose, options.log)
 
-        self.connect(self.src, chan, flex)
-       
+        self.connect(self.src, self.chan, self.flex)
+
+    def freq_offset(self):
+       return self.flex.dc_offset()*1600
+
+    def adjust_freq(self):
+       if time.time() - self.adj_time > 1.6:   # Only do it once per FLEX frame
+           self.adj_time = time.time()
+           self.offset -= self.freq_offset()
+           self.chan.set_center_freq(self.offset)
+           if self.verbose:
+               print "Channel frequency offset (Hz):", int(self.offset)
+                       
 def main():
     parser = OptionParser(option_class=eng_option)
     parser.add_option("-f", "--frequency", type="eng_float", default=None,
@@ -161,7 +175,8 @@
                    else:
                        disp.append(page[n])
                print join(disp, '')
-                                               
+               tb.adjust_freq()
+                                                                               
            else:
                time.sleep(1)
 





reply via email to

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