diff options
-rw-r--r-- | gr-digital/lib/digital_cma_equalizer_cc.cc | 30 | ||||
-rw-r--r-- | gr-digital/python/generic_mod_demod.py | 5 | ||||
-rwxr-xr-x | gr-digital/python/qa_cma_equalizer.py | 4 | ||||
-rwxr-xr-x | gr-digital/python/qa_constellation_receiver.py | 7 | ||||
-rwxr-xr-x | gr-digital/python/qa_fll_band_edge.py | 7 | ||||
-rwxr-xr-x | gr-digital/python/qa_lms_equalizer.py | 6 | ||||
-rwxr-xr-x | gr-digital/python/qa_pfb_clock_sync.py | 2 | ||||
-rw-r--r-- | gr-digital/swig/digital_cma_equalizer_cc.i | 2 | ||||
-rw-r--r-- | gr-digital/swig/digital_kurtotic_equalizer_cc.i | 3 | ||||
-rw-r--r-- | gr-digital/swig/digital_lms_dd_equalizer_cc.i | 8 |
10 files changed, 43 insertions, 31 deletions
diff --git a/gr-digital/lib/digital_cma_equalizer_cc.cc b/gr-digital/lib/digital_cma_equalizer_cc.cc index 23ad9d19c2..6ee9a2f84f 100644 --- a/gr-digital/lib/digital_cma_equalizer_cc.cc +++ b/gr-digital/lib/digital_cma_equalizer_cc.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2011 Free Software Foundation, Inc. + * Copyright 2011,2012 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -26,6 +26,7 @@ #include <digital_cma_equalizer_cc.h> #include <gr_io_signature.h> +#include <volk/volk.h> #include <cstdio> digital_cma_equalizer_cc_sptr @@ -47,6 +48,10 @@ digital_cma_equalizer_cc::digital_cma_equalizer_cc(int num_taps, float modulus, set_gain(mu); if (num_taps > 0) d_taps[0] = 1.0; + + const int alignment_multiple = + volk_get_alignment() / sizeof(gr_complex); + set_alignment(std::max(1,alignment_multiple)); } @@ -65,15 +70,22 @@ digital_cma_equalizer_cc::work(int noutput_items, return 0; // history requirements may have changed. } - // Call base class filtering function that uses - // overloaded error and update_tap functions. - if(decimation() == 1) { - filterN(out, in, noutput_items); - } - else { - filterNdec(out, in, noutput_items, - decimation()); + int j = 0, k, l = d_taps.size(); + for(int i = 0; i < noutput_items; i++) { + out[i] = filter(&in[j]); + + // Adjust taps + d_error = error(out[i]); + for(k = 0; k < l; k++) { + update_tap(d_taps[l-k-1], in[j+k]); + } + + j += decimation(); } + std::cout << std::endl; + std::cout << "noutput_items: " << noutput_items << std::endl; + std::cout << "nitems_read: " << nitems_read(0) << std::endl; + std::cout << "nitems_written: " << nitems_written(0) << std::endl; return noutput_items; } diff --git a/gr-digital/python/generic_mod_demod.py b/gr-digital/python/generic_mod_demod.py index 105c6fe8ff..948283b2fc 100644 --- a/gr-digital/python/generic_mod_demod.py +++ b/gr-digital/python/generic_mod_demod.py @@ -29,6 +29,7 @@ from gnuradio import gr from modulation_utils import extract_kwargs_from_options_for_class from utils import mod_codes import digital_swig as digital +import filter_swig as filter import math # default values (used in __init__ and add_options) @@ -141,8 +142,8 @@ class generic_mod(gr.hier_block2): 1.0, # symbol rate self._excess_bw, # excess bandwidth (roll-off factor) ntaps) - self.rrc_filter = gr.pfb_arb_resampler_ccf(self._samples_per_symbol, - self.rrc_taps) + self.rrc_filter = filter.pfb_arb_resampler_ccf(self._samples_per_symbol, + self.rrc_taps) # Connect blocks = [self, self.bytes2chunks] diff --git a/gr-digital/python/qa_cma_equalizer.py b/gr-digital/python/qa_cma_equalizer.py index 75fb0f05ed..4632856069 100755 --- a/gr-digital/python/qa_cma_equalizer.py +++ b/gr-digital/python/qa_cma_equalizer.py @@ -21,7 +21,7 @@ # from gnuradio import gr, gr_unittest -import digital_swig +import digital_swig as digital class test_cma_equalizer_fir(gr_unittest.TestCase): @@ -33,7 +33,7 @@ class test_cma_equalizer_fir(gr_unittest.TestCase): def transform(self, src_data): SRC = gr.vector_source_c(src_data, False) - EQU = digital_swig.cma_equalizer_cc(4, 1.0, .001, 1) + EQU = digital.cma_equalizer_cc(4, 1.0, .001, 1) DST = gr.vector_sink_c() self.tb.connect(SRC, EQU, DST) self.tb.run() diff --git a/gr-digital/python/qa_constellation_receiver.py b/gr-digital/python/qa_constellation_receiver.py index 8c2d2da0c5..e2cf6d990c 100755 --- a/gr-digital/python/qa_constellation_receiver.py +++ b/gr-digital/python/qa_constellation_receiver.py @@ -24,7 +24,8 @@ import random from gnuradio import gr, blks2, gr_unittest from utils import mod_codes, alignment -import digital_swig, packet_utils +import packet_utils +import filter_swig as filter from generic_mod_demod import generic_mod, generic_demod from qa_constellation import tested_constellations, twod_constell @@ -130,9 +131,9 @@ class rec_test_tb (gr.top_block): mod = generic_mod(constellation, differential=differential) # Channel if freq_offset: - channel = gr.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET) + channel = filter.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET) else: - channel = gr.channel_model(NOISE_VOLTAGE, 0, TIMING_OFFSET) + channel = filter.channel_model(NOISE_VOLTAGE, 0, TIMING_OFFSET) # Receiver Blocks if freq_offset: demod = generic_demod(constellation, differential=differential, diff --git a/gr-digital/python/qa_fll_band_edge.py b/gr-digital/python/qa_fll_band_edge.py index 9e4ca079b7..80d6079a16 100755 --- a/gr-digital/python/qa_fll_band_edge.py +++ b/gr-digital/python/qa_fll_band_edge.py @@ -21,7 +21,8 @@ # from gnuradio import gr, gr_unittest -import digital_swig +import digital_swig as digital +import filter_swig as filter import random, math class test_fll_band_edge_cc(gr_unittest.TestCase): @@ -49,14 +50,14 @@ class test_fll_band_edge_cc(gr_unittest.TestCase): random.seed(0) data = [2.0*random.randint(0, 2) - 1.0 for i in xrange(200)] self.src = gr.vector_source_c(data, False) - self.rrc = gr.interp_fir_filter_ccf(sps, rrc_taps) + self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps) # Mix symbols with a complex sinusoid to spin them self.nco = gr.sig_source_c(1, gr.GR_SIN_WAVE, foffset, 1) self.mix = gr.multiply_cc() # FLL will despin the symbols to an arbitrary phase - self.fll = digital_swig.fll_band_edge_cc(sps, rolloff, ntaps, bw) + self.fll = digital.fll_band_edge_cc(sps, rolloff, ntaps, bw) # Create sinks for all outputs of the FLL # we will only care about the freq and error outputs diff --git a/gr-digital/python/qa_lms_equalizer.py b/gr-digital/python/qa_lms_equalizer.py index 025c785aa4..d5fafbd33a 100755 --- a/gr-digital/python/qa_lms_equalizer.py +++ b/gr-digital/python/qa_lms_equalizer.py @@ -21,7 +21,7 @@ # from gnuradio import gr, gr_unittest -import digital_swig +import digital_swig as digital class test_lms_dd_equalizer(gr_unittest.TestCase): @@ -33,7 +33,7 @@ class test_lms_dd_equalizer(gr_unittest.TestCase): def transform(self, src_data, gain, const): SRC = gr.vector_source_c(src_data, False) - EQU = digital_swig.lms_dd_equalizer_cc(4, gain, 1, const.base()) + EQU = digital.lms_dd_equalizer_cc(4, gain, 1, const.base()) DST = gr.vector_sink_c() self.tb.connect(SRC, EQU, DST) self.tb.run() @@ -41,7 +41,7 @@ class test_lms_dd_equalizer(gr_unittest.TestCase): def test_001_identity(self): # Constant modulus signal so no adjustments - const = digital_swig.constellation_qpsk() + const = digital.constellation_qpsk() src_data = const.points()*1000 N = 100 # settling time diff --git a/gr-digital/python/qa_pfb_clock_sync.py b/gr-digital/python/qa_pfb_clock_sync.py index cb874c2a66..90ea28691c 100755 --- a/gr-digital/python/qa_pfb_clock_sync.py +++ b/gr-digital/python/qa_pfb_clock_sync.py @@ -21,7 +21,7 @@ # from gnuradio import gr, gr_unittest -from gnuradio import filter +import filter_swig as filter import digital_swig as digital import random, cmath diff --git a/gr-digital/swig/digital_cma_equalizer_cc.i b/gr-digital/swig/digital_cma_equalizer_cc.i index 9c2d5f2146..067dbfc734 100644 --- a/gr-digital/swig/digital_cma_equalizer_cc.i +++ b/gr-digital/swig/digital_cma_equalizer_cc.i @@ -27,7 +27,7 @@ digital_make_cma_equalizer_cc(int num_taps, float modulus, float mu, int sps); class digital_cma_equalizer_cc : - public gr::filter::kernel::adaptive_fir_ccc + public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc { private: digital_cma_equalizer_cc(int num_taps, float modulus, diff --git a/gr-digital/swig/digital_kurtotic_equalizer_cc.i b/gr-digital/swig/digital_kurtotic_equalizer_cc.i index 24183b5f2a..e51f2ca048 100644 --- a/gr-digital/swig/digital_kurtotic_equalizer_cc.i +++ b/gr-digital/swig/digital_kurtotic_equalizer_cc.i @@ -30,7 +30,8 @@ digital_kurtotic_equalizer_cc_sptr digital_make_kurtotic_equalizer_cc(int num_taps, float mu); -class digital_kurtotic_equalizer_cc : public gr_adaptive_fir_ccc +class digital_kurtotic_equalizer_cc : + public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc { public: void set_gain(float mu); diff --git a/gr-digital/swig/digital_lms_dd_equalizer_cc.i b/gr-digital/swig/digital_lms_dd_equalizer_cc.i index ac2504b0a9..6602f3bfb5 100644 --- a/gr-digital/swig/digital_lms_dd_equalizer_cc.i +++ b/gr-digital/swig/digital_lms_dd_equalizer_cc.i @@ -23,17 +23,13 @@ GR_SWIG_BLOCK_MAGIC(digital,lms_dd_equalizer_cc) -// retrieve info on the base class, without generating wrappers since -// the base class has a pure virual method. -//%import "gr_adaptive_fir_ccc.i" - - digital_lms_dd_equalizer_cc_sptr digital_make_lms_dd_equalizer_cc (int num_taps, float mu, int sps, digital_constellation_sptr cnst); -class digital_lms_dd_equalizer_cc : public gr_sync_block +class digital_lms_dd_equalizer_cc : + public gr_sync_decimator, public gr::filter::kernel::adaptive_fir_ccc { private: digital_lms_dd_equalizer_cc (int num_taps, |