Reworking variables to avoid recalculations/assignments.
authorTom Rondeau <trondeau@vt.edu>
Tue, 13 Apr 2010 00:50:56 +0000 (20:50 -0400)
committerTom Rondeau <trondeau@vt.edu>
Tue, 13 Apr 2010 00:50:56 +0000 (20:50 -0400)
gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.cc
gnuradio-core/src/lib/filter/gr_pfb_channelizer_ccf.h

index 1296c71f3a3c7654c4595ce532afd10a9260c211..e13a933ea7b4d4711fc91aa65f618fb00a324e65 100644 (file)
@@ -66,16 +66,16 @@ gr_pfb_channelizer_ccf::gr_pfb_channelizer_ccf (unsigned int numchans,
   // Although the filters change, we use this look up table
   // to set the index of the FFT input buffer, which equivalently
   // performs the FFT shift operation on every other turn.
-  int r = (int)rintf(d_numchans / d_oversample_rate);
+  d_rate_ratio = (int)rintf(d_numchans / d_oversample_rate);
   d_idxlut = new int[d_numchans];
   for(int i = 0; i < d_numchans; i++) {
-    d_idxlut[i] = d_numchans - ((i + r) % d_numchans) - 1;
+    d_idxlut[i] = d_numchans - ((i + d_rate_ratio) % d_numchans) - 1;
   }
 
   // Calculate the number of filtering rounds to do to evenly
   // align the input vectors with the output channels
   d_output_multiple = 1;
-  while((d_output_multiple * r) % d_numchans != 0)
+  while((d_output_multiple * d_rate_ratio) % d_numchans != 0)
     d_output_multiple++;
   set_output_multiple(d_output_multiple);
 }
@@ -154,16 +154,11 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
     return 0;               // history requirements may have changed.
   }
 
-  float M = d_oversample_rate;
-  int N = d_numchans;
-  int r = (int)rintf(N / M);
-
-  int toconsume = (int)rintf(noutput_items/M);
-
   int n=1, i=-1, j=0, last;
+  int toconsume = (int)rintf(noutput_items/d_oversample_rate);
   while(n <= toconsume) {
     j = 0;
-    i = (i + r) % N;
+    i = (i + d_rate_ratio) % d_numchans;
     last = i;
     while(i >= 0) {
       in = (gr_complex*)input_items[j];
@@ -172,7 +167,7 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
       i--;
     }
 
-    i = N-1;
+    i = d_numchans-1;
     while(i > last) {
       in = (gr_complex*)input_items[j];
       d_fft->get_inbuf()[d_idxlut[j]] = d_filters[i]->filter(&in[n-1]);
@@ -180,7 +175,7 @@ gr_pfb_channelizer_ccf::general_work (int noutput_items,
       i--;
     }
 
-    n += (i+r) >= N;
+    n += (i+d_rate_ratio) >= d_numchans;
 
     // despin through FFT
     d_fft->execute();
index 7e71ff2927e3fe36207fba75cd550c24ae313a61..e33e1938e36d10ae3b23469f633d72a4aec67466 100644 (file)
@@ -117,6 +117,7 @@ class gr_pfb_channelizer_ccf : public gr_block
   unsigned int             d_taps_per_filter;
   gri_fft_complex         *d_fft;
   int                     *d_idxlut;
+  int                      d_rate_ratio;
   int                      d_output_multiple;
 
   /*!