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