diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-12-02 18:01:41 -0500 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-12-03 19:12:20 -0500 |
commit | 464f23ae4eba3230c54b68d783a3ab7b4734744c (patch) | |
tree | 4e38636dc42db57023a83d02bf9fbbaf4e46715d | |
parent | a74d0f127e3b50dba2cf6876d1e0a250ebbb3f84 (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.cc | 2 | ||||
-rw-r--r-- | gr-digital/python/digital/qa_constellation_soft_decoder_cf.py | 2 | ||||
-rw-r--r-- | gr-digital/python/digital/soft_dec_lut_gen.py | 2 | ||||
-rw-r--r-- | gr-filter/python/filter/rational_resampler.py | 33 |
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): |