discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] A block with different input signatures


From: Eric Blossom
Subject: Re: [Discuss-gnuradio] A block with different input signatures
Date: Sat, 12 Jun 2010 17:30:15 -0700
User-agent: Mutt/1.5.20 (2009-08-17)

On Sat, Jun 12, 2010 at 05:21:43AM -0700, Zohair wrote:
> 
> Dear all,
> 
> How can I define a 3-input block io signatures if the inputs are:
> 1- two float vectors with length LENGTH1 each. (from 5 to 12)
> 2- a complex vector with length LENGTH1^2
> 
> output is:
> float vector with length LENGTH2.
> 
> All what I dealt with before was inputs with same length but in case I dont
> know how to define this. Any help or hint, please?
> 
> Thanks,
> 
> Zoh
> 
> ps: I'm using gr_sync_block

Taking a quick look at the docs and/or the gr_io_signature.h file reveals:

/*!
 * \brief Create an i/o signature
 *
 * \param min_streams  specify minimum number of streams (>= 0)
 * \param max_streams  specify maximum number of streams (>= min_streams or -1 
-> infinite)
 * \param sizeof_stream_item1 specify the size of the items in the first stream
 * \param sizeof_stream_item2 specify the size of the items in the second stream
 * \param sizeof_stream_item3 specify the size of the items in the third and 
subsequent streams
 */
gr_io_signature_sptr
gr_make_io_signature3(int min_streams, int max_streams, 
                      int sizeof_stream_item1,
                      int sizeof_stream_item2,
                      int sizeof_stream_item3
                      );

For the general case see:

/*!
 * \brief Create an i/o signature
 *
 * \param min_streams  specify minimum number of streams (>= 0)
 * \param max_streams  specify maximum number of streams (>= min_streams or -1 
-> infinite)
 * \param sizeof_stream_items specify the size of the items in the streams
 *
 * If there are more streams than there are entries in sizeof_stream_items, the
 * value of the last entry in sizeof_stream_items is used for the missing 
values.
 * sizeof_stream_items must contain at least 1 entry.
 */
gr_io_signature_sptr
gr_make_io_signaturev(int min_streams, int max_streams,
                      const std::vector<int> &sizeof_stream_items);



In your case:

  my_block::myblock(..., size_t length1, size_t length2)
   : gr_sync_block("my_block",
                   gr_make_io_signature3(3, 3,
                                         length1 * sizeof(float),
                                         length1 * sizeof(float),
                                         length1 * length1 * 
sizeof(gr_complex)),
                   gr_make_io_signature(1, 1, length2 * sizeof(float)))
   {
     ...
   }


   

If you want to enforce the range limit on length1, check length1 in
your constructor and throw std::invalid_argument("my_block: length1 not in 
[5,12]")
if you don't like the value.

Eric



reply via email to

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