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