Download Software Defined Radio: USRP y plataformas de desarrollo

Document related concepts
no text concepts found
Transcript
Iván Pinar Domínguez
Capítulo 4. INTRODUCCIÓN AL DISEÑO DE
MÓDULOS EN GNU RADIO
La creación de módulos en Python puede llevarse a cabo de dos formas: bien programando
directamente en Python o bien utilizando la herramienta GNU Radio Companion. La
programación en Python es ardua, mientras que el diseño basado en GNU Radio Companion es
más sencillo. De ahí que los diseños de este documento se centren en esta herramienta. El lector
interesado en la programación en Python encontrará interesante el Anexo III, donde se introduce
a la programación en este lenguaje. GNU Radio Companion es una herramienta gráfica para
realizar un diseño a partir de bloques incluidos en librerías o creados por el usuario [13]. Una
vez realizado el diseño, el GNU Radio Companion genera el código en Python asociado, que
bien puede ejecutarse desde la propia herramienta o desde la línea de comandos en un terminal.
Para aquellos que sean usuarios de Matlab, cabe decir que la filosofía de funcionamiento es
similar a la de Simulink. El GNU Radio Companion permite diseñar sistemas que utilicen un
SDR como el USRP, pero también permite trabajar con, por ejemplo, las señales de audio del
PC/Workstation.
Para iniciarnos en la programación de Software Radio con GNU Radio Companion es
necesario conocer y saber cómo funcionan las estructuras de grafos, bloques y conexiones. Para
realizar esta tarea se comenzará con un programa básico en Python, éste programa es
dial_tone.py, el cual se analiza detalladamente en el Anexo III. En Ubuntu, este módulo se
encuentra en el siguiente directorio: gr-build/gnuradio-examples/python/audio si optamos por la
instalación manual, o bien en /usr/local/gnuradio/examples si se instaló el paquete completo
gnu-radio 3.X desde Synaptic. En Mac, el directorio donde se encuentra este fichero Pyhton
sería: /opt/local/share/gnuradio/examples/audio.
Este programa genera dos señales senoidales de diferente frecuencia que simulan el tono de
llamada en un teléfono local y los envía a la tarjeta de sonido de la computadora, por lo que el
USRP no es necesario aquí.
En el siguiente apartado se mostrará la construcción del módulo dial_tone.py a partir de
GNU Radio Companion y se verá lo intuitivo que resulta el diseño de módulos con esta
herramienta. Para abrir esta aplicación, basta con teclear en un terminal la sentencia grc y se
abrirá dicho programa en una distribución LINUX o gnuradio-companion si se utiliza MAC.
27
Software Defined Radio: USRP y GNU Radio
4.1 GNU Radio Companion
La construcción de módulos utilizando esta herramienta gráfica se basa en añadir bloques e
interconectarlos de manera esquemática6. Los bloques utilizados se pueden agrupar de la
siguiente manera:
- Sources (fuentes): Estos bloques especifican cualquier tipo de fuente como por ejemplo
un archivo de audio wav, un generador de señal de forma arbitraria y con las
características que se requieran, una fuente binaria aleatoria, un fichero de cualquier
formato, un micrófono, el propio USRP, …etc.
- Bloques de procesado de señal: A este grupo pertenecen todos aquellos bloques que
realizan un tratamiento de la señal de cualquier tipo. Se pueden citar como ejemplos los
moduladores, filtros, remuestreadores, multiplicadores, amplificadores en software, …etc.
- Sinks (sumideros): La señal tendrá un destino final como bien puede ser un fichero de
cualquier formato, la tarjeta de sonido o el USRP. Indicar que a este conjunto también
pertenecen los bloques de visualización de señales (Graphical sinks) como FFT sink (para
visualizar la FFT de la señal en un punto), Constelation sink u Osciloscope sink (para
representar la señal en tiempo en cualquier lugar del diseño) entre otros.
Una vez se incluyan en el esquemático todos los bloques que se consideren oportunos, lo
único que queda por hacer es interconectarlos. En el ejemplo que se va a mostrar en este
apartado se necesitan dos fuentes, un bloque de adicción señales y el sumidero que será la tarjeta
de sonido, además de los bloques de visualización que mostrarán el espectro de la señal de audio
y la forma de onda que se envía al dispositivo de sonido. La configuración quedaría de la
siguiente manera:
Figura 4-1 Implementación dial_tone en GNU Radio Companion
Como se puede ver en la figura, además de los bloques mencionados se añaden una serie de
variables para controlar los parámetros desde la interfaz gráfica (en este caso Variable Slidder,
aunque hay otras opciones), de tal manera que en el parámetro frecuencia de la primera fuente se
le asigna el identificador f1 y al ejecutar el esquemático se podrá controlar dicha frecuencia.
Igual sucede con el resto de parámetros. Una vez se tenga el diseño completado, éste se guardará
en un fichero *.grc que al compilarlo (simplemente con pulsar F6 dentro de la aplicación) genera
un fichero *.py que se puede ejecutar para visualizar lo siguiente:
6
La programación directa en Python sigue la misma filosofía, crear los objetos de cada bloque de
procesado de señal e interconectarlos, aunque desde una interfaz menos amigable.
28
Iván Pinar Domínguez
Figura 4-2 Visualización del módulo dial_tone.py utilizando GNU Radio Companion
Ahora se puede visualizar el espectro y la forma de onda y su modificación al variar los
parámetros creados con las Variables Slidder.
Siguiendo el mismo proceso se pueden llevar a cabo infinitas aplicaciones teniendo en cuenta
que existen bloques para cualquier procesado de señal e incluso bloques moduladores y
demoduladores completos, simplemente añadiendo bloques y configurando todo
adecuadamente, a partir de una interfaz gráfica intuitiva que ahorra el trabajo de programar
directamente en Python.
29