Está en la página 1de 32

UDLA

Desarrollo de Software Radio


TX/RX de FM

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

El programador de GNU Radio necesita, para construir un sistema de radio,


crear un grafo, donde los vrtices son bloques de procesado de seales, y los bordes
representan el flujo de datos entre ellos. Los bloques de procesado de seal son
implementados en C++. Conceptualmente un bloque procesa seales continuamente
desde puertos de entrada hasta puertos de salida. Las partes de un bloque son el nmero
de puerto de entrada, el nmero del puerto de salida, y el tipo de dato que fluir de uno
al otro. Los tipos de datos ms comnmente utilizados son: short, float y
complex.

17

UDLA

Desarrollo de Software Radio


TX/RX de FM
Algunos bloques tienen nicamente puertos de salida o puertos de entrada. stos

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.

Las grficas para GNU Radio corren y son construdas en Python[25].

Python es un lenguaje de programacin interpretado, interactivo y orientado a


objetos, es habitualmente comparado a TCL, Perl, Scheme, Java y Ruby.

Actualmente, Python se desarrolla como un proyecto de cdigo abierto,


administrado por la Python Software Foundation. Contiene mdulos, clases, tipos de
datos de alto nivel y escritura dinmica. Tiene interfaces para diversos sistemas y
libreras. Tambin puede utilizarse como un lenguaje de extensin para aplicaciones que
necesitan una interfaz programable. Otra ventaja es su portabilidad, funcionando en
sistemas Unix y derivados, Windows, Dos, Mac y otros.

Hay factores que distinguen a Python de otros lenguajes de programacin


orientados a objetos:
1) No hay necesidad de compilar cdigo en Python antes de ejecutarlo, por lo
que se convierte en un lenguaje de script.
2) El lenguaje busca tener un cdigo ms fcil de utilizar (y con reutilizable para
otras aplicaciones).

18

UDLA

Desarrollo de Software Radio


TX/RX de FM

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:

gnuradio-core: el ncleo de las libreras.

gnuradio-examples: ejemplos de GNU Radio, donde encontraremos los


programas para TX y RX de FM.

gr-audio-oss: soporte para tarjetas de sonido que utilizan OSS (Open Sound
System).

gr-audio-alsa: soporte para tarjetas de sonido que utilizan ALSA (Advanced


Linux Sound Architecture).

gr-usrp: libreras que unen a GNU Radio con el Universal Software Radio
Peripheral.

gr-wxgui: wxPython basado en herramientas GNU, incluye un oscilocopio y


FFTs.

gr-howto-write-a-block: incluye ejemplos de como escribir un bloque.

usrp: soporte para la tarjeta USRP.

Ahora antes de instalar gnuradio-core es necesario tener algunos paquetes preinstalados, estos paquetes son los siguientes:

19

UDLA

Desarrollo de Software Radio


TX/RX de FM

FFTW (Fastest Fourier Transform in the West): sta es una subrutina en C


que es capaz de computar transformadas discretas de Fourier en una o ms dimensiones,
el tamao de la entrada es arbitrario y maneja datos complejos y reales. FFTW es
software libre por lo que se convierte en una librera de FFT para cualquier aplicacin.
Lo podemos obtener de: http://www.fftw.org/download.html

Cppunit: Es una unidad de prueba para checar bloques en C++.


Lo podemos obtener de:
https://sourceforge.net/project/showfiles.php?group_id=11795

SWIG (Simplified Wrapper and Interface Generator): Son herramientas para


el desarrollo de software que conectan programas escritos en C o C++ con una gran
variedad de lenguajes de programacin de alto nivel. SWIG es utilizado con diferentes
tipo se lenguaje como Python.
Lo podemos obtener de: http://sourceforge.net/projects/swig/

Numarray y Numpy: Son dos mdulos de Python necesarios para el


funcionamiento de GNU Radio. stos son utilizados para computo numrico y los
podemos encontrar disponibles en: http://sourceforge.net/projects/numpy

wxPython: Son herramientas para el lenguaje de programacin Python, y


permite crear programas con funciones e interfaces grficas de forma simple. sta
implementado como un mdulo de Python. Lo podemos obtener de:
https://sourceforge.net/project/showfiles.php?group_id=10718

20

UDLA

Desarrollo de Software Radio


TX/RX de FM
La instalacin de los programa antes mencionados es ciertamente complicada ya

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

Al haber dado de alta, en un principio, los repositorios donde se encuentran las


libreras necesarias, ahora simplemente hay que instalarlas; para esto es necesario
buscar la librera requerida con el botn de search, seleccionarla para instalacin y
aplicar la instalacin con el botn apply.

