discuss-gnuradio
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]