Does anyone have any knowledge of how the parameters need to be set in
the
hierarchical pfb channelizer? There’s no documentation that I can find.
I HAVE gotten the regular channelizer to work and it’s awesome
(screenshots
included), I was just hoping to use a hierarchical version that would be
able to use multiple blocks and therefore utilize multiple processors.
otherwise I have to design my own, which is not on my ‘fun list’.
thanks,
-b
http://imgur.com/nh53Ryw
Hi ben,
otherwise I have to design my own, which is not on my ‘fun list’.
What? that sounds like such an awesome project!
The point is that polyphase channelizers inherently make use of the fact
that you can a) split the sample stream into multiple polyphase
components, b) do the same with the filter taps, c) run the individual
filters at the lower rate and d) use the FFT amongst a lot of
permutations. This complexity makes it desirable to do this in one
block.
Looking at pfb_channelizer_ccf:
189 while(i >= 0) {
190 in = (gr_complex*)input_items[j];
191 d_fft->get_inbuf()[d_idxlut[j]] =
d_fir_filters[i]->filter(&in[n]);
192 j++;
193 i–;
194 }
195
196 i = d_nfilts-1;
197 while(i > last) {
198 in = (gr_complex*)input_items[j];
199 d_fft->get_inbuf()[d_idxlut[j]] =
d_fir_filters[i]->filter(&in[n-1]);
200 j++;
201 i–;
202 }
both while loops could lend themself to parallelization, if d_idxlut has
j unique elements; but that’s the case (for this particular
implementation, this might be different for channelizers that map the
same stream to multiple frequencies):
87 for(unsigned int i = 0; i < d_nfilts; i++) {
88 d_idxlut[i] = d_nfilts - ((i + d_rate_ratio) % d_nfilts) -
1;
89 }
The easiest solution would be modifying polyphase_filterbank.cc, and
adding something like d_thread_workers. I’d recommend not overdoing
parallelization, a single filter(float) step doesn’t really justify the
synchronization overhead. I’d start with just wrapping the two while
loops in two separate threads.
Best regards,
Marcus