[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Python block help
From: |
Zach Morris |
Subject: |
Re: [Discuss-gnuradio] Python block help |
Date: |
Thu, 25 May 2017 09:08:04 -0700 (MST) |
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.
- Re: [Discuss-gnuradio] Python block help,
Zach Morris <=