On Fri, Mar 16, 2012 at 8:41 AM, Zhonghua <zhong...@sics.se> wrote:

> Hi all,
>
> After a period of using gnu radio, I have a problem of how to understand
> the stream. I got an information from a literature says: 'From the high
> level point-of-view, infinite streams of data flow through the ports. At
> the C++ level,streams are dealt with in convenient sized pieces,
> represented as contiguous arrays of the underlying type.' In almost each
> signal processing block we can see the definition of 'general_work' has
> this format:
>     general_work(int noutput_items,
>                     gr_vector_int &ninput_items,
>                     gr_vector_const_void_star &input_items,
>                     gr_vector_void_star &output_items)
> Some literatures say the 'noutput_items' variable represents the items
> number of one piece of the stream.  So the first question is what on earth
> the size of this variable? where dose it be specified? For example if A
> block connects to B block, how can ensure the 'noutput_items' of A block
> equal to the 'ninput_items' (presume B block only has one input stream).
> In an concrete instance, in gr_squelch_base_cc.cc, we can see the last
> program as:
>    if (d_state != ST_MUTED)
>       out[j++] = in[i]*gr_complex(d_envelope, 0.0);
>    else
>       if (!d_gate)
>          out[j++] = 0.0;
> If we set d_gate as False(Actually in case of high sample rate it has to
> be set as False), when the input power is lower than the threshold(means
> the d_state should be as ST_MUTED), the out[j] shall get nothing. That
> means at this point there is no output data. So how the sequential block
> recognise this point? For instance the sequential block is
> ieee802_15_4_demod, how could it know where is this lost point? If only one
> point lost from the squelch block, is that means the whole piece of stream
> and even the whole package could not be demodulated correctly?
> We can set the instance in more precise condition. If there are two pieces
> of stream: stream A and stream B. Assume each noutput_items is 10, that is
> to say we have A[0], A[1] ....to A[9] and B[0] to B[9]. If A[0] has lost,
> then the stream entering into the sequential demodulation block is
> A[0](lost),A[1]....A[9]? Or is A[1],A[2]....B[0]?
> If A[0] is valid, A[1] has lost, dose that mean the first piece of stream
> would not be demodulated correctly? If one package need both these two
> pieces of stream, dose it mean this package would not be demodulated
> correctly?
>
> Any answer is greatly appreciated.
>
> Sincerely,
>
> Zhonghua
>

Zhonghua,

This is a really complicated question to answer without giving you a full
essay. All of this happens in the scheduler, so if you want to know more,
study the code for the thread-per-block scheduler in
gnuradio-core/src/lib/runtime. It's the gr_block_executor that looks at the
read/write pointers to each blocks buffer and determines how many samples
are available to be read and how many samples a block can write.

Tom
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to