Investigación con Radio Jove

24

description

Este documento fue hecho con el propósito de mostrar los avances del semillero de talentos matemáticos, científicos y tecnológicos de la universidad Konrad Lorenz.

Transcript of Investigación con Radio Jove

Análisis de .Wav y Estadística Grá�ca

Edwin Mahecha y Julián Jiménez Cárdenas

Semillero de Talentos Matemáticos, Cientí�cos y Tecnológicos

Fundación Universitaria Konrad Lorenz

Noviembre, 2014

Índice

1 Introducción 11.1 RadioAstronomía . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Análisis de .Wav 62.1 Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1.1 Importando Librerías . . . . . . . . . . . . . . . . . . . . 62.1.2 Selección del archivo . . . . . . . . . . . . . . . . . . . . . 72.1.3 Duración de Archivo . . . . . . . . . . . . . . . . . . . . . 72.1.4 Grá�ca Amplitud Vs. Tiempo . . . . . . . . . . . . . . . . 82.1.5 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 FFT (Fast Fourier Transform) . . . . . . . . . . . . . . . . . . . . 92.3 Las Grá�cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3.1 Amplitud Vs. Tiempo . . . . . . . . . . . . . . . . . . . . 102.3.2 Histograma . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.3 dB Vs. Frecuencia . . . . . . . . . . . . . . . . . . . . . . 11

3 Estadística Grá�ca 123.1 Importando Librerías . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.1.1 SYS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.1.2 Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1.3 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.1.4 Numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2.1 Choose() . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2.2 Prepair(t) . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2.3 Analysis() . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2.4 Graphic() . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2.5 Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Conclusiones 21

5 Referencias 21

1 Introducción

Durante el transcurso del año 2014, la Fundación Universitaria Konrad Lorenzllevó a cabo el tercer semillero de talentos cientí�cos, matemáticos y tecnológicosen la ciudad de Bogotá D.C., Colombia. El enfoque principal de este semillerofue para el proyecto Radio Jove, que consiste en recibir las ondas de radio prove-nientes de algunos objetos celestes como Júpiter.

Figura 1: Semillero 2013 en ExpoCiencias, Colferias

Para esto, se dividió el semillero en tres grupos, el primer grupo se dedicó aconstruir el radiotelescopio mediante el cual se recibirían las señales; el segundoarmó el receptor, conformado por una placa base en la que están ubicados unmontón de circuitos; y el tercero tenía como objetivo la construcción de unprograma por el cual se pudiera llevar a cabo un análisis óptimo de los datosrecibidos por el radiotelescopio.

1

Figura 2: Posicionamiento de las antenas en el Parque Simón Bolívar, Bogotá

El tercer grupo se fragmentó en otras dos partes debido a la naturaleza de losdatos. Mediante un computador conectado por audio con el receptor, se eje-cutaba un programa .exe llamado RadioSkyPipe. Este programa obtiene losdatos en una unidad conocida como SkyPipeUnits, propia del programa. De-spués de esto, se puede guardar los datos obtenidos en formato .spd (formatode RadioSkyPipe) o se puede exportar a un formato de texto plano (.txt).

