Machines:

Currently, all ten of the machines in Sieg 327 are now fully equipped with network-enabled computers and USRP devices. They are patagonian, gibson, atacama, ogaden, nubian, greatbasin, tanami, sechura, simpson, and altpiplano.

Equipment reservations: I've created each USRP board (and the associated machine) as a visitor on reserve. Unfortunately, the reservation system does not span 24 hours but rather 7am-7pm, so we'll have to find a work around for evening hours.

Initial setup:

I have created accounts on the lab machines for each of the class groups. The account names and passwords are in your e-mail inboxes. I also set up a CVS repository on the department webservers so that each group can easily keep its code synchronized. The 10 lab machines do not share hard drive space, and since they are class-managed (read: we get root access to the USB port, necessary for this project), the department will not support them. The repositories are located in /homes/gws/dhalperi/cse561_wi07_cvs with one repository for each group.

Each repository already contains a copy of the initial revision of the project code, also available here. To check it out, use the following command:

On some computers with different versions of CVS, the code might instead be or

where you have replaced USERNAME with your own *CSE* username and GROUP with your group letter (in lowercase). You should know your group letter from the email "Lab machines and accounts", sent Jan 9.

Now, from inside the echo folder, you can run cvs update, cvs add, cvs checkout, and all your favorite CVS commands without needing to include the CVSROOT string in the first checkout command. You may, however, need to edit the CVS/Root file and replace the USERNAME in the extssh line.

Getting started:

The first thing you should do is run the echo program:

This sets the center frequency at 2.462 GHz (802.11b channel 11) and sets the data rate to 200k bps, meaning that each bit transmitted lasts for 1/200,000th of a second. If multiple groups are working at the same time, you may want to use separate channels; a list of frequencies for all of the 802.11b channels is located here; the most common are channel 1 (2.412G), 6 (2.437G), and 11 (2.462G), and the center frequency of each channel increases in multiples of 5 MHz.

The choice of 25 MHz for the wired situation is completely arbitrary, but it works; the basic boards can do frequencies between 0 and 44 MHz, but I think they get a little iffy at the higher end of the spectrum.

If you run the same command on each of two machines, they will be able to communicate over the air. Type some text and push enter; you will see output that looks like this:

text
Tx: len(payload) =    5
c66cc66cc66cc66cacdda4e2f28c20fc00050005746578740a55555555555555
Here, text is what I typed, the next line is debug output, and the third line is the hexadecimal encoding of the actual data that was sent out over the air. Let's break this part down into pieces:

Understanding the code:

There are four main components of this program: echo.py, transmit_path.py, receive_path.py, and dbpsk.py.

Example code:

The GNU Radio project has implemented a large set of examples and a large library of signal processing blocks. I have posted a zipped package of their code tree here. The two most important directories are:

Additionally, you can obtain a list of the signal processing blocks by looking in /usr/local/include/gnuradio.

Stage 1:

Stage 1 requires that you design and implement (efficient) reliable communication between two software radios. Note that the provided codebase does not implement communcation between two software radios; it merely implements two broadcast links. Part of this phase is having a working two-way channel that, for instance, one could transmit a file over and know that it was received correctly and in full.

The second part of Stage 1 asks that you improve upon the physical layer in some way. The sky's the limit!

Have fun! Work early, work often! I'll be checking email regularly for questions, and feel free to hunt me down (in Sieg 327, or in CSE 391) if you have questions.

Last updated at 15:50, Fri 12 Jan 2007