National Science Foundation Research Experience for Undergraduates
Stevens Institute of Technology, Summer 2009

 About Me:
I am a rising sophomore at Yale University studying Electrical Engineering and Computer Science.  I spent most of my life growing up in Morris Plains, New Jersey.  In my spare time, I enjoy running, playing tennis, web design, solving puzzles, and playing in the band.
Research Topic:

Pseudorandom Multiband Frequency Hopping for Interference Avoidance Using GNU Radio and Universal Software Radio Peripheral (USRP)
Final Research Poster, Final Research Report, Final Research Paper
 Group Members:
Me, Thomas Bell, Kevin Gajewski
Professor Yu-Dong Yao, Fangming He

Weekly Reports

Week 1 (5/18-5/22)

After touring the lab and hearing about all the research projects, I decided to work on the GNU Radio and its application to the Universal Software Radio Peripheral (USRP). This first week, my group installed the latest version of Ubuntu Linux on our computers. We downloaded the GNU Radio software package and followed the installation guide to configure the GNU Radio. Just to build and compile the GNU Radio, we had to download over 25 packages. In this process, we encountered several errors, which took a couple days to resolve. At one point, we even reinstalled Ubuntu and started the installation completely over again. On Friday, with Fang Ming's help, we fixed all the build and compilation errors.  Then we tested the USRP with each of our computers and we were successful in running several of the example scripts.

Week 2 (5/25-5/29)

Over Memorial Day weekend, a stable version of GNU Radio 3.2 was released. We downloaded and installed this version. This latest version comes with a new feature called the GNU Radio Companion (GRC), which allows one to create flow graphs with signal processing blocks graphically. We spent most of this week learning to use the GRC and creating some flow graphs in it.

Also, the two Flex 900 USRPs (with a 800-1000 MHz transceiver) we ordered arrived. (Before we were using a Flex 400 USRP, which has a 400-500 MHz transceiver.) We tested out the new USRPs and they seem to be working okay. Right now, we are still having trouble picking up a clear signal. In the next week, we hope to improve the signal quality and also start experimenting with transmitting signals.

Pictures: (click to enlarge)

Noisy signal from USRP: Screenshot of GRC flow graph of a dial tone:

Dial tone audio, with parameters as shown in GRC screenshot: 
The gadget you added is not valid

Week 3 (6/1-6/5)

This week, the antennas purchased from Ettus Research (which made the USRPs we are using) arrived, and they are specifically designed for the Flex 400 and Flex 900 boards we are using. With these new antennas, we were able to transmit and receive signals successfully. Below is a picture showing our lab setup followed by a video demonstrating the wireless transfer of some data packets from one USRP to the other.

(Click picture to enlarge.)

Our setup: two laptops, each connected via USB to a Flex 900 USRP with one of the new antennas attached.  You also see a spectrum analyzer machine, also with one of the new antennas attached.
 Video    Explanation
First, we started the receiving program on one laptop (with the black background), and then we started the transmitting program on the other laptop (with the white background).  Once transmission starts (at 985 MHz), you see the signal appear on the spectrum analyzer and then you see data packets being received on the other laptop (black background).

Next, the transmission is stopped, the signal disappears on the spectrum analyzer, and the status on the receiving laptop changes to 'False' and the receiving terminates.

In the coming week, we hope to start writing our own signal processing blocks and be able to use them in the GNU Radio Companion.  We are also exploring the idea of importing Matlab library functions.  Currently, one can only write blocks in C++, but we hope to expand this to include other languages such as Matlab.

Week 4 (6/8-6/12)

We discovered that one of the Flex 900 USRPs (which we labeled 1 and 2) has a much weaker transmitting signal than the other.  Using usrp_probe, a built-in function to get information about the USRP, we found that the weaker transmitter board supports MIMO, though we are currently only using one antenna for it.

