On Fri, Mar 16, 2012 at 3:28 PM, Zhonghua <zhong...@sics.se> wrote: > ** > On 03/16/2012 06:37 PM, Tom Rondeau wrote: > > 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 > > Hi Tom, > > Thank you for your information. I think you have answered the first > question that where and how dose the size be determined. To the detailed > question, do you think if one item lost, all this package will lose? And in > my last instance, do you think which assemblage will be sent to the > sequential block? Thank you again! > > Zhonghua >
I'm honestly not sure what you are getting at. Where/how would you lose an item? Tom
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio