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: Marcus Müller
Subject: Re: [Discuss-gnuradio] Python block help
Date: Sat, 27 Dec 2014 08:20:11 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

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
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


reply via email to

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