GRC Polyphase Channelizer examples?

Is there a (hopefully simple) example of using the polyphase channelizer
block in grc?

I’m trying to do a simple case of dividing a 250 kHz wide stream from
USRP into a small number (initially 4) of contiguous channels. Given my
generally ignorant status, I’m stumped on setting the parameters.

e.g. –

(a) is the “taps” param an integer or is it a firdes function as in the
xlating FIR filter?

(b) what is the oversample param used for?

© what is the sample rate of each of the output channels – it doesn’t
appear to be the same at the sample rate at the input, or alternatively
my parameters are so far off that what’s coming out of the thing is
absolute junk (when I feed it into a USRP sink set to 250ksamples, I get
screens of underruns).

Thanks,

John

On 10/13/2011 09:11 PM, John Ackermann N8UR wrote:

the xlating FIR filter?

John

If it’s only 250Khz wide, and you only need four, have you tried 4
discrete freq-xlating FIR filters? They’re fairly easy to use, and can
produce a baseband output at a decimated rate.

I haven’t yet figured out how to use the polyphase channelizer because I
almost never have the N equi-spaced channels problem in
my fields of interest. So, discrete filters it is (sometimes a
hierarchy of discrete filters).


Marcus L.
Principal Investigator
Shirleys Bay Radio Astronomy Consortium

On Fri, Oct 14, 2011 at 7:47 AM, John Ackermann N8UR [email protected]
wrote:

John

I haven’t yet figured out how to use the polyphase channelizer because I

almost never have the N equi-spaced channels problem in
my fields of interest. So, discrete filters it is (sometimes a hierarchy
of discrete filters).

John,
You’ve almost got it right except for the taps. The “taps” parameter is
the
FIR taps of the prototype filter, which then gets partitioned among the
N
channels of the channelizer.

While there is no example in GRC readily available, you can look at the
channelize.py example in: gnuradio-examples/python/pfb/

Specifically, line 49 is where the filter taps are created. Notice that
the
sample rate is the sample rate at the input to the channelizer while the
bandwidth and transition width are defined for the channel bandwidths.
This
makes a fairly long filter that is then split up between the N channels
of
the PFB.

Tom

On 14/10/2011 12:01 PM, Tom R. wrote:

channelizer while the bandwidth and transition width are defined for
the channel bandwidths. This makes a fairly long filter that is then
split up between the N channels of the PFB.

Tom

I have to wonder, though, John, whether your “scheme” for saving power
in a linear transponder is actually going to be workable.

Yes, you’ll squelch the “no signal” channels going into the transponder,
but that is only the difference between the received Tsys over
the filter bandwidth and the inherent noise power of the transmitter
itself.

Marcus D. Leech said the following on 10/13/2011 09:18 PM:

On 10/13/2011 09:11 PM, John Ackermann N8UR wrote:

Is there a (hopefully simple) example of using the polyphase
channelizer block in grc?

I’m trying to do a simple case of dividing a 250 kHz wide stream from
USRP into a small number (initially 4) of contiguous channels. Given
my generally ignorant status, I’m stumped on setting the parameters.
[ snip ]

If it’s only 250Khz wide, and you only need four, have you tried 4
discrete freq-xlating FIR filters? They’re fairly easy to use, and can
produce a baseband output at a decimated rate.

I’m starting with 4, but if my harebrained scheme works, want to
increase to whatever the CPU will allow.

I’ve attached a screenshot of my test flowgraph. It’s a linear
translator that takes a chunk of spectrum down to baseband, then
retransmits it on a different frequency range – similar to what the
amateur satellites do.

What I’m playing with is whether I can improve the transmit efficiency
by dividing the passband into multiple, independently squelched channels
so that I’m not amplifying and retransmitting noise where there is no
real signal present. For best results, you’d want to have many channels
(and possibly some means to select adjacent channels), but to start with
4 is enough to see whether this idea makes any sense at all.

John

Tom R. said the following on 10/14/2011 12:01 PM:

the bandwidth and transition width are defined for the channel
bandwidths. This makes a fairly long filter that is then split up
between the N channels of the PFB.

Thanks, Tom. So it appears that you use a firdes.lowpass type function
in the taps setting. I’ve done that and I now get somewhat more sane
results on the output FFT.

However, I’m still seeing massive underruns when I assume the same
sample rate as the input. Is there a decimation going on (i.e.,
output_rate = input_rate/num_channels or something like that)?

John

Marcus D. Leech said the following on 10/14/2011 12:32 PM:

