On Tue, 2009-01-27 at 12:23 -0500, yufeng wang wrote:
I’d like to use one of them to transmit the sum of two (uncoded)
signals, useful and interference, with possible relative scaling to
simulate different channels. At the receiver side, I wanna then
implement different demodulators, like treating interference as noise
or successive demodulation (demodulate interference, cancel and
One place to start is with the digital-bert example application. It is
designed to implement a one-way transmission (using BPSK) between two
USRPs, i.e., it does not implement any packet-oriented overhead and has
the minimal flowgraph necessary to accomplish this.
The TX application sends a bit error rate testing waveform, basically an
LFSR-based pseudorandom bit stream modulated using BPSK and a
root-raised-cosine transmit filter. This is sent continuously.
The receiver application performs RRC receive filtering, carrier
frequency and phase recovery, bit timing recovery, BPSK demodulation,
and measures the bit error rate. It displays, once per second, the
current frequency offset, bit timing error, estimated signal to noise
ratio, and estimated bit error rate. It’s easy to see the effects of
multi-path, shadowing, and antenna efficiency this way.
You can modify these applications to implement different
modulation/demodulation (implementing QPSK vs. BPSK is rather
straightforward), and add whatever artificial channel impairments you
Once you have a feel for how things work at the PHY level, there is the
digital packet radio example application (“tunnel.py”), which not only
implements a highly configurable PHY layer, but has a (really) basic
CSMA MAC and an interface to the Linux IP networking layer, allowing
routing IP between two hosts using USRPs. That may be of interest to
you, but I recommend starting with the simpler continuous transmission
BERT example to get a start on your learning curve.