Hi Tim,

I thought I had it working. However, it is dropping the last output sample.
In the QA file, there are 5 complex samples going into each of the 3-inputs
to the module. When the general_work() method runs with the for loop, it
throws an exception error stating that index 4 (meaning out[4]) is out of
bounds. If I comment out the for loop and run the program with the line
commented out below:
output_items[0][:]= v2
it results in 4 out of  5 samples going to the output. I am using the
documented default approach in coding for a 1:1 input/output sample
relationship as you can see in the forecast() and general_work() methods
below, please let me know if you see something that is wrong.

    def forecast(self, noutput_items, ninput_items_required):

        #setup size of input_items[i] for work call

        for i in range(len(ninput_items_required)):

            ninput_items_required[i] = noutput_items



    def general_work(self, input_items, output_items):

        global v1, v2

        if self.scale == True:

            v1 = self.v1

            v2 = self.v2

            self.scale = False



        in0 = input_items[0]

        in1 = input_items[1]

        in2 = input_items[2]

        out = output_items[0]



        v2 = 1.0+1.0*1j

        for ii in range(0,len(in0)):

            out[ii] = v2

        # output_items[0][:] = v2

        self.consume(0, len(input_items[0]))

        self.consume(1, len(input_items[0]))

        self.consume(2, len(input_items[0]))
        return len(output_items])

Thank you very much!
George

On Tue, Jan 19, 2021 at 3:50 PM George Edwards <gedwards....@gmail.com>
wrote:

