Hi Karan,

You keep Marcus very busy, let me help to offload him.

On Wed, May 28, 2014 at 8:36 PM, Karan T. [email protected]

wrote:

Hi Marcus,

Thank you for evaluating our code and help debugging it. what we

understand from your reply is that work function at a time processes

noutput_items and this can be lesser than or more than the fft_length. As

an example in our code when we give the fft length as 8192, but the

noutput_items is still 4096, so does that mean it has to execute work

function twice to process 4096*2=8192 items?

When the desirable fft_length is 8192, could you accept to perform FFT

at

only 4096 elements?

If yes, perform FFT on this 4096 elements, and return 4096.

If not, make sure you use set_output_multiple(fft_length) or at least

set_min_noutput_items(fft_length), in this case the scheduler will not

call

work() function with insufficient number of elements.

Regarding the first approach you suggested, we change the input signature

and output signature to (sizeof (gr_complex)*fft_length) so that it is a

single vector that is being processed. Then we return 1 as suggested. But

it is throwing an itemsize mismatch error. I have attached the c++ file

here ( http://pastebin.com/TKemtbxN ). The error says

The correct way is, in your work() function you should have 2 loops,

because now your in[0] is a vector but no longer solely a complex

number.

Example:

for (int i=0; i < noutput_items; i++)

{

for (int j=0; j < fft_length; j++)

{

…

}

}

For the second method suggested should we write a general work function

and

a forecast function which would mean doing away with sync block that we are

using with work function right now?

No need, because set_output_multiple() works with sync block as well.

Note:

Apologize in advance if my answer is incorrect.