[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3485 - in gnuradio/branches/developers/jcorgan/pager/
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r3485 - in gnuradio/branches/developers/jcorgan/pager/gr-pager/src: lib python |
Date: |
Mon, 4 Sep 2006 15:02:16 -0600 (MDT) |
Author: jcorgan
Date: 2006-09-04 15:02:16 -0600 (Mon, 04 Sep 2006)
New Revision: 3485
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager.i
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.cc
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.h
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/python/flex_demod.py
Log:
Improved slicer with separate attack, decay constants.
Modified: gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager.i
===================================================================
--- gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager.i
2006-09-04 17:17:12 UTC (rev 3484)
+++ gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager.i
2006-09-04 21:02:16 UTC (rev 3485)
@@ -33,7 +33,7 @@
GR_SWIG_BLOCK_MAGIC(pager,slicer_ff);
-pager_slicer_ff_sptr pager_make_slicer_ff(float alpha);
+pager_slicer_ff_sptr pager_make_slicer_ff(float alpha, float beta);
class pager_slicer_ff : public gr_sync_block
{
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.cc
2006-09-04 17:17:12 UTC (rev 3484)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.cc
2006-09-04 21:02:16 UTC (rev 3485)
@@ -26,46 +26,67 @@
#include <pager_slicer_ff.h>
#include <gr_io_signature.h>
-pager_slicer_ff_sptr pager_make_slicer_ff(float alpha)
+pager_slicer_ff_sptr pager_make_slicer_ff(float alpha, float beta)
{
- return pager_slicer_ff_sptr(new pager_slicer_ff(alpha));
+ return pager_slicer_ff_sptr(new pager_slicer_ff(alpha, beta));
}
-pager_slicer_ff::pager_slicer_ff(float alpha) :
+pager_slicer_ff::pager_slicer_ff(float alpha, float beta) :
gr_sync_block ("slicer_ff",
gr_make_io_signature (1, 1, sizeof(float)),
gr_make_io_signature (1, 1, sizeof(float)))
{
d_alpha = alpha;
- d_max = 0.5;
+ d_beta = beta;
+ d_max = 0.0;
+ d_hi = 0.0;
d_avg = 0.0;
- d_min = -0.5;
+ d_lo = 0.0;
+ d_min = 0.0;
}
+// Tracks average, minimum, and peak, then converts input into one of:
+//
+// [-1.0, -0.333, 0.333, 1.0]
float pager_slicer_ff::slice(float sample)
{
float result = 0.0;
- d_avg = d_avg*(1-d_alpha)+sample*d_alpha;
- if (sample > (d_max-d_avg)*2.0/3.0) { // In max region
- result = 1.0;
- d_max = d_max*(1-d_alpha)+sample*d_alpha;
- } else if (sample > d_avg) {
- result = 1.0/3.0;
- } else if (sample < (d_min-d_avg)*2.0/3.0) { // In min region
- result = -1.0;
- d_min = d_min*(1-d_alpha)+sample*d_alpha;
- } else {
- result = -1.0/3.0;
+ // Update DC level and remove
+ d_avg = d_avg*(1.0-d_alpha)+sample*d_alpha;
+ sample -= d_avg;
+
+ if (sample > 0) {
+ if (sample > d_hi) { // In max region
+ d_max = d_max*(1.0-d_alpha) + sample*d_alpha;
+ result = 1.0;
+ }
+ else {
+ d_max -= (d_max-d_avg)*d_beta; // decay otherwise
+ result = 1.0/3.0;
+ }
}
+ else {
+ if (sample < d_lo) { // In min region
+ d_min = d_min*(1.0-d_alpha) + sample*d_alpha;
+ result = -1.0;
+ }
+ else {
+ d_min -= (d_min-d_avg)*d_beta; // decay otherwise
+ result = -1.0/3.0;
+ }
+ }
- //fprintf(stderr, "%f %f %f %f %f\n", d_min, d_avg, d_max, sample, result);
+ d_hi = d_max*2.0/3.0;
+ d_lo = d_min*2.0/3.0;
+
+ //fprintf(stderr, "%f %f %f %f %f %f\n", d_min, d_lo, d_hi, d_max, sample,
result);
return result;
}
int pager_slicer_ff::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
float *iptr = (float *) input_items[0];
float *optr = (float *) output_items[0];
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.h
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.h
2006-09-04 17:17:12 UTC (rev 3484)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/lib/pager_slicer_ff.h
2006-09-04 21:02:16 UTC (rev 3485)
@@ -27,7 +27,7 @@
class pager_slicer_ff;
typedef boost::shared_ptr<pager_slicer_ff> pager_slicer_ff_sptr;
-pager_slicer_ff_sptr pager_make_slicer_ff(float alpha);
+pager_slicer_ff_sptr pager_make_slicer_ff(float alpha, float beta);
/*!
* \brief slicer description
@@ -36,20 +36,23 @@
class pager_slicer_ff : public gr_sync_block
{
private:
- friend pager_slicer_ff_sptr pager_make_slicer_ff(float alpha);
- pager_slicer_ff(float alpha);
+ friend pager_slicer_ff_sptr pager_make_slicer_ff(float alpha, float beta);
+ pager_slicer_ff(float alpha, float beta);
float slice(float sample);
- float d_alpha; // Exponential constant
+ 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,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ int work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
#endif /* INCLUDED_PAGER_SLICER_FF_H */
Modified:
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/python/flex_demod.py
===================================================================
---
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/python/flex_demod.py
2006-09-04 17:17:12 UTC (rev 3484)
+++
gnuradio/branches/developers/jcorgan/pager/gr-pager/src/python/flex_demod.py
2006-09-04 21:02:16 UTC (rev 3485)
@@ -19,7 +19,8 @@
# Boston, MA 02111-1307, USA.
#
-from gnuradio import gr, optfir, pager
+from gnuradio import gr, optfir
+import pager
from math import pi
class flex_demod(gr.hier_block):
@@ -47,7 +48,7 @@
taps = optfir.low_pass(1.0, channel_rate, 3200, 6400, 0.1, 60)
LPF = gr.fir_filter_fff(1, taps)
- SLICER = pager.slicer_ff(.0005)
+ SLICER = pager.slicer_ff(.001, .00001) # Attack, decay
fg.connect(QUAD, LPF, SLICER)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3485 - in gnuradio/branches/developers/jcorgan/pager/gr-pager/src: lib python,
jcorgan <=