commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4850 - in gnuradio/branches/developers/jcorgan/channe


From: jcorgan
Subject: [Commit-gnuradio] r4850 - in gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src: lib/general python/gnuradio/gr
Date: Mon, 2 Apr 2007 18:43:10 -0600 (MDT)

Author: jcorgan
Date: 2007-04-02 18:43:10 -0600 (Mon, 02 Apr 2007)
New Revision: 4850

Modified:
   
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc
   
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
   
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py
Log:
Implemented 'one-bin per period' PN correlator.

Modified: 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc
   2007-04-03 00:40:46 UTC (rev 4849)
+++ 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc
   2007-04-03 00:43:10 UTC (rev 4850)
@@ -40,12 +40,16 @@
                       (unsigned int)((1ULL << degree)-1)) // PN code length
 {
   d_len = (unsigned int)((1ULL << degree)-1);
-  d_glfsr = new gri_glfsr(mask, seed);
+  if (mask == 0)
+    mask = gri_glfsr::glfsr_mask(degree);
+  d_reference = new gri_glfsr(mask, seed);
+  for (int i = 0; i < d_len; i++)      // initialize to last value in sequence
+    d_pn = 2.0*d_reference->next_bit()-1.0;
 }
 
 gr_pn_correlator_cc::~gr_pn_correlator_cc()
 {
-  delete d_glfsr;
+  delete d_reference;
 }
 
 int
@@ -53,5 +57,21 @@
                          gr_vector_const_void_star &input_items,
                          gr_vector_void_star &output_items)
 {
+  const gr_complex *in = (const gr_complex *) input_items[0];
+  gr_complex *out = (gr_complex *) output_items[0];
+  gr_complex sum;
+
+  for (int i = 0; i < noutput_items; i++) {
+    sum = 0.0;
+
+    for (int j = 0; j < d_len; j++) {
+      if (j != 0)                          // retard PN generator one sample 
per period
+       d_pn = 2.0*d_reference->next_bit()-1.0; // no conditionals
+      sum += *in++ * d_pn;
+    }
+
+    *out++ = sum;
+  }
+
   return noutput_items;
 }

Modified: 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
    2007-04-03 00:40:46 UTC (rev 4849)
+++ 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h
    2007-04-03 00:43:10 UTC (rev 4850)
@@ -42,8 +42,9 @@
 {
   friend gr_pn_correlator_cc_sptr gr_make_pn_correlator_cc(int degree, int 
mask, int seed);
 
-  int d_len;
-  gri_glfsr *d_glfsr;
+  int        d_len;
+  float      d_pn;
+  gri_glfsr *d_reference;
 
  protected:
   gr_pn_correlator_cc(int degree, int mask, int seed);

Modified: 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py
    2007-04-03 00:40:46 UTC (rev 4849)
+++ 
gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py
    2007-04-03 00:43:10 UTC (rev 4850)
@@ -33,5 +33,18 @@
     def test_000_make(self):
         c = gr.pn_correlator_cc(10)
 
+    def test_001_correlate(self):
+        degree = 10
+        length = 2**degree-1
+        src = gr.glfsr_source_f(degree)
+        head = gr.head(gr.sizeof_float, length*length)
+        f2c = gr.float_to_complex()
+        corr = gr.pn_correlator_cc(degree)
+        dst = gr.vector_sink_c()
+        self.fg.connect(src, head, f2c, corr, dst)
+        self.fg.run()
+        data = dst.data()
+        self.assertEqual(data[-1], (length+0j))
+        
 if __name__ == '__main__':
     gr_unittest.main ()





reply via email to

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