[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5982 - gnuradio/trunk/gr-pager/src
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r5982 - gnuradio/trunk/gr-pager/src |
Date: |
Mon, 16 Jul 2007 00:46:07 -0600 (MDT) |
Author: jcorgan
Date: 2007-07-16 00:46:06 -0600 (Mon, 16 Jul 2007)
New Revision: 5982
Modified:
gnuradio/trunk/gr-pager/src/flex_demod.py
gnuradio/trunk/gr-pager/src/pager.i
gnuradio/trunk/gr-pager/src/pager_flex_sync.cc
gnuradio/trunk/gr-pager/src/pager_flex_sync.h
gnuradio/trunk/gr-pager/src/pager_slicer_fb.h
gnuradio/trunk/gr-pager/src/usrp_flex.py
Log:
Implemented AFC loop in gr-pager
Modified: gnuradio/trunk/gr-pager/src/flex_demod.py
===================================================================
--- gnuradio/trunk/gr-pager/src/flex_demod.py 2007-07-16 05:42:22 UTC (rev
5981)
+++ gnuradio/trunk/gr-pager/src/flex_demod.py 2007-07-16 06:46:06 UTC (rev
5982)
@@ -42,13 +42,13 @@
self.connect(self, quad)
rsamp = blks2.rational_resampler_fff(16, 25)
- slicer = pager_swig.slicer_fb(5e-5) # DC removal averaging filter
constant
- sync = pager_swig.flex_sync(16000)
+ self.slicer = pager_swig.slicer_fb(5e-6) # DC removal averaging filter
constant
+ self.sync = pager_swig.flex_sync()
- self.connect(quad, rsamp, slicer, sync)
+ self.connect(quad, rsamp, self.slicer, self.sync)
for i in range(4):
- self.connect((sync, i), pager_swig.flex_deinterleave(),
pager_swig.flex_parse(queue, freq))
+ self.connect((self.sync, i), pager_swig.flex_deinterleave(),
pager_swig.flex_parse(queue, freq))
if log:
suffix = '_'+ "%3.3f" % (freq/1e6,) + '.dat'
@@ -57,5 +57,8 @@
slicer_sink = gr.file_sink(gr.sizeof_char, 'slicer'+suffix)
self.connect(rsamp, rsamp_sink)
self.connect(quad, quad_sink)
- self.connect(slicer, slicer_sink)
-
\ No newline at end of file
+ self.connect(self.slicer, slicer_sink)
+
+ def dc_offset(self):
+ return self.slicer.dc_offset()
+
\ No newline at end of file
Modified: gnuradio/trunk/gr-pager/src/pager.i
===================================================================
--- gnuradio/trunk/gr-pager/src/pager.i 2007-07-16 05:42:22 UTC (rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager.i 2007-07-16 06:46:06 UTC (rev 5982)
@@ -47,18 +47,19 @@
pager_slicer_fb(float alpha);
public:
+ float dc_offset() const { return d_avg; }
};
// ----------------------------------------------------------------
GR_SWIG_BLOCK_MAGIC(pager,flex_sync);
-pager_flex_sync_sptr pager_make_flex_sync(int rate);
+pager_flex_sync_sptr pager_make_flex_sync();
class pager_flex_sync : public gr_block
{
private:
- pager_flex_sync(int rate);
+ pager_flex_sync();
public:
};
Modified: gnuradio/trunk/gr-pager/src/pager_flex_sync.cc
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_flex_sync.cc 2007-07-16 05:42:22 UTC
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_flex_sync.cc 2007-07-16 06:46:06 UTC
(rev 5982)
@@ -30,9 +30,9 @@
#include <gr_io_signature.h>
#include <gr_count_bits.h>
-pager_flex_sync_sptr pager_make_flex_sync(int rate)
+pager_flex_sync_sptr pager_make_flex_sync()
{
- return pager_flex_sync_sptr(new pager_flex_sync(rate));
+ return pager_flex_sync_sptr(new pager_flex_sync());
}
// FLEX sync block takes input from sliced baseband stream [0-3] at specified
@@ -41,13 +41,12 @@
// worth of bits on each output phase for the data portion of the frame.
Unused phases
// get all zeros, which are considered idle code words.
-pager_flex_sync::pager_flex_sync(int rate) :
+pager_flex_sync::pager_flex_sync() :
gr_block ("flex_sync",
gr_make_io_signature (1, 1, sizeof(unsigned char)),
gr_make_io_signature (4, 4, sizeof(unsigned char))),
- d_sync(rate/1600) // Maximum samples per baud
+ d_sync(10) // Fixed at 10 samples per baud (@ 1600 baud)
{
- d_rate = rate;
enter_idle();
}
@@ -120,7 +119,7 @@
d_mode = 0;
d_baudrate = 1600;
d_levels = 2;
- d_spb = d_rate/d_baudrate;
+ d_spb = 16000/d_baudrate;
d_bit_a = 0;
d_bit_b = 0;
d_bit_c = 0;
@@ -141,7 +140,6 @@
d_end = d_index;
d_center = index_avg(d_start, d_end); // Center of goodness
d_count = 0;
- //printf("SYNC1:%08X ", flex_modes[d_mode].sync);
}
void pager_flex_sync::enter_sync2()
@@ -150,7 +148,7 @@
d_count = 0;
d_baudrate = flex_modes[d_mode].baud;
d_levels = flex_modes[d_mode].levels;
- d_spb = d_rate/d_baudrate;
+ d_spb = 16000/d_baudrate;
if (d_baudrate == 3200) {
// Oversampling buffer just got halved
Modified: gnuradio/trunk/gr-pager/src/pager_flex_sync.h
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_flex_sync.h 2007-07-16 05:42:22 UTC
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_flex_sync.h 2007-07-16 06:46:06 UTC
(rev 5982)
@@ -28,7 +28,7 @@
typedef boost::shared_ptr<pager_flex_sync> pager_flex_sync_sptr;
typedef std::vector<gr_int64> gr_int64_vector;
-pager_flex_sync_sptr pager_make_flex_sync(int rate);
+pager_flex_sync_sptr pager_make_flex_sync();
/*!
* \brief flex sync description
@@ -39,8 +39,8 @@
{
private:
// Constructors
- friend pager_flex_sync_sptr pager_make_flex_sync(int rate);
- pager_flex_sync(int rate);
+ friend pager_flex_sync_sptr pager_make_flex_sync();
+ pager_flex_sync();
// State machine transitions
void enter_idle();
@@ -58,7 +58,6 @@
enum state_t { ST_IDLE, ST_SYNCING, ST_SYNC1, ST_SYNC2, ST_DATA };
state_t d_state;
- int d_rate; // Incoming sample rate
int d_index; // Index into current baud
int d_start; // Start of good sync
int d_center; // Center of bit
Modified: gnuradio/trunk/gr-pager/src/pager_slicer_fb.h
===================================================================
--- gnuradio/trunk/gr-pager/src/pager_slicer_fb.h 2007-07-16 05:42:22 UTC
(rev 5981)
+++ gnuradio/trunk/gr-pager/src/pager_slicer_fb.h 2007-07-16 06:46:06 UTC
(rev 5982)
@@ -49,6 +49,8 @@
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
+
+ float dc_offset() const { return d_avg; }
};
#endif /* INCLUDED_PAGER_SLICER_FB_H */
Modified: gnuradio/trunk/gr-pager/src/usrp_flex.py
===================================================================
--- gnuradio/trunk/gr-pager/src/usrp_flex.py 2007-07-16 05:42:22 UTC (rev
5981)
+++ gnuradio/trunk/gr-pager/src/usrp_flex.py 2007-07-16 06:46:06 UTC (rev
5982)
@@ -52,7 +52,10 @@
def __init__(self, options, queue):
gr.top_block.__init__(self, "usrp_flex")
self.options = options
-
+ self.offset = 0.0
+ self.adj_time = time.time()
+ self.verbose = options.verbose
+
if options.from_file is None:
# Set up USRP source with specified RX daughterboard
self.src = usrp.source_c()
@@ -104,20 +107,31 @@
if options.verbose:
print "Channel filter has", len(taps), "taps."
- chan = gr.freq_xlating_fir_filter_ccf(10, # Decimation rate
+ self.chan = gr.freq_xlating_fir_filter_ccf(10, # Decimation rate
taps, # Filter taps
0.0, # Offset frequency
250e3) # Sample rate
if options.log:
chan_sink = gr.file_sink(gr.sizeof_gr_complex, 'chan.dat')
- self.connect(chan, chan_sink)
+ self.connect(self.chan, chan_sink)
# FLEX protocol demodulator
- flex = pager.flex_demod(queue, options.frequency, options.verbose,
options.log)
+ self.flex = pager.flex_demod(queue, options.frequency,
options.verbose, options.log)
- self.connect(self.src, chan, flex)
-
+ self.connect(self.src, self.chan, self.flex)
+
+ def freq_offset(self):
+ return self.flex.dc_offset()*1600
+
+ def adjust_freq(self):
+ if time.time() - self.adj_time > 1.6: # Only do it once per FLEX frame
+ self.adj_time = time.time()
+ self.offset -= self.freq_offset()
+ self.chan.set_center_freq(self.offset)
+ if self.verbose:
+ print "Channel frequency offset (Hz):", int(self.offset)
+
def main():
parser = OptionParser(option_class=eng_option)
parser.add_option("-f", "--frequency", type="eng_float", default=None,
@@ -161,7 +175,8 @@
else:
disp.append(page[n])
print join(disp, '')
-
+ tb.adjust_freq()
+
else:
time.sleep(1)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5982 - gnuradio/trunk/gr-pager/src,
jcorgan <=