[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5966 - in gnuradio/trunk/gnuradio-core/src: lib/gener
From: |
trondeau |
Subject: |
[Commit-gnuradio] r5966 - in gnuradio/trunk/gnuradio-core/src: lib/general python/gnuradio/gr |
Date: |
Sun, 15 Jul 2007 12:05:55 -0600 (MDT) |
Author: trondeau
Date: 2007-07-15 12:05:55 -0600 (Sun, 15 Jul 2007)
New Revision: 5966
Added:
gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_regenerate.py
Modified:
gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.cc
gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.h
gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.i
Log:
merged -r5947:5965 on trondeau/regen into trunk. Fixes ticket:154 on
gr_regenerate_bb block.
Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.cc
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.cc
2007-07-15 17:16:24 UTC (rev 5965)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.cc
2007-07-15 18:05:55 UTC (rev 5966)
@@ -38,11 +38,26 @@
gr_make_io_signature (1, 1, sizeof (char)),
gr_make_io_signature (1, 1, sizeof (char))),
d_period(period),
+ d_countdown(0),
d_max_regen(max_regen),
- d_regen_count(0)
+ d_regen_count(max_regen)
{
}
+void gr_regenerate_bb::set_max_regen(unsigned int regen)
+{
+ d_max_regen = regen;
+ d_countdown = 0;
+ d_regen_count = d_max_regen;
+}
+
+void gr_regenerate_bb::set_period(int period)
+{
+ d_period = period;
+ d_countdown = 0;
+ d_regen_count = d_max_regen;
+}
+
int
gr_regenerate_bb::work (int noutput_items,
gr_vector_const_void_star &input_items,
@@ -53,14 +68,8 @@
for (int i = 0; i < noutput_items; i++){
optr[i] = 0;
-
- if(iptr[i] == 1) {
- d_countdown = d_period;
- optr[i] = 1;
- d_regen_count = 0;
- }
- if(d_regen_count <= d_max_regen) {
+ if(d_regen_count < d_max_regen) {
d_countdown--;
if(d_countdown == 0) {
@@ -69,6 +78,13 @@
d_regen_count++;
}
}
+
+ if(iptr[i] == 1) {
+ d_countdown = d_period;
+ optr[i] = 1;
+ d_regen_count = 0;
+ }
+
}
return noutput_items;
}
Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.h
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.h
2007-07-15 17:16:24 UTC (rev 5965)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.h
2007-07-15 18:05:55 UTC (rev 5966)
@@ -31,14 +31,23 @@
gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int
max_regen=500);
/*!
- * \brief Detect the peak of a signal
+ * \brief Detect the peak of a signal and repeat every period samples
* \ingroup block
*
* If a peak is detected, this block outputs a 1 repeated every period samples
- * until reset by detection of another 1 on the input
+ * until reset by detection of another 1 on the input or stopped after
max_regen
+ * regenerations have occurred.
+ *
+ * Note that if max_regen=(-1)/ULONG_MAX then the regeneration will run
forever.
*/
class gr_regenerate_bb : public gr_sync_block
{
+ /*!
+ * \brief Make a regenerate block
+ * \param period The number of samples between regenerations
+ * \param max_regen The maximum number of regenerations to perform; if set
to
+ * ULONG_MAX, it will regenerate continuously.
+ */
friend gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int
max_regen);
gr_regenerate_bb (int period, unsigned int max_regen);
@@ -50,7 +59,14 @@
unsigned int d_regen_count;
public:
+ /*! \brief Reset the maximum regeneration count; this will reset the current
regen.
+ */
+ void set_max_regen(unsigned int regen);
+ /*! \brief Reset the period of regenerations; this will reset the current
regen.
+ */
+ void set_period(int period);
+
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.i
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.i
2007-07-15 17:16:24 UTC (rev 5965)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_regenerate_bb.i
2007-07-15 18:05:55 UTC (rev 5966)
@@ -28,4 +28,11 @@
{
private:
gr_regenerate_bb (int period, unsigned int max_regen);
+
+public:
+ void set_max_regen(unsigned int regen);
+
+ /*! \brief Reset the period of regenerations; this will reset the current
regen.
+ */
+ void set_period(int period);
};
Copied: gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_regenerate.py
(from rev 5965,
gnuradio/branches/developers/trondeau/regen/gnuradio-core/src/python/gnuradio/gr/qa_regenerate.py)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_regenerate.py
(rev 0)
+++ gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_regenerate.py
2007-07-15 18:05:55 UTC (rev 5966)
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+#
+# Copyright 2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from gnuradio import gr, gr_unittest
+import math
+
+class test_sig_source (gr_unittest.TestCase):
+
+ def setUp (self):
+ self.fg = gr.flow_graph ()
+
+ def tearDown (self):
+ self.fg = None
+
+ def test_regen1 (self):
+ fg = self.fg
+
+ data = [0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+
+ expected_result = (0, 0, 0,
+ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0,
+ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0)
+
+
+ src = gr.vector_source_b(data, False)
+ regen = gr.regenerate_bb(5, 2)
+ dst = gr.vector_sink_b()
+
+ fg.connect (src, regen)
+ fg.connect (regen, dst)
+ fg.run ()
+
+ dst_data = dst.data ()
+
+ self.assertEqual (expected_result, dst_data)
+
+ def test_regen2 (self):
+ fg = self.fg
+
+ data = 200*[0,]
+ data[9] = 1
+ data[99] = 1
+
+ expected_result = 200*[0,]
+ expected_result[9] = 1
+ expected_result[19] = 1
+ expected_result[29] = 1
+ expected_result[39] = 1
+
+ expected_result[99] = 1
+ expected_result[109] = 1
+ expected_result[119] = 1
+ expected_result[129] = 1
+
+ src = gr.vector_source_b(data, False)
+ regen = gr.regenerate_bb(10, 3)
+ dst = gr.vector_sink_b()
+
+ fg.connect (src, regen)
+ fg.connect (regen, dst)
+ fg.run ()
+
+ dst_data = dst.data ()
+
+ self.assertEqual (tuple(expected_result), dst_data)
+
+
+if __name__ == '__main__':
+ gr_unittest.main ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5966 - in gnuradio/trunk/gnuradio-core/src: lib/general python/gnuradio/gr,
trondeau <=