Hello Marcus and all, Sorry to keep dragging on with this vector decimate.
I’ve gotten “vave” into grc but it is not running properly. The grc messages I get are below: Generating: '/Users/glangsto/Desktop/Research/vdecimate/keep5.py' Executing: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u /Users/glangsto/Desktop/Research/vdecimate/keep5.py Number work inputs : 1 Length: 10 Number work outputs: 1 Length: 10 Number work inputs : 1 Length: 10 Number work outputs: 1 Length: 10 handler caught exception: operands could not be broadcast together with shapes (4,) (10,) Traceback (most recent call last): File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/gnuradio/gr/gateway.py", line 55, in eval try: self._callback() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/gnuradio/gr/gateway.py", line 160, in __gr_block_handle ) for i in self.__out_indexes], File "/Users/glangsto/Desktop/Research/gr-vave/python/vave.py", line 73, in work self.sum[0:ncp] = self.sum[0:ncp] + vin[0:ncp] ValueError: operands could not be broadcast together with shapes (4,) (10,) thread[thread-per-block[4]: <block vave (1)>]: SWIG director method error. Error detected when calling ‘feval_ll.eval' I’ve tweaked the python and attached the .xml etc
#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright 2018 <+YOU OR YOUR COMPANY+>. # # This is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this software; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # import numpy from gnuradio import gr, gr_unittest from gnuradio import blocks from vave import vave class qa_vave (gr_unittest.TestCase): def setUp (self): self.tb = gr.top_block () def tearDown (self): self.tb = None def test_001_t (self): vsize = 1024 vdecimate = 4 vin = numpy.zeros(vsize*vdecimate) for i in range(vsize): vin[i] = float(i) # create a set of vectors src = blocks.vector_source_f( vin.tolist()) s2v = blocks.stream_to_vector(gr.sizeof_float, vsize) # block we're testing vblock = vave( vsize, vdecimate) v2s = blocks.vector_to_stream( gr.sizeof_float, vsize) snk = blocks.vector_sink_f(vsize) self.tb.connect (src, s2v) self.tb.connect (s2v, vblock) self.tb.connect (vblock, snk) # self.tb.connect (v2s, snk) expected = vin[0:vsize]/4. print 'Expected: ', expected[0:7] outdata = None waittime = 0.01 self.tb.run () outdata = snk.data() print 'Output: ', outdata[0:7] # check data self.assertFloatTuplesAlmostEqual (expected, outdata, 6) if __name__ == '__main__': gr_unittest.run(qa_vave, "qa_vave.xml")
#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright 2018 <+YOU OR YOUR COMPANY+>. # # This is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this software; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # import numpy from gnuradio import gr class vave(gr.decim_block): """ docstring for block vave """ def __init__(self, vsize, vdecimate): gr.decim_block.__init__(self, name="vave", in_sig=[(numpy.float32, int(vsize))], out_sig=[(numpy.float32, int(vsize))], decim=int(vdecimate)) self.vsize = int(vsize) self.vdecimate = int(vdecimate) self.sum = numpy.zeros(self.vsize) self.count = 0 self.oneovern = 1./float(self.vdecimate) def forecast( self, noutput_items, ninput_items): return self.vdecimate def work(self, input_items, output_items): """ Work averages all input vectors and outputs one vector for all inputs """ out = output_items[0] in0 = input_items[0] # get the number of input vectors n = len( input_items) print 'Number of work inputs: ',n nout = len( output_items) print 'Number of work outputs: ',n nv = len(in0) for j in range(nv): # get the lenght of one input vin = in0[j] print 'Length of input ', len(vin),' for vectors: ',j # indicate consumption of a vector from input self.consume(0, len(vin)) # now save this vector until all are received self.sum = self.sum + vin self.count = self.count + 1 if self.count >= self.vdecimate: # normalize output average out[:] = self.oneovern * self.sum[:] # now reset the count and restart the sum self.count = 0 self.sum = numpy.zeros( self.vdecimate) return len(output_items[0]) # end for all input vectors # if here, then not enough vectors input to produce an output return 0 # end vave()
keep5.grc
Description: Binary data
vave_vave.xml
Description: XML document
The QA code runs fine all by itself. Some of the debugging print statements remain in the code Sorry for the long, complicated email. Suggestions? Best regards Glen
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio