[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3592 - in gnuradio/branches/developers/trondeau/digit
From: |
trondeau |
Subject: |
[Commit-gnuradio] r3592 - in gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src: lib/general python/gnuradio python/gnuradio/blksimpl |
Date: |
Wed, 20 Sep 2006 11:12:14 -0600 (MDT) |
Author: trondeau
Date: 2006-09-20 11:12:14 -0600 (Wed, 20 Sep 2006)
New Revision: 3592
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
Log:
added second rate to AGC (probably should be better named than rate1, rate2);
dbpsk, dqpsk, gmsk all work in dicontinuous mode
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
2006-09-20 17:12:14 UTC (rev 3592)
@@ -29,23 +29,25 @@
#include <gri_agc_cc.h>
gr_agc_cc_sptr
-gr_make_agc_cc (float rate, float reference, float gain, float max_gain)
+gr_make_agc_cc (float rate1, float rate2, float reference,
+ float gain, float max_gain)
{
- return gr_agc_cc_sptr (new gr_agc_cc (rate, reference, gain, max_gain));
+ return gr_agc_cc_sptr (new gr_agc_cc (rate1, rate2, reference, gain,
max_gain));
}
-gr_agc_cc::gr_agc_cc (float rate, float reference, float gain, float max_gain)
+gr_agc_cc::gr_agc_cc (float rate1, float rate2, float reference,
+ float gain, float max_gain)
: gr_sync_block ("gr_agc_cc",
gr_make_io_signature (1, 1, sizeof (gr_complex)),
- gr_make_io_signature (1, 1, sizeof (gr_complex)))
- , gri_agc_cc (rate, reference, gain, max_gain)
+ gr_make_io_signature (1, 1, sizeof (gr_complex))),
+ gri_agc_cc (rate1, rate2, reference, gain, max_gain)
{
}
int
gr_agc_cc::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)
{
const gr_complex *in = (const gr_complex *) input_items[0];
gr_complex *out = (gr_complex *) output_items[0];
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
2006-09-20 17:12:14 UTC (rev 3592)
@@ -29,7 +29,8 @@
typedef boost::shared_ptr<gr_agc_cc> gr_agc_cc_sptr;
gr_agc_cc_sptr
-gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0,
float max_gain = 0.0);
+gr_make_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0,
+ float gain = 1.0, float max_gain = 1000.0);
/*!
* \brief high performance Automatic Gain Control class
*
@@ -38,8 +39,10 @@
class gr_agc_cc : public gr_sync_block, public gri_agc_cc
{
- friend gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference, float
gain, float max_gain);
- gr_agc_cc (float rate, float reference, float gain, float max_gain);
+ friend gr_agc_cc_sptr gr_make_agc_cc (float rate1, float rate2, float
reference,
+ float gain, float max_gain);
+ gr_agc_cc (float rate1, float rate2, float reference,
+ float gain, float max_gain);
public:
virtual int work (int noutput_items,
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
2006-09-20 17:12:14 UTC (rev 3592)
@@ -25,9 +25,11 @@
%include <gri_agc_cc.i>
gr_agc_cc_sptr
-gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0,
float max_gain = 0.0);
+gr_make_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0,
+ float gain = 1.0, float max_gain = 1000.0);
class gr_agc_cc : public gr_sync_block , public gri_agc_cc
{
- gr_agc_cc (float rate, float reference, float gain, float max_gain);
+ gr_agc_cc (float rate1, float rate2, float reference,
+ float gain, float max_gain);
};
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
2006-09-20 17:12:14 UTC (rev 3592)
@@ -34,23 +34,33 @@
class gri_agc_cc {
public:
- gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0,
float max_gain = 0.0)
- : _rate(rate), _reference(reference), _gain(gain), _max_gain(max_gain) {};
+ gri_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0,
+ float gain = 1.0, float max_gain = 1000.0)
+ : _rate1(rate1), _rate2(rate2), _reference(reference),
+ _gain(gain), _max_gain(max_gain) {};
- float rate () const { return _rate; }
+ float rate1 () const { return _rate1; }
+ float rate2 () const { return _rate2; }
float reference () const { return _reference; }
float gain () const { return _gain; }
float max_gain() const { return _max_gain; }
- void set_rate (float rate) { _rate = rate; }
+ void set_rate1 (float rate) { _rate1 = rate; }
+ void set_rate2 (float rate) { _rate2 = rate; }
void set_reference (float reference) { _reference = reference; }
void set_gain (float gain) { _gain = gain; }
void set_max_gain(float max_gain) { _max_gain = max_gain; }
-
+
gr_complex scale (gr_complex input){
gr_complex output = input * _gain;
- _gain += (_reference -
sqrt(output.real()*output.real()+output.imag()*output.imag())) * _rate; //use
abs or cabs to get approximation by absolute value,
- //note that abs is
computationally more intensive then norm for a complex number
+
+ float tmp = (_reference - sqrt(output.real()*output.real() +
+ output.imag()*output.imag()));
+ float rate = _rate1;
+ if(tmp > _gain)
+ rate = _rate2;
+ _gain += tmp*rate;
+
if (_max_gain > 0.0 && _gain > _max_gain)
_gain = _max_gain;
return output;
@@ -62,7 +72,8 @@
}
protected:
- float _rate; // adjustment rate
+ float _rate1; // adjustment rate
+ float _rate2; // decay rate
float _reference; // reference value
float _gain; // current gain
float _max_gain; // max allowable gain
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
2006-09-20 17:12:14 UTC (rev 3592)
@@ -32,8 +32,10 @@
class gri_agc_cc {
public:
- gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0,
float max_gain = 0.0);
- float rate ();
+ gri_agc_cc (float rate1 = 1e-2, float rate2 = 1e-2, float reference = 1.0,
+ float gain = 1.0, float max_gain = 1000.0);
+ float rate1 ();
+ float rate2 ();
float reference ();
float gain ();
float max_gain ();
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
2006-09-20 17:12:14 UTC (rev 3592)
@@ -179,8 +179,9 @@
arity = pow(2,self.bits_per_baud())
# Automatic gain control
- self.preamp = gr.multiply_const_cc(10e-5)
- self.agc = gr.agc_cc(1e-3, 1, 1)
+ scale = (1.0/16384.0)
+ self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal
from full-range to +-1
+ self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
# Costas loop (carrier tracking)
# FIXME: need to decide how to handle this more generally; do we pull
it from higher layer?
@@ -225,9 +226,9 @@
self.debug()
# Connect and Initialize base class
- self._fg.connect(self.preamp, self.agc, self.costas_loop,
self.rrc_filter, \
+ self._fg.connect(self.pre_scaler, self.agc, self.costas_loop,
self.rrc_filter, \
self.clock_recovery, self.slicer, self.gray_decoder,
self.unpack)
- gr.hier_block.__init__(self, self.fg, self.preamp, self.unpack)
+ gr.hier_block.__init__(self, self.fg, self.pre_scaler, self.unpack)
def samples_per_symbol(self):
return self._samples_per_symbol
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
2006-09-20 17:12:14 UTC (rev 3592)
@@ -206,15 +206,15 @@
arity = pow(2,self.bits_per_symbol())
# Automatic gain control
- self.preamp = gr.multiply_const_cc(10e-5)
- #self.agc = gr.agc_cc(1e-4, 1, 1, 1000)
- self.agc = gr.multiply_const_cc(1)
+ scale = (1.0/16384.0)
+ self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal
from full-range to +-1
+ self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
# Costas loop (carrier tracking)
# FIXME: need to decide how to handle this more generally; do we pull
it from higher layer?
costas_order = 2
beta = .25 * self._costas_alpha * self._costas_alpha
- self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.5,
-0.5, costas_order)
+ self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.05,
-0.05, costas_order)
# RRC data filter
ntaps = 11 * self._samples_per_symbol
@@ -255,9 +255,9 @@
self._setup_logging()
# Connect and Initialize base class
- self._fg.connect(self.preamp, self.agc, self.costas_loop,
self.rrc_filter, self.clock_recovery,
+ self._fg.connect(self.pre_scaler, self.agc, self.costas_loop,
self.rrc_filter, self.clock_recovery,
self.diffdec, self.slicer, self.gray_decoder,
self.unpack)
- gr.hier_block.__init__(self, self._fg, self.preamp, self.unpack)
+ gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
def samples_per_symbol(self):
return self._samples_per_symbol
@@ -277,25 +277,25 @@
def _setup_logging(self):
print "Modulation logging turned on."
self._fg.connect(self.agc,
- gr.file_sink(gr.sizeof_gr_complex, "agc.dat"))
+ gr.file_sink(gr.sizeof_gr_complex, "agc.dat"))
self._fg.connect(self.costas_loop,
- gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat"))
+ gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat"))
self._fg.connect((self.costas_loop,1),
- gr.file_sink(gr.sizeof_gr_complex, "costas_error.dat"))
+ gr.file_sink(gr.sizeof_gr_complex,
"costas_error.dat"))
self._fg.connect(self.rrc_filter,
- gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+ gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
self._fg.connect(self.clock_recovery,
- gr.file_sink(gr.sizeof_gr_complex,
"clock_recovery.dat"))
+ gr.file_sink(gr.sizeof_gr_complex,
"clock_recovery.dat"))
self._fg.connect((self.clock_recovery,1),
- gr.file_sink(gr.sizeof_gr_complex,
"clock_recovery_error.dat"))
+ gr.file_sink(gr.sizeof_gr_complex,
"clock_recovery_error.dat"))
self._fg.connect(self.diffdec,
- gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat"))
+ gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat"))
self._fg.connect(self.slicer,
gr.file_sink(gr.sizeof_char, "slicer.dat"))
self._fg.connect(self.gray_decoder,
- gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
+ gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
self._fg.connect(self.unpack,
- gr.file_sink(gr.sizeof_char, "unpack.dat"))
+ gr.file_sink(gr.sizeof_char, "unpack.dat"))
def add_options(parser):
"""
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
2006-09-20 17:12:14 UTC (rev 3592)
@@ -203,9 +203,9 @@
arity = pow(2,self.bits_per_symbol())
# Automatic gain control
- self.preamp = gr.multiply_const_cc(10e-5)
- #self.agc = gr.agc_cc(1e-3, 1, 1)
- self.agc = gr.multiply_const_cc(1)
+ scale = (1.0/16384.0)
+ self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal
from full-range to +-1
+ self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
# Costas loop (carrier tracking)
# FIXME: need to decide how to handle this more generally; do we pull
it from higher layer?
@@ -253,9 +253,9 @@
self._setup_logging()
# Connect & Initialize base class
- self._fg.connect(self.preamp, self.agc, self.costas_loop,
self.rrc_filter, self.clock_recovery,
+ self._fg.connect(self.pre_scaler, self.agc, self.costas_loop,
self.rrc_filter, self.clock_recovery,
self.diffdec, self.slicer, self.gray_decoder,
self.unpack)
- gr.hier_block.__init__(self, self._fg, self.preamp, self.unpack)
+ gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
def samples_per_symbol(self):
return self._samples_per_symbol
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
2006-09-20 17:12:14 UTC (rev 3592)
@@ -195,8 +195,9 @@
self._gain_omega = .25 * self._gain_mu * self._gain_mu #
critically damped
# Automatic gain control
- self.preamp = gr.multiply_const_cc(10e-5)
- self.agc = gr.agc_cc(1e-3, 1, 1, 1000)
+ scale = (1.0/16384.0)
+ self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal
from full-range to +-1
+ self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
# Demodulate FM
sensitivity = (pi / 2) / samples_per_symbol
@@ -218,8 +219,8 @@
self._setup_logging()
# Connect & Initialize base class
- self._fg.connect(self.preamp, self.agc, self.fmdemod,
self.clock_recovery, self.slicer)
- gr.hier_block.__init__(self, self._fg, self.preamp, self.slicer)
+ self._fg.connect(self.pre_scaler, self.agc, self.fmdemod,
self.clock_recovery, self.slicer)
+ gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.slicer)
def samples_per_symbol(self):
return self._samples_per_symbol
Modified:
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
===================================================================
---
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
2006-09-20 04:39:58 UTC (rev 3591)
+++
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
2006-09-20 17:12:14 UTC (rev 3592)
@@ -71,8 +71,9 @@
default_access_code = \
conv_packed_binary_string_to_1_0_string('\xAC\xDD\xA4\xE2\xF2\x8C\x20\xFC')
+preamble = \
+ conv_packed_binary_string_to_1_0_string('\xAA\xAA\xAA\xAB')
-
def is_1_0_string(s):
if not isinstance(s, str):
return False
@@ -115,6 +116,7 @@
raise ValueError, "access_code must be a string containing only 0's
and 1's (%r)" % (access_code,)
(packed_access_code, padded) =
conv_1_0_string_to_packed_binary_string(access_code)
+ (packed_preamble) = conv_1_0_string_to_packed_binary_string(preamble)
payload_with_crc = gru.gen_and_append_crc32(payload)
#print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])
@@ -124,7 +126,8 @@
if L > MAXLEN:
raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)
- pkt = ''.join((packed_access_code, make_header(L),
whiten(payload_with_crc), '\x55'))
+# pkt = ''.join((packed_access_code, make_header(L),
whiten(payload_with_crc), '\x55'))
+ pkt = ''.join((packed_preamble, packed_access_code, make_header(L),
whiten(payload_with_crc), '\x55'))
if pad_for_usrp:
pkt = pkt + (_npadding_bytes(len(pkt), samples_per_symbol,
bits_per_symbol) * '\x55')
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3592 - in gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src: lib/general python/gnuradio python/gnuradio/blksimpl,
trondeau <=