Using the and example Python scripts (as demonstrated in the video for Week 3), we are able to transmit and receive signals both ways between our two Flex 900 USRPs.  However, when trying to recreate transmission and reception programs using the GNU Radio Companion (GRC), we were only able to get transmission to work.  Right now, we still cannot get a reception program designed in GRC working.

The majority of our week was spent reading a set of 11 PDFs written by Dawei Shen that gives an introduction to GNU Radio, the USRP hardware, signal processing, and writing programs and blocks for GNU Radio in Python and C++.

Week 5 (6/15-6/19)

Last week, we were only able to successfully design a transmission program in the GNU Radio Companion (GRC).  This week, we successfully created receiving programs as well.  We are now able to transmit a signal from one USRP to another using the programs we designed in the GRC.

We also discovered that if you want to listen to the signal source you are sending, you cannot connect the same signal source to both the USRP sink and an audio sink.  You have to create two duplicate signal sources and connect one to the USRP sink and one to the audio sink.

Wrong: (click to enlarge)
Right: (click to enlarge)

We also noticed that under default settings, both Flex 900 USRPs transmit best (largest amplitude) between 890 MHz and 930 MHz.  Outside this range, the signal diminishes in strength the farther from this range you get.

This week, we also created a program that can both transmit and receive simultaneously.  However, we do not yet know if what we set up is a half-duplex system (alternating transmitting and receiving very rapidly) or a full-duplex system (two separate channels - one transmitting and one receiving).

Finally, we edited the transmission program code generated by the GRC so that the USRP would automatically change the transmission frequency every two seconds without a human manually changing the frequency.

In the first twenty seconds, the frequency increases every two seconds by 10 MHz, from 900 to 1000 MHz. Then in the next twenty seconds, the frequency decreases every two seconds by 10 MHz, from 1000 to 900 MHz. Finally, in the last twenty seconds, the frequency changes to a random frequency between 900 and 1000 MHz every two seconds.

See source code here.  The main part we edited/added was the last 13 lines.

We also tested how quickly the USRP could change frequencies.  From experimenting with the time between frequency changes, it seems the fastest the USRP can change frequencies is about once every 100 microseconds (0.0001 seconds).

In the coming week, we hope to create a program that can automatically change amplitude to adjust the signal strength.  We also hope to start combining transmission and reception to see if we can design a program that changes the transmission parameters based on reception stimuli.

Week 6 (6/22-6/26)

This week we figured out how to change the receiving frequency automatically.  In addition, we fixed some problems we were having with the FFT (Fast Fourier Transform) plot.

We also finalized our project goals.  We will divide the 200 MHz range (800 MHz - 1000 MHz) of the Flex 900 USRP into five bands of 40 MHz each.  Each of those five bands we will further subdivide into five channels of 8 MHz each.

Initially, we will choose one of the five 40 MHz bands.  Once chosen, we will randomly hop among the five channels in that band, changing the transmission frequency every couple seconds or so.  At any given time, we will be transmitting through one of the channels and receiving (monitoring) through the other four channels.

At some point, using a signal generator or another USRP, we will send a strong signal through one of the channels, simulating interference.  In response to this interference, which will exceed some predetermined threshold amplitude, we will hop to a completely new 40 MHz band and continuing transmitting and receiving in this new band.  This continues until there is interference in this band as well, at which point, we will hop to another 40 MHz band.

We plan to write a research paper about our project, and some essential sections it will include are:
  • GNU Radio: software-defined radio, structure, GNU Radio Companion
  • USRP: hardware, daughterboards, antenna
  • Multiband frequency hopping for interference avoidance
This week, we hope to implement automatic frequency hopping in response to receiving stimuli (a strong interference signal).  We also plan to begin writing our research paper.

Week 7 (6/29-7/3)

Over the weekend, I e-mailed the discuss-gnuradio mailing list asking them how to access the output of the FFT plot.  Monday morning, I got a reply that told me to look at the example script and this e-mail thread, which explains how works.

