[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: [Discuss-gnuradio] Block with N inputs and M outputs (M>=N)

**From**: |
Michael Dickens |

**Subject**: |
Re: [Discuss-gnuradio] Block with N inputs and M outputs (M>=N) |

**Date**: |
Mon, 10 Apr 2006 21:09:41 -0400 |

`Achilleas - I did not have the gr_sync_interpolator code in front of
``me when I wrote originally, so it was a guess ... which was not
``entirely correct (the interpolation must be an -integer- value, while
``yours is not guaranteed to be so). Thus, yes, you will need to
``inherit from "gr_block" and, since M and N are reasonably small, you
``can use "set_output_multiple(M)" to guarantee a multiple of N input
``items when you use write "forecast()" to handle this. For example,
``if "d_M" and "d_N" are the values of M and N at instantiation, then ...
`
1) In your instantiator, include:
+++
// Set the approximate output rate / input rate
set_relative_rate (1.0 * d_M / ((double) d_N));
// Set the output multiple to guarantee a multiple of M
set_output_multiple (d_M);
+++
2) In forecast (), include:
+++
// Check that the number of requested output items is a multiple of M
assert (noutput_items % d_M == 0);
// find the number of input items required to
// generate the requested number of output items
int ninput_items = d_N * noutput_items / d_M;
// set all streams' input requirements
unsigned ninputs = ninput_items_required.size ();
for (unsigned i = 0; i < ninputs; i++)
ninput_items_required[i] = ninput_items;
+++
3) In general_work (), include:
+++
// Check that the number of requested output items is a multiple of M
assert (noutput_items % d_M == 0);
// find the number of input items required to
// generate the requested number of output items
int ninput_items = d_N * noutput_items / d_M;
+++

`to get the number of input items as make sure it really is a multiple
``of N (via that the # of output items is a multiple of M). You can,
``of course, choose other means for doing this which are more in your
``coding style. And the asserts can be dropped (I use #if's) once
``you're happy that it's all working as you want. Hope this is clear!
``- MLD
`