Skip to content

Commit 464f23a

Browse files
committedDec 4, 2014
filter: fixed default filter for rational_resampler.
Addresses issue gnuradio#745. When rate < 1 (downsampling), take into account the amount of downsampling (decimation) and adjust the LPF's passband to reduce aliasing.
1 parent a74d0f1 commit 464f23a

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed
 

‎gr-digital/lib/constellation.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* -*- c++ -*- */
22
/*
3-
* Copyright 2010-2012 Free Software Foundation, Inc.
3+
* Copyright 2010-2012,2014 Free Software Foundation, Inc.
44
*
55
* This file is part of GNU Radio
66
*

‎gr-digital/python/digital/qa_constellation_soft_decoder_cf.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python
22
#
3-
# Copyright 2013 Free Software Foundation, Inc.
3+
# Copyright 2013-2014 Free Software Foundation, Inc.
44
#
55
# This file is part of GNU Radio
66
#

‎gr-digital/python/digital/soft_dec_lut_gen.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python
22
#
3-
# Copyright 2013 Free Software Foundation, Inc.
3+
# Copyright 2013-2014 Free Software Foundation, Inc.
44
#
55
# This file is part of GNU Radio
66
#

‎gr-filter/python/filter/rational_resampler.py

+22-11
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,25 @@ def design_filter(interpolation, decimation, fractional_bw):
4040
if fractional_bw >= 0.5 or fractional_bw <= 0:
4141
raise ValueError, "Invalid fractional_bandwidth, must be in (0, 0.5)"
4242

43-
beta = 5.0
44-
trans_width = 0.5 - fractional_bw
45-
mid_transition_band = 0.5 - trans_width/2
46-
43+
beta = 7.0
44+
halfband = 0.5
45+
rate = float(interpolation)/float(decimation)
46+
if(rate >= 1.0):
47+
trans_width = halfband - fractional_bw
48+
mid_transition_band = halfband - trans_width/2.0
49+
else:
50+
trans_width = rate*(halfband - fractional_bw)
51+
mid_transition_band = rate*halfband - trans_width/2.0
52+
53+
print trans_width, mid_transition_band
4754
taps = filter.firdes.low_pass(interpolation, # gain
48-
1, # Fs
49-
mid_transition_band/interpolation, # trans mid point
50-
trans_width/interpolation, # transition width
55+
interpolation, # Fs
56+
mid_transition_band, # trans mid point
57+
trans_width, # transition width
5158
filter.firdes.WIN_KAISER,
5259
beta) # beta
60+
61+
print len(taps)
5362
return taps
5463

5564

@@ -90,13 +99,15 @@ def __init__(self, resampler_base,
9099
if taps is None:
91100
taps = design_filter(interpolation, decimation, fractional_bw)
92101

93-
resampler = resampler_base(interpolation, decimation, taps)
102+
self.resampler = resampler_base(interpolation, decimation, taps)
94103
gr.hier_block2.__init__(self, "rational_resampler",
95-
gr.io_signature(1, 1, resampler.input_signature().sizeof_stream_item(0)),
96-
gr.io_signature(1, 1, resampler.output_signature().sizeof_stream_item(0)))
104+
gr.io_signature(1, 1, self.resampler.input_signature().sizeof_stream_item(0)),
105+
gr.io_signature(1, 1, self.resampler.output_signature().sizeof_stream_item(0)))
97106

98-
self.connect(self, resampler, self)
107+
self.connect(self, self.resampler, self)
99108

109+
def taps(self):
110+
return self.resampler.taps()
100111

101112
class rational_resampler_fff(_rational_resampler_base):
102113
def __init__(self, interpolation, decimation, taps=None, fractional_bw=None):

0 commit comments

Comments
 (0)
Please sign in to comment.