Documentos de Académico
Documentos de Profesional
Documentos de Cultura
USPR
USPR
CAPTULO 2
El objetivo de este captulo es describir el funcionamiento del programa GNU Radio el
cual es necesario para la transmisin y recepcin con el USRP, trataremos
primeramente con la instalacin del programa y su relacin con el USRP, luego
analizaremos al USRP que incluye convertidores, un procesador y la interfase as como
las tarjetas secundarias. Por ultimo se dar una introduccin a la programacin en GNU
Radio.
2. GNU Radio
GNU Radio es un conjunto de archivos y aplicaciones que proveen las libreras
necesarias de procesado digital de seales para poder manipular seales de radio. GNU
Radio corre sobre sistemas GNU\Linux como Ubuntu, el cual debe estar previamente
instalado
17
UDLA
sirven como fuente de datos y seales en una grfica. Existen fuentes que leen datos de
un archivo o del ADC, y seales que escriben datos a un archivo, al DAC o a un display
grfico. GNU Radio cuenta con aproximadamente 100 de estos bloques.
18
UDLA
2.1.
Instalacin
La instalacin de GNU Radio fue quizs el proceso ms exhaustivo de sta Tesis, pero
la siguiente gua contiene toda la informacin necesaria para obtener una instalacin
satisfactoria en Ubuntu.
Lo primero que hay que hacer es ubicar los paquetes (2.x tarball o CVS) de
GNU Radio los cuales los podemos encontrar en www.gnu.org/software/gnuradio (2.x
tarball) o utilizando CVS (Concurrent Versions System), lo cual se realizar ms
adelante, estos paquetes son los siguientes:
gr-audio-oss: soporte para tarjetas de sonido que utilizan OSS (Open Sound
System).
gr-usrp: libreras que unen a GNU Radio con el Universal Software Radio
Peripheral.
Ahora antes de instalar gnuradio-core es necesario tener algunos paquetes preinstalados, estos paquetes son los siguientes:
19
UDLA
20
UDLA
que stos tambin requieren algunos programas preinstalados, lo que vuelve al proceso
bastante confuso. Para aportar claridad al proceso contamos con la ayuda del Synaptic
Package Manager de Ubuntu (otra razn ms del porqu Ubuntu), el cual lo
encontramos en:
SystemAdministrationSynaptic Package Manager
automake1.8
gcc-3.4
g++-3.4
Despus de instalar gcc y g++ debemos crear una liga simblica con los
python2.4
python2.4-dev
libtool (1.5)
wxpython2.5.3
21
UDLA
python2.3-numeric
libusb-dev
sdcc
bjam
libboost-dev
libboost-python1.31.0
libboost-python-dev
fftw3
fftw3-dev
cppunit
libcppunit-dev
libcppunit-1.10-2
Las nicas libreras que no se encuentran en los repositorios son las de SWIG
por lo que es necesario instalarlo manualmente, para esto hay que descargarlo de
http://sourceforge.net/projects/swig/ donde podemos obtener la versin SWIG 1.3.24
la cual ya fue probada en este trabajo.
22
UDLA
Con esto obtendremos una carpeta con los archivos necesarios de SWIG; en la
misma terminal nos movemos a esta nueva carpeta y para realizar la instalacin es
necesario ahora ejecutar los siguientes comandos esperando a que cada uno termine de
ejecutarse antes de correr el siguiente:
# ./configure
# make
# make check
# make install
Ahora para obtener los paquetes de GNU Radio utilizaremos CVS que es una
forma de descargar los paquetes en su ultima versin sin necesidad de hacerlo desde una
pgina de Internet. Para esto debemos ejecutar los siguientes comandos en una
Terminal:
# export CVS_RSH="ssh"
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-build
23
UDLA
necesarios para instalar los paquetes de GNU Radio como se muestra en la Figura 2.1:
Figura 2.1. Carpeta gr-build con los archivos necesarios para instalar GNU
Radio
Ahora debemos descargar los paquetes en esta carpeta que se cre, para esto nos
movemos a esa carpeta y tecleamos lo siguiente en la lnea de comandos de la Terminal:
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gnuradio-core
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P
gnuradio-
examples
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-audio-alsa
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-audio-oss
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-usrp
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-wxgui
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-howtowrite-a-block
# cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/gnuradio co -P gr-gsm-frvocoder
24
UDLA
25
UDLA
26
UDLA
return fg
if __name__ == '__main__':
fg = build_graph ()
fg.start ()
raw_input ('Press Enter to quit: ')
fg.stop ()
27
UDLA
2.2.
Pre-requisitos
Tiempo de conversin
Sample Rate o Tasa de Muestreo es el nmero de veces por segundo que el ADC
28
UDLA
2.3.
Tarjeta USRP
2.3.1. Qu es el USRP?
El Universal Software Radio Peripheral es un perifrico diseado para trabajar en
conjunto con una computadora a travs de un FPGA y permite la realizacin de
Software Radios. Este perifrico realiza las funciones de llevar la seal a banda base de
RF a travs de la seccin de IF, y viceversa, para un sistema comn de radio
comunicaciones, como se muestra en la Figura 2.4.
Antena
RF
FrontEnd
Analog
IF
A/D
Conversin.
Procesamiento
(Software)
D/A
Conversin.
29
UDLA
2.3.2. Caractersticas
El USRP cuenta con 2 niveles de tarjetas como se muestra en la Figura 2.5. El primero
es la tarjeta base en donde se encuentra el FPGA, los convertidores ADCs y DACs, la
alimentacin y la conexin va USB. El segundo nivel se compone de Daughterboards
llamadas tarjetas secundarias. stas existen para transmisin y recepcin. Estas tarjetas
son las que trabajan como RF front-end las cuales llevan nuestra seal hasta la banda de
RF deseada.
Nivel 1
USRP
Motherboard o
Tarjeta Primaria
Nivel 2
USRP
Daughterboards
o Tarjetas
Secundarias
30
UDLA
Figura 2.6 Diagrama a bloques del Universal Software Radio Peripheral [5]
2.3.2.1
Convertidores AD
El USRP tiene 4 convertidores ADC de alta velocidad, cada uno a 12 bits por muestreo,
y 64 millones de muestras por segundo con lo que podemos digitalizar una banda de
32MHz. Si muestreamos una seal a una IF (Intermediate Frecuency) de 32MHz
introducimos el efecto de imagen al sistema con lo que la banda de inters se mapea a
algn lugar entre -32 y 32MHz.
El rango completo del ADC es de 2V pico a pico y tiene una entrada diferencial
de 50, lo que significa 16dBm o 40mW. Existe un amplificador de potencia
programable (PGA) antes del ADC para amplificar la seal de entrada y utilizar el
rango completo en el caso que la seal sea dbil.
31
UDLA
El USRP tiene 4 convertidores DAC de alta velocidad para transmisin, cada uno a 14
bits por muestreo y 128 millones de muestras por segundo, por lo que la frecuencia de
Nyquist es de 64MHz.
Los DACs pueden suministrar 1V pico a pico a una carga diferencial de 50
esto es 10dBm o 10mW. Contamos tambin con un PGA conectado despus del DAC
para aumentar la ganancia a 20dB o ms.
Los PGA utilizados para transmisin y recepcin son programables.
Procesador e Interfases
El procesador utilizado por el USRP es un FPGA Altera Cyclone EP1C12 (Apndice
D). Comprender el funcionamiento del FPGA es parte importante para utilizar GNU
Radio. Los ADC y DACs estn conectados al FPGA, la tarea de ste es realizar
procesos matemticos de las seales en la banda que necesitamos, y reducir las tasas de
muestreo de datos para enviar datos a travs de una interfase USB 2.0. EL FPGA se
conecta a un chip de interfase USB 2.0, este chip es el Ciprs FX2. La configuracin
estndar del FPGA incluye 4 convertidores digitales de bajada (DDC), esto permite 1, 2
o 4 canales independientes de recepcin, cada DDC tiene dos entradas I (en fase) y Q
(en cuadratura). Cada ADC puede ser ruteado a cualquiera de las entradas I y Q de los 4
DDC.
Para la transmisin tenemos convertidores digitales de subida (DUC) contenidos
fuera del FPGA en el chip AD9862 CODEC (Apndice I).
32
UDLA
transmisin de datos (data rate), lo mismo para los canales de transmisin que deben
tener el mismo data rate el cual debe ser distinto del de la recepcin.
33
UDLA
Cuando tenemos mltiples canales (ms de cuatro), los canales son entrelazados.
Por ejemplo, con cuatro canales, la secuencia enviada a travs del USB ser I0 Q0 I1 Q1
I2 Q2 I3 Q3 I0 Q0 I1 Q1, etc.
2.3.2.2
de RF e IF).
34
UDLA
sus dos correspondientes para recepcin etiquetadas tambin RXA y RXB. Cada ranura
para tarjeta tiene acceso a 2 de los 4 convertidores de datos de alta velocidad (Salidas de
DACs para TX y entras de ADC para RX).
Esto permite a cada tarjeta tener dos secciones independientes de RF y dos
antenas (4 para todo el sistema). Si utilizamos un muestreo en cuadratura (IQ) de la
seal analgica, cada tarjeta puede soportar una sola seccin de RF, para un total de dos
para el sistema completo.
La entrada analgica del ADC tiene un ancho de banda por arriba de los
200MHz por lo que para frecuencias intermedias por arriba de este valor, la frecuencia
debe ser seleccionada [5].
Podemos ver en la Figura 2.9 que cada tarjeta secundaria cuenta con dos
conectores de tipo SMA, los cuales se utilizan para conectar seales de entrada o salida,
as como para acoplar una antena.
35
UDLA
Otras daughterboards estn siendo desarrolladas por Ettus Research LLC [5],
especialmente para transmisin. Y estarn a la venta prximamente.
2.3.2.3
Conexin Mecnica
El USRP incluye un equipo completo de pilares, pernos y tuercas para realizar
una conexin mecnica adecuada. Tenemos 20 pilares (standoffs) M3x10mm M-F, de
los cuales 4 son utilizados como patas para el USRP, ubicados en las cuatro esquinas
de la tarjeta, los 16 pernos restantes, los pernos y las tuercas son utilizados para sostener
36
UDLA
las cuatro tarjetas secundarias. En las Figuras 2.10 y 2.11 se muestra la conexin
mecnica de los pilares, pernos y tuercas en el USRP:
Pilares
Pernos
Tuercas
37
UDLA
Conexin Elctrica
El USRP necesita un convertidor de 6V 4A el cual viene includo en el paquete al
momento de la compra. El convertidor funciona con voltajes de corriente alterna de 90 a
260V, y opera a 50/60Hz, por lo que funciona en cualquier pas. El conector que va al
USRP es de 2.1mm/5.5mm DC power conector. El USRP por s solo necesita de 5V y
2A, pero se seleccion una alimentacin de 6V para utilizar a futuro otras tarjetas
secundarias.
El paquete tambin incluye el cable USB el cual debe ser conectado a una ranura
de computadora capaz de soportar USB 2.0, por lo que en ranuras USB 1.1 el USRP no
funciona.
Al conectar el USRP, debemos ver un LED destellando de 3 a 4 veces por
segundo, esto indica que el procesador est corriendo, y el dispositivo se encuentra en
modo de ahorro de energa. Una vez que el soporte lgico es cargado al FPGA, el LED
destellar a una velocidad menor. En caso de que el LED no muestre ninguna seal, es
necesario revisar las conexiones elctricas, y revisar si hay continuidad en el fusible
principal F501, el cual se encuentra cercano al conector de energa como se muestra en
la Figura 2.12. Si este fusible requiere ser reemplazado las especificaciones son:
Tamao 0603
Corriente 3A
38
UDLA
39
UDLA
Como la instalacin de GNU Radio fue hecha directamente desde CVS, hay un
archivo (usrp.fpga.rbf) que debemos extraer del paquete usrp-*.*.tar.gz por lo que
podemos seguir el siguiente procedimiento de comandos:
# mkdir tmp
# cd tmp (descargar el archive comprimido a esta carpeta)
# tar xvvfz usrp-*.*.tar.gz
# cp usrp-*.*/fpga/rbf/usrp_fpga_rev2.rbf /usr/local/share/usrp/rev2/usrp_fpga.rbf
# cd ..
# rm -rf tmp
En
una
Terminal
nos
movemos
al
directorio
de
gr-build/gnuradio-
40
UDLA
2.4.
41
UDLA
conocer su funcionamiento:
#!/usr/bin/env python
#
# Copyright 2004 Free Software Foundation, Inc.
# This file is part of GNU Radio
#
# GNU Radio is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# GNU Radio is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Radio; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
from gnuradio import gr
from gnuradio import audio
def build_graph ():
sampling_freq = 32000
ampl = 0.1
fg = gr.flow_graph ()
src0 = gr.sig_source_f (sampling_freq, gr.GR_SIN_WAVE, 350, ampl)
src1 = gr.sig_source_f (sampling_freq, gr.GR_SIN_WAVE, 440, ampl)
dst = audio.sink (sampling_freq)
fg.connect (src0, (dst, 0))
fg.connect (src1, (dst, 1))
return fg
if __name__ == '__main__':
fg = build_graph ()
fg.start ()
raw_input ('Press Enter to quit: ')
fg.stop ()
Las primeras lneas, que inician con #, son nicamente comentarios y no afectan
la lgica del programa. Es necesario, para comprender las siguientes lneas, hablar sobre
los Mdulos y Paquetes.
42
UDLA
un programa con alguna funcin especfica la cual est disponible como una variable
global __name__, esta funcin puede ser importada dentro de otro modulo en
cualquier nivel. Un Paquete es un conjunto de mdulos que realizan funciones
similares. Para que Python maneje estas carpetas como paquetes es necesaria la funcin
__init__.py, un paquete puede contener mdulos y sub-paquetes. La estructura dentro
del programa para mdulos y paquetes es del tipo x.y donde y es un mdulo contenido
en el paquete x, por lo que si en el programa tenemos gr.sig_source_f significa que el
mdulo sig_source_f.py se encuentra en el paquete gr. Estos paquetes y mdulos se
encuentran en: /usr/local/lib/python2.4/site-packages. Al inicio del programa, luego
de los comentarios, importamos los siguientes mdulos:
from gnuradio import gr
from gnuradio import audio
43
UDLA
Ahora definimos una funcin sin argumentos para construir una grfica, de la
siguiente forma:
def build_graph ():
La funcin que acabamos de definir funcionar como una variable global dentro
del mdulo dial_tone.py, ahora dentro de esta definimos dos constantes:
def build_graph ():
sampling_freq = 32000
ampl = 0.1
La siguiente parte del programa consiste en crear el grafo para generar las
seales:
fg = gr.flow_graph ()
Como recordamos, un grafo esta compuesto por vrtices y bordes que conectan a stos, stos dos
elementos estn definidos como clase endpoint y clase edge en el mdulo basic_flow_graph.py
importado en un inicio del paquete gr.
44
UDLA
Con esto creamos la conexin lgica del grafo uniendo los puertos de entrada
y salida (src-fuente y dst-destino). Ahora la funcin global build_graph() regresa el
flujo a travs del grafo creado en fg.
45
UDLA
La ltima parte del programa consiste en hacer correr el flujo de datos a travs
del grafo con las siguientes lneas:
if __name__ == '__main__':
fg = build_graph ()
fg.start ()
raw_input ('Press Enter to quit: ')
fg.stop ()
Este archivo fue corrido para verificar la correcta instalacin de GNU Radio
pero en ese momento no conocamos el cdigo, por lo que es importante correrlo de
nueva cuenta y variar algunos parmetros, para observar el poder que tenemos sobre
ste gracias a que esta implementado por Software.
46
UDLA
Figura 2.15 Mensaje de respuesta al soportar 48k muestras por segundo y no 32k
47
UDLA
Figura 2.16 Ventana que muestra una corrida correcta del programa dial_tone.py
48