|
From: | Marcus Müller |
Subject: | Re: [Discuss-gnuradio] hierarchical polyphase channelizer vs polyphase channelizer blocks in GRC |
Date: | Tue, 30 Jun 2015 19:47:23 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
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 On 06/30/2015 07:14 PM, ben Gee wrote:
|
[Prev in Thread] | Current Thread | [Next in Thread] |