> Hi Tim,
>
> Thank you very much for your help!
>
> The problem was with the QA file. I tried to input the 3 source streams as:
> src = blocks.vector_source_c(np.array([src0, src1, src2]))
> where each srcX was defined as a complex array. Based on the link into
> the github QA files that you sent me, it showed that each srcX must be
> connected individually to the processing block. Also, I overlooked the
> fact that when I ran the QA, it pointed to that line in the code as a
> problem.
>
> I will now try to see if I can get the output to provide a stream of 8
> samples (maybe do 3 as a start) based on one sample from each of the
> 3-input streams.
>
> Thanks again for the help!
>
> Regards,
> George
>
> On Tue, Jan 19, 2021 at 2:05 PM Tim Huggins <huggins.timo...@yahoo.com>
> wrote:
>
>> George,
>>
>> Unfortunately I'll still not seeing anything wrong with what you have
>> (and I realized that the QA code caused the issue so it is probably not in
>> your yml file). I'd probably have too see your entire code to try to
>> reproduce the error as all my tests to create the error didn't.
>>
>> Regarding your other questions:
>> 1. There isn't really a correct/incorrect as the answer can depend on
>> the work that you want the block to do but general will work. I mainly use
>> general or sync.
>> 2. Yes, as you have a 1 to 1 stream.
>> 3. This doesn't look quite correct. Are you planning on working with
>> vector inputs or steams to your block? if you are using streams then there
>> is no need to change vlen in the yml file. Also it sounds like whatever
>> computations are basically doing an interpolation (1 input to 8 outputs),
>> you may want to look at the interp_block type instead of the general block
>> that you are using (it might make your life a little easier, take a small
>> glance here:
>> https://github.com/gnuradio/gnuradio/blob/master/gr-blocks/python/blocks/qa_block_gateway.py).
>> Alternatively I think you could look at the set_output_multiple() call.
>>
>> Tim
>>
>>
>>
>>
>>
>>
>>
>> On Monday, January 18, 2021, 8:27:28 PM EST, George Edwards <
>> gedwards....@gmail.com> wrote:
>>
>>
>> Hi Tim,
>> Thanks for the offer to help! I appreciate it very much.
>> Here is the rest of yml file. I also have some further questions:
>> 1. In the gr-modtool design, I picked the "general" block, is this
>> correct?
>> 2. The current model has 3 streaming inputs. Each output sample
>> computation takes one sample from each input. So I leave the forecast()
>> method as the default which is:
>>     ninput_items_required[i] = noutput_items, is this correct?
>>      And, in the general_work() method, I also leave the default:
>>     return len(output_items[0]), is this correct?
>> 3. The final model will have the same 3 input streams, but each
>> computation will produce a stream of 8 output samples. So, do I now change
>> the forecast() method to:
>>     ninput_items_required[i] = noutput_items - 7
>>     Then, in the general_work() method do:
>>      return len(8*input_items[0])
>>      Then, for the yml file set, vlen = 8              "The setting of
>> these parameters in Item 3 are all confusing to me"
>>
>> parameters:
>>
>> - id: scale
>>
>>   label: Scale_Value
>>
>>   dtype: bool
>>
>>   default: True
>>
>>
>>
>> #  Make one 'inputs' list entry per input and one 'outputs' list entry
>> per output.
>>
>> #  Keys include:
>>
>> #      * label (an identifier for the GUI)
>>
>> #      * domain (optional - stream or message. Default is stream)
>>
>> #      * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
>>
>> #      * vlen (optional - data stream vector length. Default is 1)
>>
>> #      * optional (optional - set to 1 for optional inputs. Default is 0)
>>
>> inputs:
>>
>> - domain: stream
>>
>>   dtype: complex
>>
>>   multiplicity: '3'
>>
>>
>>
>> # - label: in0
>>
>> #   dtype: complex
>>
>> # - label: in1
>>
>> #   dtype: complex
>>
>> # - label: in2
>>
>> #   dtype: complex
>>
>>
>>
>> outputs:
>>
>> - label: out
>>
>>   dtype: complex
>>
>>
>>
>> #  'file_format' specifies the version of the GRC yml format used in the
>> file
>>
>> #  and should usually not be changed.
>>
>> file_format: 1
>>
>>
>>
>>
>> On Mon, Jan 18, 2021 at 7:50 AM Tim Huggins <huggins.timo...@yahoo.com>
>> wrote:
>>
>> George,
>>
>> I have made several OOT Python blocks with variable numbers of inputs and
>> outputs and while I could very easily be overlooking something the error
>> does not, at first glance, appear to be in the code that you have sent out.
>> Can you send the rest of your yml file (and potentially the rest of the
>> python)? I am curious if there is something missing in either the templates
>> or parameters sections of your yml file.
>>
>> Tim
>>
>> On Friday, January 15, 2021, 2:56:48 PM EST, George Edwards <
>> gedwards....@gmail.com> wrote:
>>
>>
>> Hello,
>>
>> I am trying to make a Python OOT block which accepts a stream of 3 inputs
>> complex valued data and for each single input sample (one on each input
>> line) the block will output 8 complex samples. For my first cut, I am
>> simply trying to get the module to work outputting one complex sample
>> (rather than 8). Below are the essential parts of my program.
>>
>> 1. In the def __init__ (self.), I set the inner method
>> gr.basic_block.__init__(self,
>>        name="my_block_name_py_cc",
>>        in_sig = [numpy.complex64, numpy.complex64,  numpy.complex64  ],
>>        out_sig = [ numpy.complex64 ])       # with 3 inputs and one output
>>
>> 2. In the general_work() method for now I set the output to a
>> constant complex value as follows
>>       out_items[0][:] = 1.0+1.0*1j
>>
>> 3. In the *.yml file, the input is set as:
>>         inputs:
>>         - domain: stream
>>            dtype: complex
>>            multiplicity: '3'
>>
>> The module compiles. However, when I run the QA file, it gives an error
>> stating something is wrong in File "..........blocks_swig1.py at line 8354.
>> TypeError: in method 'vector_source_c_make', argument 2 of type 'bool'
>>
>> I went to the file and the line stated, but I have not seen anything to
>> help me make corrections. As far as a TypeError of 'bool', I do not see
>> where I would have made such an error. I have an input parameter in the def
>> __init__(self, start = True) method, 'start', which comes in as bool, but
>> that is the only bool variable I am using. The documentation I read for the
>> method states "This block produces a stream of samples based on an input
>> vector" (which is my goal if I can get it to work).
>>
>> I will appreciate any help to get me on the right track.
>>
>> Regards,
>> George
>>
>>

Reply via email to