commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5955 - gnuradio/branches/features/pager/gr-pager/src


From: jcorgan
Subject: [Commit-gnuradio] r5955 - gnuradio/branches/features/pager/gr-pager/src
Date: Fri, 13 Jul 2007 15:47:02 -0600 (MDT)

Author: jcorgan
Date: 2007-07-13 15:47:00 -0600 (Fri, 13 Jul 2007)
New Revision: 5955

Modified:
   gnuradio/branches/features/pager/gr-pager/src/flex_demod.py
   gnuradio/branches/features/pager/gr-pager/src/pager.i
   gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
   gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
   gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py
Log:
Improvements on demodulation chain.

Modified: gnuradio/branches/features/pager/gr-pager/src/flex_demod.py
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/flex_demod.py 2007-07-13 
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/flex_demod.py 2007-07-13 
21:47:00 UTC (rev 5955)
@@ -23,8 +23,6 @@
 from math import pi
 import pager_swig
 
-chan_rate = 16000
-
 class flex_demod:
     """
     FLEX pager protocol demodulation block.
@@ -34,9 +32,8 @@
 
     Flow graph (so far):
 
-    RSAMP    - Resample incoming stream to 16000 sps
     QUAD     - Quadrature demodulator converts FSK to baseband amplitudes  
-    LPF      - Low pass filter to remove noise prior to slicer
+    RSAMP    - Resample to 16000 sps
     SLICER   - Converts input to one of four symbols (0, 1, 2, 3)
     SYNC     - Converts symbol stream to four phases of FLEX blocks
     DEINTx   - Deinterleaves FLEX blocks into datawords
@@ -50,26 +47,24 @@
 
 
     def __init__(self, fg, channel_rate, queue):
-        k = chan_rate/(2*pi*4800)        # 4800 Hz max deviation
+        k = 25000/(2*pi*1600)        # 4800 Hz max deviation
         QUAD = gr.quadrature_demod_cf(k)
        self.INPUT = QUAD
+        QUAD_sink = gr.file_sink(gr.sizeof_float, 'quad.dat')
                        
-       if channel_rate != chan_rate:
-               interp = gru.lcm(channel_rate, chan_rate)/channel_rate
-               decim  = gru.lcm(channel_rate, chan_rate)/chan_rate
-               RESAMP = blks.rational_resampler_ccf(fg, interp, decim)
-               self.INPUT = RESAMP
-                       
-        taps = optfir.low_pass(1.0, chan_rate, 3200, 6400, 0.1, 60)
-        LPF = gr.fir_filter_fff(1, taps)
-        SLICER = pager_swig.slicer_fb(.001, .00001) # Attack, decay
-       SYNC = pager_swig.flex_sync(chan_rate)
+        RSAMP = blks.rational_resampler_fff(fg, 16, 25)
+        RSAMP_sink = gr.file_sink(gr.sizeof_float, 'rsamp.dat')
 
-       if channel_rate != chan_rate:
-            fg.connect(RESAMP, QUAD, LPF, SLICER, SYNC)
-       else:
-           fg.connect(QUAD, LPF, SLICER, SYNC)
+        SLICER = pager_swig.slicer_fb(.001) # Averaging filter constant
+        SLICER_sink = gr.file_sink(gr.sizeof_char, 'slicer.dat')
 
+       SYNC = pager_swig.flex_sync(16000)
+
+        fg.connect(QUAD, QUAD_sink)
+        fg.connect(RSAMP, RSAMP_sink)
+        fg.connect(SLICER, SLICER_sink)
+        fg.connect(QUAD, RSAMP, SLICER, SYNC)
+
        DEINTA = pager_swig.flex_deinterleave()
        PARSEA = pager_swig.flex_parse(queue)
 

Modified: gnuradio/branches/features/pager/gr-pager/src/pager.i
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager.i       2007-07-13 
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager.i       2007-07-13 
21:47:00 UTC (rev 5955)
@@ -39,12 +39,12 @@
 
 GR_SWIG_BLOCK_MAGIC(pager,slicer_fb);
 
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
 
 class pager_slicer_fb : public gr_sync_block
 {
 private:
-    pager_slicer_fb(float alpha, float beta);
+    pager_slicer_fb(float alpha);
 
 public:
 };

Modified: gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc    
2007-07-13 17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc    
2007-07-13 21:47:00 UTC (rev 5955)
@@ -26,23 +26,18 @@
 #include <pager_slicer_fb.h>
 #include <gr_io_signature.h>
 
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta)
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha)
 {
-    return pager_slicer_fb_sptr(new pager_slicer_fb(alpha, beta));
+    return pager_slicer_fb_sptr(new pager_slicer_fb(alpha));
 }
 
-pager_slicer_fb::pager_slicer_fb(float alpha, float beta) :
+pager_slicer_fb::pager_slicer_fb(float alpha) :
     gr_sync_block ("slicer_fb",
                    gr_make_io_signature (1, 1, sizeof(float)),
                    gr_make_io_signature (1, 1, sizeof(unsigned char)))
 {
     d_alpha = alpha;
-    d_beta = beta;
-    d_max = 0.0;
-    d_hi = 0.0;
     d_avg = 0.0;
-    d_lo = 0.0;
-    d_min = 0.0;
 }
 
 // Tracks average, minimum, and peak, then converts input into one of:
@@ -57,30 +52,18 @@
     sample -= d_avg;
 
     if (sample > 0) {
-        if (sample > d_hi) {                // In max region
-            d_max = d_max*(1.0-d_alpha) + sample*d_alpha;
+        if (sample > 2.0)          
             decision = 3;
-        }
-        else {
-            d_max -= (d_max-d_avg)*d_beta;  // decay otherwise
+        else
             decision = 2;
-        }
     }
     else {
-        if (sample < d_lo) {                // In min region
-            d_min = d_min*(1.0-d_alpha) + sample*d_alpha;
+        if (sample < -2.0)
             decision = 0;
-        }
-        else {
-            d_min -= (d_min-d_avg)*d_beta;  // decay otherwise
+        else
             decision = 1;
-        }
     }
 
-    d_hi = d_max*2.0/3.0;
-    d_lo = d_min*2.0/3.0;
-
-    //fprintf(stderr, "%f %d\n", sample, decision);
     return decision;
 }
 

Modified: gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h     
2007-07-13 17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h     
2007-07-13 21:47:00 UTC (rev 5955)
@@ -27,7 +27,7 @@
 class pager_slicer_fb;
 typedef boost::shared_ptr<pager_slicer_fb> pager_slicer_fb_sptr;
 
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
 
 /*!
  * \brief slicer description
@@ -36,18 +36,13 @@
 class pager_slicer_fb : public gr_sync_block
 {
 private:
-    friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
-    pager_slicer_fb(float alpha, float beta);
+    friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
+    pager_slicer_fb(float alpha);
 
     unsigned char slice(float sample);
 
     float d_alpha;      // Attack constant
-    float d_beta;       // Decay constant
-    float d_max;        // Maximum value for symbol comparison
-    float d_hi;         // High side decision boundary
     float d_avg;        // Average value for DC offset subtraction
-    float d_lo;         // Low side decision boundary
-    float d_min;        // Minimum value for symbol comparison
 
 public:
     int work (int noutput_items,

Modified: gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py  2007-07-13 
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py  2007-07-13 
21:47:00 UTC (rev 5955)
@@ -108,8 +108,8 @@
        
         CHAN_taps = optfir.low_pass(1.0,          # Filter gain
                                     if_rate,      # Sample rate
-                                   8000,         # One sided modulation 
bandwidth
-                                   10000,        # One sided channel bandwidth
+                                   11000,         # One sided modulation 
bandwidth
+                                   12500,        # One sided channel bandwidth
                                    0.1,          # Passband ripple
                                    60)           # Stopband attenuation
        





reply via email to

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