Updating the arb. resampler to use the optfir filter that provides better specificati...
authorTom Rondeau <trondeau@vt.edu>
Tue, 28 Dec 2010 17:47:32 +0000 (12:47 -0500)
committerTom Rondeau <trondeau@vt.edu>
Tue, 28 Dec 2010 17:47:32 +0000 (12:47 -0500)
gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py

index cd9289fa5fbcdbc08e13f47070086b50e2d249bf..c4e496c45acbf2c2d9ada86df0a9fefde67e13fe 100644 (file)
@@ -20,7 +20,7 @@
 # Boston, MA 02110-1301, USA.
 # 
 
 # Boston, MA 02110-1301, USA.
 # 
 
-from gnuradio import gr
+from gnuradio import gr, optfir
 
 class pfb_arb_resampler_ccf(gr.hier_block2):
     '''
 
 class pfb_arb_resampler_ccf(gr.hier_block2):
     '''
@@ -31,7 +31,7 @@ class pfb_arb_resampler_ccf(gr.hier_block2):
     streams. This block is provided to be consistent with the interface to the
     other PFB block.
     '''
     streams. This block is provided to be consistent with the interface to the
     other PFB block.
     '''
-    def __init__(self, rate, taps=None, flt_size=32, atten=80):
+    def __init__(self, rate, taps=None, flt_size=32, atten=100):
        gr.hier_block2.__init__(self, "pfb_arb_resampler_ccf",
                                gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
                                gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
        gr.hier_block2.__init__(self, "pfb_arb_resampler_ccf",
                                gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
                                gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
@@ -43,9 +43,19 @@ class pfb_arb_resampler_ccf(gr.hier_block2):
             self._taps = taps
         else:
             # Create a filter that covers the full bandwidth of the input signal
             self._taps = taps
         else:
             # Create a filter that covers the full bandwidth of the input signal
-            bw = 0.5
-            tb = 0.1
-            self._taps = gr.firdes.low_pass_2(self._size, self._size, bw, tb, atten)
+            bw = 0.4
+            tb = 0.2
+            ripple = 0.1
+            #self._taps = gr.firdes.low_pass_2(self._size, self._size, bw, tb, atten)
+            made = False
+            while not made:
+                try:
+                    self._taps = optfir.low_pass(self._size, self._size, bw, bw+tb, ripple, atten)
+                    made = True
+                except RuntimeError:
+                    ripple += 0.01
+                    made = False
+                    print("Warning: set ripple to %.4f dB. If this is a problem, adjust the attenuation or create your own filter taps." % (ripple))
 
         self.pfb = gr.pfb_arb_resampler_ccf(self._rate, self._taps, self._size)
 
 
         self.pfb = gr.pfb_arb_resampler_ccf(self._rate, self._taps, self._size)