Hi Zach, not sure the Python interface supports general blocks (ie. blocks where the number of output items is not a multiple of the input items), I hope someone else can comment; I'd recommend implementing this as a C++ block; the "Guided Tutorials" on http://tutorials.gnuradio.org should prepare you to do that.
Best regards, Marcus On 25.05.2017 18:08, Zach Morris wrote: > Hello Marcus, > > I realize this is a couple years later but I am attempting to do the same > type of arbitrary ratio block, where samples above a threshold are passed > and samples below that threshold are dropped. > > When I tried to subclass gr.block (as below, and in this tutorial from 2014 > <https://github.com/guruofquality/grextras/wiki/Blocks-Coding-Guide#arbitrary-ratio-block> > > ) in an embedded Python block, GRC threw an error saying gr.block could not > be found. Does this method still work, or is there an updated method with > basic_block to implement arbitrary ratio blocks in Python? > > Greetings from Menlo Park, CA, > > Zach > > > > Marcus Müller-3 wrote >> Hi Bob, >> >> I think you've introduced the "j" variable to keep count of how many >> items you're going to produce, but then just tell the scheduler you've >> produced as many items as he offered you to do. Replace >> self.produce(0,len(out0)) >> by >> self.produce(0,j). >> Also, you consume ninput_items every for loop iteration, so >> ninput_items^2 per work run. That's not right; do it only once, after >> the loop. >> >> Greetings, >> >> Marcus >> >> On 12/24/2014 12:21 PM, bob wole wrote: >>> Hi list, >>> >>> I am writing a custom python block that should take complex input, >>> check magnitude of incoming samples and if the magnitude is greater >>> than a threshold value, the block should pass that sample otherwise >>> the block just drop the samples. As this is an arbitrary ratio block I >>> derived it from gr.block and set_auto_consume(False). >>> >>> However I get intermittent zeros in output stream of my custom block. >>> Below is the code >>> >>> from gnuradio import gr >>> import gnuradio.extras >>> import math >>> import numpy as np >>> >>> >>> class sdr_pass_valid(gr.block): >>> """ >>> """ >>> def __init__(self,threshold): >>> gr.block.__init__( >>> self, >>> name = "VALID", >>> in_sig = [np.complex64], >>> out_sig = [np.complex64], >>> ) >>> self.set_auto_consume(False) >>> >>> self.threshold = threshold >>> def forecast (self,noutput_items,ninput_items_required): >>> for i in range(len(ninput_items_required)): >>> ninput_items_required[i] = noutput_items >>> >>> def work(self, input_items, output_items): >>> >>> in0 = input_items[0][:len(output_items[0])] >>> out0= output_items[0] >>> nread = self.nitems_read(0) #number of items read on port 0 >>> ninput_items = len(in0) >>> j=0 >>> for i in range(0,ninput_items): >>> if np.absolute(in0[i]) >= self.threshold : >>> out0[j] = in0[i] >>> j = j + 1 >>> self.consume(0,ninput_items) >>> self.produce(0,len(out0)) >>> return 0 >>> >>> >>> -- >>> Bob >>> >>> >>> _______________________________________________ >>> Discuss-gnuradio mailing list >>> >> Discuss-gnuradio@ >>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >> >> _______________________________________________ >> Discuss-gnuradio mailing list >> Discuss-gnuradio@ >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > > > > -- > View this message in context: > http://gnuradio.4.n7.nabble.com/Python-block-help-tp51706p64046.html > Sent from the GnuRadio mailing list archive at Nabble.com. > > _______________________________________________ > Discuss-gnuradio mailing list > Discuss-gnuradio@gnu.org > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio