viernes, 24 de marzo de 2017

Spoon - Kill The Moonlight (2002)


Este es sin dudas un disco que podría recomendarle a cualquier persona con un sello de garantia y, considerando mis gustos, esto no es algo que podría decir de cualquier otro. Llevo ya algunas semanas escuchándolo. Me parece que tiene un sonido muy accesible y al mismo tiempo una calidad que bien podría ponerse a un lado de un Yankee Hotel Foxtrot o un The Moon & Antartica. Me costó bastante encontrarlo pero la ardua búsqueda entre enlaces muertos valió mucho la pena. Era justo ponerlo al alcance de todos por aquí.

domingo, 12 de marzo de 2017

Convertir coordenadas ecuatoriales a altazimutales (horizontales) con astropy

Algunos meses después de entender la geometría y hacer un programa para convertir entre estas coordenadas descubrí que las conversiones podían hacerse con el módulo de astropy. No fue tiempo perdido pues entendí bastante bien el proceso. Para una conversión de muy buena precisión recomendaría usar astropy aunque sus funciones tienen el inconveniente de ser relativamente lentas (promedian una ejecución de 3 ms).

# -*- coding: utf-8 -*-
"""
Created on Sun Mar 12 20:28:24 2017

@author: rodolfo
"""
from datetime import datetime
import astropy.units as u
from astropy.time import Time
from astropy.coordinates import SkyCoord, EarthLocation, AltAz, Angle

#Locación
Puebla = EarthLocation(lat=Angle('19d02m36s'), 
                       lon=Angle('-98d21m6.94s'), 
                       height=2152*u.m)
#Fecha y hora
utc_time = Time(datetimeutcnow(), scale='utc')
time = utc_time 

#Ecuatoriales
Sirio = SkyCoord(Angle('101d17m18.7469s'), 
                 Angle('-16d42m47.3141s'), 
                 frame='icrs')
#Horizontales
Sirio = Sirio.transform_to(AltAz(obstime=time,location=Puebla))

print "Altura: ", Sirio.alt.degree
print "Azimut; ", Sirio.az.degree

jueves, 26 de enero de 2017

Días comunes

A principios de diciembre compré en la librería universitaria, en su semana remate, un libro de la editorial Tusquets (la de cuadritos) que tomé al azar. "Lo que queda por vivir" de John Updike (en $30, por cierto). Me está gustando bastante. Es un libro de cuentos con un estilo que me recuerda a Chejov, una narrativa donde no ocurre nada extraordinario y sin embargo es difícil detener su lectura. Estas últimas noches he leído a ambos escritores en paralelo y me ha parecido curioso que de todos estos relatos de lo "ordinario" me haya llegado una revelación tan obvia y al mismo tiempo tan extraordinaria: cada uno de nosotros está viviendo su propia historia, y es un historia sin pausas. Creemos saberlo, creemos que es obvio pero si lo piensan con cuidado, realmente no lo habíamos entendido. Tenemos la idea de que lo que llamamos "nuestra historia" es únicamente un conjunto de "milestones" (logros académicos, un nacimiento, un accidente...) y un conjunto de "snapshots" (viajes memorables, borracheras con buenos amigos, un noviazgo que nos marcó, una despedida en una estación/aeropuerto...). Estos elementos son verdaderamente claves en nuestra vida, pero pienso que el hecho de reducir el continuo de nuestra existencia en ellos nos da la falsa sensación de que todo lo ocurrido entre esas memorias es mero espacio vacío. No solemos darnos cuenta de que el más ordinario de nuestros días es también digno de un relato. Deberíamos empezar a ver esa normalidad también como un género literario de la vida, porque así, con todo y su brevedad, nos daríamos cuenta de que tiene más páginas de las que pensábamos.

viernes, 6 de enero de 2017

Muestras I/Q: Un ejemplo con GNU Radio

En la entrada anterior resumía todo lo relevante sobre las señales analíticas (I/Q). Esta vez haremos un ejemplo que nos ayudará a visualizarlas mejor y hacernos de una intuición sobre su naturaleza. El ejemplo consiste en obtener las componentes I/Q de la siguiente señal:
Al ser una señal real, esperamos que tenga un espectro simétrico tal como podemos observar en el sink de frecuencia:
Para obtener las componentes I/Q de esta señal requerimos implementar un modulador en cuadratura con un filtro pasabajas para cada componente y posteriormente usar un bloque de conversión Float to Complex. No hará falta agregar simular un ADC ya que la señal generada ya es discreta. Si aún no están familiarizados con GNU Radio tengo un entrada introductoria [Asumo también cierto conocimiento en filtros digitales, aunque los bloques de estos son fáciles de usar y pueden consultar su documentación aquí] y tampoco estará de más tener muy claro el concepto de frecuencia en tiempo discreto. El flowgraph nos queda de la siguiente manera:
Click para agrandar
He agregado un slider gráfico que nos permite cambiar de forma interactiva la frecuencia de los generadores de señal que representan al oscilador local en cuadratura. Esto me parece un recurso didáctico muy bueno porque ayuda visualizar la relación que existe entre la frecuencia del oscilador local y la frecuencia que vemos en el centro (0 Hz) del espectro de la señal analítica. Basta asignar una frecuencia de 14.5 KHz para sintonizar a la componente de esa misma frecuencia que existe en nuestra señal de prueba:

jueves, 5 de enero de 2017

Entendiendo a las señales analíticas (muestras I/Q)

Las muestras I/Q son una representación matemática discreta de una señal de radiofrecuencia cuya característica más útil es tener un espectro de frecuencia negativa nulo (un espectro compacto y asimétrico). Dado que el procedimiento de obtención de estas muestras involucra una reducción de frecuencia, su uso esta muy extendido en en las aplicaciones de radio definido por software y comunicaciones digitales en general. Las dos características anteriores nos dan dos ventajas: la primera elimina la redundancia en el espectro y la segunda permite reducir en el ancho de banda.

¿Cómo se obtiene una representación compleja de una señal real? Para el caso continuo el proceso es el siguiente:
 Simplemente se multiplica a la señal de radiofrecuencia por un sinusoide complejo y se aplica un filtro pasa-bajas para eliminar la redundancia en el espectro. Esto es lo que se conoce como señal analítica. Este procedimiento se vuelve más claro en el dominio de la frecuencia:
Recordemos que una multiplicación en el dominio del tiempo se manifiesta como una convolución en el dominio de la frecuencia. La convolución entre el espectro asimétrico de un sinuosoide complejo produce un corrimiento en frecuencia, el cual está dado por la frecuencia del sinusoide complejo (que lleva la etiqueta de LO por Local Oscillator) .

Ahora bien, el proceso anterior es puramente matemático. ¿Cómo se hace en el mundo real? El problema se resuelve implementando un modulador en cuadratura como se muestra en el siguiente diagrama:
 Tomando en cuenta a la identidad de Euler, una multiplicación por un sinusoide complejo se emula como la multiplicación y filtrado separado de dos sinusoides reales en cuadratura (heterodino en cuadratura). Posteriormente, al digitalizar independientemente a cada una de las componentes, se consideran a las muestras del ADC en cuadratura como la parte imaginaria multiplica por -1. La I viene de In-phase y la Q de Quadrature. Prácticamente todos los dongles SDR que pueden conseguirse fácilmente en el mercado como los RTL's y el FunCube funcionan de esta manera. En la siguiente entrada haremos un ejemplo con GNU Radio para clarificar aún más las cosas.

Referencias:
"RTL-SDR: Inexpensive Software Defined Radio", EE123 University of California Berkeley
"I/Q Data for Dummies", Mikael Q Kuisma
"Complex Sinusoids", PDS Related

lunes, 26 de diciembre de 2016

Iniciando con GNU Radio

GNU Radio es un proyecto que provee módulos de Python (escritos en C++) y herramientas de software para el procesamiento de señales en aplicaciones de radio definido por software (SDR). Puede ser instalado en Windows aunque aún no lo he probado ahí. Instalarlo en Debían y Fedora es muy sencillo. Para este tutorial voy a asumir que se ha tomado un curso básico de procesamiento digital de señales (pero tanto para aprender como repasar se puede recurrir a la vieja confiable serie Schaum's).

Hay dos maneras de utilizar GNU Radio: En modo gráfico creando diagramas a bloque con GNU Radio Companion (GRC) o creando scripts de Python desde cero. La ventaja de usar GRC es que permite desarrollar aplicaciones muy rápidamente y con un entorno amigable. Sin embargo, para aplicaciones más complejas, escribir scrips provee una flexibilidad más adecuada. Naturalmente iniciaremos usando GRC.

GRC es visualmente similar a Simulink o LabVIEW. Sin embargo trabaja de la siguiente manera: GRC crea un script de python (cuyo nombre por defecto es top_block.py)  a partir del diagrama a bloques creado. Este programa se encarga de ejecutar los bloques en el orden correcto y llamar a la librería gráfica para visualizar interactivamente los datos si es el caso. Gracias al GNU Block API, cada bloque se ejecuta en un thread lo da muy buen desempeño si tienes un procesador multinúcleo.

Bien, al abrir GRC (buscadolo en el menú o desde terminal ejecutando "gnuradio-companion") aparecerá el espacio de trabajo, la ventana de bloques a la derecha y una ventana de mensajes en la parte inferior:
 En todo nuevo proyecto nos aparecerán dos bloques por efecto en el espacio de trabajo: el bloque "Options" y un bloque de variable samp_rate. El bloque "Options" nos permite cambiar al nombre del script principal (del que hablaba más arriba), agregar autor, descripción, elegir la librería gráfica entre otras opciones. Las variables son muy útiles para facilitar el desarrollo de cualquier programa. La tasa de muestreo es tan importante en procesamiento digital de señales que es muy útil agregarla al espacio de trabajo por defecto.

Para nuestro primer ejemplo generaremos una señal cosenoidal de 10 KHz con una amplitud unitaria más ruido gaussiano de amplitud 0.1 y la visualizaremos con un instrumento virtual. Usaremos los siguientes bloques:
  • Waveform Generators > Signal Source
  • Wavefoem Generator > Noise Source
  • Math Operators > Add
  • Misc > Throttle
  • Instrumentation > QT > QT GUI Sink
 y los conectaremos de la siguiente manera (la conexión se hace dando click en la salida del primer bloque y después en la entrada del segundo bloque):
Se notará que el color de los puertos será azul por defecto. Este color denota el tipo de dato (el azul representa a los complejos flotantes). El código de colores completo se puede ver yendo al menú superior en help > types. En este ejemplo debemos cambiar a tipo float en la configuración de todos los bloques (naranja).

El bloque "Throttle" se encarga de reducir la carga de trabajo del procesador limitando el flujo de datos a través del bloque de manera que no haya retrasos o congelamientos en la visualización gráfica de los datos. Es muy importante aclarar que este bloque sólo debe usarse para visualizar datos y nunca para trabajar con salidas físicas como audio o instrumentos USRP.

Finalmente, lo que queda es configurar los bloques "Signal Source" y "Noise Source" para que nos den los valores de salida deseados. Damos click en "Execute flow graph":
 Veremos ejecutarse la interfaz gráfica del instrumento virtual QT que incluye displays en dominio de la frecuencia y del tiempo así como un espectrograma y un diagrama de constelación:
 Referencias
 "Core concepts of GNU Radio", GNURadio.org

domingo, 27 de noviembre de 2016

Preocupaciones

Tomemos la frase "Me preocupo por el medio ambiente". ¿Qué es lo que queremos decir con ella? El verbo preocupar en esta oración expresa un compromiso de nuestra parte con el medio ambiente. Pensemos ahora en la siguiente, "Me preocupa tu hermano". Imaginemos que es dicha en un contexto donde la persona a la que se refiere está en una situación delicada o quizá no se ha comunicado en varias horas después de salir de casa. En este caso podríamos referirnos con preocupación a un sentimiento de temor o consternación. Este doble significado genera un problema que llega a ser bastante grave para los que sufrimos de desordenes de ansiedad. Nos hace creer erróneamente que el compromiso y la sensación de temor son inseparables. Nuestra intuición se ve tan moldeada por esta curiosidad lingüística que nos cuesta mucho imaginar un escenario donde estamos hasta el cuello de pendientes y al mismo tiempo en calma. Esta situación es completamente racional y es posible sin forzarnos a que no nos importen nuestros problemas, ya que el compromiso de resolverlos es independiente a la angustia que pudieran o no provocarnos. 

domingo, 23 de octubre de 2016

Repositorio de tesis abierto de la PUCP

La Pontificia Universidad Católica de Peru (PUCP) es una de las 20 mejores universidades de Latinoamérica. Recientemente me entero que tienen un enorme repositorio de tesis de acceso público que van desde nivel bachillerato hasta doctorado en un amplio número de áreas como Ciencias Sociales, Filosofía e Ingeniería y Ciencias Exactas. Me ha ayudado bastante a informarme sobre el estado del arte y para citar trabajos en mi tesis de licenciatura. Definitivamente un gran aporte al conocimiento para el mundo hispanohablante.

viernes, 21 de octubre de 2016

Small Ku Band Radio Telescope (1m)

Early this year I started to build a small radio telescope for my undergraduate thesis.The idea came to me as a smaller and open (without Radio Eyes) version of the Robert Arrowsmith's SDR radio telescope. In order to make a contribution to other students and educators all over the world, the main goals of the project are the following:
  • Create an open hardware and affordable altazimuth mount  
  • Create Python modules for control and coordinate conversions
  • Start a complete open hardware/software astronomical platform for educational proposes in long term.  
This week I've already finished the mount and I began to test the movement of the antenna. I'm using a Raspberry Pi as main control unit. The digital controllers for the motors are implemented in a microcontroller board called Miuva with a Pololu Qik 2s12v10 dual motor driver:
 And this is how the system looks like when is assembled:

Once the mount is calibrated after add a magnetometer and an IMU, I will take some data using a FunCube and a RSA306B USB Spectrum Analyzer (which is not mine, sadly, but my adviser is letting me use it).

This post is only a brief teaser, but I promise I will release everything as soon as I get my degree!

martes, 6 de septiembre de 2016

Morelia Vol. 2

Yo aparentando saber de lo que hablo.
A principios de agosto regresé a Morelia para presentar lo que en esos días era mi propuesta de proyecto de tesis (un radiotelescopio de un plato de un metro del que escribiré pronto). Lo que más me tenía preocupado era tener algún episodio de pánico escénico de los cuales había creído erradicados hasta un pequeño insistente a mediados de junio, una semana después de la escuela de verano. Me tomé muy enserio el no repetirlo y estuve ensayando bastante mi corta presentación de 10 minutos. Me da mucho gusto contar que logré hacerlo bien esta vez. Toda la semana del pequeño congreso en Morelia recibí muy buenas criticas, incluida la de un investigador de del IRyA, Stan, que admiro bastante y a quien había invitado a mi charla. Creo que bastaba decir que mi charla me ayudó a ligar (o más bien que ligaran) en la fiesta de despedida. Disfrute mucho este viaje. Me reencontré con varios amigos e hice algunos nuevos más. Fue muy curioso que uno de mis compañeros de cuarto fue el amigo de N. de la UNAM al que había conocido un mes antes en CDMX. Conocí a una chica norteña que era asistente de verano de Stan por el programa Delfín y esta trabajando con SRT del Haystak. Estudiaba física y me sorprendió que supiera tanto de electrónica e instrumentación. Me dijo que le gustaba mucho esa área, me pidió algunos consejos pero después de darme cuenta lo mucho que sabía no fue tanto el extra que pude recomendarle estudiar. Hubo un día que perdí el autobús que nos llevaba del instituto al hotel por ayudarle con un problema en la comunicación serial con el analizador de espectros que estaban utilizando pero fue muy amable en ayudarme a regresar a Morelia. Ese día en el camino de regreso le contaba que a mi jamás me habían aceptado en el programa Delfín por no tener el promedio suficiente, o al menos que mi universidad no había respondido a mis solicitud de excepción. Le pareció gracioso e injusto porque yo le había dado la impresión de conocer bastante. El último día tuve que cambiar los planes de pasar unos días en Guanajuato para visitar a un amigo por no encontrar corridas de autobuses para allá después de las 4 pm y tuve que ir a la CDMX con un amigo en coche. Llegamos muy tarde a la ciudad por perdernos en Santa Fe. El carro en el íbamos de una amiga de mi amigo y nos dejaron en Taxqueña (nos habían dejado en una parada del trolebús pero nunca pasó y tuvo que regresar a rescatarnos). Era tan tarde que no alcanzamos boletos para el último autobús para Puebla, así que nos arriesgamos a cruzar media ciudad en metro para llegar a la TAPO. Al final lo logramos y llegamos en la madrugada. A mi amigo lo había conocido en la escuela de verano de junio. Me la pasé hablandole de lo mucho que sigo pensando en N.