Las libreras que debemos buscar e instalar son las siguientes:

automake1.8

gcc-3.4

g++-3.4
Despus de instalar gcc y g++ debemos crear una liga simblica con los

siguientes comandos ejecutados en una Terminal:


# cd /usr/bin
# sudo ln -s gcc-3.4 gcc
# sudo ln -s g++-3.4 g++

python2.4

python2.4-dev

libtool (1.5)

wxpython2.5.3

21

UDLA

Desarrollo de Software Radio


TX/RX de FM
En caso de no ser encontrado wxpython por el Synaptic Package Manager es

necesario ejecutar en una Terminal los siguientes comandos:


# apt-get update
# apt-get install wxpython2.5.3

python2.3-numeric

libasound2 para ALSA

libasound2-dev para ALSA

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

Desarrollo de Software Radio


TX/RX de FM
El archivo descargado se encuentra en formato comprimido swig-*.tar.gz por lo

que es necesario descomprimirlo, para esto es necesario utilizar una Terminal y


movernos al directorio donde se encuentra el archivo comprimido.
En la Terminal y ya en ese directorio debemos escribir el siguiente comando:

# tar zxvf swig-1.3.24.tar.gz

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

Desarrollo de Software Radio


TX/RX de FM
Con estos comandos creamos una carpeta llamada gr-build con los archivos

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

Desarrollo de Software Radio


TX/RX de FM

# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/opensdr login


# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/opensdr co -P usrp
Ahora nuestra carpeta de gr-build se debe ver como en la Figura 2.2.

Figura 2.2. Carpeta gr-build luego de descargar los archivos de CVS

Para realizar la instalacin final hacemos lo siguiente en la Terminal en el


directorio de gr-build:
# ./checkout
# ./for-all-dirs ../buildit 2>&1 | tee make.log

El proceso debe durar algunos minutos y de acuerdo a lo hecho anteriormente no


debe haber ningn error, en caso de existir alguno el sistema nos avisara si hace falta
algn archivo o librera, de no ser as es necesario revisar el proceso nuevamente.

25

UDLA

Desarrollo de Software Radio


TX/RX de FM
Ahora debemos obtener las actualizaciones para el USRP, lo nico que debemos

hacer es descarga este archivo de www.gnu.org/software/gnuradio, descomprimirlo


como lo hicimos con SWIG:
# tar zxvf usrp*.tar.gz
Y copiar los archivos que no se encuentren en nuestra carpeta de usrp en grbuild. Ahora para comprobar que todo el proceso se realiz correctamente correremos
un programa de ejemplo que simula el tono que da una lnea telefnica, para esto, desde
una Terminal nos ubicamos en la carpeta gr-build y hacemos lo siguiente:
# killall esd (es necesario cada vez que iniciamos el sistema operativo, elimina el
proceso de audio con el que cuenta la computadora.)
# cd gnuradio-examples/pitn/audio/
#./dial_tone.py
Si escuchamos un tono como el mencionado anteriormente significa que el
ejemplo funciona, y que nuestro GNU Radio est instalado correctamente. En caso de
no encontrar el archivo dial_tone.py lo podemos crear a travs de los siguientes pasos:
Abrimos un Editor de Texto y copiamos el siguiente programa:
#!/usr/bin/env python
from gnuradio import gr
from gnuradio import audio
def build_graph ():
sampling_freq = 48000
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, 0), (dst, 0))
fg.connect ((src1, 0), (dst, 1))

26

UDLA

Desarrollo de Software Radio


TX/RX de FM

return fg
if __name__ == '__main__':
fg = build_graph ()
fg.start ()
raw_input ('Press Enter to quit: ')
fg.stop ()

Ahora guardamos este archivo en /gr-buid/gnuradio-examples/python/audio/ con


el nombre de dial_tone.py
Para poder ejecutarlo desde una Terminal es necesario pulsar el botn derecho
del mouse sobre el cono del archivo creado y en la pestaa de Permissions debemos
dejar las opciones como se muestra en la Figura 2.3.

Figura 2.3 Propiedades del programa hello_world.py


Con esto ya podemos volver a correr el ejemplo como se mostr anteriormente.

27

UDLA

Desarrollo de Software Radio


TX/RX de FM

2.2.

Pre-requisitos

La seccin de prerrequisitos tiene la funcin de informar al lector sobre algunos tpicos


que deben ser conocidos para poder continuar con el proceso de esta Tesis.
ADCs: Un convertidor analgico a digital tiene tres caractersticas primarias:

Sample Rate (Tasa de Muestreo)

Dynamic Range (Rango Dinmico)

