Thank you Martin, I will try with the sync_decimator, but it is also important for me to unterstand what's happening here. So, I have vector source -> throttle -> fsk_modulator -> scope sink. Vector source generates 8 symbols. From where scheduler starts, from source or from the sink? And why it didn't stop for any value before 0? What should I add into general block to avoid this?
Thank you On Fri, Oct 18, 2013 at 2:59 PM, Martin Braun (CEL) <[email protected]>wrote: > On Fri, Oct 18, 2013 at 02:32:48PM +0200, Nemanja Savic wrote: > > The body of my forecast function is: > > > > ninput_items_required[0] = noutput_items * d_sym_rate / d_sampling_freq; > > printf("ninput_items_required %d, noutput_items %d\n", > ninput_items_required > > [0], noutput_items); > > If d_sym_rate and d_sampling_freq are integers, integer division will > cause ninput_items_required to be zero for small values of > noutput_items. > > > when i run execution, the output is following: > > > > ninput_items_required 8, noutput_items 4096 > > ninput_items_required 4, noutput_items 2048 > > ninput_items_required 2, noutput_items 1024 > > ninput_items_required 1, noutput_items 512 > > ninput_items_required 0, noutput_items 256 > > ninput: 0, produced: 0 > > > > The last line of the output comes from general_work function and prints > number > > of input items and number of produced output samples. > > > > Can somebody explain me why forecast is called 5 times, till number of > input > > items reach 0, and after that nothing is possible in work function, > cause it > > won't enter the loop since ninput_items = 0; > > Depending on the state of the buffers, the scheduler calls forecast() > until it finds a value of ninput_items_required that works (it tries to > process as much as possible). In your case, there is probably some > situation where the input buffer is not full. > The way you've set up forecast(), the scheduler will eventually find out > that it doesn't need any items to produce at least 256 output items. So > it calls work() with no input data, expecting 256 output items. > But since you can't produce anything without input, nothing happens. > > It seems like what you want is a sync_decimator, got a gr::block. This > means you set relative_rate in the ctor and don't need to handle all of > this > yourself. Make sure you don't set relative_rate to zero, again! > In a sync_decimator, you won't need forecast() at all and your work > function is much simpler. The scheduler will also never try to call a > sycn_decimator w/o input. > > MB > > -- > Karlsruhe Institute of Technology (KIT) > Communications Engineering Lab (CEL) > > Dipl.-Ing. Martin Braun > Research Associate > > Kaiserstraße 12 > Building 05.01 > 76131 Karlsruhe > > Phone: +49 721 608-43790 > Fax: +49 721 608-46071 > www.cel.kit.edu > > KIT -- University of the State of Baden-Württemberg and > National Laboratory of the Helmholtz Association > > _______________________________________________ > Discuss-gnuradio mailing list > [email protected] > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > -- Nemanja Savić
_______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
