summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2014-12-02 18:01:41 -0500
committerTom Rondeau <tom@trondeau.com>2014-12-03 19:12:20 -0500
commit464f23ae4eba3230c54b68d783a3ab7b4734744c (patch)
tree4e38636dc42db57023a83d02bf9fbbaf4e46715d
parenta74d0f127e3b50dba2cf6876d1e0a250ebbb3f84 (diff)
filter: fixed default filter for rational_resampler.
Addresses issue #745. When rate < 1 (downsampling), take into account the amount of downsampling (decimation) and adjust the LPF's passband to reduce aliasing.
-rw-r--r--gr-digital/lib/constellation.cc2
-rw-r--r--gr-digital/python/digital/qa_constellation_soft_decoder_cf.py2
-rw-r--r--gr-digital/python/digital/soft_dec_lut_gen.py2
-rw-r--r--gr-filter/python/filter/rational_resampler.py33
4 files changed, 25 insertions, 14 deletions
diff --git a/gr-digital/lib/constellation.cc b/gr-digital/lib/constellation.cc
index b17635fec1..a477aa83ed 100644
--- a/gr-digital/lib/constellation.cc
+++ b/gr-digital/lib/constellation.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2010-2012 Free Software Foundation, Inc.
+ * Copyright 2010-2012,2014 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
diff --git a/gr-digital/python/digital/qa_constellation_soft_decoder_cf.py b/gr-digital/python/digital/qa_constellation_soft_decoder_cf.py
index 448e76e834..872aed0157 100644
--- a/gr-digital/python/digital/qa_constellation_soft_decoder_cf.py
+++ b/gr-digital/python/digital/qa_constellation_soft_decoder_cf.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
diff --git a/gr-digital/python/digital/soft_dec_lut_gen.py b/gr-digital/python/digital/soft_dec_lut_gen.py
index 9c184d60cb..5bea27f843 100644
--- a/gr-digital/python/digital/soft_dec_lut_gen.py
+++ b/gr-digital/python/digital/soft_dec_lut_gen.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013-2014 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
diff --git a/gr-filter/python/filter/rational_resampler.py b/gr-filter/python/filter/rational_resampler.py
index 8f1dc36e0d..32246a046a 100644
--- a/gr-filter/python/filter/rational_resampler.py
+++ b/gr-filter/python/filter/rational_resampler.py
@@ -40,16 +40,25 @@ def design_filter(interpolation, decimation, fractional_bw):
if fractional_bw >= 0.5 or fractional_bw <= 0:
raise ValueError, "Invalid fractional_bandwidth, must be in (0, 0.5)"
- beta = 5.0
- trans_width = 0.5 - fractional_bw
- mid_transition_band = 0.5 - trans_width/2
-
+ beta = 7.0
+ halfband = 0.5
+ rate = float(interpolation)/float(decimation)
+ if(rate >= 1.0):
+ trans_width = halfband - fractional_bw
+ mid_transition_band = halfband - trans_width/2.0
+ else:
+ trans_width = rate*(halfband - fractional_bw)
+ mid_transition_band = rate*halfband - trans_width/2.0
+
+ print trans_width, mid_transition_band
taps = filter.firdes.low_pass(interpolation, # gain
- 1, # Fs
- mid_transition_band/interpolation, # trans mid point
- trans_width/interpolation, # transition width
+ interpolation, # Fs
+ mid_transition_band, # trans mid point
+ trans_width, # transition width
filter.firdes.WIN_KAISER,
beta) # beta
+
+ print len(taps)
return taps
@@ -90,13 +99,15 @@ class _rational_resampler_base(gr.hier_block2):
if taps is None:
taps = design_filter(interpolation, decimation, fractional_bw)
- resampler = resampler_base(interpolation, decimation, taps)
+ self.resampler = resampler_base(interpolation, decimation, taps)
gr.hier_block2.__init__(self, "rational_resampler",
- gr.io_signature(1, 1, resampler.input_signature().sizeof_stream_item(0)),
- gr.io_signature(1, 1, resampler.output_signature().sizeof_stream_item(0)))
+ gr.io_signature(1, 1, self.resampler.input_signature().sizeof_stream_item(0)),
+ gr.io_signature(1, 1, self.resampler.output_signature().sizeof_stream_item(0)))
- self.connect(self, resampler, self)
+ self.connect(self, self.resampler, self)
+ def taps(self):
+ return self.resampler.taps()
class rational_resampler_fff(_rational_resampler_base):
def __init__(self, interpolation, decimation, taps=None, fractional_bw=None):