Tiempo de conversin
Sample Rate o Tasa de Muestreo es el nmero de veces por segundo que el ADC

mide una seal analgica.


Dynamic Range o Rango Dinmico se refiere a la diferencia entre la seal ms
pequea y la ms grande que puede ser distinguida por el ADC, esta en funcin del
nmero de bits de salida del ADC.
Tiempo de conversin: Existe un tiempo de conversin Tc que necesita el ADC
para sacar un nmero digital a partir de recibir un dato analgico con el fin de que al
existir una variacin en la entrada no surja una confusin en la conversin.
Teora de Nyquist: La teora de Nyquist determina que para evitar el efecto de
aliasing cuando convertimos de analgico a digital, la frecuencia de muestreo del
ADC debe ser de al menos dos veces el ancho de banda de la banda de inters.
Frecuencia de inters 0 a fmax
Frecuencia de muestreo 2 fmax

28

UDLA

Desarrollo de Software Radio


TX/RX de FM
RF front end: Un RF front end se encarga de trasladar el centro de un rango de

frecuencias a otro rango de frecuencias, por ejemplo: un mdem sintonizador de seales


de cable (RF front end) tiene las siguientes caractersticas, traslada una parte de 6MHz
del espectro centrada entre 50 y 800MHz hacia un rango de salida centrado en
5.75MHz. La frecuencia central del rango de salida se llama Frecuencia Intermedia o IF.
[14]

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.

Figura 2.4 Bloques principales en este sistema de comunicaciones de


Software Radio

En el Apndice H se muestra una hoja tcnica del USRP con algunas


caractersticas.

29

UDLA

Desarrollo de Software Radio


TX/RX de FM

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

Figura 2.5 Universal Software Radio Peripheral [5]

La Figura 2.6 muestra un diagrama a bloques del Universal Software Radio


Peripheral, donde podemos ver la disposicin de los convertidores, el procesador y la
interfase USB.

30

UDLA

Desarrollo de Software Radio


TX/RX de FM

Figura 2.6 Diagrama a bloques del Universal Software Radio Peripheral [5]

2.3.2.1

Primer nivel: convertidores, procesador e interfase.

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

Desarrollo de Software Radio


TX/RX de FM
Convertidores DA

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

Desarrollo de Software Radio


TX/RX de FM
Los canales mltiples para la recepcin deben todos tener la misma tasa de

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.

La figuras 2.7 muestra un diagrama a bloques de la trayectoria de recepcin


desde la antena hasta el DDC.

Figura 2.7 Multiplexor en el USRP, donde I es la seal en fase y Q la seal en


cuadratura. [17]

El multiplexor (MUX) en la Figura 2.7 es un circuito seleccionador, que determina cual


ADC es conectado a cada DDC. Podemos controlar este MUX utilizando el mtodo en
Python llamado usrp.set_mux().

Por ejemplo, si suponemos el diseo de un receptor de FM, el ancho de banda de


una estacin de FM es de 22kHz, podemos seleccionar un factor de decimacin de 250
con lo que la tasa de transmisin a travs del USB ser de 64MHz / 250 = 256kHz el
cual satisface los 200kHz de ancho de banda sin perder informacin.

33

UDLA

Desarrollo de Software Radio


TX/RX de FM
Es posible seleccionar la frecuencia IF del DDC utilizando el mtodo en Python

de usrp.set_rx_frec(), y para seleccionar el factor de decimacin utilizamos


usrp.set_decim_rate() el cual puede ir de 1 a 256.

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.

Finalmente las seales de I y Q entran a la computadora va USB y ahora todo es


cuestin de Software.
Para la transmisin todo sucede de forma similar, con la diferencia que el
proceso es contrario. Enviamos una seal I y Q en banda base de la computadora al
USRP. El convertidor digital de subida (DUC) interpola la seal convirtindola a una
frecuencia superior para la banda de IF y por ltimo la enva a travs del DAC.[5]

2.3.2.2
de RF e IF).

Segundo nivel: tarjetas secundarias (antena, seccin

Tarjetas Secundarias: estas tarjetas se muestran en la Figura 9 y realizan la


tarea de la antena, la seccin de RF y la seccin de IF en nuestro sistema de
comunicacin.
Se conectan al primer nivel que cuenta con 4 entradas, 2 para recepcin y 2 para
transmisin. Para recepcin se utiliza la Tarjeta Secundaria llamada Basic RX y para
transmisin la Basic TX.

34

UDLA

Desarrollo de Software Radio


TX/RX de FM
Existen 2 ranuras para tarjetas de transmisin etiquetadas como TXA y TXB y

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].