Editing the code, we were able to change the transmission frequency in response to a strong received signal.  Next, we modified the spectrum monitoring code (receiving) so that the USRP would only scan four of the five channels in a 40-MHz band, skipping over the channel that the USRP was transmitting in.  This was implemented to avoid feedback interference causing the USRP to change transmission frequencies.

The next feature we implemented was random frequency hopping.  About once or twice per second, the transmission frequency would change to a different channel inside the 40-MHz band.  Then, when interference was detected inside the band, the USRP would randomly hop to one of the other four 40-MHz bands between 800 and 1000 MHz.  It would then continue transmitting in and monitoring this new band.

We explained what we had designed to Fangming and he made some suggestions on how to improve our design.  He told us about the receiving operating characteristic (ROC) curve and explained how it could be used to compare different methods or models and show which was better.  You always want to maximize the true positive rate and minimize the false positive rate.

Our threshold for changing frequencies was based on the instantaneous energy (proportional to the amplitude squared).  However, Fangming pointed out this method was very susceptible to spikes caused by noise or other signals.  Instead, he recommended we use power as a threshold rather than instantaneous energy.  After implementing this change, our frequency hopping became more stable and less susceptible to noise and other signals (fewer false positives).

Modifying the code, we made our own program,, and below is a video demonstration:

Finally, on Wednesday (7/1), we gave a demonstration of the GNU Radio, USRP, GRC, and our random frequency hopping program to some representatives from BAE (a British aerospace and electronics company) and Professor Joseph Mitola.  Dr. Mitola first coined the term "software-defined radio" in 1991 and published the first SDR paper in 1992.  He was also the first person to officially present the idea of cognitive radio in a paper published in 1999.  Currently, he serves as the Vice President of Stevens Institute of Technology.

Week 8 (7/6-7/10)

Having finished our random frequency hopping program, we are focusing our efforts on the research paper.  We finished outlining the paper, divided up the different sections, and began writing the paper.

During the week, we also spent a couple days collecting modulation data for our graduate student mentor, Fangming.  Using the GRC, we transmitted signals from one USRP to another with various modulations, such as DPSK (differential phase-shift keying, GMSK (Gaussian minimum shift keying), OFDM (orthogonal frequency-division multiplexing), and QAM (quadrature amplitude modulation).  On the receiving computer, we saved the raw received signal to a file without demodulating it.  The reason for this is Fangming wants to analyze this data to see if he can implement a machine algorithm for recognizing different types of modulation.

Professor Yao also asked us to make a few video demonstrations, which could be shown if the equipment is not working or when no one is around to run the demonstrations.  I downloaded a desktop-recording program for use in making some videos, but currently I am having audio-video syncing issues.  Once these videos are made, they will be a useful reference in the future for us and for other people working with the GNU Radio and the USRP.

Finally, on Thursday (7/9), we did a presentation to the vice president of AT&T, representatives from the Picatinny Arsenal, and Professor Victor Lawrence, who is a member of the Academy of Engineering.  We demonstrated data packet transmission between the two USRPs, the GRC, and our random frequency hopping program.
Week 9 (7/13-7/17)

We finished shooting the video demonstrations for Professor Yao and posted them on YouTube here.  We edited our random frequency hopping program so that it only used the frequency spectrum between 900 MHz and 1000 MHz.  The five bands are now 20 MHz each, and the five channels within each band are 4 MHz each.  The main purpose of this change is to avoid using the frequencies around 870-890 MHz, which are very busy because they are used by mobile phone carriers like Verizon.  We do not want to interfere with their signals.  The updated source code for the random frequency hopping program is available here.

We have finished writing most of our paper and will wrap it up and polish it early next week.  The final paper, report, and poster will be posted in next week's weekly report.
Week 10 (7/20-7/24)

We finished up our research posters, research paper, and research report.  We want to thank Professor Yao and Fangming He for serving as our research advisors.

Research poster

Research report

Research paper