[Discuss-gnuradio] testing block written in block
Hi I'm new to GNU radio and is trying to develop my own block. I want to develop a block that intake a vector and out put sum of the vector elements. I used the out of tree module and followed tutorial using python code. How should be the arguments of blocks.vector_source_f to be given if i am inputting vector stream of four integers is used. the python code and test file is given below. Code: def __init__(self, in_arg): gr.sync_block.__init__(self, name=sream_ff, in_sig=[(numpy.float32, 4)], out_sig=[numpy.float32]) def work(self, input_items, output_items): in0 = input_items[0] out = output_items[0] # +signal processing here+ out[:] = sum(in0)*in_arg return len(output_items[0]) Test code: def test_001_t (self): src_data = (([1,1,1,1],4), ([1,2,3,4],4)) expected_result = (8, 20) src = blocks.vector_source_f(src_data) fxn = sream_ff(2) snk = blocks.vector_sink_f() # set up fg self.tb.connect(src, fxn) self.tb.connect(fxn, snk) self.tb.run () # check data result_data = snk.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6)___ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Re: [Discuss-gnuradio] testing block written in block
Hi Sreena, a few quick remarks: - where does in_arg come from? - in0 should be seen as a vector of vectors. It's often useful to print in0.shape, if in0 is a numpy array - potential mistake: just returning len(input_items[0]). Be *very* aware of what the return value of a work call should be (i.e. the number of items produced). I think you meant to calculate but one sum, is that right? Greetings, Marcus On 18.06.2014 10:57, sreena p h wrote: Hi I'm new to GNU radio and is trying to develop my own block. I want to develop a block that intake a vector and out put sum of the vector elements. I used the out of tree module and followed tutorial using python code. How should be the arguments of blocks.vector_source_f to be given if i am inputting vector stream of four integers is used. the python code and test file is given below. Code: def __init__(self, in_arg): gr.sync_block.__init__(self, name=sream_ff, in_sig=[(numpy.float32, 4)], out_sig=[numpy.float32]) def work(self, input_items, output_items): in0 = input_items[0] out = output_items[0] # +signal processing here+ out[:] = sum(in0)*in_arg return len(output_items[0]) Test code: def test_001_t (self): src_data = (([1,1,1,1],4), ([1,2,3,4],4)) expected_result = (8, 20) src = blocks.vector_source_f(src_data) fxn = sream_ff(2) snk = blocks.vector_sink_f() # set up fg self.tb.connect(src, fxn) self.tb.connect(fxn, snk) self.tb.run () # check data result_data = snk.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data, 6) ___ 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
Re: [Discuss-gnuradio] testing block written in block
On Wed, Jun 18, 2014 at 4:57 PM, sreena p h sreena...@yahoo.in wrote: Hi I'm new to GNU radio and is trying to develop my own block. I want to develop a block that intake a vector and out put sum of the vector elements. I used the out of tree module and followed tutorial using python code. How should be the arguments of blocks.vector_source_f to be given if i am inputting vector stream of four integers is used. the python code and test file is given below. Does your intake vectors have fixed-length or variable length? If they are variable length, then your sream_ff block won't be very useful in graphical GRC flowgraph, because there the vector streams are usually fixed-length. If they are fixed-length, then your problem could be easily solved; just create sream_ff as a decimator block. ___ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Re: [Discuss-gnuradio] testing block written in block
From: discuss-gnuradio-bounces+sean.nowlan=gtri.gatech@gnu.org [mailto:discuss-gnuradio-bounces+sean.nowlan=gtri.gatech@gnu.org] On Behalf Of Activecat Sent: Wednesday, June 18, 2014 5:59 AM To: discuss-gnuradio@gnu.org Cc: sreena p h Subject: Re: [Discuss-gnuradio] testing block written in block On Wed, Jun 18, 2014 at 4:57 PM, sreena p h sreena...@yahoo.inmailto:sreena...@yahoo.in wrote: Hi I'm new to GNU radio and is trying to develop my own block. I want to develop a block that intake a vector and out put sum of the vector elements. I used the out of tree module and followed tutorial using python code. How should be the arguments of blocks.vector_source_f to be given if i am inputting vector stream of four integers is used. the python code and test file is given below. Does your intake vectors have fixed-length or variable length? If they are variable length, then your sream_ff block won't be very useful in graphical GRC flowgraph, because there the vector streams are usually fixed-length. If they are fixed-length, then your problem could be easily solved; just create sream_ff as a decimator block. If you’d rather use stock GR blocks or you would like a flowgraph with identical functionality, you can hook up a Vector to Stream block (with num_items=vector_length) to an Integrate block (with decimation=vector_length). … vector_length = 10 self.vec2stream = blocks.vector_to_stream(gr.sizeof_gr_complex, vector_length) self.integrate = blocks.integrate_cc(vector_length) self.connect((self.vec2stream, 0), (self.integrate, 0)) … Sean ___ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
Re: [Discuss-gnuradio] testing block written in block
On Wed, Jun 18, 2014 at 9:14 PM, Nowlan, Sean sean.now...@gtri.gatech.edu wrote: If you’d rather use stock GR blocks or you would like a flowgraph with identical functionality, you can hook up a Vector to Stream block (with num_items=vector_length) to an Integrate block (with decimation=vector_length). … vector_length = 10 self.vec2stream = blocks.vector_to_stream(gr.sizeof_gr_complex, vector_length) self.integrate = blocks.integrate_cc(vector_length) self.connect((self.vec2stream, 0), (self.integrate, 0)) … Sean I agree, that the Integrate block is a decimator block that implement this perfectly. Just that she may want to use integrate_ff rather than integrate_cc, depending on her needs. Also we are assuming that the intake vectors are fixed in length. int integrate_ff_impl::work(int noutput_items, gr_vector_const_void_star input_items, gr_vector_void_star output_items) { const float *in = (const float *)input_items[0]; float *out = (float *)output_items[0]; for (int i = 0; i noutput_items; i++) { out[i] = (float)0; for (int j = 0; j d_decim; j++) out[i] += in[i*d_decim+j]; } return noutput_items; } ___ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio