Está en la página 1de 24

Anlisis de .

Wav y Estadstica Grca


Edwin Mahecha y Julin Jimnez Crdenas
Semillero de Talentos Matemticos, Cientcos y Tecnolgicos
Fundacin Universitaria Konrad Lorenz
Noviembre, 2014

ndice
1 Introduccin
1.1

RadioAstronoma . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Anlisis de .Wav
2.1

2.2
2.3

Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2

2.1.1

Importando Libreras

. . . . . . . . . . . . . . . . . . . .

2.1.2

Seleccin del archivo . . . . . . . . . . . . . . . . . . . . .

2.1.3

Duracin de Archivo . . . . . . . . . . . . . . . . . . . . .

2.1.4

Grca Amplitud Vs. Tiempo . . . . . . . . . . . . . . . .

2.1.5

Histograma . . . . . . . . . . . . . . . . . . . . . . . . . .

FFT (Fast Fourier Transform) . . . . . . . . . . . . . . . . . . . .

Las Grcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.3.1

Amplitud Vs. Tiempo

. . . . . . . . . . . . . . . . . . . .

10

2.3.2

Histograma . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.3.3

dB Vs. Frecuencia

11

. . . . . . . . . . . . . . . . . . . . . .

3 Estadstica Grca
3.1

12

Importando Libreras . . . . . . . . . . . . . . . . . . . . . . . . .
SYS

3.1.2

Tkinter

3.1.3

Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.1.4

Numpy

17

Funciones

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3.1.1

. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14
15

17

3.2.1

Choose()

. . . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.2.2

Prepair(t) . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.2.3

Analysis() . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.2.4

Graphic() . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.2.5

Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

4 Conclusiones

21

5 Referencias

21

1 Introduccin
Durante el transcurso del ao 2014, la Fundacin Universitaria Konrad Lorenz
llev a cabo el tercer semillero de talentos cientcos, matemticos y tecnolgicos
en la ciudad de Bogot D.C., Colombia. El enfoque principal de este semillero
fue para el proyecto Radio Jove, que consiste en recibir las ondas de radio provenientes de algunos objetos celestes como Jpiter.

Figura 1: Semillero 2013 en ExpoCiencias, Colferias

Para esto, se dividi el semillero en tres grupos, el primer grupo se dedic a


construir el radiotelescopio mediante el cual se recibiran las seales; el segundo
arm el receptor, conformado por una placa base en la que estn ubicados un
montn de circuitos; y el tercero tena como objetivo la construccin de un
programa por el cual se pudiera llevar a cabo un anlisis ptimo de los datos
recibidos por el radiotelescopio.

Figura 2: Posicionamiento de las antenas en el Parque Simn Bolvar, Bogot

El tercer grupo se fragment en otras dos partes debido a la naturaleza de los


datos.

Mediante un computador conectado por audio con el receptor, se eje-

cutaba un programa .exe llamado RadioSkyPipe.

Este programa obtiene los

