beautiful, thanks: adding
#define CHUNK_SIZE 1024   
set_output_multiple(CHUNK_SIZE);
to the constructor yields resonable results
N=1024: _N is zero
N=1024: _N is zero
N=1024: _N is zero
N=1024: _N is zero

Still not sure why my original option was not working, but this is
definitely a fine solution. I had forgotten you previous post on the topic,

Thanks, JM

--
JM Friedt, FEMTO-ST Time & Frequency/SENSeOR, 26 rue de l'Epitaphe,
25000 Besancon, France

April 5, 2020 10:58 AM, "Ron Economos" <w...@comcast.net> wrote:

> I would use set_output_multiple() instead. See my previous e-mail for an 
> example.
> 
> https://lists.gnu.org/archive/html/discuss-gnuradio/2019-08/msg00188.html
> 
> Ron
> 
> On 4/5/20 01:36, jean-michel.fri...@femto-st.fr wrote:
> 
>> I am using the opportunity of porting gr-acars to GNU Radio 3.8 to
>> re-write the processing algorithm. As part of this reorganization,
>> I want to analyze the baseline standard deviation and detect the AM
>> modulated message as a rise in standard deviation (ie custom squelch).
>> Since there is hardly any plane flying over France at the moment, I run
>> the analysis from a recorded file, in which case the scheduler provides
>> few samples at each batch. So I want to accumulate a statistically relevant
>> length of samples before assessing the variance. Rather than implementing
>> a custom circular buffer, I want to benefit from the GNU Radio scheduler
>> as explained slide 7 of http://jmfriedt.org/slides_gnuradiodays2019/18h00 MM 
>> GR scheduler.pdf
>> 
>> "not forced to consume all input -- can consume less at single-item 
>> granularity
>> “leftovers” beginning of next call’s input_items"
>> 
>> So the work function of my sink block (no output item) is
>> 
>> {_N+=noutput_items;
>> printf("N=%d ",_N);
>> if (_N>1000)
>> {consume_each (_N);
>> _N=0;
>> printf("_N is zero\n");// make sure counter is reset
>> }
>> else consume_each (0); // accumulate more samples
>> return 0; // noutput_items;
>> }
>> 
>> and I am confused by the output of this block which states
>> 
>> N=170 N=340 N=510 N=680 N=850 N=1020 _N is zero
>> N=15534 _N is zero
>> N=170 N=340 N=510 N=680 N=850 N=1020 _N is zero
>> N=15534 _N is zero
>> 
>> so indeed once out of two sequences we accumulate up to 1000 samples,
>> detect the targeted number of samples is reached, consume the buffer and
>> reset the counter. But after resetting the counter, I get 15534 samples.
>> Is this indeed a behavior of the scheduler or a mistake on my side of 
>> handling
>> the counter ? (can hardly do anything wrong with such a simple example it
>> seems).
>> 
>> Is this the correct way of accumulating a minimum number of samples before
>> processing each batch ?
>> 
>> Thanks, Jean-Michel

Reply via email to