commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] gnuradio-core/src lib/filter/gr_adaptive_fir_cc...


From: Johnathan Corgan
Subject: [Commit-gnuradio] gnuradio-core/src lib/filter/gr_adaptive_fir_cc...
Date: Tue, 04 Jul 2006 21:28:12 +0000

CVSROOT:        /sources/gnuradio
Module name:    gnuradio-core
Changes by:     Johnathan Corgan <jcorgan>      06/07/04 21:28:12

Modified files:
        src/lib/filter : gr_adaptive_fir_ccf.cc gr_cma_equalizer_cc.cc 
                         gr_cma_equalizer_cc.h 
        src/python/gnuradio/blksimpl: fm_demod.py 

Log message:
        Continued work in progress on constant modulus filter.
        
        Implemented simple CMA(1,2) error calculation and update.  Difficult to
        find stable values of mu for NBFM channels, but fm_demod.py has a
        commented out CMA block to experiment with.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py?cvsroot=gnuradio&r1=1.4&r2=1.5

Patches:
Index: lib/filter/gr_adaptive_fir_ccf.cc
===================================================================
RCS file: 
/sources/gnuradio/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_adaptive_fir_ccf.cc   4 Jul 2006 07:20:52 -0000       1.1
+++ lib/filter/gr_adaptive_fir_ccf.cc   4 Jul 2006 21:28:12 -0000       1.2
@@ -68,8 +68,11 @@
         
     // Adjust taps
     d_error = error(sum);
-    for (k = 0; k < l; k++)
+    for (k = 0; k < l; k++) {
+      //printf("%f ", d_taps[k]);
         update_tap(d_taps[l-k-1], in[j+k]);
+    }
+    //printf("\n");
 
     j += decimation();
   }

Index: lib/filter/gr_cma_equalizer_cc.cc
===================================================================
RCS file: 
/sources/gnuradio/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_cma_equalizer_cc.cc   4 Jul 2006 07:20:52 -0000       1.1
+++ lib/filter/gr_cma_equalizer_cc.cc   4 Jul 2006 21:28:12 -0000       1.2
@@ -36,5 +36,6 @@
   : gr_adaptive_fir_ccf("cma_equalizer_cc", 1, std::vector<float>(num_taps)),
     d_modulus(modulus), d_mu(mu)
 {
-  d_taps[0] = 1.0; // Initial tap causes identity mapping
+  d_taps[0] = 1.0;
 }
+

Index: lib/filter/gr_cma_equalizer_cc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_cma_equalizer_cc.h    4 Jul 2006 07:20:52 -0000       1.1
+++ lib/filter/gr_cma_equalizer_cc.h    4 Jul 2006 21:28:12 -0000       1.2
@@ -40,25 +40,24 @@
 private:
   float d_modulus;
   float d_mu;
+  float d_decay;
     
   friend gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float 
modulus, float mu);
   gr_cma_equalizer_cc(int num_taps, float modulus, float mu);
 
 protected:
-  virtual float error(const gr_complex &out); 
-  virtual void update_tap(float &tap, const gr_complex &in);
+
+  virtual float error(const gr_complex &out) 
+  { 
+    return (d_modulus - norm(out)); 
+  }
+
+  virtual void update_tap(float &tap, const gr_complex &in) 
+  {
+    tap += d_mu*d_error*abs(in);
+  }
   
 public:
 };
 
-inline float gr_cma_equalizer_cc::error(const gr_complex &out)
-{
-    return 0.0; // Not implemented
-}
-
-inline void gr_cma_equalizer_cc::update_tap(float &tap, const gr_complex &in)
-{
-    tap += 0.0; // Not implemented
-}
-
 #endif

Index: python/gnuradio/blksimpl/fm_demod.py
===================================================================
RCS file: 
/sources/gnuradio/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- python/gnuradio/blksimpl/fm_demod.py        4 Jul 2006 07:20:52 -0000       
1.4
+++ python/gnuradio/blksimpl/fm_demod.py        4 Jul 2006 21:28:12 -0000       
1.5
@@ -52,9 +52,15 @@
     def __init__(self, fg, channel_rate, audio_decim, deviation, 
                  audio_pass, audio_stop, gain=1.0, tau=75e-6):
        
-       # Equalizer for 250 us delay
-       CMA = gr.cma_equalizer_cc(int(channel_rate/4000), 0.5, 0.0001);
-       
+"""    
+       # Equalizer for ~100 us delay
+       delay = 100e-6
+       num_taps = int(channel_rate*delay)
+
+       mu = 1e-4/num_taps
+       print "CMA: delay =", delay, "n =", num_taps, "mu =", mu
+       CMA = gr.cma_equalizer_cc(num_taps, 1.0, mu)
+"""    
        k = channel_rate/(2*pi*deviation)
        QUAD = gr.quadrature_demod_cf(k)
 
@@ -68,11 +74,11 @@
 
        if tau is not None:
            DEEMPH = fm_deemph(fg, channel_rate, tau)
-           fg.connect(CMA, QUAD, DEEMPH, LPF)
+           fg.connect(QUAD, DEEMPH, LPF)
         else:
-            fg.connect(CMA, QUAD, LPF)
+            fg.connect(QUAD, LPF)
 
-        gr.hier_block.__init__(self, fg, CMA, LPF)
+        gr.hier_block.__init__(self, fg, QUAD, LPF)
 
 class demod_20k0f3e_cf(fm_demod_cf):
     """




reply via email to

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