datos en una unidad conocida como SkyPipeUnits, propia del programa. Despus de esto, se puede guardar los datos obtenidos en formato .spd (formato
de 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 poda
analizar los datos en texto plano, pero con el objetivo de abarcar ms, la primera
parte, perteneciente a Edwin Mahecha se dedic a crear un programa mediante el
cual se pudieran analizar los archivos en formato de audio (.wav) disponibles en

la pgina ocial del proyecto (http://radiojove.gsfc.nasa.gov/software/).


Se estuvieron analizando varios lenguajes de programacin para desarrollar los
cdigos concernientes al anlisis de datos como Matlab y C++, y se lleg a la
conclusin de que el lenguaje que se manejara iba a ser Python. Esto es as
porque este es un lenguaje muy intuitivo, es de alto nivel gracias a sus operadores lgicos y estn implementada una gran cantidad de libreras, por lo que
los cdigos no se iban a empezar desde cero, literalmente.
Adems, las clases impartidas durante el primer semestre del ao por uno de

los dos tutores del semillero de talentos, Alejandro Crdenas Avendao, fueron
de programacin en Python orientado a objetos.
Todos los programas fueron estructurados en iPython Notebook, una herramienta
interactiva para el uso de Python, por lo que permita probar muchas veces los
distintos segmentos del cdigo. Cuando superaba esta etapa de pruebas se proceda a transladar y adaptar los segmentos a un script para ejecutarlo con mayor
rapidez. Adems se pretenda con el cambio crear una interfaz grca amigable
con el usuario, para la cual el mismo no necesitaba habilidades de programacin.
Los dos cdigos tienen en comn el uso de la librera Tkinter (para ms informacin ver la primera seccin de la subsubseccin 3.1.2) con el objetivo de
seleccionar mediante una interfaz grca el archivo a analizar.

Figura 3: Interfaz Grca de Seleccin

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


1. Realizar una interfaz grca amigable con el usuario.
2. Hacer que el programa sea universal.
3. Que el programa indentique los errores ms comunes y actue en consecuencia.
4. El programa debe ser entendible, por lo tanto debe ser simple, no complejo.
5. Realizar una gua para el uso de los programas.

1.1 RadioAstronoma
El proyecto de la NASA RadioJove est orientado a acercar la radioastronoma
a colegios y universidades, aunque no slo eso, tambin se cre este proyecto
para iniciar una base de datos que reuna las mediciones que toman los grupos
que han adquirido el receptor y han construido las antenas. Esto con el n de
comparar los datos adquiridos desde diferentes latitudes y conseguir un mejor
anlisis.
Por lo tanto, antes de explicar cmo funcionan los programas diseados para el
anlisis de los datos recibidos, se debe entender cul es la naturaleza de los fenmenos a los cuales se les realiza las mediciones desde el receptor suministrado
por el proyecto.
Un segmento del Semillero de Talentos se dedic al entendimiento de la RadioAstronoma. Este segmento fue liderado por Daniela Crdenas Slazar, integrante
del Semillero y estudiante del Colegio Parroquial de los Santos Apstoles Pedro
y Pablo en Bogot. Gracias a su apoyo se dar una explicacin amena a esta
rama de la Astronoma encargada de estudiar los cuerpos celestes usando como
mtodo de observacin el segmento del espectro electromagntico conocido como
ondas de radio.
Para recibir seales de buena calidad, se deben utilizar grandes antenas, o grupos de antenas ms pequeas trabajando en paralelo. Tambin se pueden poner
a varios radiotelescopios trabajando en conjunto por medio de interferometra.
Cabe aadir que el espectro visible es una cantidad minscula respecto a todo
el espectro, es como estar ciegos frente a toda la fenomenologa de la que est
compuesta el Universo.
El objetivo de la recoleccin de datos realizado por el Semillero es el sol.

Se

escogi al sol como objeto de estudio debido a la facilidad con la que recibimos
datos de este al ser el cuerpo del cual recibe ms intensidad la Tierra.
El sol se comporta prcticamente como un cuerpo negro, por lo que se rige bajo
los postulados de la

teora cuntica antigua,

ms exactamente por los estudios

realizados en el campo de la radiacin trmica.


Se le llama radiacin trmica a la radiacin emitida por un cuerpo como consecuencia de su temperatura.

Todos los cuerpos emiten esta radiacin a su

derredor, y la absorben de l. Si, en un principio, el cuerpo est ms caliente


que su alrededor, se enfriar, ya que la rapidez con que emite energa exceder
la rapidez con que la absorbe. Cuando se alcanza el equilibrio trmico la rapidez
de emisin y absorcin de energa sern iguales.
A temperaturas ordinarias, la mayora de los objetos no son visibles por la luz
que emiten sino por la luz que reejan, ya que si no se hace incidir luz sobre

ellos no es posible verlos.

Sin embargo, a altas temperaturas los cuerpos son

luminosos por s mismos.

Todos los cuerpos que absorben toda la radiacin

trmica que incide sobre ellos son conocidos como

cuerpos negros.

Independientemente de los detalles de su composicin, todos los cuerpos negros


a la misma temperatura emiten radiacin trmica en el mismo espectro.

La

distribucin espectral de la radiacin de un cuerpo negro se especica por la


cantidad

Rt (v),

llamada radiancia espectral, denida como

RT ()

que repre-

senta la energa emitida en forma de radiacin con frecuencias en el intervalo


y

de un rea unitaria de la supercie a temperatura

y por unidad de

tiempo. En 1899, Lummer y Pringsheim realizaron una de las primeras mediciones precisas de esta cantidad y se dieron cuenta de que a una temperatura
determinada la radiancia espectral describa una especie de curva dependiente
de la frecuencia.

Figura 4:

V s RT ()

A pesar que en el eje de las ordenadas de la gura haga referencia a la longitud


de onda, se debe recordar que

c = ,

por lo que se da una buena idea de la

relacin entre la longitud de onda y la frecuencia.

A principios del S. XX slo se conoca la grca antes expuesta experimentalmente, hasta que Max Plank ide su famosa ecuacin que encierra la energa
total emitida de un cuerpo negro a temperatura

T,

es decir:

Z
RT ()
0
A esto se le conoce como radiancia
donde

= 5.67 10

8 W

/m

(RT ).

Y Plank descubri que

RT = T 4 ,

K . Adems, Wilhelm Wien descubri que existe

una funcin lineal que relaciona la longitud de onda mxima y la temperatura


(b

= T )

donde

b = 2.8976 103 m K .

El sol, al tener una temperatura supercial de aproximadamente 5700 K se


ubica en la longitud de onda del visible, pero una gran cantidad de la radiacin
emitida ocupa la zona de las ondas de radio. Por este motivo es que es sensato
estudiar al sol desde las longitudes de onda altas (7 m).

2 Anlisis de .Wav
Los siguiente cdigos fueron elaborados con la nalidad de realizar un anlisis
a los archivos ejemplo de sonido proporcionados por la NASA para el proyecto
Jove. Estos archivos de sonido pueden ser descargados directamente de la pgina
del proyecto

http://radiojove.gsfc.nasa.gov/.

Los datos tomados sern

utilizados para ser confrontados frente a los datos de la NASA. Cabe resaltar
que las unidades de RadioSkyPipe (programa suministrado) no van a ser muchas
veces compatibles con los resultados de los archivos *.wav.
El programa est dividido en cinco secciones que se explicarn a continuacin. El
programa no es completamente universal, ya que es necesario el uso de libreras
externas a la instalacin bsica de python, por lo cual se recomienda vericar
qu librerias son requeridas o instalar el paquete de anaconda disponible aqu:

https://store.continuum.io/cshop/anaconda/.

2.1 Cdigo
Este cdigo nos permite realizar un anlisis directo a archivos de audio.

Ha-

ciendo uso de archivos de ejemplo proporcionados por la NASA, y otros archivos


grabados localmente, permitieron el desarrollo de este anlisis. En el repositorio de GitHub

https://github.com/SemilleroKonradLorenz/jove

se puede

tener acceso a los cdigos y archivos utilizados en este informe.

2.1.1 Importando Libreras


El programa importa en total 12 libreras, las cuales nos permiten el manejo
grco y de datos en el programa.

import wave
import c o n t e x t l i b
import s c i p y
from p y l a b import
import numpy a s np
6

import math
from s c i p y . s i g n a l
import hann from s c i p y . f f t p a c k import r f f t
from s c i p y . i o import w a v f i l e
import m a t p l o t l i b . p y p l o t a s p l t
from T k i n t e r import Tk
from t k F i l e D i a l o g import a s k o p e n f i l e n a m e
2.1.2 Seleccin del archivo
Para esto se hace uso de la librera Tkinter. Esta ejecuta un cuadro de dialogo
en el cual se puede buscar el archivo en especco.
Si se ve con detalle, se puede apreciar la implementacin anterior a Tkinter.
Dicha implementacin era limitada, ya que slo permitia buscar archivos en
determinada carpeta, a diferencia de Tkinter que permite hacer un uso ms
extensivo.

#L i s t f i l e s in D i r e c t o r y Non Graphic mode


' ' ' d i r e c t =o s . c h d i r ( " / home/%s / j o v e / Sample

Data"% g e t u s e r ( ) )

f i l e s =g l o b . g l o b ( ' . wav ' )


num=0
for

in

files :

print

" %s = %i "%(x ,

num )

num+=1
v a r=i n p u t ( " S e l e c t
#S e l e c t
if

File :")

Files

v a r >(num 1)
raise

or

v a r <0:

V a l u e E r r o r ( " No

valid

argument " ) ' ' '

#Graphic Mode
Tk ( ) . w i t h d r a w ( )
fname = a s k o p e n f i l e n a m e ( )

# show an "Open" d i a l o g box and r e t u r n t h e path t o t h e s e l e c t e d f i l e

print

" File

Selected :

"+fname

2.1.3 Duracin de Archivo


Esta implementacin nos permite saber la duracin del archivo. Esta es dada
en segundos y es el resultado de:

d=

f rames
rate

#fname="/home/edwmapa/ j o v e / Sample Data/"+ f i l e s [ var ]


#F i l e Duration frames / r a t e
with

c o n t e x t l i b . c l o s i n g ( wave .

open ( fname , ' r ' ) )

frames = f . getnframes ( )
rate = f . getframerate ()

as

f :

duration = frames

print

" File

float ( r a t e )

l e n g t h : %f

S e c . "%d u r a t i o n

2.1.4 Grca Amplitud Vs. Tiempo


Se hace uso de la librera scipy.io, para leer el archivo *.wav.
Esta librera lee el archivo *.wav, leyendo dos datos, sampleFeq y snd.

snd

contiene los puntos de la grca(Amplitudes). Se puede apreciar que se hace


uso de la funcin shape() la cual nos permite determinar cuantos canales tiene
el sonido.

Los archivos de ejemplo nicamente poseen un canal, sin embargo

otras grabaciones pueden poseer varios canales, por eso nicamente se toma el
primer canal.

#w a v f i l e . read ( ) r e t u r n s r a t e and data in numpy array


i n p u t _ d a t a=w a v f i l e . r e a d ( fname )
sampFreq ,

snd = input_data

snd = snd

(2.15)

print " T h i s i s t h e
print ( s n d . s h a p e )

shape

of

the

sound

( sample

points ,

chanels

sound ) : "

#I f t h e sound has more than one channel , o n l y l o a d f i r s t channel

i f len ( s n d . s h a p e ) ! = 1 :
s n d=s n d [ : , 0 ]

#Arange o f ms

s a m p l e P o i n t s=s n d . s h a p e [ 0 ]
timeArray = arange ( 0 ,
timeArray = timeArray

float ( s n d . s h a p e [ 0 ] ) ,
/

1)

sampFreq

timeArray = timeArray

#s c a l e t o seconds

maxV=(np . amax ( s n d ) ) + . 0 5

#Max Value o f snd

minV=(np . amin ( s n d ) ) . 0 5

#yDuration y d u r a t i o n = np . array ( d u r a t i o n )
y d u r a t i o n = np . r e p e a t ( y d u r a t i o n , 2 )
%m a t p l o t l i b

inline

p l t . f i g u r e ( f i g s i z e =(20 ,10))
p l t . p l o t ( t i m e A r r a y , snd , ' b ' )
p l t . p l o t ( y d u r a t i o n , np . l i n s p a c e ( minV , maxV ,

2) ,

#Limit l i n e

" r " )

p l t . y l i m (maxV , maxV)
plt . t i t l e (" File :

"+fname )

y l a b e l ( ' Amplitude ' )


x l a b e l ( ' Time

( sec . ) ' )

La amplitud dada en esta grca est dada en volts (v ), y los valores gracados
estan en el orden de los milivolts.

2.1.5 Histograma
El histograma basicamente permite ver las veces que una amplitud se repite a
lo largo de todo el archivo.

#%m a t p l o t l i b i n l i n e
p 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 i n s =200)

x l a b e l ( ' Amplitude ' )


y l a b e l ( ' Times

Repeated ' )

2.2 FFT (Fast Fourier Transform)


La Transformada Rpida de Fourier, y ms especcamente la Transformada
de Fourier Discreta, nos permite tomar una serie de datos de longitud nita,
para dar una representacion del dominio de la frecuencia. La siguiente frmula
corresponde a la Transformada Discreta:

y[k] =

N
1
X

kn

e2j N x[n] ,

n=0
En la formula N es una secuencia de nmeros complejos (X0 , ...,XN 1 ). Esta secuencia es transformada en otra secuencia de N valores por medio de la ecuacin
anterior.
La DFT busca hallar

y [k]es

y [k],

partiendo de

X [n].

la frecuencia resultante.

i n p u t _ d a t a 1 =w a v f i l e . r e a d ( fname )
audio1 = input_data1 [ 1 ]

#Sampling samp=2048
#Here we check t h e sound shape . We cant work w i t h t h e
sound i f t h sound has more than one channel .

i f len ( a u d i o 1 . s h a p e ) ! = 1 :
a u d i o 1=a u d i o 1 [ : , 0 ]

#Hanning window

window=hann ( samp )
a u d i o 1 = a u d i o 1 [ 0 : samp ]

window

#Fast Fourier Transform f f t


mags=

abs ( r f f t ( a u d i o 1 ) )

#dB v a l u e s
mags= 20

s c i p y . l o g 1 0 ( mags )

#To 0 dB , s e t max mags t o z e r o


mags

=max( mags )

#p l o t

p 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 a b e l ( " Magnitude

$ ( dB ) $ " ,

size

=30)

x l a b e l ( " Frequency

Bin " ,

s i z e =30)

plt . legend ()
plt . t i t l e ( " Flute

Spectrum " ,

s i z e =30)

p l t . show ( )
En el cdigo tambin se puede apreciar el uso de una escala logartmica con el
n de calular decibeles(dB ). Esta escala coresponde a la ecuacin:

GdB = 20log10 (

V1
)
V0

Esta formula es aplicada en circuitos elctricos, en donde


referencia,

V1

V0

es un voltaje de

es un voltaje dado.

2.3 Las Grcas


2.3.1 Amplitud Vs. Tiempo
En la gura se puede apreciar como se ve gracado el audio de uno de los
archivos de ejemplo proporcionados por la NASA.
Se puede apreciar que las unidades de Amplitud van de -1 a 1. La amplitud va
dada en volts, y se trabaja en el rango de los milivoltios(mV ), por ello es que
se puede hacer una conversin a decibeles.

Figura 5: Amplitud Vs. Tiempo


Esta grca brinda informacin de como la seal es interpretada por el computador, an as no se ha realizado ningn anlisis de datos respecto al *.wav.

2.3.2 Histograma
El histograma se realiza con el objetivo de identicar las veces que se repite una
amplitud, en este caso nos ayuda a descartar algunas interferencias, debido a que

10

usualmente las amplitudes ms bajas corresponde a interferencias del ambiente


como lo pueden ser:

Lneas de corriente (usualmente sus frecuencias oscilan entre los 50-60

Hz ).

Emisoras de radio, telfonos, etc.

Eventos naturales como lo son rayos, truenos, etc.

Otros.

Figura 6: Histograma

2.3.3 dB Vs. Frecuencia


En esta grca se hace uso de la Transformada Rpida de Fourier (FFT) y la
conversin logartmica para decibeles en el caso de los milivoltios(mV ). En este
caso, el voltaje de referencia

V0 = 1V ,

debido a que la escala es trabajada desde

1 a -1, es decir.

GdB = 20log10 (

V oltajeRecibido
)
1V

La siguiente tabla muestra los valores ms comunes:


La grca permite conocer las frecuencias del sonido junto con sus valores en
decibeles, esto nos es sumamente til para discriminar valores que se consideren
interferencia siempre y cuando conozcamos sus frecuencias, como es el caso de
lneas de corriente o las emisoras de radio.

11

dB

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 Estadstica Grca
As como se analiz los datos en el formato .wav, se hizo necesario realizar un
programa que sea capaz de analizar los datos que se conseguan en bruto del
programa RadioSkyPype, donde los datos se encontraban distribuidos en tres
columnas. La primera columna representa la fecha de la medicin, la segunda
representa la hora en UT y la tercera el valor en SkyPipeUnits. Si el archivo a
analizar no cumple las especicaciones exigidas por el programa un error ser
elevado como se apreciar a continuacin.
Pueden surgir errores de compatibilidad debido al uso del cdigo en otros computadores, pero en s el programa es universal (fue probado en computadores
con distinta resolucin). Podra haber algn error relacionado con el formato de
los 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 la
necesidad de tener python instalado. Tambin se aspira a convertir el programa
en un binario para aumentar su universalidad.

12

Puede que el programa tarde

un poco al principio, esto es debido a que Tkinter tarda un poco.

Tambin

inuye bastante la memoria RAM del host, pero eventualmente el programa se


ejecutar.
A pesar de que los datos recibidos estn en SkyPypeUnits, se puede realizar una
transformacin suponiendo que esta unidad es en realidad la temperatura de la
antena mediante la siguiente ecuacin:

P = kT B
Donde:

P
k

es la potencia

(W ).

es la constante de Boltzmann

(1.38 1023

es la banda de recepcin en hertz.

es la temperatura del resistor en kelvins.

J
K ).

Si ejecuta el script normalmente aparecer la siguiente imagen.

La primera

columna representa de arriba a abajo:

La grca de la magnitud de cada dato Vs el tiempo transcurrido en


segundos desde el primer dato.

El histograma de frecuencias.

La campana de Gauss de estos datos, se puede modicar el nmero de


desviaciones estndar como se ver ms 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 Libreras


El programa importa un total de 12 libreras, en algunas simplemente llama los
mdulos necesarios.

Las libreras sern explicadas a continuacin.

Las expli-

caciones mediante cdigo se suelen dividir en secciones, y la delimitacin entre


secciones son dos lneas (para tener en cuenta).

3.1.1 SYS
=================================================

import

sys

=================================================

if

sys . version_info [ 0 ]

from

else :
from

<

Tkinter

import

tkinter

import

3:

=================================================
sys . exit ()
=================================================

En la primera seccin cdigo expuesto se realiza la importacin normal de la


librera SYS.

14

En la segunda seccin se usa

sys.version_info,

un comando que nos manda en

forma de lista las especicaciones de nuestro Python actual.

Este comando

emite para los tres primeros datos los tres componentes de la versin de Python
del sistema, por ejemplo, si su versin actual de Python es 2.7.8, cuando ejecute

sys.version_info[0], obtendr 2. Esto es usado en esta seccin debido a que la


Tkinter tiene nombre diferente a partir de versiones de Python mayores
de 3 ( tkinter ).
librera

La tercera seccin es simplemente una manera de salirse automticamente de


todo el script, ya que este programa funciona con un loop innito, al que no
se le puede poner

break

ya que el programa es controlado por funciones para

optimizar su funcionamiento.

3.1.2 Tkinter
Como se vio en la subsubseccin anterior, se importa

Tkinter

dependiendo de

la versin de Python con la que se est ejecutando el script. Se importa todo lo


concerniente a esta librera para evitar las molestias de llamar los mtodos.

r o o t = Tk ( )
m = t k F i l e D i a l o g . a s k o p e n f i l e ( p a r e n t=r o o t , mode= ' r b ' , t i t l e = ' . . . ' )
root . destroy ()
=================================================
b u r n = Tk ( )
b u r n . p r o t o c o l ( 'WM_DELETE_WINDOW' ,

andother )

burn . wm_title ( " S t a d i s t i c " )


L1 = L a b e l ( burn ,

t e x t=" Your Mean

i s %s %s

and

your

Mean

L2 = L a b e l ( burn ,

t e x t=" Your Mean

i s %s %s

and

your

Mean . . . "

L3 = L a b e l ( burn ,

t e x t=" Your

observation

B1 = B u t t o n ( burn ,

t e x t=" Q u i t " ,

B2 = B u t t o n ( burn ,

t e x t=" A n o t h e r

started

bg=" r e d " ,
File " ,

in

f g=" w h i t e "

Deviation

%... "
, command=a n d o t h e r )

bg=" b l u e " , . . . )

L1 . g r i d ( c o l u m n s p a n =2)
L2 . g r i d ( c o l u m n s p a n =2)
L3 . g r i d ( c o l u m n s p a n =2)
burn . g r i d _ c o l u m n c o n f i g u r e ( 1 ,
B1 . g r i d ( row =3 ,

s t i c k y=E)

B2 . g r i d ( row =3 ,

column =1 ,

burn . g r i d _ r o w c o n f i g u r e ( 4 ,

w e i g h t =1)

s t i c k y=W)

burn . g r i d _ c o l u m n c o n f i g u r e ( 0 ,

w e i g h t =1)

w e i g h t =1)

burn . m a i n l oo p ( )

Para entender la mayor parte del cdigo expuesto es necesario investigar la documentacin de

Tkinter.

Esta documentacin puede ser encontrada en el siguiente

15

is . . . "

link

http://effbot.org/tkinterbook/.

Aqu se explicar lo esencial, por lo

que se hace necesario buscar en la documentacin si se desea hacer un trabajo


similar que se adapte con las necesidades de la aplicacin.
En la primera seccin se usa el comando ms elemental de

Tkinter: Tk(). Este


Tkinter.

comando es el que le dice a Python que realizar una ventana de tipo

Todo lo que se le vaya a agregar a la ventana emergente debe estar dentro de

Tk() y de Tk().mainloop(). En la segunda lnea de la primera seccin


tkFileDialog.askopenle, un mtodo que crea una ventana tipo Tkinter

se usa
que es

capaz de navegar a travs de los archivos del sistema.


En la segunda seccin es an ms importante consultar la documentacin, ya
que all ya se usa el comando

Tk.grid(), que contiene gran cantidad de *args

que

requerirn un trabajo riguroso para ser explicados en detalle. Si el amable lector


no entiende alguna parte de la segunda seccin remtase a la documentacin.
Debe tener en cuenta que esta seccin no incluye las funciones

dother,

another

an-

por lo que el lector deber ir al cdigo para ver ms a fondo el fun-

cionamiento de la funcin

graphic(),

a la cual pertenecen las funciones antes

descritas.
Bsicamente lo que se hace en esta seccin es aadir el texto que ir en la interfaz
grca ms los botones que tienen las funciones

another

andother

para salirse

de todo el script o continuar con el loop en el cual trabaja el programa. Esto se


ubica encima de las grcas.

Figura 9: Texto y Botones

3.1.3 Matplotlib

Pyplot

Este es un mtodo de Matplotlib muy conocido por las personas que gracan,
por lo que no explicar en mucho detalle lo concerniente a este mtodo.
nuevo adjunto la documentacin de la librera

http://matplotlib.org/

De
en

caso de que no se entienda algo concerniente al cdigo. El cdigo incluye buena


parte de esta librera, pero toda est concentrada en la funcin

twelve, day, may, gs)

comentarios hechos en el cdigo).

1.

analysis(phase,

(las variables recibidas por esta funcin son descritas en

backends.backend_tkagg

FigureCanvasTkAgg:
16

c a n v a s = FigureCanvasTkAgg ( f ,
Usada en la funcin
del
2.

plot

graphic()

m a s t e r = burn )

para poder insertar imgenes provenientes

en la ventana emergente (

burn )

NavigationToolbar2TkAgg:
t o o l b a r = NavigationToolbar2TkAgg ( canvas ,
Se le inserta abajo del

plot

burn )

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 tpica barra de herramientas del


entre otros. Este comando es usado en la funcin

graphic().

plt.show() ),

Figura 10: Barra de Herramientas

3.1.4 Numpy
Esta librera es usada para tres detalles muy importantes:
Es capaz de realizar arreglos, que aumentan la eciencia y facilitan el trabajo
con la inmensa cantidad de datos que se pueden recibir de un .txt promedio.
mirai ,

sekai ,

v a r i e n = np . l o a d t x t ( t ,

d t y p e=" s t r i n g " ,

unpack=True )

Esta parte es esencial para el cdigo, ya que aqu se realiza la extraccin de


todos los datos desde el .txt, esta seccin se encuentra en la funcin

prepair(t).

return

to )

np . l i b . p o l y v a l ( np . l i b . p o l y f i t ( t o ,

Esta seccin es la nica orden que ejecuta la funcin


ella los valores pertenecientes a los ejes

be ,

10) ,

t(to, be),

que toma para

para hacer el respectivo arreglo

mediante un polinomio de grado 10 (sintase libre de modicar el grado del


polinomio).

3.2 Funciones
A continuacin se describirn las funciones de las que est compuesta el cdigo.
Hay bastante informacin encontrada en forma de comentarios a lo largo del
cdigo, por lo que se recomienda leerlos.

3.2.1 Choose()
Esta funcin se encarga de realizar la interfaz para seleccionar el archivo con
ayuda de

askopenle()

visto en

Tkinter.

17

3.2.2 Prepair(t)
Esta funcin toma el

return

entregado por la funcin pasada y le hace el

tratamiento a los datos brutos para que estos puedan ser analizados por nuestra
siguiente funcin.

def p r e p a i r ( t ) :
try :
mirai ,

sekai ,

v a r i e n = np . l o a d t x t ( t ,

except :
raise

TypeError ( " Sorry ,

timein ,

timeout = s e k a i [ 0 ] ,

but

couldn ' t

s e k a i [ 1]

s e k a i = np . a r r a y ( [ x . r e p l a c e ( " , " ,

" . ")

v a r i e n = np . a r r a y ( [ x . r e p l a c e ( " , " ,
s e k a i = np . a r r a y ( [ x . r e p l a c e ( " : " ,
droptek =

for

in

" . ")
" ,")

d t y p e=" s t r i n g " ,
unpack

the

unpack=True )

files .

for x in s e k a i ] )
for x in v a r i e n ] ,
for x in s e k a i ] )

:( ")

d t y p e=" f l o a t " )

[]
sekai :

d r o p t e k . append ( x . s p l i t ( " , " ) )


droptek =
droptek =

l i s t ( i t e r t o o l s . chain ( droptek ) )
float ( x ) for x in d r o p t e k ]

snowblind =

for

[]

in xrange ( 0 , len ( d r o p t e k ) ,

3):

s n o w b l i n d . append ( d r o p t e k [ x ] 3 6 0 0 + d r o p t e k [ x +1] 60+ d r o p t e k [ x + 2 ] )


s n o w b l i n d = np . a r r a y ( s n o w b l i n d ,

d t y p e=" f l o a t " )

for

s n o w b l i n d = np . a r r a y ( [ xs n o w b l i n d [ 0 ]

return

snowblind ,

varien ,

mirai ,

timein ,

in

snowblind ] )

timeout

3.2.3 Analysis()
Esta funcin se encarga de sacar promedio, desviacin estndar y las grcas
que, con ayuda de la funcin

def

a n a l y s i s ( phase ,

t()

sern mostradas gracias a la ltima funcin.

twelve ,

day ,

may ,

gs ) :

#phase = time , t w e l v e = data , day = s t r i n g


#may = s u b p l o t , gs = GridSpec
"""
Hello !
This

funtion

makes

the

histogram ,

the

simple

plot

and

all
the

the

graphics

gauss

about

campane .

"""
myst = 0
a,

b =

sum ( t w e l v e ) 1 . , len ( t w e l v e ) 1 .

mean = a / b
o =

for

[]
x

in

twelve :

o . append ( ( xmean ) 2 )

18

the

stadistic

o = (

sum ( o ) / ( len ( t w e l v e ) 1 ) ) . 5

drey =

[]

completement = { " good "

for

in

" SkyPipe

Units

(SPU) " ,

" month "

" Power

#This " f o r " i s f o r t h e Gauss ' s Campane ,


i f x < 3 o : #I f t h e data i s s m a l l e r than 3 mean d e v i a t i o n
d r e y . append ( x ) #Join i t t o make t h e Gauss ' s Campane

(W) " }

twelve :

d r e y = np . a r r a y ( d r e y )
moon =

f i t ( phase ,

twelve )

spacement = p r e p r o c e s s i n g . s c a l e ( drey )

#S t a n d a r d i z a t i o n l o o k t h i s :
#h t t p : / / s c i k i t l e a r n . org / s t a b l e / modules / p r e p r o c e s s i n g . html
p l t . s u b p l o t ( g s [ 0 , may ] )
p l t . p l o t ( phase ,

twelve ,

p l t . p l o t ( phase ,

moon ,

" r " ,

label

= " Line

across

the

data " )

#I f you want t o show t h e p o i n t s i n d i v i d u a l l y discomment t h e n e x t comment


#p l t . p l o t ( snowblind , varien , " g +", l a b e l = " I n d i v i d u a l Data ")
" k" ,

label

= " Fit ")

Time

( $\ Delta

p l t . l e g e n d ( f o n t s i z e =10)
plt . t i t l e ( r" Relation

Between

t$ )

And "+c o m p l e t e m e n t [ day ] ,

f o n t s i z e =12)

#r " SkyPipe Units ($SPU$)"


plt . s u p t i t l e ( mirai [ 0 ] ,

f o n t s i z e =10)

p l t . y l a b e l ( c o m p l e t e m e n t [ day ] ,

f o n t s i z e =10)

p l t . s u b p l o t ( g s [ 1 , may ] )
p l t . t i t l e ( " Histogram " ,
p l t . h i s t ( twelve ,

f o n t s i z e =10)

b i n s =200 ,

h i s t t y p e=" b a r " ,

c o l o r=" v i o l e t " ,

o r i e n t a t i o n=" v e r t i c a l " )

#Models o f histogram : bar ' , ' b a r s t a c k e d ' , ' s t e p '


#' s t e p f i l l e d ' , ' l e f t ' , ' mid ' , ' r i g h t ' .
#O r i e n t a t i o n o f histogram : ' h o r i z o n t a l ' , ' v e r t i c a l '
p l t . y l a b e l ( " Times

Repeated " ,

f o n t s i z e =10)

p l t . s u b p l o t ( g s [ 2 , may ] )
p l t . t i t l e ( " Gauss ' s

Campane" ,

p l t . h i s t ( spacement ,

b i n s =200 ,

h i s t t y p e=" b a r " ,
p l t . y l a b e l ( " Times

mean ,

o,

c o l o r=" v i o l e t " ,

o r i e n t a t i o n=" v e r t i c a l " )

Repeated " ,

p l t . x l a b e l ( c o m p l e t e m e n t [ day ] ,

return

f o n t s i z e =10)

f o n t s i z e =10)
f o n t s i z e =10)

c o m p l e t e m e n t [ day ]

3.2.4 Graphic()
analysis()
Tkinter.

Esta parte usa todo lo que le dio la funcin


una ventana emergente con ayuda de

19

para mostrarlo todo en

def

graphic ( ) :

a p p e a r s = v a r i e n boltzmann 6 e3
f = 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 = a n a l y s i s ( s n o w b l i n d ,

varien ,

mean2 ,

o2 ,

comp2 = a n a l y s i s ( s n o w b l i n d ,

appears ,

" good " ,

0,

" month " ,

gs )
1,

gs )

b u r n = Tk ( )

def

another ( ) :

burn . d e s t r o y ( )

def

andother ( ) :

burn . d e s t r o y ( )
sys . exit ()
b u r n . p r o t o c o l ( 'WM_DELETE_WINDOW' ,

andother )

burn . wm_title ( " S t a d i s t i c " )


c a n v a s = FigureCanvasTkAgg ( f ,

m a s t e r = burn )

t o o l b a r = NavigationToolbar2TkAgg ( canvas ,

burn )

L1 = L a b e l ( burn ,
t e x t=" Your Mean
%(

i s %s %s

and

your

Mean

Deviation

i s %s %s "

i s %s %s

and

your

Mean

Deviation

i s %s %s "

str ( mean1 ) , str ( comp1 ) , str ( o 1 ) , str ( comp1 ) ) )

L2 = L a b e l ( burn ,
t e x t=" Your Mean
%(

str ( mean2 ) , str ( comp2 ) , str ( o 2 ) , str ( comp2 ) ) )

L3 = L a b e l ( burn ,
t e x t=" Your
%( t i m e i n ,

observation
timeout ,

started

i n %s

and

finished

B1 = B u t t o n ( burn ,

t e x t=" Q u i t " ,

B2 = B u t t o n ( burn ,

t e x t=" A n o t h e r

bg=" r e d " ,
File " ,

f g=" w h i t e "

bg=" b l u e " ,

L2 . g r i d ( c o l u m n s p a n =2)
L3 . g r i d ( c o l u m n s p a n =2)
burn . g r i d _ c o l u m n c o n f i g u r e ( 1 ,
s t i c k y=E)

B2 . g r i d ( row =3 ,

column =1 ,

w e i g h t =1)

s t i c k y=W)

burn . g r i d _ c o l u m n c o n f i g u r e ( 0 ,
burn . g r i d _ r o w c o n f i g u r e ( 4 ,

w e i g h t =1)

w e i g h t =1)

c a n v a s . g e t _ t k _ w i d g e t ( ) . g r i d ( row =4 ,

c o l u m n s p a n =2 ,

s t i c k y=W)

t o o l b a r . g r i d ( c o l u m n s p a n =2)
burn . m a i n l oo p ( )

3.2.5 Loop
while

True :

snowblind ,

varien ,

mirai ,

timein ,

timeout = p r e p a i r ( choose ( ) )

#Here I use t h e r e t u r n o f choose ( ) t o run p r e p a i r ( )


graphic ()

20

(UT) "

, command=a n d o t h e r )

f g=" w h i t e " ,

L1 . g r i d ( c o l u m n s p a n =2)

B1 . g r i d ( row =3 ,

i n %s %s

mirai [ 0 ] ) )
command=a n o t h e r )

4 Conclusiones

La seleccin del lugar para la toma de datos es de suma importancia para


no toparse con demasiada interferencia, ya que esta diculta la separacin
de los datos tiles de esta y se llegaran a perder unos cuantos valiosos
datos con los mtodos de separacin por medio de desviaciones estndar.

Para realizar un anlisis profesional de los datos recibidos se debe usar la


modalidad

Client Mode

Server Mode

de RadioSkyPipe, donde se pueden

recibir datos provenientes de otros computadores funcionando como servidores en vivo por medio de una conexin TCP/IP o transmitir los datos
recibidos a otros colegas, respectivamente.

Al realizar un anlisis ms extensivo de la fenomenologa solar, es necesario


tomar una gran cantidad de datos en diferentes perodos 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 Semillero


de Talentos de la Fundacin Universitaria Konrad Lorenz haya sido con
nes educativos y, por lo tanto, no se adjuntaron los datos recolectados a
las bases de datos dispuestas a ello, se llev a cabo un acercamiento de la
RadioAstronoma a la sociedad.

Gracias a esta experiencia los integrantes del Semillero de Talentos adquirieron


habilidades tericas respecto a la electricidad y el magnetismo, as como
prcticas en la construccin del receptor y las antenas. Tambin se adquirieron
habilidades de programacin en los lenguajes Python y Bash.

Durante la toma de datos se apreciaron algunos picos de intensidad identicados como aumentos repentinos en la emisin de ondas de radio, provenientes quiz de algn evento solar.

Segn los datos recibidos, la actividad solar es constante, presentndose


picos en raras ocasiones. Se podra armar que el sol es un cuerpo relativamente estable.

5 Referencias
http://lac.linuxaudio.org/2011/download/python_for_audio_signal_
processing.pdf

Fsica Cuntica, Robert Eisberg y Robert Resnick.

http://stackoverflow.com/questions/9690413/trying-to-use-fft-to-analyze-audio-signal-i
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 (January


2010).x

https://onedrive.live.com/view.aspx?Bsrc=Share&Bpub=SDX.SkyDrive&
resid=7E94A92EB2CD14CD!122&cid=7e94a92eb2cd14cd&app=PowerPoint&
authkey=!AqFKlx2I4W6VivM

22

También podría gustarte