[Top][All Lists]
[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 ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4850 - in gnuradio/branches/developers/jcorgan/channel/gnuradio-core/src: lib/general python/gnuradio/gr,
jcorgan <=