Entering the World of GNU Software Radio
Thanh Le and Lanchao Liu
Outline
• Introduction
• Hardware
• Software
• GNU Companion
• Communication Demos
PART I - Introduction
Software Defined Radio
RF/IF conversion circuit FPGA User App
http://www.da.isy.liu.se/research/bp/
USRP: Universal Radio Peripheral
The hardware solution for GNU SDR
USRP
USRP2
PART II – Hardware
Universal Software Radio
Peripheral (USRP)
• 4 ADC 64MS/s (12-bit)
• 4 DAC 128MS/s (14-bit)
• USB 2.0 interface¹
• Small FPGA²
• MIMO capable
$700
1. Highest speed 480Mb/s
2. Capable of processing signals up to 16 MHz wide
Universal Software Radio
Peripheral (USRP2) ¹
• 2 ADC 100MS/s (14-bit)
• 2 DAC 400MS/s (16-bit)
• Gigabit Ethernet Interface
• Larger FPGA²
• On-board SRAM
• MIMO capable
$1400
1. 2 Gbps high-speed serial interface for expansion
2. Capable of processing signals up to 100 MHz wide
Available daughter-boards
Basic TX/RX: 1MHz – 250MHz
LFTX/LFRX: DC – 30MHz
TVRX: 50MHz-860Mhz
DBSRX: 800MHz – 2.4GHz
WBX0510: 50MHz – 1GHz(20dBm)
XCVR2450: 2.4GHz – 2.5GHz & 4.9GHz -5.9GHz(20dBm)
RFX400: 400MHz – 500MHz (20dBm)
RFX900: 750MHz – 1050MHz(23dBm)
RFX1200: 1150MHz – 1450MHz(23dBm)
RFX1800: 1.5GHz – 2.1GHz(20dBm)
RFX2400: 2.3GHz – 2.9GHz(17dBm)
• Software Defined Radio Block Diagram
• RF Front End
Mixer
Low Noise Low Pass Low Pass
ADC
Amplifier Filter Filter
Antenna
Local
Oscillator
• FPGA – MUX
• FPGA – DDC
• Example 2-1: Simple transmission
A simple sinusoidal wave is transmitted. We
can view it at the receiver in spectrum domain.
PART III – Software
• GNU radio
― GNU radio is an open source, Python-based architecture
for building SDR projects
― C++ written signal processing blocks and python written
connectors
― Available on Linux, Mac OS and Windows
APP1 APP2 Python
Signal
Generator
FFT Filter Modulation C++
• A thumb of rule
For any application, what you need to do at
Python level is nothing but drawing a diagram to
show the signal flow form the source to the sink
using the Python, sometimes with the graphical
user interface(GUI) support
• GNU Radio Installation
Step-by-step instruction available on
https://wiki.gnuradio.org/index.php/InstallingGR
⮚ Install the pre-requisites
⮚ Get the GNU Radio source code
⮚ Configure, compile and install GNU Radio
All the following demos are built in: Ubuntu-10.10 + gnuradio-3.32
Example 3-1:
FFT
Src0
(440Hz) Adder
Oscilloscope
Src1
(640Hz)
Data Type
• Signal blocks communicate with each other via data
stream
• GNU Radio requires that input and output data types
match exactly
Byte – 1 byte of data(8-bit) Short – 2 bytes integer
Int – 4 bytes integer Float – 4 bytes floating integer
Complex – 8 bytes(a pair of floats)
• Tips: the name of the signal block indicates the
input/output data type
⮚ _f : input/output a float
⮚_fc: input a float and output a complex
⮚_vff: input and output a vector of floats
⮚_b: input/output a byte
⮚_i: input/output a integer
⮚_s: input/output for short
• USRP Source/Sink
⮚ Initialize variable represents the signal block
u = usrp2.source_32fc(options.interface, options.mac_addr)
u = usrp2.sink_32fc(options.interface, options.mac_addr)
⮚ For the USRP source: self.connect(u, other_block)
For the USRP sink: self.connect(other_block,u)
Receive: USRP Source Transmit: USRP Sink
Create the USRP source
Set the decimation /Interpolation rate
Set the gain
Set the center frequency
Connect to another block
Some useful blocks
FFT Vector
Sinusoidal Noise
File Audio
Null Vector
USRPn
File Audio
USRPn
Sink
Type
Source Conversion
Adding a constant Low pass/High
Adder Subtracter pass/Band
Multiplying a constant pass/Hilbert/Rais
Multiplier Divier Log ed Cosine
Simple operators
Filters
• Example 3-2: Codes reading - FM Receiver
Explain the codes for FM receiver line by line.
• Useful tools
‘Spectrum analyzer’: usrp2_fft.py
‘Signal generator’: usrp2_siggen_gui.py & usrp2_siggen.py
‘Recorder’: usrp2_rx_cfile.py
Offline analyzer: gr_plot_fft.py & gr_plot_psd.py
Example 3-3 : ‘Spectrum analyzer’
Example 3-4 : ‘Signal generator’
Example 3-5 : ‘Recorder’
PART IV GRC
• GNU Radio Companion
A graphical tool that Create signal flow graphs
& Generate flow-graph source code
Adding proper blocks to the diagram and setting it parameters
Connect proper blocks with each other, saving the file. Generating
the flow graph, the system will save your design with a .grc file.
Executing the flow graph and receive the signal by using USRP2
receiver that we designed before.
• Example 4-1: View signal in time/spectrum
domain
• Example 4-2: View the constellation diagram
of a signal
PART IV Communication Demos
• FM Transmitter
gr.wavefile_source() gr.multiply_const_cc()
Usrp2.sink_32fc() gr.multiply_const_cc()
• AM transmitter
Source Gr.interp_fir_filter_fff() gr.multiply_const_ff
Usrp2.sink_32fc am_mod=gr.float_to_complex()
• Benchmark_tx.py
source usrp_transmit_path USRP
self.packet_transmitter Self.amp
Modulator
• Benchmark_rx.py
source usrp_receive_path file
Low_pass_filter Self.packet_reveiver
source
• Connection
• Spectrum sensing
source window fft
threshold log10 c2mag
• Reference
http://www.snowymtn.ca/gnuradio/gnuradiodoc-1.pdf
(Totally ten parts, just change the number to get it)
http://gnuradio.org/redmine/projects/gnuradio/wiki
Thanks to Ruolin Zhou @ Wright State University
Questions/Comments