]> git.gag.com Git - debian/gnuradio/blobdiff - gnuradio-core/src/python/gnuradio/blks2impl/pfb_interpolator.py
Merge commit 'v3.3.1' into try-3.3.1
[debian/gnuradio] / gnuradio-core / src / python / gnuradio / blks2impl / pfb_interpolator.py
index db294404246c8f535d2cad1b497e0d9d53801cd2..a6094f7f459f871352be2843a0ec8af54b2c0552 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_interpolator_ccf(gr.hier_block2):
     '''
 
 class pfb_interpolator_ccf(gr.hier_block2):
     '''
@@ -31,7 +31,7 @@ class pfb_interpolator_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, interp, taps):
+    def __init__(self, interp, taps=None, atten=100):
        gr.hier_block2.__init__(self, "pfb_interpolator_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_interpolator_ccf",
                                gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
                                gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
@@ -39,6 +39,27 @@ class pfb_interpolator_ccf(gr.hier_block2):
         self._interp = interp
         self._taps = taps
 
         self._interp = interp
         self._taps = taps
 
+        if taps is not None:
+            self._taps = taps
+        else:
+            # Create a filter that covers the full bandwidth of the input signal
+            bw = 0.4
+            tb = 0.2
+            ripple = 0.99
+            made = False
+            while not made:
+                try:
+                    self._taps = optfir.low_pass(self._interp, self._interp, 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))
+
+                    # Build in an exit strategy; if we've come this far, it ain't working.
+                    if(ripple >= 1.0):
+                        raise RuntimeError("optfir could not generate an appropriate filter.")
+
         self.pfb = gr.pfb_interpolator_ccf(self._interp, self._taps)
 
         self.connect(self, self.pfb)
         self.pfb = gr.pfb_interpolator_ccf(self._interp, self._taps)
 
         self.connect(self, self.pfb)