Multi-band receiver

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hey all,

I’m trying to receive, and send, traffic on a fixed but unknown carrier
frequency within the passband of the USRP. That is, there are many
communication bands, but transmissions happen on only one of k channels.

The trivial approach is to have one translating filter, with a channel
select filter, for each channel and hook them all in parallel to the
receive chain. Then to respond I can have k different callbacks, one for
each channel, which will cause response packets to be sent to one of k
different transmit paths corresponding to the different channels.

Does anyone see a more elegant way to do this? I can imagine that using
an FFT I can discover on which channel a transmission occurs, but AFAIK
there’s not a good way for one GNU Radio block to tune another (e.g.
tuning the xlating filter with the FFT).

Thanks!

Dan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFG3vQly9GYuuMoUJ4RAhPXAJ9exiukAgmQt+9CVpXdfXsQZaE4sQCgr3Bv
6w5inh3rPkeSjglh9FeAgHA=
=ERpu
-----END PGP SIGNATURE-----

Dan H. wrote:

Does anyone see a more elegant way to do this? I can imagine that using
an FFT I can discover on which channel a transmission occurs, but AFAIK
there’s not a good way for one GNU Radio block to tune another (e.g.
tuning the xlating filter with the FFT).

For the receive side, you can use a blks.analysis_filterbank to turn a
wideband signal with N carriers into N baseband channels equally spaced.

Then you can attach demodulators to these output ports.

This is demonstrated in the gr-pager code:

http://gnuradio.org/trac/browser/gnuradio/trunk/gr-pager/src/usrp_flex_band.py

Here we capture 1 MHz of USRP spectrum, then create 40 baseband output
channels at 25 KHz each, then attach 40 decoder blocks to these outputs.

On the transmit side, if you only need to transmit on one channel at a
time, you can either tune the daughterboard to the right frequency
(slow), or you can mix the baseband with an offset frequency on the host
and send the composite signal to the USRP (fast, but more CPU.)

If you need to transmit on multiple frequencies at once, use the
blks.synthesis_filterbank, which works in reverse: attach many
modulators to its inputs; it outputs the composite signal that you can
then send to the USRP. But your modulators will need to be constantly
sending zeros between packets.


Johnathan C.
Corgan Enterprises LLC
http://corganenterprises.com

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Johnathan C. wrote:

channels at 25 KHz each, then attach 40 decoder blocks to these outputs.
In this example (and indeed, in the code for the analysis_filterbank),
we divide a 1MHz band exactly into 25 kHz channels. However, the
channels at the edge will be attenuated (cite: Matt’s email of yesterday
12:11 AM PST). I therefore oversampled the desired passband by 33%,
which causes the resulting wideband signal to not divide evenly into
channel-sized chunks.

If I do some sort of 3/4 resampling should the passband quality suffer?

Thanks!

Dan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFG3wbey9GYuuMoUJ4RAvvUAJ9W9PeZG+mTA1Nlwl3YGZgdG8NrzACbB+Ue
yznc+0nwbfB9J0APeR0mcFw=
=5v5I
-----END PGP SIGNATURE-----

In this example (and indeed, in the code for the analysis_filterbank),
we divide a 1MHz band exactly into 25 kHz channels. However, the
channels at the edge will be attenuated (cite: Matt’s email of yesterday
12:11 AM PST). I therefore oversampled the desired passband by 33%,
which causes the resulting wideband signal to not divide evenly into
channel-sized chunks.

If I do some sort of 3/4 resampling should the passband quality suffer?

The simple way to think about this is that you have an RF bandwidth of
the overall composite signal (let’s say 4MHz), and you have the SPACING
of each channel (not necessarily the bandwidth), say 25 kHz. So the
math is --> 4Mhz/25kHz = 160. So you need a 160 point filterbank. It
doesn’t matter how many of those channels are occupied and oversampling
is not an issue. It doesn’t matter how wide the individual signals are
either. In the case of the pagers, the signals are 16 kHz wide, but the
spacing is 25kHz, and so we use 25 kHz channels.

To be more specific, we are creating polyphase analysis and synthesis
filterbanks based on the FFT.

Matt

Dan H. wrote:

In this example (and indeed, in the code for the analysis_filterbank),
we divide a 1MHz band exactly into 25 kHz channels. However, the
channels at the edge will be attenuated (cite: Matt’s email of yesterday
12:11 AM PST). I therefore oversampled the desired passband by 33%,
which causes the resulting wideband signal to not divide evenly into
channel-sized chunks.

If I do some sort of 3/4 resampling should the passband quality suffer?

Can you post your channel spacing and number of channels needed?


Johnathan C.
Corgan Enterprises LLC
http://corganenterprises.com