El lector se preguntará para qué son necesarias dos partes, ya que se podíaanalizar los datos en texto plano, pero con el objetivo de abarcar más, la primeraparte, perteneciente a Edwin Mahecha se dedicó a crear un programa mediante elcual se pudieran analizar los archivos en formato de audio (.wav) disponibles enla página o�cial del proyecto (http://radiojove.gsfc.nasa.gov/software/).

Se estuvieron analizando varios lenguajes de programación para desarrollar loscódigos concernientes al análisis de datos como Matlab y C++, y se llegó a laconclusión de que el lenguaje que se manejaría iba a ser Python. Esto es asíporque este es un lenguaje muy intuitivo, es de alto nivel gracias a sus oper-adores lógicos y están implementada una gran cantidad de librerías, por lo quelos códigos no se iban a empezar desde cero, literalmente.

Además, las clases impartidas durante el primer semestre del año por uno de

2

los dos tutores del semillero de talentos, Alejandro Cárdenas Avendaño, fueronde programación en Python orientado a objetos.

Todos los programas fueron estructurados en iPython Notebook, una herramientainteractiva para el uso de Python, por lo que permitía probar muchas veces losdistintos segmentos del código. Cuando superaba esta etapa de pruebas se pro-cedía a transladar y adaptar los segmentos a un script para ejecutarlo con mayorrapidez. Además se pretendía con el cambio crear una interfaz grá�ca amigablecon el usuario, para la cual el mismo no necesitaba habilidades de programación.

Los dos códigos tienen en común el uso de la librería Tkinter (para más in-formación ver la primera sección de la subsubsección 3.1.2) con el objetivo deseleccionar mediante una interfaz grá�ca el archivo a analizar.

Figura 3: Interfaz Grá�ca de Selección

Por lo tanto, los objetivos de este proyecto han sido:

1. Realizar una interfaz grá�ca amigable con el usuario.

2. Hacer que el programa sea universal.

3. Que el programa indenti�que los errores más comunes y actue en conse-cuencia.

4. El programa debe ser entendible, por lo tanto debe ser simple, no complejo.

5. Realizar una guía para el uso de los programas.

3

1.1 RadioAstronomía

El proyecto de la NASA RadioJove está orientado a acercar la radioastronomíaa colegios y universidades, aunque no sólo eso, también se creó este proyectopara iniciar una base de datos que reuna las mediciones que toman los gruposque han adquirido el receptor y han construido las antenas. Esto con el �n decomparar los datos adquiridos desde diferentes latitudes y conseguir un mejoranálisis.

Por lo tanto, antes de explicar cómo funcionan los programas diseñados para elanálisis de los datos recibidos, se debe entender cuál es la naturaleza de los fenó-menos a los cuales se les realiza las mediciones desde el receptor suministradopor el proyecto.

Un segmento del Semillero de Talentos se dedicó al entendimiento de la RadioAs-tronomía. Este segmento fue liderado por Daniela Cárdenas Sálazar, integrantedel Semillero y estudiante del Colegio Parroquial de los Santos Apóstoles Pedroy Pablo en Bogotá. Gracias a su apoyo se dará una explicación amena a estarama de la Astronomía encargada de estudiar los cuerpos celestes usando comométodo de observación el segmento del espectro electromagnético conocido comoondas de radio.

Para recibir señales de buena calidad, se deben utilizar grandes antenas, o gru-pos de antenas más pequeñas trabajando en paralelo. También se pueden ponera varios radiotelescopios trabajando en conjunto por medio de interferometría.Cabe añadir que el espectro visible es una cantidad minúscula respecto a todoel espectro, es como estar ciegos frente a toda la fenomenología de la que estácompuesta el Universo.

El objetivo de la recolección de datos realizado por el Semillero es el sol. Seescogió al sol como objeto de estudio debido a la facilidad con la que recibimosdatos de este al ser el cuerpo del cual recibe más intensidad la Tierra.

El sol se comporta prácticamente como un cuerpo negro, por lo que se rige bajolos postulados de la teoría cuántica antigua, más exactamente por los estudiosrealizados en el campo de la radiación térmica.

Se le llama radiación térmica a la radiación emitida por un cuerpo como con-secuencia de su temperatura. Todos los cuerpos emiten esta radiación a suderredor, y la absorben de él. Si, en un principio, el cuerpo está más calienteque su alrededor, se enfriará, ya que la rapidez con que emite energía excederála rapidez con que la absorbe. Cuando se alcanza el equilibrio térmico la rapidezde emisión y absorción de energía serán iguales.

A temperaturas ordinarias, la mayoría de los objetos no son visibles por la luzque emiten sino por la luz que re�ejan, ya que si no se hace incidir luz sobre

4

ellos no es posible verlos. Sin embargo, a altas temperaturas los cuerpos sonluminosos por sí mismos. Todos los cuerpos que absorben toda la radiacióntérmica que incide sobre ellos son conocidos como cuerpos negros.

Independientemente de los detalles de su composición, todos los cuerpos negrosa la misma temperatura emiten radiación térmica en el mismo espectro. Ladistribución espectral de la radiación de un cuerpo negro se especi�ca por lacantidad Rt(v), llamada radiancia espectral, de�nida como RT (υ)δυ que repre-senta la energía emitida en forma de radiación con frecuencias en el intervalo υy υ + ∆υ de un área unitaria de la super�cie a temperatura T y por unidad detiempo. En 1899, Lummer y Pringsheim realizaron una de las primeras medi-ciones precisas de esta cantidad y se dieron cuenta de que a una temperaturadeterminada la radiancia espectral describía una especie de curva dependientede la frecuencia.

Figura 4: λ V s RT (υ)A pesar que en el eje de las ordenadas de la �gura haga referencia a la longitudde onda, se debe recordar que c = λυ, por lo que se da una buena idea de larelación entre la longitud de onda y la frecuencia.

A principios del S. XX sólo se conocía la grá�ca antes expuesta experimental-mente, hasta que Max Plank ideó su famosa ecuación que encierra la energíatotal emitida de un cuerpo negro a temperatura T , es decir:

5

∫0

RT (υ)δυ

A esto se le conoce como radiancia (RT ). Y Plank descubrió que RT = σT 4,donde σ = 5.67 × 10−8W/m2K4. Además, Wilhelm Wien descubrió que existeuna función lineal que relaciona la longitud de onda máxima y la temperatura(b = λT ) donde b = 2.8976 × 10−3m ·K.

El sol, al tener una temperatura super�cial de aproximadamente 5700 K seubica en la longitud de onda del visible, pero una gran cantidad de la radiaciónemitida ocupa la zona de las ondas de radio. Por este motivo es que es sensatoestudiar al sol desde las longitudes de onda altas (7 m).

2 Análisis de .Wav

Los siguiente códigos fueron elaborados con la �nalidad de realizar un análisisa los archivos ejemplo de sonido proporcionados por la NASA para el proyectoJove. Estos archivos de sonido pueden ser descargados directamente de la páginadel proyecto http://radiojove.gsfc.nasa.gov/. Los datos tomados seránutilizados para ser confrontados frente a los datos de la NASA. Cabe resaltarque las unidades de RadioSkyPipe (programa suministrado) no van a ser muchasveces compatibles con los resultados de los archivos *.wav.El programa está dividido en cinco secciones que se explicarán a continuación. Elprograma no es completamente universal, ya que es necesario el uso de libreríasexternas a la instalación básica de python, por lo cual se recomienda veri�carqué librerias son requeridas o instalar el paquete de anaconda disponible aquí:https://store.continuum.io/cshop/anaconda/.

2.1 Código

Este código nos permite realizar un análisis directo a archivos de audio. Ha-ciendo uso de archivos de ejemplo proporcionados por la NASA, y otros archivosgrabados localmente, permitieron el desarrollo de este análisis. En el reposito-rio de GitHub https://github.com/SemilleroKonradLorenz/jove se puedetener acceso a los códigos y archivos utilizados en este informe.

2.1.1 Importando Librerías

El programa importa en total 12 librerías, las cuales nos permiten el manejográ�co y de datos en el programa.

import waveimport c on t e x t l i bimport s c ipyfrom pylab import∗import numpy as np

6

import mathfrom s c ipy . s i g n a limport hann from s c ipy . f f t p a ck import r f f tfrom s c ipy . i o import wav f i l eimport matp lo t l i b . pyplot as p l tfrom Tkinter import Tkfrom t kF i l eD ia l og import askopenf i l ename

2.1.2 Selección del archivo

Para esto se hace uso de la librería Tkinter. Esta ejecuta un cuadro de dialogoen el cual se puede buscar el archivo en especí�co.Si se ve con detalle, se puede apreciar la implementación anterior a Tkinter.Dicha implementación era limitada, ya que sólo permitia buscar archivos endeterminada carpeta, a diferencia de Tkinter que permite hacer un uso másextensivo.

#Li s t f i l e s in Direc tory − Non Graphic mode' ' ' d i r e c t=os . chd i r ("/home/%s/ jove /Sample Data"%getu s e r ( ) )f i l e s=glob . g lob ( ' ∗ . wav ' )num=0f o r x in f i l e s : p r in t "− %s = %i "%(x , num) num+=1var=input (" S e l e c t F i l e : " )#Se l e c t F i l e si f var>(num−1) or var <0: r a i s e ValueError ("No va l i d argument ") ' ' '

#Graphic ModeTk ( ) . withdraw ( )fname = askopenf i l ename ( )# show an "Open" d i a l o g box and re turn the path to the s e l e c t e d f i l eprint " F i l e Se l e c t ed : "+fname

2.1.3 Duración de Archivo

Esta implementación nos permite saber la duración del archivo. Esta es dadaen segundos y es el resultado de:d = frames

rate

#fname="/home/edwmapa/ jove /Sample Data/"+ f i l e s [ var ]#F i l e Duration frames/ ra t ewith c on t e x t l i b . c l o s i n g (wave .open( fname , ' r ' ) ) as f :

frames = f . getnframes ( )r a t e = f . ge t f ramerate ( )

7

durat ion = frames / f loat ( r a t e )print " F i l e l ength : %f Sec . "%durat ion

2.1.4 Grá�ca Amplitud Vs. Tiempo

Se hace uso de la librería scipy.io, para leer el archivo *.wav.Esta librería lee el archivo *.wav, leyendo dos datos, sampleFeq y snd. sndcontiene los puntos de la grá�ca(Amplitudes). Se puede apreciar que se haceuso de la función shape() la cual nos permite determinar cuantos canales tieneel sonido. Los archivos de ejemplo únicamente poseen un canal, sin embargootras grabaciones pueden poseer varios canales, por eso únicamente se toma elprimer canal.

#wav f i l e . read () re turns ra t e and data in numpy arrayinput_data=wav f i l e . read ( fname )sampFreq , snd = input_data

snd = snd / (2 .∗∗15 )print "This i s the shape o f the sound ( sample points , chane l s sound ) : "print ( snd . shape )#I f the sound has more than one channel , on ly load f i r s t channeli f len ( snd . shape ) !=1 :

snd=snd [ : , 0 ]#Arange o f mssamplePoints=snd . shape [ 0 ]timeArray = arange (0 , f loat ( snd . shape [ 0 ] ) , 1)timeArray = timeArray / sampFreqtimeArray = timeArray#sca l e to secondsmaxV=(np . amax( snd ))+.05#Max Value o f sndminV=(np . amin ( snd ))− .05#yDuration ydurat ion = np . array ( dura t ion )ydurat ion = np . repeat ( yduration , 2 )

%matp lo t l i b i n l i n ep l t . f i g u r e ( f i g s i z e =(20 ,10))p l t . p l o t ( timeArray , snd , 'b ' )p l t . p l o t ( yduration , np . l i n s p a c e (minV ,maxV, 2) , "r−−" )#Limit l i n ep l t . yl im(−maxV,maxV)p l t . t i t l e ( " F i l e : "+fname )y l ab e l ( ' Amplitude ' )x l ab e l ( 'Time ( sec . ) ' )

La amplitud dada en esta grá�ca está dada en volts (v), y los valores gra�cadosestan en el orden de los milivolts.

8

2.1.5 Histograma

El histograma basicamente permite ver las veces que una amplitud se repite alo largo de todo el archivo.

#%ma t p l o t l i b i n l i n ep l t . f i g u r e ( f i g s i z e =(20 ,10))p l t . h i s t ( snd , b ins=200)x l ab e l ( ' Amplitude ' )y l ab e l ( ' Times Repeated ' )

2.2 FFT (Fast Fourier Transform)

La Transformada Rápida de Fourier, y más especí�camente la Transformadade Fourier Discreta, nos permite tomar una serie de datos de longitud �nita,para dar una representacion del dominio de la frecuencia. La siguiente fórmulacorresponde a la Transformada Discreta:

y[k] =

N−1∑n=0

e−2πj knN x[n] ,

En la formula N es una secuencia de números complejos (X0, ...,XN−1). Esta se-cuencia es transformada en otra secuencia de N valores por medio de la ecuaciónanterior.La DFT busca hallar y [k], partiendo de X [n].y [k]es la frecuencia resultante.

input_data1 =wav f i l e . read ( fname )audio1 = input_data1 [ 1 ]#Sampling samp=2048#Here we check the sound shape . We cant work wi th the

sound i f th sound has more than one channel .i f len ( audio1 . shape ) !=1:

audio1=audio1 [ : , 0 ]#Hanning windowwindow=hann (samp)audio1 = audio1 [ 0 : samp ] ∗ window#Fast Fourier Transform f f tmags= abs ( r f f t ( audio1 ) )#dB va lue smags= 20 ∗ s c ipy . log10 (mags )#To 0 dB, s e t max mags to zeromags −=max(mags )#p l o tp l t . f i g u r e ( f i g s i z e =(20 ,10) )p l t . p l o t (mags , l a b e l="Graph" )y l ab e l ( "Magnitude $ (dB) $" , s i z e =30)

9

x l ab e l ( "Frequency Bin" , s i z e =30)p l t . l egend ( )p l t . t i t l e ( "Flute Spectrum" , s i z e =30)p l t . show ( )

En el código también se puede apreciar el uso de una escala logarítmica con el�n de calular decibeles(dB). Esta escala coresponde a la ecuación:

GdB = 20log10(V1V0

)

Esta formula es aplicada en circuitos eléctricos, en donde V0 es un voltaje dereferencia, V1 es un voltaje dado.

2.3 Las Grá�cas

2.3.1 Amplitud Vs. Tiempo

En la �gura se puede apreciar como se ve gra�cado el audio de uno de losarchivos de ejemplo proporcionados por la NASA.Se puede apreciar que las unidades de Amplitud van de -1 a 1. La amplitud vadada en volts, y se trabaja en el rango de los milivoltios(mV ), por ello es quese puede hacer una conversión a decibeles.

Figura 5: Amplitud Vs. Tiempo

Esta grá�ca brinda información de como la señal es interpretada por el com-putador, aún así no se ha realizado ningún análisis de datos respecto al *.wav.

2.3.2 Histograma

El histograma se realiza con el objetivo de identi�car las veces que se repite unaamplitud, en este caso nos ayuda a descartar algunas interferencias, debido a que

10

usualmente las amplitudes más bajas corresponde a interferencias del ambientecomo lo pueden ser:

• Líneas de corriente (usualmente sus frecuencias oscilan entre los 50-60Hz).

• Emisoras de radio, teléfonos, etc.

• Eventos naturales como lo son rayos, truenos, etc.

• Otros.

Figura 6: Histograma

2.3.3 dB Vs. Frecuencia

En esta grá�ca se hace uso de la Transformada Rápida de Fourier (FFT) y laconversión logarítmica para decibeles en el caso de los milivoltios(mV ). En estecaso, el voltaje de referencia V0 = 1V , debido a que la escala es trabajada desde1 a -1, es decir.

GdB = 20log10(V oltajeRecibido

1V)

La siguiente tabla muestra los valores más comunes:La grá�ca permite conocer las frecuencias del sonido junto con sus valores endecibeles, esto nos es sumamente útil para discriminar valores que se considereninterferencia siempre y cuando conozcamos sus frecuencias, como es el caso delíneas de corriente o las emisoras de radio.

11

dB V

0 1.0-6 0.5-12 0.25-18 0.125-24 0.0625

Tabla 1: Tabla de Valores

Figura 7: dB Vs. Binario de Frecuencias

3 Estadística Grá�ca

Así como se analizó los datos en el formato .wav, se hizo necesario realizar unprograma que sea capaz de analizar los datos que se conseguían en bruto delprograma RadioSkyPype, donde los datos se encontraban distribuidos en trescolumnas. La primera columna representa la fecha de la medición, la segundarepresenta la hora en UT y la tercera el valor en SkyPipeUnits. Si el archivo aanalizar no cumple las especi�caciones exigidas por el programa un error seráelevado como se apreciará a continuación.

Pueden surgir errores de compatibilidad debido al uso del código en otros com-putadores, pero en sí el programa es universal (fue probado en computadorescon distinta resolución). Podría haber algún error relacionado con el formato delos datos, por ello el programa exige que los datos sean procedentes de SkyPipe.

En futuras versiones el programa será capaz de ejecutarse en Windows sin lanecesidad de tener python instalado. También se aspira a convertir el programaen un binario para aumentar su universalidad. Puede que el programa tarde

12

un poco al principio, esto es debido a que Tkinter tarda un poco. Tambiénin�uye bastante la memoria RAM del host, pero eventualmente el programa seejecutará.

A pesar de que los datos recibidos estén en SkyPypeUnits, se puede realizar unatransformación suponiendo que esta unidad es en realidad la temperatura de laantena mediante la siguiente ecuación:

P = kTB

Donde:

• P es la potencia (W ).

• k es la constante de Boltzmann (1.38 ∗ 10−23 JK ).

• B es la banda de recepción en hertz.

• T es la temperatura del resistor en kelvins.

Si ejecuta el script normalmente aparecerá la siguiente imagen. La primeracolumna representa de arriba a abajo:

• La grá�ca de la magnitud de cada dato Vs el tiempo transcurrido ensegundos desde el primer dato.

• El histograma de frecuencias.

• La campana de Gauss de estos datos, se puede modi�car el número dedesviaciones estándar como se verá más adelante.

La segunda columna de izquierda a derecha representa lo mismo que la primera,pero en vez de usar la unidad predeterminada del programa RadioSkyPipe(SkyPipeUnits) maneja poder (W).

13

Figura 8: Ejemplo

3.1 Importando Librerías

El programa importa un total de 12 librerías, en algunas simplemente llama losmódulos necesarios. Las librerías serán explicadas a continuación. Las expli-caciones mediante código se suelen dividir en secciones, y la delimitación entresecciones son dos líneas (para tener en cuenta).

3.1.1 SYS

=================================================import sys=================================================i f sys . ve r s i on_in fo [ 0 ] < 3 :

from Tkinter import ∗else :

from t k i n t e r import ∗=================================================sys . e x i t ( )=================================================

En la primera sección código expuesto se realiza la importación normal de lalibrería SYS.

14

En la segunda sección se usa sys.version_info, un comando que nos manda enforma de lista las especi�caciones de nuestro Python actual. Este comandoemite para los tres primeros datos los tres componentes de la versión de Pythondel sistema, por ejemplo, si su versión actual de Python es 2.7.8, cuando ejecutesys.version_info[0], obtendrá 2. Esto es usado en esta sección debido a que lalibrería Tkinter tiene nombre diferente a partir de versiones de Python mayoresde 3 (�tkinter �).

La tercera sección es simplemente una manera de salirse automáticamente detodo el script, ya que este programa funciona con un loop in�nito, al que nose le puede poner break ya que el programa es controlado por funciones paraoptimizar su funcionamiento.

3.1.2 Tkinter

Como se vio en la subsubsección anterior, se importa Tkinter dependiendo dela versión de Python con la que se esté ejecutando el script. Se importa todo loconcerniente a esta librería para evitar las molestias de llamar los métodos.

root = Tk( )m = tkF i l eD ia l og . a s k op en f i l e ( parent=root ,mode=' rb ' , t i t l e=' . . . ' )root . des t roy ( )=================================================burn = Tk( )burn . p ro to co l ( 'WM_DELETE_WINDOW' , andother )burn . wm_title ( " S t a d i s t i c " )L1 = Label ( burn , t ex t="Your Mean i s %s %s and your Mean Deviat ion i s . . . "L2 = Label ( burn , t ex t="Your Mean i s %s %s and your Mean . . . "L3 = Label ( burn , t ex t="Your obse rvat i on s t a r t ed in % . . . "B1 = Button ( burn , t ex t="Quit" , bg=" red " , f g="white " ,command=andother )B2 = Button ( burn , t ex t="Another F i l e " , bg="blue " , . . . )L1 . g r id ( columnspan=2)L2 . g r id ( columnspan=2)L3 . g r id ( columnspan=2)burn . gr id_columnconf igure (1 , weight=1)B1 . g r id ( row=3, s t i c ky=E)B2 . g r id ( row=3, column=1, s t i c ky=W)burn . gr id_columnconf igure (0 , weight=1)burn . gr id_rowconf igure (4 , weight=1)burn . mainloop ( )

Para entender la mayor parte del código expuesto es necesario investigar la docu-mentación de Tkinter. Esta documentación puede ser encontrada en el siguiente

15

link http://effbot.org/tkinterbook/. Aquí se explicará lo esencial, por loque se hace necesario buscar en la documentación si se desea hacer un trabajosimilar que se adapte con las necesidades de la aplicación.

En la primera sección se usa el comando más elemental de Tkinter: Tk(). Estecomando es el que le dice a Python que realizará una ventana de tipo Tkinter.Todo lo que se le vaya a agregar a la ventana emergente debe estar dentro deTk() y de Tk().mainloop(). En la segunda línea de la primera sección se usatkFileDialog.askopen�le, un método que crea una ventana tipo Tkinter que escapaz de navegar a través de los archivos del sistema.

En la segunda sección es aún más importante consultar la documentación, yaque allí ya se usa el comando Tk.grid(), que contiene gran cantidad de *args querequerirán un trabajo riguroso para ser explicados en detalle. Si el amable lectorno entiende alguna parte de la segunda sección remítase a la documentación.Debe tener en cuenta que esta sección no incluye las funciones another y an-dother, por lo que el lector deberá ir al código para ver más a fondo el fun-cionamiento de la función graphic(), a la cual pertenecen las funciones antesdescritas.

Básicamente lo que se hace en esta sección es añadir el texto que irá en la interfazgrá�ca más los botones que tienen las funciones another y andother para salirsede todo el script o continuar con el loop en el cual trabaja el programa. Esto seubica encima de las grá�cas.

Figura 9: Texto y Botones

3.1.3 Matplotlib

• Pyplot

Este es un método de Matplotlib muy conocido por las personas que gra�can,por lo que no explicaré en mucho detalle lo concerniente a este método. Denuevo adjunto la documentación de la librería http://matplotlib.org/ encaso de que no se entienda algo concerniente al código. El código incluye buenaparte de esta librería, pero toda está concentrada en la función analysis(phase,twelve, day, may, gs) (las variables recibidas por esta función son descritas encomentarios hechos en el código).

• backends.backend_tkagg

1. FigureCanvasTkAgg:

16

canvas = FigureCanvasTkAgg ( f , master = burn )

Usada en la función graphic() para poder insertar imágenes provenientesdel plot en la ventana emergente (�burn�)

2. NavigationToolbar2TkAgg:

t oo lba r = NavigationToolbar2TkAgg ( canvas , burn )

Se le inserta abajo del plot en la ventana emergente una barra de her-ramientas utilizada para realizar arreglos para temas del plot como guardar,mover y agrandar cierta zona (la típica barra de herramientas del plt.show()),entre otros. Este comando es usado en la función graphic().

Figura 10: Barra de Herramientas

3.1.4 Numpy

Esta librería es usada para tres detalles muy importantes:Es capaz de realizar arreglos, que aumentan la e�ciencia y facilitan el trabajocon la inmensa cantidad de datos que se pueden recibir de un .txt promedio.

mirai , s eka i , va r i en = np . l oadtx t ( t , dtype="s t r i n g " , unpack=True )

Esta parte es esencial para el código, ya que aquí se realiza la extracción detodos los datos desde el .txt, esta sección se encuentra en la función prepair(t).

r e turn np . l i b . po lyva l (np . l i b . p o l y f i t ( to , be , 10) , to )

Esta sección es la única orden que ejecuta la función �t(to, be), que toma paraella los valores pertenecientes a los ejes x y y para hacer el respectivo arreglomediante un polinomio de grado 10 (siéntase libre de modi�car el grado delpolinomio).

3.2 Funciones

A continuación se describirán las funciones de las que está compuesta el código.Hay bastante información encontrada en forma de comentarios a lo largo delcódigo, por lo que se recomienda leerlos.

3.2.1 Choose()

Esta función se encarga de realizar la interfaz para seleccionar el archivo conayuda de askopen�le() visto en Tkinter.

17

3.2.2 Prepair(t)

Esta función toma el return entregado por la función pasada y le hace eltratamiento a los datos brutos para que estos puedan ser analizados por nuestrasiguiente función.

def prepa i r ( t ) :try :

mirai , s eka i , va r i en = np . l oadtx t ( t , dtype=" s t r i n g " , unpack=True )except :raise TypeError ( "Sorry , but I couldn ' t unpack the f i l e s . : ( " )

t imein , t imeout = seka i [ 0 ] , s e ka i [−1]s e ka i = np . array ( [ x . r ep l a c e ( " , " , " . " ) for x in s eka i ] )var i en = np . array ( [ x . r ep l a c e ( " , " , " . " ) for x in var i en ] , dtype=" f l o a t " )s eka i = np . array ( [ x . r ep l a c e ( " : " , " , " ) for x in s eka i ] )droptek = [ ]for x in s eka i :

droptek . append (x . s p l i t ( " , " ) )droptek = l i s t ( i t e r t o o l s . chain (∗ droptek ) )droptek = [ f loat ( x ) for x in droptek ]snowblind = [ ]for x in xrange (0 , len ( droptek ) , 3 ) :

snowblind . append ( droptek [ x ]∗3600+ droptek [ x+1]∗60+droptek [ x+2])snowblind = np . array ( snowblind , dtype=" f l o a t " )snowblind = np . array ( [ x−snowblind [ 0 ] for x in snowblind ] )return snowblind , var ien , mirai , t imein , t imeout

3.2.3 Analysis()

Esta función se encarga de sacar promedio, desviación estándar y las grá�casque, con ayuda de la función �t() serán mostradas gracias a la última función.

def ana l y s i s ( phase , twelve , day , may , gs ) :#phase = time , twe l v e = data , day = s t r i n g#may = subp lo t , gs = GridSpec"""

He l lo ! This funt i on makes a l l the graph i c s about the s t a d i s t i c the histogram , the s imple p l o t and the gauss campane . """

myst = 0a , b = sum( twelve ) ∗ 1 . , len ( twelve )∗1 .mean = a/bo = [ ]for x in twelve :

o . append ( ( x−mean)∗∗2)

18

o = (sum( o )/ ( len ( twelve )−1))∗∗ .5drey = [ ]completement = {"good" : "SkyPipe Units (SPU) " , "month" : "Power (W)"}for x in twelve : #This " f o r " i s f o r the Gauss ' s Campane ,

i f x < 3∗o : #I f the data i s sma l l e r than 3 mean de v i a t i ondrey . append (x ) #Join i t to make the Gauss ' s Campane

drey = np . array ( drey )moon = f i t ( phase , twelve )spacement = prep ro c e s s i ng . s c a l e ( drey )#Standard i za t i on look t h i s :#h t t p :// s c i k i t −l e a rn . org / s t a b l e /modules/ prep roce s s ing . htmlp l t . subp lot ( gs [ 0 ,may ] )p l t . p l o t ( phase , twelve , "r−" , l a b e l = "Line ac ro s s the data" )#I f you want to show the po in t s i n d i v i d u a l l y discomment the next comment#p l t . p l o t ( snowbl ind , varien , "g+", l a b e l = " Ind i v i d u a l Data ")p l t . p l o t ( phase , moon , "k−" , l a b e l = "Fit " )p l t . l egend ( f o n t s i z e =10)p l t . t i t l e ( r "Re lat ion Between Time ( $\Delta t$ ) And "+completement [ day ] ,

f o n t s i z e =12)#r"SkyPipe Units ($SPU$)"p l t . s u p t i t l e ( mira i [ 0 ] , f o n t s i z e =10)p l t . y l ab e l ( completement [ day ] , f o n t s i z e =10)

p l t . subp lot ( gs [ 1 ,may ] )p l t . t i t l e ( "Histogram" , f o n t s i z e =10)p l t . h i s t ( twelve , b ins =200 , c o l o r=" v i o l e t " ,

h i s t t ype="bar" , o r i e n t a t i o n=" v e r t i c a l " )#Models o f his togram : bar ' , ' ba r s tacked ' , ' s t e p '#' s t e p f i l l e d ' , ' l e f t ' , 'mid ' , ' r i g h t ' .#Orien ta t ion o f his togram : ' h o r i z on t a l ' , ' v e r t i c a l 'p l t . y l ab e l ( "Times Repeated" , f o n t s i z e =10)

p l t . subp lot ( gs [ 2 ,may ] )p l t . t i t l e ( "Gauss ' s Campane" , f o n t s i z e =10)p l t . h i s t ( spacement , b ins =200 , c o l o r=" v i o l e t " ,

h i s t t ype="bar" , o r i e n t a t i o n=" v e r t i c a l " )p l t . y l ab e l ( "Times Repeated" , f o n t s i z e =10)p l t . x l ab e l ( completement [ day ] , f o n t s i z e =10)

return mean , o , completement [ day ]

3.2.4 Graphic()

Esta parte usa todo lo que le dio la función analysis() para mostrarlo todo enuna ventana emergente con ayuda de Tkinter.

19

def graph ic ( ) :appears = var i en ∗boltzmann∗6 e3f = p l t . f i g u r e ( f i g s i z e =(20 ,20))gs = p l t . GridSpec (3 , 2)mean1 , o1 , comp1 = ana l y s i s ( snowblind , var ien , "good" , 0 , gs )mean2 , o2 , comp2 = ana l y s i s ( snowblind , appears , "month" , 1 , gs )burn = Tk( )def another ( ) :

burn . des t roy ( )def andother ( ) :

burn . des t roy ( )sys . e x i t ( )

burn . p ro to co l ( 'WM_DELETE_WINDOW' , andother )burn . wm_title ( " S t a d i s t i c " )canvas = FigureCanvasTkAgg ( f , master = burn )too lba r = NavigationToolbar2TkAgg ( canvas , burn )L1 = Label ( burn ,

t ex t="Your Mean i s %s %s and your Mean Deviat ion i s %s %s"%(str (mean1 ) , str ( comp1 ) , str ( o1 ) , str ( comp1 ) ) )

L2 = Label ( burn ,t ex t="Your Mean i s %s %s and your Mean Deviat ion i s %s %s"%(str (mean2 ) , str ( comp2 ) , str ( o2 ) , str ( comp2 ) ) )

L3 = Label ( burn ,t ex t="Your obse rvat i on s t a r t ed in %s and f i n i s h e d in %s %s (UT) "%(timein , timeout , mira i [ 0 ] ) )

B1 = Button ( burn , t ex t="Quit" , bg=" red " , f g="white " ,command=andother )B2 = Button ( burn , t ex t="Another F i l e " , bg="blue " , f g="white " , command=another )L1 . g r id ( columnspan=2)L2 . g r id ( columnspan=2)L3 . g r id ( columnspan=2)burn . gr id_columnconf igure (1 , weight=1)B1 . g r id ( row=3, s t i c ky=E)B2 . g r id ( row=3, column=1, s t i c ky=W)burn . gr id_columnconf igure (0 , weight=1)burn . gr id_rowconf igure (4 , weight=1)canvas . get_tk_widget ( ) . g r i d ( row=4, columnspan=2, s t i c ky=W)too lba r . g r i d ( columnspan=2)burn . mainloop ( )

3.2.5 Loop

while True :snowblind , var ien , mirai , t imein , t imeout = prepa i r ( choose ( ) )#Here I use the re turn o f choose ( ) to run prepa i r ( )graph ic ( )

20

4 Conclusiones

• La selección del lugar para la toma de datos es de suma importancia parano toparse con demasiada interferencia, ya que esta di�culta la separaciónde los datos útiles de esta y se llegarían a perder unos cuantos valiososdatos con los métodos de separación por medio de desviaciones estándar.

• Para realizar un análisis profesional de los datos recibidos se debe usar lamodalidad Client Mode y Server Mode de RadioSkyPipe, donde se puedenrecibir datos provenientes de otros computadores funcionando como servi-dores en vivo por medio de una conexión TCP/IP o transmitir los datosrecibidos a otros colegas, respectivamente.

• Al realizar un análisis más extensivo de la fenomenología solar, es necesariotomar una gran cantidad de datos en diferentes períodos de tiempo, asícomo estar enterados de los ciclos solares, entre otras cosas.

• A pesar de que todo el proyecto de Radio Jove realizado por el Semillerode Talentos de la Fundación Universitaria Konrad Lorenz haya sido con�nes educativos y, por lo tanto, no se adjuntaron los datos recolectados alas bases de datos dispuestas a ello, se llevó a cabo un acercamiento de laRadioAstronomía a la sociedad.

• Gracias a esta experiencia los integrantes del Semillero de Talentos adquirieronhabilidades teóricas respecto a la electricidad y el magnetismo, así comoprácticas en la construcción del receptor y las antenas. También se adquirieronhabilidades de programación en los lenguajes Python y Bash.

• Durante la toma de datos se apreciaron algunos picos de intensidad identi-�cados como aumentos repentinos en la emisión de ondas de radio, prove-nientes quizá de algún evento solar.

• Según los datos recibidos, la actividad solar es constante, presentándosepicos en raras ocasiones. Se podría a�rmar que el sol es un cuerpo relati-vamente estable.

5 Referencias

• http://lac.linuxaudio.org/2011/download/python_for_audio_signal_

processing.pdf

• Física Cuántica, Robert Eisberg y Robert Resnick.

• http://stackoverflow.com/questions/9690413/trying-to-use-fft-to-analyze-audio-signal-in-python

• http://samcarcagno.altervista.org/blog/basic-sound-processing-python/

?doing_wp_cron=1411220939.3383259773254394531250

• http://lac.linuxaudio.org/2011/papers/40.pdf

21

• https://github.com/alejandroc137/IntroduccionPythonKL

• http://radiojove.gsfc.nasa.gov/education/lesson_plans/lesson7.

pdf

• Calibrated Noise Source and Bandpass Filter, RF Associates (January2010).x

• https://onedrive.live.com/view.aspx?Bsrc=Share&Bpub=SDX.SkyDrive&

resid=7E94A92EB2CD14CD!122&cid=7e94a92eb2cd14cd&app=PowerPoint&

authkey=!AqFKlx2I4W6VivM

22