I have to wonder, though, John, whether your “scheme” for saving power
in a linear transponder is actually going to be workable.

Yes, you’ll squelch the “no signal” channels going into the transponder,
but that is only the difference between the received Tsys over
the filter bandwidth and the inherent noise power of the transmitter
itself.

It may not work to actually improve power efficiency, but another goal
is to just make it sound better by not raising the background level
across the whole output spectrum where there is no signal present. By
the time you add 40 or 50 dB gain at baseband, the amplified noise at
the transmitter is pretty noticeable.

This is all just an experiment to see what can be done, and to learn
some GRC in the process. :slight_smile:

John

On 14/10/2011 12:53 PM, John Ackermann N8UR wrote:

Thanks, Tom. So it appears that you use a firdes.lowpass type
function in the taps setting. I’ve done that and I now get somewhat
more sane results on the output FFT.

However, I’m still seeing massive underruns when I assume the same
sample rate as the input. Is there a decimation going on (i.e.,
output_rate = input_rate/num_channels or something like that)?

John

Doesn’t the PFB channelizer down-sample as well? So your output sample
rates from the channelizer will be mis-matched to the
UHD USRP sink?

On 14/10/2011 1:06 PM, John Ackermann N8UR wrote:

John

Yup, I understand. The question is what fraction of delivered noise in
the absence of an actual signal is internally-generated in the
transmitter,
which fraction isn’t. But some of this problem (if you’re not
interested in TX power efficiency) should be dealt with by the receiver.

Interesting experiment.

On Fri, Oct 14, 2011 at 1:42 PM, John Ackermann N8UR [email protected]
wrote:

That’s what I’m trying to figure out. A 4x interpolator doesn’t seem to
help, though. I’m not sure if the “oversample” parameter in the channelizer
might act as an interpolator, or if that provides some other function.

John

The oversample parameter is to make the outputs have some n
samples/channel.
By default, it’s 1, so the output sample rate of each channel is fs_in/M
for
M channels; this is also the bandwidth (the signal is critically
sampled).
If you have n=2, then the sample rate of each channel is 2*fs_in/M, but
your
bandwidth is still fs_in/M. So you shouldn’ need to worry about the
oversample rate.

So, yes, the channels are downsampled by a factor of M.

Tom

On 14/10/2011 1:42 PM, John Ackermann N8UR wrote:

other function.

John

Also, looking at your flow-graph, all of the channels are effectively at
baseband, so if you have two or more channels come up at the same
time, they’ll collide–was that the intent?

Marcus D. Leech said the following on 10/14/2011 01:18 PM:

On 14/10/2011 12:53 PM, John Ackermann N8UR wrote:

Doesn’t the PFB channelizer down-sample as well? So your output sample
rates from the channelizer will be mis-matched to the
UHD USRP sink?

That’s what I’m trying to figure out. A 4x interpolator doesn’t seem to
help, though. I’m not sure if the “oversample” parameter in the
channelizer might act as an interpolator, or if that provides some other
function.

John

On 14/10/2011 1:42 PM, John Ackermann N8UR wrote:

That’s what I’m trying to figure out. A 4x interpolator doesn’t seem
to help, though. I’m not sure if the “oversample” parameter in the
channelizer might act as an interpolator, or if that provides some
other function.

John

Keep in mind that the fractional interpolator, if that’s what you’re
using, uses the inverse for the interp ratio. So if you needed an
interp ratio of 4, you’d specify (1/4). That’s because is can be
used for decimation as well, and so the ratio is expressed as a
decimation
ratio.

On Fri, Oct 14, 2011 at 2:04 PM, John Ackermann N8UR [email protected]
wrote:

No, I was afraid that might be the case but wasn’t sure (and was hoping
not). I’ll have to add a multiplier on each channel to provide an offset.
Too bad there isn’t a polyphase dechannelizer. :-).

It’s called the polyphase synthesis filter :slight_smile:

gr_pfb_synthesis_filterbank_ccf.

Tom

hi John Ackermann
can you put translator.grc source ???

On Oct 14, 2011, at 1:51 PM, “Marcus D. Leech” [email protected]
wrote:

Also, looking at your flow-graph, all of the channels are effectively at
baseband, so if you have two or more channels come up at the same
time, they’ll collide–was that the intent?

No, I was afraid that might be the case but wasn’t sure (and was hoping
not). I’ll have to add a multiplier on each channel to provide an
offset. Too bad there isn’t a polyphase dechannelizer. :-).