TDMA on Gnu Radio

Hi everyone,

I have several USRP N210 and I want all of them to transmit using the
same
frequency. Since I cannot use FDMA (this is one of my requirements, not
a
GNU Radio/USRP limitation) then I thought I would give TDMA a try.

I want to be able to tell a node not to transmit when it is not its turn
and to transmit when its turn comes up. I saw the tag feature of GNU
Radio
(tx_sob, tx_eob in particular) but I do not know how to use them from my
python flowgraph.

I tried using pre-cog which compiles fine but some blocks seem to be
missing because of grextras which doesn’t even pass the cmake step with
my
GR3.7.3 install.

Any pointers on this would be appreciated,
Thanks

On 04/02/2014 11:46 AM, Jawad S. wrote:

Hi everyone,

I have several USRP N210 and I want all of them to transmit using the
same frequency. Since I cannot use FDMA (this is one of my requirements,
not a GNU Radio/USRP limitation) then I thought I would give TDMA a try.

I want to be able to tell a node not to transmit when it is not its turn
and to transmit when its turn comes up. I saw the tag feature of GNU
Radio (tx_sob, tx_eob in particular) but I do not know how to use them
from my python flowgraph.

Are you only using stock GNU Radio blocks?

If you have your own blocks, it’s really simple: Just insert a tx_sob on
the first sample of any burst, and a tx_eob on the last.

Martin

Yes I am using only stock GNU Radio blocks.

I don’t mind creating my own block for this, I just want to be sure that
there is no easier way that already exists say in GRC or through a
python
wrapper (maybe using pmt).

2014-04-02 13:40 GMT+02:00 Martin B. [email protected]:

On 04/02/2014 01:45 PM, Jawad S. wrote:

Yes I am using only stock GNU Radio blocks.

I don’t mind creating my own block for this, I just want to be sure that
there is no easier way that already exists say in GRC or through a
python wrapper (maybe using pmt).

We are currently working on a solution which will make gr-uhd understand
length tags. Until then, you’ll need to add blocks in there to do that.

MB

Ok, thanks for the quick reply, this clarifies things for me.

2014-04-02 13:49 GMT+02:00 Martin B. [email protected]:

Jawad,

I though I’d add a few more comments:

gr-mac
Much of the functionality of pre-cog has been ported to gr-mac, which
works
with “core” features of gnuradio like the new message passing API.
We’ve
also added a burst_tagger block that converts length tags to
tx_sob/tx_eob
tags as Martin suggests.

Of course, for real TDMA you will need to add tx_time tags, in addition
to
adding the tx_sob (doesn’t actually do much IIRC) and tx_eob flags
(makes
the Tx switch off quickly after tx). tx_time tells the USRP exactly when
to
start streaming and the value you assigned here would take into
consideration slots, guard intervals, interface latency, processing
jitter,
etc. The block that adds these tags will also have to track time and
schedule when these tags are added and samples go out.

If you plan to make a TDMA block, perhaps you can contribute that back
to
community through gr-mac. Balint and I were also planning to develop
one,
but I can’t make any specific promises on out timeline. We certainly
welcome and encourage more contributions! You can see my GRCon13
presentation for more information on how tx_eob/time tags work, and how
the
FHSS/TDMA designs worked (could be vastly improved):
http://gnuradio.squarespace.com/storage/grcon13_presentations/grcon13_malsbury_phy_mac_primer.pdf

https://github.com/jmalsbury/gr-mac

An Alternative Way to do Tags

If you know that your radios will always transmit with the same packet
length, even if those packets are “preamble/fillter” packets with no
useful
data, then you could do the following:

  • Each USRP gets two antennas and runs in full duplex, and would be
    synchronized in time with PPS or a GPSDO with visibility to the GPS
    system
  • On the transmit side, the transmit stream would run continuously
  • Use offset LO tuning
  • Interleave 0-samples with the useful transmitted data to reduce the
    null output of the quadrature modulator

This approach isn’t the cleanest and might come with some minor
penalties
like inflexibility, and the presence of a low, unmodulated carrier from
LO
leakage/DC offset. But this would require less knowledge of tags and
custom block development.

GR-Extras and Pre-Cog
Use GNU Radio 3.6 and some older commit from gr-extras, like
4bbb1cf01a8ac35a989bc2468fd0ccd384dede45. This is not recommended as
the
community won’t be able to provide the same level of support as we can
with
3.7.

Best Regards,
John M.
Ettus R.