summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-digital/lib/digital_cma_equalizer_cc.cc30
-rw-r--r--gr-digital/python/generic_mod_demod.py5
-rwxr-xr-xgr-digital/python/qa_cma_equalizer.py4
-rwxr-xr-xgr-digital/python/qa_constellation_receiver.py7
-rwxr-xr-xgr-digital/python/qa_fll_band_edge.py7
-rwxr-xr-xgr-digital/python/qa_lms_equalizer.py6
-rwxr-xr-xgr-digital/python/qa_pfb_clock_sync.py2
-rw-r--r--gr-digital/swig/digital_cma_equalizer_cc.i2
-rw-r--r--gr-digital/swig/digital_kurtotic_equalizer_cc.i3
-rw-r--r--gr-digital/swig/digital_lms_dd_equalizer_cc.i8
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,