Getting my feet wet on the Tx side of the world

OK, so I’m wetting my collective feet (all two of them) in the Tx side
of the world, with a comms/telecom application, no less.

I’m playing with the OP25 project, which is an open-source initiative to
produce tools to deal with the so-called
“Project 25” digital radio standard that is emerging as the way lots
of public-service people talk to each other
on their radios.

The TX side of the project is still fairly primitive–they have a
hand-coded flow-graph that implements an APCO-25 4-level
FSK modulator, using an audio sink, and then carefully plugging the
audio into the guts of a physical radio, right at the
FM modulator (for those of you who were around in the old amateur
packet radio days, that’s the way we used to do 9600BPS
packet–bypass the usual FM audio filtering, and plug directly into
the FM modulator).

So, I decided to adapt what they’d done on the audio side to driving a
USRP directly (with an appropriate RF card, naturally).

The audio version of their modulator is fairly straightforward. It
takes two-bit sequences from a packed-byte stream, and uses them
to produce symbols from a simple [1.0, 3.0, -1.0, -3.0]
chunks-to-simples conversion. From there, the symbols are run through
an RRC filter, then an FM preemphasis filter, then a gain multiplier
block, and thence to the audio sink.

I have constructed a flow-graph in GRC that I think does pretty-much the
same thing, only instead of dumping to the audio port, it
has an FM modulator block, and then goes to a USRP sink, with
appropriate interpolation specified.

My GRC flow-graph is here:
http://www.sbrac.org/files/fm4_usrp_modulator.grc

APCO-25 runs at a nominal symbol rate of 4800sps, to give 9600BPS, and
occupies a nominal 12.5KHz of bandwidth. The rest of it
involves the usual suspects of FEC coding, packetizing, etc, etc. I’m
just interested in getting the modulator correct at this stage, since
the rest of the “goo” is already partially addressed in the existing
OP25 work.

I’m not sure that my parameters for the RRC are correct, for one, and
exactly what to set the “sensitivity” parameter to in the
the FM modulator (I imagine it’s similar to setting the deviation
control on an analog FM modulator).

Also, I’ve copied the signal processing chain almost directly from the
version of the modulator that dumps to the audio port, so perhaps
there are shortcuts I can take to produce a nice APCO-25 4-level FSK
signal that are “cheaper”.


Marcus L.
Principal Investigator
Shirleys Bay Radio Astronomy Consortium

On Sat, Sep 4, 2010 at 1:53 AM, Marcus D. Leech [email protected]
wrote:

OK, so I’m wetting my collective feet (all two of them) in the Tx side
of the world, with a comms/telecom application, no less.

I’m playing with the OP25 project, which is an open-source initiative to
produce tools to deal with the so-called
“Project 25” digital radio standard that is emerging as the way lots
of public-service people talk to each other
on their radios.

The TX side of the project is still fairly primitive–they have a
hand-coded flow-graph that implements an APCO-25 4-level
FSK modulator, using an audio sink, and then carefully plugging the
audio into the guts of a physical radio, right at the
FM modulator (for those of you who were around in the old amateur
packet radio days, that’s the way we used to do 9600BPS
packet–bypass the usual FM audio filtering, and plug directly into
the FM modulator).

So, I decided to adapt what they’d done on the audio side to driving a
USRP directly (with an appropriate RF card, naturally).

The audio version of their modulator is fairly straightforward. It
takes two-bit sequences from a packed-byte stream, and uses them
to produce symbols from a simple [1.0, 3.0, -1.0, -3.0]
chunks-to-simples conversion. From there, the symbols are run through
an RRC filter, then an FM preemphasis filter, then a gain multiplier
block, and thence to the audio sink.

I have constructed a flow-graph in GRC that I think does pretty-much the
same thing, only instead of dumping to the audio port, it
has an FM modulator block, and then goes to a USRP sink, with
appropriate interpolation specified.

My GRC flow-graph is here: http://www.sbrac.org/files/fm4_usrp_modulator.grc

APCO-25 runs at a nominal symbol rate of 4800sps, to give 9600BPS, and
occupies a nominal 12.5KHz of bandwidth. The rest of it
involves the usual suspects of FEC coding, packetizing, etc, etc. I’m
just interested in getting the modulator correct at this stage, since
the rest of the “goo” is already partially addressed in the existing
OP25 work.

I’m not sure that my parameters for the RRC are correct, for one, and
exactly what to set the “sensitivity” parameter to in the
the FM modulator (I imagine it’s similar to setting the deviation
control on an analog FM modulator).

Hi Marcus,

In the nbfm_tx.py and wfm_tx.py blocks the sensitivity is calculated as:
k = 2 * math.pi * max_dev / quad_rate

Also, I’ve copied the signal processing chain almost directly from the
version of the modulator that dumps to the audio port, so perhaps
there are shortcuts I can take to produce a nice APCO-25 4-level FSK
signal that are “cheaper”.

Maybe you can use the wfm_tx block?

Alex