# I & Q channels in source module

**URL:** <https://www.ruby-forum.com/t/i-q-channels-in-source-module/241690>\
**Category:** GNU Radio\
**Created:** [April 23, 2015, 9:10pm UTC](https://www.ruby-forum.com/t/i-q-channels-in-source-module/241690 "2015-04-23T21:10:58Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [April 23, 2015, 9:10pm UTC](https://www.ruby-forum.com/t/i-q-channels-in-source-module/241690/1 "2015-04-23T21:10:58Z")

</div>

I am writing a source module/block and I generate 16 bit signed I and Q  
values. There is first a 16 bit I value then a 16 bit Q value repeated  
1024 times.

In my source module I have:

```
usbradio_impl::usbradio_impl()
  : gr::sync_block("usbradio",
          gr::io_signature::make(1, 1, sizeof(short)),
          gr::io_signature::make(1, 1, sizeof(short)))
{
           state = 0;
           cnt = 0;
           set_max_noutput_items(1);
           set_max_output_buffer(2);
}

/*
 * Our virtual destructor.
 */
usbradio_impl::~usbradio_impl()
{
}

int
usbradio_impl::work(int noutput_items,
                      gr_vector_const_void_star &input_items,
                      gr_vector_void_star &output_items)
{
    short *out = (short *) output_items[0];

    // Do <+signal processing+>
    stuff_output(out);

    // Tell runtime system how many output items we produced.
    return 1024;
}

```

The stuff\_output(out) function will stuff an I value then a Q value 512  
times.

Is that the correct way to present I & Q values?

Thx,  
Y-

---

<div class="post-metadata">

**Author:** ![Yile\_Ku](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/77aa72/32.png) [@Yile\_Ku](https://www.ruby-forum.com/u/Yile_Ku)\
**Post date:** [April 23, 2015, 9:31pm UTC](https://www.ruby-forum.com/t/i-q-channels-in-source-module/241690/2 "2015-04-23T21:31:51Z")

</div>

In general, radios that use complex-baseband format interleave I/Q in  
the way you’re apparently using here. That’s very conventional.

It’s very usual for the interface to “present” complex-float to Gnu  
Radio as the default format, since the vast majority of DSP blocks  
operate on complex-float or float. Not a show-stopper, since blocks  
exist to convert from signed-short formats into complex-float, but it’s  
a nice convenience for users.

On 2015-04-23 15:09, Yile Ku wrote:

> cnt = 0;
> 
> // Tell runtime system how many output items we produced.  
> Discuss-gnuradio mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [Discuss-gnuradio Info Page](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio) [1]

Links:

---

<div class="post-metadata">

**Author:** ![Yile\_Ku](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/77aa72/32.png) [@Yile\_Ku](https://www.ruby-forum.com/u/Yile_Ku)\
**Post date:** [April 24, 2015, 3:24pm UTC](https://www.ruby-forum.com/t/i-q-channels-in-source-module/241690/3 "2015-04-24T15:24:32Z")

</div>

On Thu, Apr 23, 2015 at 3:09 PM, Yile Ku [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> {
> state = 0;
> cnt = 0;
> set_max_noutput_items(1);
> set_max_output_buffer(2);
> }
> 
> ```

Why are you using set\_max\_noutput\_items and set\_max\_output\_buffer like  
this? Those numbers don’t make any sense. These are fairly advanced  
features that you should only use if you know /exactly/ what you are  
doing  
with them. These lines will make assumptions about the flow of data that  
will likely hurt how you process things in the work function.

Tom
