Frequently Asked Questions
A series of questions commonly asked (and answered). Gathered from the mailing list archives and various experts.
- General
- What is GNU Radio?
- Where can I download GNU Radio?
- How come not all the components are getting installed?
- How come it doesn't compile?
- How can I get involved?
- What can I do to help contribute to GNU Radio?
- Who is part of GNU Radio?
- Why did GNU Radio get started?
- Where can I ask other questions about GNU Radio not answered here?
- Build or Runtime Issues
- GNU Radio Processing Blocks
- Universal Software Radio Peripheral (USRP)
- What is the Universal Software Radio Peripheral?
- Can multiple USRPs be installed on one single host?
- How can I record data from different daughterboards on the same USRP?
- What is inband signaling and how can I use it?
- Can I run 802.11a/b/g/n/? with a USRP?
- What frequency ranges are covered that I can use with the USRP?
- Can I transmit and receive from the same USRP?
- How does the USRP decide where to allocate requested receive gain?
- Can I stream digital data to or from the I/O pins on the USRP?
General
Who/what/when/where/why/how (not necessarily in that order)?
What is GNU Radio?
GNU Radio is a collection of software that when combined with minimal hardware, allows the construction of radios where the actual waveforms transmitted and received are defined by software. What this means is that the digital modulation schemes used in today's high performance wireless devices are now software problems.
Where can I download GNU Radio?
Check the download page on the wiki then go over to the build guide for instructions on how to build and what dependencies GNU Radio has.
How come not all the components are getting installed?
Depending on the system and the dependencies found by the configure script, some components may be left out. Specifically, there are some modules which are Windows or Mac OS X specific which will _not_ be installed on Linux systems simply because the dependencies are not there.
Don't fret if every component does not get installed. Chances are you don't need it if configure did not error out when it ran.
How come it doesn't compile?
Have you read the build guide for your platform and made sure you have all the dependencies installed _properly_? Also be sure to check the current known build problems section and be sure the problem affecting you is currently not listed.
If, after following the guide, nothing seems to work, ask the mailing list as a last resort.
How can I get involved?
You can point yourself over to the development page and first read it carefully, second read it again, and finally read it one more time. You should be able to figure out what to do by then.
What can I do to help contribute to GNU Radio?
There are currently some outstanding tasks that need to be accomplished as well as an endless supply of bugs that need to be fixed. Please feel free to enhance GNU Radio, but make sure you read the development page first before we can accept nontrivial contributions.
Who is part of GNU Radio?
GNU Radio is maintained by Eric Blossom, with regular contributions by Johnathan Corgan, Matt Ettus and others.
For a more complete list of contributors, please visit the AUTHORS file in the subversion repository.
Why did GNU Radio get started?
While GNU has been extremely successful in creating free software suites for exploration and hacking by the everyday user, there is still a large void when it comes to hardware hacking especially within the radio frequency spectrum. GNU Radio helps fill this void by supplying a suite of signal processing software blocks along with some tangible hardware to the general public at a modest price (free software, reasonably priced hardware).
Where can I ask other questions about GNU Radio not answered here?
You should feel free to join out mailing lists and actively participate or just read the different threads.
Build or Runtime Issues
If you have already tried looking at the BuildGuide page, and still seem to have build or runtime issues.
I get an error when importing from Python: _gnuradio_swig_py_runtime.so: undefined symbol: ... what do I do?
It looks like /usr/local/lib isn't in the library search path. If you're running on some versions of Linux, you'll need to update the ld.so cache after installing GNU Radio:
$ cat /etc/ld.so.conf
If /usr/local/lib isn't in this file, then do the following 3 commands; otherwise, go to the end and run that command:
$ cp /etc/ld.so.conf /tmp/ld.so.conf $ echo /usr/local/lib >> /tmp/ld.so.conf $ sudo mv /tmp/ld.so.conf /etc/ld.so.conf
... then finally:
$ sudo ldconfig
Now try running those GNU Radio scripts again.
GNU Radio Processing Blocks
Everything dealing with the creation, implementation and usage of the GNU Radio core signal processing blocks.
What are the building blocks of GNU Radio at my disposal?
GNU Radio uses doxygen to help document all the different modules as well as the API for the core processing blocks.
Do you support BPSK/D-BPSK/QPSK/M-QAM/OFDM/etc.
Sure here are some examples. The information can be found here. If it hasn't been implemented, try it yourself! You'll be surprised what you'll learn.
Why bother with Python? I just want to code in C++!
It is currently being worked on (#128). There are a few different things that have to happen to support such a feat (#118), but if you want to see it done quicker feel free to help out.
Isn't Python slow? My application requires blazing speed.
Python is only used to setup the flow graph. Once setup, most of the work is done in C++.
How do I write a block?
Eric Blossom has put together a very nice tutorial on how to write a block for GNU Radio. Enjoy!
Universal Software Radio Peripheral (USRP)
Questions specific to the USRP and daughterboards, their functionality, and role within GNU Radio.
What is the Universal Software Radio Peripheral?
The [trac:USRP Universal Software Radio Peripheral (USRP)] is a general purpose motherboard which hosts a wide range of daughterboards which can be used with the signal processing blocks found in the GNU Radio software package to give access to the radio frequency spectrum.
The USRP hosts dual Analog Devices AD9862 mixed signal analog front end devices connected to an Altera Cyclone EP1C12 FPGA where most of the initial downconversion is done within the RX chain.
Can multiple USRPs be installed on one single host?
Yes. This is done using the which parameter in the usrp.source_c() and usrp.sink_c() method as shown below:
src1 = usrp.source_c( which=0 ) src2 = usrp.source_c( which=1 )
Now which USRP gets assigned #0 and #1 is dependent on the order they enumerate on the USB, first by bus, then by device. This may be affected by which one is plugged in first or turned on first.
It's possible, when writing your own code, to retrieve the serial number from the source_c object and use that to determine which actual hardware unit you've grabbed.
The other caveat is that most motherboards share a single USB controller for all their ports. So you're sharing the same 32 MB/s bandwidth across two USRPs now, effectively halving the maximum RF bandwidth you can work with if both USRPs are using the USB equally.
How can I record data from different daughterboards on the same USRP?
You'll need to write a small bit of code. The RX side of a USRP can only be opened once. Thus, you need a single program that reads input from both daughterboards at the same time.
Take a look at multi_file.py. It handles 4 simultaneous inputs.
Lastly, when using 2 inputs, there's no need to load special FPGA firmware. The standard file works fine.
What is inband signaling and how can I use it?
Inband signaling is receiving and transmitting control, status and data packets to a USRP to perform specific actions at specific times. This will allow for tight tolerances for TDMA style Media Access Controllers (MACs).
Can I run 802.11a/b/g/n/? with a USRP?
Some code has been released which can send and receive 802.11b at 1 mbps. However, USB 2.0 is too slow to support two way 802.11 interactions. A new version of the USRP is under development which will have a faster interface which may be 802.11 capable.
Currently, no simply due to the latencies required do not allow for round trip processing of packets over the USB 2.0 interface on the USRP. This might get quicker with the inclusion of inband signaling in an upcoming release, but the round trip delay plus processing time probably won't work too well.
What frequency ranges are covered that I can use with the USRP?
Daughterboards are available which cover ranges from DC to 5.9 GHz.
Can I transmit and receive from the same USRP?
Yes, but there are some caveats that you must take into consideration. First, if using a cabled setup, be sure there is some attenuation between the transmitter and receiver. Second, realize that there is not much isolation on the board itself and signal can leak through even without an antenna.
How does the USRP decide where to allocate requested receive gain?
The current ADC chip (AD9862) on the main board can support 0-20 dB of gain, and various daughtercards can have different gain ranges of their own. Matt Ettus: "In general, we put as much gain as close to the antenna as possible. So the ADC gain is only added in if you request a very high gain. Each daughterboard is different, so check the files in gr-usrp/src/db_*.py for the exact system we use."
Can I stream digital data to or from the I/O pins on the USRP?
Yes, check out http://gnuradio.org/trac/wiki/CompGrGpio.
Comprehensive USRP FAQ can be found at USRP-FAQ page.
