[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5955 - gnuradio/branches/features/pager/gr-pager/src
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r5955 - gnuradio/branches/features/pager/gr-pager/src |
Date: |
Fri, 13 Jul 2007 15:47:02 -0600 (MDT) |
Author: jcorgan
Date: 2007-07-13 15:47:00 -0600 (Fri, 13 Jul 2007)
New Revision: 5955
Modified:
gnuradio/branches/features/pager/gr-pager/src/flex_demod.py
gnuradio/branches/features/pager/gr-pager/src/pager.i
gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py
Log:
Improvements on demodulation chain.
Modified: gnuradio/branches/features/pager/gr-pager/src/flex_demod.py
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/flex_demod.py 2007-07-13
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/flex_demod.py 2007-07-13
21:47:00 UTC (rev 5955)
@@ -23,8 +23,6 @@
from math import pi
import pager_swig
-chan_rate = 16000
-
class flex_demod:
"""
FLEX pager protocol demodulation block.
@@ -34,9 +32,8 @@
Flow graph (so far):
- RSAMP - Resample incoming stream to 16000 sps
QUAD - Quadrature demodulator converts FSK to baseband amplitudes
- LPF - Low pass filter to remove noise prior to slicer
+ RSAMP - Resample to 16000 sps
SLICER - Converts input to one of four symbols (0, 1, 2, 3)
SYNC - Converts symbol stream to four phases of FLEX blocks
DEINTx - Deinterleaves FLEX blocks into datawords
@@ -50,26 +47,24 @@
def __init__(self, fg, channel_rate, queue):
- k = chan_rate/(2*pi*4800) # 4800 Hz max deviation
+ k = 25000/(2*pi*1600) # 4800 Hz max deviation
QUAD = gr.quadrature_demod_cf(k)
self.INPUT = QUAD
+ QUAD_sink = gr.file_sink(gr.sizeof_float, 'quad.dat')
- if channel_rate != chan_rate:
- interp = gru.lcm(channel_rate, chan_rate)/channel_rate
- decim = gru.lcm(channel_rate, chan_rate)/chan_rate
- RESAMP = blks.rational_resampler_ccf(fg, interp, decim)
- self.INPUT = RESAMP
-
- taps = optfir.low_pass(1.0, chan_rate, 3200, 6400, 0.1, 60)
- LPF = gr.fir_filter_fff(1, taps)
- SLICER = pager_swig.slicer_fb(.001, .00001) # Attack, decay
- SYNC = pager_swig.flex_sync(chan_rate)
+ RSAMP = blks.rational_resampler_fff(fg, 16, 25)
+ RSAMP_sink = gr.file_sink(gr.sizeof_float, 'rsamp.dat')
- if channel_rate != chan_rate:
- fg.connect(RESAMP, QUAD, LPF, SLICER, SYNC)
- else:
- fg.connect(QUAD, LPF, SLICER, SYNC)
+ SLICER = pager_swig.slicer_fb(.001) # Averaging filter constant
+ SLICER_sink = gr.file_sink(gr.sizeof_char, 'slicer.dat')
+ SYNC = pager_swig.flex_sync(16000)
+
+ fg.connect(QUAD, QUAD_sink)
+ fg.connect(RSAMP, RSAMP_sink)
+ fg.connect(SLICER, SLICER_sink)
+ fg.connect(QUAD, RSAMP, SLICER, SYNC)
+
DEINTA = pager_swig.flex_deinterleave()
PARSEA = pager_swig.flex_parse(queue)
Modified: gnuradio/branches/features/pager/gr-pager/src/pager.i
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager.i 2007-07-13
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager.i 2007-07-13
21:47:00 UTC (rev 5955)
@@ -39,12 +39,12 @@
GR_SWIG_BLOCK_MAGIC(pager,slicer_fb);
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
class pager_slicer_fb : public gr_sync_block
{
private:
- pager_slicer_fb(float alpha, float beta);
+ pager_slicer_fb(float alpha);
public:
};
Modified: gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
2007-07-13 17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.cc
2007-07-13 21:47:00 UTC (rev 5955)
@@ -26,23 +26,18 @@
#include <pager_slicer_fb.h>
#include <gr_io_signature.h>
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta)
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha)
{
- return pager_slicer_fb_sptr(new pager_slicer_fb(alpha, beta));
+ return pager_slicer_fb_sptr(new pager_slicer_fb(alpha));
}
-pager_slicer_fb::pager_slicer_fb(float alpha, float beta) :
+pager_slicer_fb::pager_slicer_fb(float alpha) :
gr_sync_block ("slicer_fb",
gr_make_io_signature (1, 1, sizeof(float)),
gr_make_io_signature (1, 1, sizeof(unsigned char)))
{
d_alpha = alpha;
- d_beta = beta;
- d_max = 0.0;
- d_hi = 0.0;
d_avg = 0.0;
- d_lo = 0.0;
- d_min = 0.0;
}
// Tracks average, minimum, and peak, then converts input into one of:
@@ -57,30 +52,18 @@
sample -= d_avg;
if (sample > 0) {
- if (sample > d_hi) { // In max region
- d_max = d_max*(1.0-d_alpha) + sample*d_alpha;
+ if (sample > 2.0)
decision = 3;
- }
- else {
- d_max -= (d_max-d_avg)*d_beta; // decay otherwise
+ else
decision = 2;
- }
}
else {
- if (sample < d_lo) { // In min region
- d_min = d_min*(1.0-d_alpha) + sample*d_alpha;
+ if (sample < -2.0)
decision = 0;
- }
- else {
- d_min -= (d_min-d_avg)*d_beta; // decay otherwise
+ else
decision = 1;
- }
}
- d_hi = d_max*2.0/3.0;
- d_lo = d_min*2.0/3.0;
-
- //fprintf(stderr, "%f %d\n", sample, decision);
return decision;
}
Modified: gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
2007-07-13 17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/pager_slicer_fb.h
2007-07-13 21:47:00 UTC (rev 5955)
@@ -27,7 +27,7 @@
class pager_slicer_fb;
typedef boost::shared_ptr<pager_slicer_fb> pager_slicer_fb_sptr;
-pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
+pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
/*!
* \brief slicer description
@@ -36,18 +36,13 @@
class pager_slicer_fb : public gr_sync_block
{
private:
- friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha, float beta);
- pager_slicer_fb(float alpha, float beta);
+ friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha);
+ pager_slicer_fb(float alpha);
unsigned char slice(float sample);
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,
Modified: gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py
===================================================================
--- gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py 2007-07-13
17:20:47 UTC (rev 5954)
+++ gnuradio/branches/features/pager/gr-pager/src/usrp_flex.py 2007-07-13
21:47:00 UTC (rev 5955)
@@ -108,8 +108,8 @@
CHAN_taps = optfir.low_pass(1.0, # Filter gain
if_rate, # Sample rate
- 8000, # One sided modulation
bandwidth
- 10000, # One sided channel bandwidth
+ 11000, # One sided modulation
bandwidth
+ 12500, # One sided channel bandwidth
0.1, # Passband ripple
60) # Stopband attenuation
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5955 - gnuradio/branches/features/pager/gr-pager/src,
jcorgan <=