Channelizer can now produce any rational ratio of the sample rate in [fs/N, fs]...
[debian/gnuradio] / gnuradio-core / src / lib / filter / gr_pfb_arb_resampler_ccf.h
index bc5b91a5ecba420dc0495feae201992cafe51d50..b99ad286b888588991af8109cc1dbd17dc5ca192 100644 (file)
@@ -112,7 +112,9 @@ class gr_pfb_arb_resampler_ccf : public gr_block
                                                                      unsigned int filter_size);
 
   std::vector<gr_fir_ccf*> d_filters;
+  std::vector<gr_fir_ccf*> d_diff_filters;
   std::vector< std::vector<float> > d_taps;
+  std::vector< std::vector<float> > d_dtaps;
   unsigned int             d_int_rate;          // the number of filters (interpolation rate)
   unsigned int             d_dec_rate;          // the stride through the filters (decimation rate)
   float                    d_flt_rate;          // residual rate for the linear interpolation
@@ -134,16 +136,21 @@ class gr_pfb_arb_resampler_ccf : public gr_block
   gr_pfb_arb_resampler_ccf (float rate, 
                            const std::vector<float> &taps,
                            unsigned int filter_size);
+
+  void create_diff_taps(const std::vector<float> &newtaps,
+                       std::vector<float> &difftaps);
   
 public:
   ~gr_pfb_arb_resampler_ccf ();
-  
   /*!
    * Resets the filterbank's filter taps with the new prototype filter
    * \param taps    (vector/list of floats) The prototype filter to populate the filterbank. The taps
    *                                        should be generated at the interpolated sampling rate.
    */
-  void set_taps (const std::vector<float> &taps);
+  void set_taps (const std::vector<float> &newtaps,
+                std::vector< std::vector<float> > &ourtaps,
+                std::vector<gr_fir_ccf*> &ourfilter);
 
   /*!
    * Print all of the filterbank taps to screen.