Figura 2.9 Imagen de las tarjetas secundarias Basic RX y Basic TX [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

Desarrollo de Software Radio


TX/RX de FM
Existen actualmente 3 tipos de tarjetas secundarias:

Basic daughterboards: son las ms sencillas, existen para transmisin y


recepcin, son utilizadas para conectar sintonizadores o generadores de seales.
El rango de frecuencia para estas tarjetas es de hasta 64MHz [5]. Se pueden
utilizar para transmisiones del tipo de AM en incluso FM con algunas limitantes.

TVRX daughterboards: son tarjetas nicamente para recepcin, el rango de


frecuencias va desde 50 a 800MHz, con un ancho de banda para IF de 6MHz,
son utilizadas para deteccin de seales de FM y TV.

DBSRX daughterboards: stas son tambin solo para recepcin, y su rango de


frecuencia de RF va desde 800MHz hasta 2.4GHz.

Otras daughterboards estn siendo desarrolladas por Ettus Research LLC [5],
especialmente para transmisin. Y estarn a la venta prximamente.

Para la realizacin de esta Tesis se cuenta con las Basic Daughterboards


nicamente.

2.3.2.3

Conexin mecnica y elctrica.

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

Desarrollo de Software Radio


TX/RX de FM

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

Figura 2.10 Pilares, Conexin Mecnica del USRP.

Pernos

Tuercas

Figura 2.11 Pernos y Tuercas, Conexin Mecnica del USRP.


La posicin en el USRP de los pilares est diseada para prevenir accidentes o
conexiones incorrectas de las tarjetas secundarias. El USRP no debe ser operado sin los
pilares y las tarjetas secundarias no deben ser conectadas o desconectadas mientras el
USRP est encendido.

37

UDLA

Desarrollo de Software Radio


TX/RX de FM

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

Desarrollo de Software Radio


TX/RX de FM

Figura 2.12 Fusible, Conexin elctrica del USRP.

2.3.3. Instalacin del USRP


La instalacin del USRP es bastante sencilla, es necesario haber instalado GNU Radio,
y hacer la conexin correcta de la tarjeta, por lo que solo necesitamos conectar el USRP
a la corriente y con el cable USB a la computadora. Ahora abrimos una Terminal y
corremos el siguiente comando:
# tail -f /var/log/messages
Con este comando podemos ver en la Terminal el estado de las conexiones USB
por lo que al conectar el USRP debemos observar un mensaje como el siguiente:
new high speed USB device using address 1
Ahora al desconectar el cable debemos obtener un mensaje correspondiente a
haber retirado el conector de la ranura. En caso de que al conectarlo obtengamos un
mensaje como el siguiente:
new full speed USB device using address 1

39

UDLA

Desarrollo de Software Radio


TX/RX de FM
Significa que nuestra ranura de USB no soporta la versin 2.0 de ste.

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

Con esto ya tenemos todos los archivos necesarios en el lugar adecuado y


podemos comenzar a correr programas utilizando el USRP y GNU Radio.

En

una

Terminal

nos

movemos

al

directorio

de

gr-build/gnuradio-

examples/python/usrp/ y ejecutamos el siguiente comando:


# ./usrp_oscope.py
(Recordemos que si es el primer programa que ejecutamos desde que iniciamos
la computadora, es necesari hacer # killall esd). Si todo ha sido instalado correctamente
debemos ver una ventana similar a un Osciloscopio, ahora cambiamos el botn de POS
a AUTO y debemos ver una figura como la 2.13:

40

UDLA

Desarrollo de Software Radio


TX/RX de FM

Figura 2.13 Osciloscopio de recepcin en GNU Radio.


Este programa que acabamos de ejecutar funciona como un osciloscopio y
podemos conectarle seales para analizarlas, como se hace con los equipos que tenemos
en el Laboratorio de Electrnica. Con esto dejamos las instalaciones atrs y tenemos al
sistema completo funcionando. Ahora lo que sigue es solo cuestin de Software.

2.4.

Grafos, Bloques y Conexiones

Para iniciarnos en la programacin de Software Radio con GNU Radio es necesario


conocer y saber como funcionan las estructuras de grafos, bloques y conexiones. Para
realizar esta tarea comenzaremos con un programa bsico en Python, ste programa es
dial_tone.py el cual se encuentra en la siguiente direccin gr-buidl\gnuradioexamples\python\audio.

ste programa generan dos seales senoidales de diferente frecuencia que


simulan el de tono de llamada en un telfono local y los enva a la tarjeta de sonido de
nuestra computadora por lo que el USRP no es necesario aqu.

41

UDLA

Desarrollo de Software Radio


TX/RX de FM
El cdigo de dial_tone.py es el siguiente y ser analizado lnea por lnea para

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

Desarrollo de Software Radio


TX/RX de FM
Un Mdulo es un programa realizado en Python con un sufijo .py y contiene

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

Con lo que importamos el paquete gr y el mdulo audio.py de la carpeta de


gnuradio, como se muestra en la Figura 2.14.

Figura 2.14 Paquete gr y mdulo audio.py en la carpeta gnuradio

43

UDLA

Desarrollo de Software Radio


TX/RX de FM

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

Como ya mencionamos sampling_freq es la frecuencia a la que se muestra la


seal que entrar a la tarjeta de sonido, el valor de 32kHz es estndar para la mayora de
estas tarjetas. La frecuencia de muestreo es un parmetro para la fuente de la seal
gr.sig_source_f que veremos ms adelante. El otro parmetro es la amplitud de la seal
senoidal el cual se define de 0.1 Volts para este ejemplo.

La siguiente parte del programa consiste en crear el grafo para generar las
seales:
fg = gr.flow_graph ()

El mdulo flow_graph es una clase definida en gr.flow_graph.py, la cual llama a


la funcin basic_flow_graph.py.1
Ahora creamos dos fuentes de datos:
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)

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

Desarrollo de Software Radio


TX/RX de FM

La fuente de la seal pertenece a la categora de Bloques, los bloques estn


implementados en C++, por lo que aqu es donde interviene SWIG quien provee la
interfase entre Python y C++, el bloque utilizado en sta parte es gr.sig_source_f el cual
se encuentra en gr-buld\gnuradio-core\src\lib\general.
Con estas dos lneas generamos dos seales senoidales, una a 350Hz y otra a
440Hz con lo que creamos un tono compuesto por ambas senoidales.

El siguiente paso es generar la seal para el dispositivo de audio, es decir, la


tarjeta de sonido de nuestra computadora, esto se logra con la siguiente lnea:

dst = audio.sink (sampling_freq)

El mdulo audio.py se encuentra en /usr/local/lib/python2.4/site-packages/


gnuradio/audio.py el cual es importado desde el inicio. Este mdulo transforma las
fuentes en seales para poder reproducirlas. Las funciones sink() y source()son
definidas en ste mdulo y regresan una seal o una fuente de audio a partir de una
clase.
Ahora debemos realizar la Conexin entre los bloques que hemos definido
anteriormente para completar el grafo:
fg.connect (src0, (dst, 0))
fg.connect (src1, (dst, 1))

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

Desarrollo de Software Radio


TX/RX de FM

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 ()

La primera lnea sirve para correr el programa directamente, es decir, a travs de


una Terminal con el comando ./dial_tone.py, en caso de que el mdulo que estamos
creando sea llamado, la parte que se encuentra debajo de esta lnea ser ignorada y
solamente se importar el contenido anterior a sta. Es decir, esta lnea sirve para hacer
del cdigo un mdulo ejecutable o un sub-mdulo. La siguiente lnea es la que llama a
la funcin que hemos definido y le asigna el flujo del grafo fg. Para correr el grafo
utilizamos la lnea fg.start(),y para terminarlo fg.stop(), los mtodos start() y
stop() se encuentran definidos en la clase flow_graph. La funcin raw_input es
similar a print en otros lenguajes de programacin y sirve para aadir texto a la
pantalla.

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.

En caso de correr el programa y obtener un mensaje como el siguiente: unable


to support sampling rate 32000, card request 48000 instead como se muestra en la
Figura 2.15.

46

UDLA

Desarrollo de Software Radio


TX/RX de FM

Figura 2.15 Mensaje de respuesta al soportar 48k muestras por segundo y no 32k

Es necesario cambiar en el programa:


from gnuradio import audio from gnuradio import audio_oss as audio

from gnuradio import audio from gnuradio import audio_alsa as audio

El cambio se debe realizar cuando la frecuencia de muestreo de 32kHz no es


aceptada por la tarjeta de sonido que utilizamos, ALSA y OSS son los dos tipos de datos
que manejan las tarjetas de sonido. Al realizar el cambio debemos obtener algo como en
la Figura 2.16, al correr el programa.

47

UDLA

Desarrollo de Software Radio


TX/RX de FM

Figura 2.16 Ventana que muestra una corrida correcta del programa dial_tone.py

El archivo dial_tone.py es un mdulo bsico para trabajar con GNU Radio, de


ah que es importante comenzar a programar con ste, ya que adems de darnos una
clara introduccin de cmo se realizan los grafos, bloques y conexiones, nos introduce a
la programacin de seales de audio.

48

También podría gustarte