Laboratorio 2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 29

Introduccion a la programación en Python: parte

II

Laboratorio 2
En este laboratorio se pretende que el estudiante use las bases de progamación en python ya
establecidas en la primera parte de este laboratorio, y utilice algoritmos para leer señales de diferentes
fuentes de información

Importar librerias a utilizar durante el laboratorio


In [1]: import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io.wavfile import read, write
from IPython.display import Audio
#from six.moves import urllib
%matplotlib inline
Lectura de señales digitales de diferentes fuentes de
información

Fuentes de datos y señales en Colombia

https://www.datosabiertos.gob.pe/ (https://www.datosabiertos.gob.pe/)

Ejemplos

Datos Horarios de Contanimantes del Aire en Lima Metropolitana - SETIEMBRE 2020- Servicio Nacional
de Meteorología e Hidrología del Perú - senamhi (https://www.datosabiertos.gob.pe/dataset/datos-
horarios-de-contanimantes-del-aire-en-lima-metropolitana-setiembre-2020-servicio-0)

[Eficiencia en el uso del espectro radioeléctrico en sistemas punto a multipunto]

[Puntos de navegacion WiFi gratis en Lima - para ubicación en el mapa]

[Internet Fijo Penetración Municipio]

UCI Machine learning reppository

https://archive.ics.uci.edu/ml/datasets.php (https://archive.ics.uci.edu/ml/datasets.php)

Ejemplos

Air Quality Data Set (https://archive.ics.uci.edu/ml/datasets/Air+Quality)

Human Activity Recognition Using Smartphones Data Set (https://archive.ics.uci.edu/ml/datasets


/Human+Activity+Recognition+Using+Smartphones)

Kaggle

https://www.kaggle.com/datasets (https://www.kaggle.com/datasets)

Ejmplos

Web Traffic Time Series Forecasting (https://www.kaggle.com/c/web-traffic-time-series-forecasting/data)

1. Archivos .txt
Información BCR

Disponible aqui (https://estadisticas.bcrp.gob.pe/estadisticas/series/mensuales/tipo-de-cambio-promedio-


del-periodo)
In [2]: # https://estadisticas.bcrp.gob.pe/estadisticas/series/mensuales/tip
o-de-cambio-promedio-del-periodo
data=np.loadtxt("PrecioDolar.txt")
print(data[1:5])
print(data.shape)

[[2.0000e+00 1.0000e+00 1.9920e+03 6.3861e+02]


[3.0000e+00 1.0000e+00 1.9920e+03 6.3258e+02]
[4.0000e+00 1.0000e+00 1.9920e+03 6.3807e+02]
[5.0000e+00 1.0000e+00 1.9920e+03 6.3807e+02]]
(10207, 4)

In [3]: signal=data[:,3]
t=np.arange(len(signal))
plt.plot(t,signal)
plt.xlabel("muestras")
plt.ylabel("TRM COP -US")
plt.grid()
plt.show()
In [4]: Ts =1.0/365 # periodo de muestreo
t=np.arange (1992, 2019+345* Ts+7*Ts , Ts) # se deben tener en cuen
ta los años bisiestos
print(t.shape)
plt.plot(t,signal)
plt.xlabel("Fecha")
plt.ylabel("TRM COP -US")
plt.grid()
plt.show()

(10207,)

In [5]: Ts =1.0/365
t=np.arange (1992, 2019+345* Ts+7*Ts , Ts) # se deben tener en cuen
ta los años bisiestos
plt.figure(figsize=(15,8)) # modificar el tamaño de la figura
plt.plot(t,signal, linewidth=3)
plt.xlabel("Fecha", fontsize=20)
plt.ylabel("TRM COP -US", fontsize=20)
plt.grid()
plt.show()

In [ ]:
In [6]: data=np.loadtxt("dolarccc.csv")
print(data[1:5])
print(data.shape)

[2.2505 2.22885714 2.18576191 2.12785714]


(321,)

In [7]: signal=data
t=np.arange(len(signal))
plt.plot(t,signal)
plt.xlabel("muestras")
plt.ylabel("TRM COP -US")
plt.grid()
plt.show()
In [8]: #Ts =1.0/365 # periodo de muestreo
Ts =1.0/12 # periodo de muestreo
#t=np.arange (1992, 2019+345* Ts+7*Ts , Ts) # se deben tener en cue
nta los años bisiestos
t=np.arange (1994 + 3*Ts, 2021, Ts) # se deben tener en cuenta los a
ños bisiestos
print(t.shape)
plt.plot(t,signal)
plt.xlabel("Fecha")
plt.ylabel("TRM COP -US")
plt.grid()
plt.show()

(321,)

2. Señales de "comma separated values (csv)"


In [9]: data=pd.read_csv("dataSiata.csv")
print(data.head())

index year month day hour pm25 pm10 ozono nox


0 0 2012 7 6 11:00:00 29.0 71.0 33.0 0.0
1 1 2012 7 6 12:00:00 21.0 33.0 43.0 0.0
2 2 2012 7 6 13:00:00 20.0 76.0 59.0 0.0
3 3 2012 7 6 14:00:00 24.0 76.0 46.0 0.0
4 4 2012 7 6 15:00:00 13.0 76.0 44.0 0.0
In [10]: signal=data["pm10"]
t=np.arange(len(signal))
plt.figure(figsize=(15,6))
plt.plot(t,signal)
plt.xlabel("samples")
plt.ylabel("Concentracion particulas PM10")
plt.grid()
plt.show()

In [11]: signal=data["ozono"]
t=np.arange(len(signal))
plt.figure(figsize=(15,8))
plt.plot(t,signal)
plt.xlabel("samples")
plt.ylabel("Concentracion ozono")
plt.grid()
plt.show()
In [12]: signal=data["pm10"]

find0=np.where(signal<200)[0]
signal2=signal[find0]
t=np.arange(len(signal2))

plt.figure(figsize=(15,8))
plt.plot(t,signal2)
plt.xlabel("samples")
plt.ylabel("Concentracion particulas PM10")

plt.grid()
plt.show()
In [13]: puntos=data.query("hour=='07:00:00'")

print(puntos)

index year month day hour pm25 pm10 ozono


nox
15 15 2012 7 7 07:00:00 32.0 44.0 6.000000
0.000
24 24 2012 7 12 07:00:00 30.0 39.0 4.000000
0.000
57 57 2012 7 17 07:00:00 27.0 52.0 4.000000
0.000
78 78 2012 7 18 07:00:00 20.0 37.0 6.000000
0.000
101 101 2012 7 19 07:00:00 23.0 33.0 7.000000
0.000
... ... ... ... ... ... ... ... ...
...
47676 2501 2017 2 26 07:00:00 38.0 58.0 2.384310
0.000
47721 2546 2017 2 27 07:00:00 54.0 82.0 2.238830 5
9.980
47722 2547 2017 2 27 07:00:00 34.0 63.0 2.516530
0.000
47769 2594 2017 2 28 07:00:00 57.0 89.0 0.161827 9
3.888
47770 2595 2017 2 28 07:00:00 26.0 52.0 1.154860
0.000

[2001 rows x 9 columns]


In [14]: signal=data["pm10"]

puntos_eje=puntos.index.values

signal2=signal[puntos_eje]
t=np.arange(len(signal2))
plt.figure(figsize=(15,8))
plt.plot(t,signal2)
plt.xlabel("muestras")
plt.ylabel("Concentracion particulas PM10 todos los dias a las 7 a
m")
plt.grid()
plt.show()
In [15]: puntos=data.query("year=='2015' and month=='2'")
# puntos=data.query("year=='2015' and month=='2' and day=='1'")

signal=data["pm10"]

puntos_eje=puntos.index.values

signal2=signal[puntos_eje]
t=np.arange(len(signal2))
plt.figure(figsize=(15,8))
plt.plot(t,signal2)
plt.xlabel("muestras")
plt.ylabel("Concentracion particulas PM10 Feb 2015")
plt.grid()
plt.show()

3. Señales de audio (.wav)


In [16]: fs,signal=read("098_readtext_PCGITA.wav")
t=np.arange(len(signal))/fs
plt.figure(figsize=(15,8))
plt.plot(t,signal)
plt.xlabel("Time [s]")
plt.ylabel("Amplitude")
plt.grid()
plt.show()

Note que los valores de amplitud del audio se encuentran entre y , lo que indica 16
bits de cuantizacion (1 para el signo y 15 para las amplitudes)

In [17]: Audio(signal, rate=fs)

Out[17]:
0:00:00 / 37:16:58

Invertir la señal

In [18]: signal3=signal[::-1]
write("signal3.wav", fs, signal3)
Audio(signal3, rate=fs)

Out[18]:
0:00:00 / 37:16:58

4. Guardar señales de audio generadas


In [19]: fs=16000
t=np.arange(0,20,1.0/fs)
signal_sin=np.sin(2*np.pi*(t**3))

signal_sin=np.asarray(signal_sin*2**15, dtype=np.int16)
write("signal_sin.wav", fs, signal_sin)

In [20]: Audio(signal_sin, rate=fs)

Out[20]:
0:00:00 / 37:16:58

In [ ]:

Segunda parte
5. Uso de funciones en python
In [21]: def energy(signal):
s2=signal**2
energy=sum(s2)
return energy

def DC(signal):
dc=np.mean(signal)
return dc

Ejemplo 1: calculo de la energia y el nivel DC de una señal discreta

In [22]: signal=np.asarray([2,4,6,0,0,1,2,4,0])
E=energy(signal)
dc=DC(signal)
print("Energia="+str(E))
print("valor DC="+str(dc))

Energia=77
valor DC=2.111111111111111

Ejemplo 2: calculo de la energia y el nivel DC de una señal sinusoidal


In [23]: f=1.
fs=20.
Nmuestras=10*fs # la señal quiero que dure 10 segundos
t=np.arange(Nmuestras)/fs
signal=np.sin(2*np.pi*f*t)

plt.figure()
plt.plot(t,signal)
plt.grid()
plt.show()

E=energy(signal)
dc=DC(signal)
print("Energia="+str(E))
print("valor DC="+str(dc))

print("Potencia="+str(E/len(t))+" Watts")

Energia=99.99999999999993
valor DC=1.9984014443252817e-17
Potencia=0.49999999999999967 Watts

Ejemplo 3: calculo de la energia y el nivel DC de una señal de audio

In [24]: fs,signal=read("098_readtext_PCGITA.wav")
E=energy(signal)
dcs=DC(signal)
print("Energia="+str(E))
print("valor DC="+str(dcs))
print("Potencia="+str(E/len(signal)))

Energia=571775819
valor DC=-16.2154382553983
Potencia=2188.3140275407027
In [25]: signal=signal-dcs
signal=signal/np.max(np.abs(signal))
E=energy(signal)
Edb=10*np.log10(E)
print("Energia (dB)="+str(Edb))

print("Potencia (dB)="+str(Edb-10*np.log10(len(signal))))

Energia (dB)=31.100490793813478
Potencia (dB)=-23.07067060978838

6 .Ejemplo completo
Descargar y descomprimir las señales del siguiente enlace
http://archive.ics.uci.edu/ml/machine-learning-databases/00319/ (http://archive.ics.uci.edu/ml/machine-
learning-databases/00319/)

El conjunto de señales corresponde a señales de movimiento de sensores inerciales y signos vitales de


10 personas con diversos perfiles mientras realizaban 12 actividades físicas diferentes

Los sensores fueron fijados en varias partes del cuerpo, incluyendo el pecho, muñeca derecha, y tobillo
izquierdo por medio de bandas elasticas.

El uso de multiples sensores permite medir el movimiento experimentado en diferentes partes del cuerpo,
y contiene tres sensores diferentes : accelerometros, giroscopios, y magnetometros.
El sensor ubicado en el pecho cuenta adicionalmente con sensores de electrocardiogramas (ECG) de dos
canales

Esta información puede ser usada por ejemplo, para monitoreo de ritmo cardiaco, chequeo de arritmias, o
para mirar el efecto del ejercicio en el ECG.

Todas las señales fueron grabadas a una frecuencia de muestreo de 50 Hz, la cual es considerada
suficiente para capturar actiidades de movimiento humano.

2) Lista de actividades

Las actividades realizadas por las personas fueron las siguientes

L1: Parado estático (1 min)


L2: Sentado y relajado(1 min)
L3: Acostado (1 min)
L4: Caminando (1 min)
L5: Subiendo escaleras (1 min)
L6: La cintura se inclina hacia adelante (20x)
L7: Elevando los brazos (20x)
L8: Haciendo sentadillas (20x)
L9: Montando bicileta (1 min)
L10: Trotando (1 min)
L11: Corriendo (1 min)
L12: Saltando haca adelante y atrás (20x)

3) Archivos de la base de datos

Las señales capturadas para cada sujeto es guardada en un archivo con extension .log
'mHealth_subject.log'.

Cada archivo contiene las muestras (por filas) guardadadas para todos los sensores (por columnas)

El significado de cada columna es el siguiente:

Columna 1: aceleración del sensor en el pecho (X axis)


Columna 2: aceleración del sensor en el pecho (Y axis)
Columna 3: aceleración del sensor en el pecho (Z axis)
Columna 4: electrocardiograma señal (canal 1)
Columna 5: electrocardiograma señal (canal 2)
Columna 6: aceleración del sensor en el tobillo izquierdo (X axis)
Columna 7: aceleración del sensor en el tobillo izquierdo (Y axis)
Columna 8: aceleración del sensor en el tobillo izquierdo (Z axis)
Columna 9: giroscopio del sensor en el tobillo izquierdo (X axis)
Columna 10: giroscopio del sensor en el tobillo izquierdo (Y axis)
Columna 11: giroscopio del sensor en el tobillo izquierdo (Z axis)
Columna 12: magnetometro del sensor en el tobillo izquierdo (X axis)
Columna 13: magnetometro del sensor en el tobillo izquierd (Y axis)
Columna 14: magnetometro del sensor en el tobillo izquierdr (Z axis)
Columna 15: aceleración del sensor en el brazo derecho (X axis)
Columna 16: aceleración del sensor en el brazo derecho (Y axis)
Columna 17: aceleración del sensor en el brazo derecho (Z axis)
Columna 18: giroscopio del sensor en el brazo derecho (X axis)
Columna 19: giroscopio del sensor en el brazo derecho (Y axis)
Columna 20: giroscopio del sensor en el brazo derecho (Z axis)
Columna 21: magnetometro del sensor en el brazo derecho (X axis)
Columna 22: magnetometro del sensor en el brazo derecho (Y axis)
Columna 23: magnetometro del sensor en el brazo derecho (Z axis)
Columna 24: Etiqueta (Actividad realizada por la persona (0-12))

6.1. Cargar señales de una persona


In [26]: subject='2'
file_signal='./MHEALTHDATASET/mHealth_subject'+subject+'.log'
data=np.loadtxt(file_signal)

In [27]: print(data.shape)

(130561, 24)
In [28]: print(data[0:10,:])
[[-9.8646e+00 2.9860e-01 1.6900e+00 -2.5955e-01 -1.4652e-01 4.9
965e-01
-9.6680e+00 1.5216e+00 -4.7866e-01 -5.3471e-01 5.3438e-01 8.7
733e-03
3.6688e-01 -2.9244e-01 -4.6451e+00 -8.2508e+00 1.9208e+00 -9.8
039e-01
-4.1889e-01 1.8966e-01 7.2891e-01 1.0781e+00 -3.5721e-01 0.0
000e+00]
[-9.7753e+00 3.8106e-01 1.6132e+00 -1.2977e-01 -5.8608e-02 4.0
572e-01
-9.5801e+00 1.4001e+00 -4.8423e-01 -5.4409e-01 5.2652e-01 -1.6
745e-01
5.5213e-01 -4.3507e-01 -4.7847e+00 -8.2609e+00 1.9099e+00 -9.8
039e-01
-4.1889e-01 1.8966e-01 1.8670e-01 7.1683e-01 -7.2546e-01 0.0
000e+00]
[-9.6195e+00 1.6943e-01 1.7205e+00 -1.0466e-01 -3.7677e-02 4.2
741e-01
-9.6488e+00 1.4593e+00 -4.8423e-01 -5.4409e-01 5.2652e-01 3.6
567e-01
3.6332e-01 -1.5525e-01 -4.4974e+00 -8.3198e+00 2.0215e+00 -9.7
647e-01
-4.2094e-01 2.0043e-01 1.8855e-01 9.0189e-01 -3.6626e-01 0.0
000e+00]
[-9.7610e+00 1.6938e-01 1.5837e+00 -1.1722e-01 -3.7677e-02 3.2
193e-01
-9.4522e+00 1.3119e+00 -4.8423e-01 -5.4409e-01 5.2652e-01 8.7
183e-03
1.8340e-01 -2.9061e-01 -4.6902e+00 -8.4318e+00 1.8180e+00 -9.7
647e-01
-4.2094e-01 2.0043e-01 1.8677e-01 7.2405e-01 -3.5050e-03 0.0
000e+00]
[-9.8078e+00 -1.3582e-02 1.6514e+00 -1.3815e-01 -5.4422e-02 4.6
731e-01
-9.6397e+00 1.3769e+00 -4.9165e-01 -5.2345e-01 5.1866e-01 3.6
572e-01
5.4680e-01 -1.5708e-01 -4.7595e+00 -8.4420e+00 1.7966e+00 -9.7
647e-01
-4.2094e-01 2.0043e-01 7.4339e-01 2.5261e+00 -7.3241e-01 0.0
000e+00]
[-9.7913e+00 1.6961e-01 1.5311e+00 -1.6327e-01 -6.6981e-02 2.9
467e-01
-9.7289e+00 1.3707e+00 -4.9165e-01 -5.2345e-01 5.1866e-01 1.8
944e-01
5.4856e-01 -2.9787e-01 -4.6754e+00 -8.3603e+00 1.9674e+00 -9.7
647e-01
-4.2094e-01 2.0043e-01 1.7941e-01 -1.2587e-02 -1.0793e+00 0.0
000e+00]
[-9.3582e+00 2.3511e-01 1.4738e+00 -1.3815e-01 -7.1167e-02 4.2
778e-01
-9.6884e+00 1.4574e+00 -4.9165e-01 -5.2345e-01 5.1866e-01 -1.6
756e-01
1.8516e-01 -4.3140e-01 -4.8162e+00 -8.4298e+00 2.0160e+00 -9.7
451e-01
-4.2300e-01 2.0474e-01 3.5569e-03 3.5569e-01 -7.2551e-01 0.0
000e+00]
[-9.7636e+00 2.9939e-01 1.7112e+00 -1.5489e-01 -8.3726e-02 4.8
822e-01
-9.5392e+00 1.5279e+00 -4.9165e-01 -5.2345e-01 5.1866e-01 8.7
183e-03
1.8340e-01 -2.9061e-01 -4.7243e+00 -8.2411e+00 1.8900e+00 -9.7
451e-01
-4.2300e-01 2.0474e-01 -1.7770e-01 1.8321e-01 -5.3861e-03 0.0
000e+00]
[-9.7159e+00 4.4389e-01 1.4505e+00 -1.3396e-01 -5.8608e-02 4.7
911e-01
-9.6981e+00 1.4782e+00 -4.7681e-01 -5.3096e-01 5.3242e-01 1.8
944e-01
5.4856e-01 -2.9787e-01 -4.7673e+00 -8.2235e+00 1.6513e+00 -9.7
451e-01
-4.2300e-01 2.0474e-01 -1.7592e-01 3.6105e-01 -3.6814e-01 0.0
000e+00]
[-9.6334e+00 3.5463e-01 1.3688e+00 -1.2140e-01 -5.0235e-02 4.2
699e-01
-9.6592e+00 1.4067e+00 -4.7681e-01 -5.3096e-01 5.3242e-01 -1.6
740e-01
7.3562e-01 -4.3691e-01 -4.9361e+00 -8.3302e+00 1.9793e+00 -9.9
020e-01
-4.2710e-01 1.8534e-01 -3.5910e-01 -3.7006e-03 -7.2917e-01 0.0
000e+00]]
In [29]: print(data[8000:9000,-1])
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

Graficar una señal (columna 1: aceleración del sensor en el pecho (X axis)


)

In [30]: signal1=data[:,0]
fs=50.
t=np.arange(len(signal1))/(fs*60)
plt.figure(figsize=(15,8))
plt.plot(t,signal1)
plt.xlabel("Tiempo [minutos]")
plt.ylabel("ACC [m/s2]")
plt.grid()
plt.show()
In [31]: signal1=data[:,0]
activity=data[:,23]
plt.figure(figsize=(15,8))
plt.plot(t,signal1)
plt.plot(t,activity)
plt.xlabel("Tiempo [minutos]")
plt.ylabel("ACC [m/s2]")
plt.grid()
plt.show()

Graficar una señal (columna 3: señal de ECG )


In [32]: signal2=data[:,3]
activity=data[:,23]
plt.figure(figsize=(15,8))
plt.plot(t,signal2)
plt.plot(t,activity)
plt.xlabel("Tiempo [minutos]")
plt.ylabel("ECG")
plt.grid()
plt.show()

Segmentar actividades y graficar señales de acelerometro de ECG

In [33]: activity1=1 # estar sentado relajado


activity2=10 # estar corriendo

signalACC=data[:,0]
signalECG=data[:,3]

find_act1=np.where(activity==activity1)[0]
find_act2=np.where(activity==activity2)[0]

signalACC_relax=signalACC[find_act1]
signalACC_running=signalACC[find_act2]

signalECG_relax=signalECG[find_act1]
signalECG_running=signalECG[find_act2]
In [34]: plt.figure(figsize=(15,10))
plt.subplot(2,1,1)

t1=np.arange(0,len(signalACC_running)/fs, 1/fs)
plt.plot(t1, signalACC_running, alpha=0.8, label="running")
t1=np.arange(0,len(signalACC_relax)/fs, 1/fs)
plt.plot(t1, signalACC_relax, alpha=0.8, label="relaxed")
plt.xlabel("Tiempo [s]")
plt.ylabel("ACC [m/s]")
plt.legend()

plt.subplot(2,1,2)
t1=np.arange(0,len(signalECG_running)/fs, 1/fs)
plt.plot(t1, signalECG_running, alpha=0.8, label="running")
t1=np.arange(0,len(signalECG_relax)/fs, 1/fs)
plt.plot(t1, signalECG_relax, alpha=0.8, label="relaxed")

plt.xlabel("Tiempo [s]")
plt.ylabel("ECG")
plt.legend()
plt.show()

Visualizar los primeros 10 segundos de las señales


In [35]: tend=int(10*fs)

plt.figure(figsize=(15,10))
plt.subplot(2,1,1)

plt.plot(t1[0:tend], signalACC_running[0:tend], alpha=0.7, label="ru


nning")
plt.plot(t1[0:tend], signalACC_relax[0:tend], alpha=0.7, label="rela
xed")
plt.xlabel("Tiempo [s]")
plt.ylabel("ACC [m/s]")
plt.legend()
plt.grid()

plt.subplot(2,1,2)
plt.plot(t1[0:tend], signalECG_running[0:tend], alpha=0.7, label="ru
nning")
plt.plot(t1[0:tend], signalECG_relax[0:tend], alpha=0.7, label="rela
xed")
plt.xlabel("Tiempo [s]")
plt.ylabel("ECG")
plt.legend()
plt.grid()

plt.show()

Note que la señal del acelerometro está centrada en -9.8m/s2


In [36]: E=energy(signalACC_running)
Edb=10*np.log10(E)
T=10*np.log10(len(signalACC_running))
print("Potencia aceleración cuando corre (dB)="+str(Edb-T))
E=energy(signalACC_relax)
T=10*np.log10(len(signalACC_relax))
Edb=10*np.log10(E)
print("Potencia aceleración en reposo (dB)="+str(Edb-T))
dc1=DC(signalACC_running)
print("nivel DC aceleración cuando corre (dB)="+str(dc1))
dc2=DC(signalACC_relax)
print("nivel DC aceleración en reposo (dB)="+str(dc2))

Potencia aceleración cuando corre (dB)=22.245409758080832


Potencia aceleración en reposo (dB)=19.756738177938566
nivel DC aceleración cuando corre (dB)=-9.588102424283854
nivel DC aceleración en reposo (dB)=-9.72281806640625

In [37]: E=energy(signalECG_running)
Edb=10*np.log10(E)
print("Energia ECG cuando corre (dB)="+str(Edb))
E=energy(signalECG_relax)
Edb=10*np.log10(E)
print("Energia ECG en reposo (dB)="+str(Edb))
dc1=DC(signalECG_running)
print("nivel DC ECG cuando corre="+str(dc1))
dc2=DC(signalECG_relax)
print("nivel DC en reposo="+str(dc2))

Energia ECG cuando corre (dB)=30.614632208464528


Energia ECG en reposo (dB)=28.674161940109183
nivel DC ECG cuando corre=0.052721827734375004
nivel DC en reposo=-0.0036832545572916663

7. Ejercicios
1. Realizar la codificación de los ejemplos desarrollados en la guía de laboratorio. Agregar los
resultados en el informe
2. Generar el grafico de evolucion del dolar desde el año 1995 hasta el mes mas actual posible
3. Graficar las 3 señales de aceleracion superpuetas en un mismo grafico
4. graficar las 3 señales del giroscopio superpuestas en un mismo grafico
5. graficar la señal con etiqueta L4 y L9 superpuestas en un mismo grafico

8. Resolución de ejercicios
In [ ]:

In [ ]:
9. FORMATO DE ENTREGA DEL TRABAJO
1. Enviar:
El informe en Word con los resultados de la guía de laboratorio
Archivo de Jupyter Notebook
El informe en Word y la carpeta con el archivo de Jupypter Notebokk deben estar comprimidos
en una carpeta llamada GrupoX_sesiony. Donde el “X” es el número de su correspondiente
grupo asignado e "y" es el número de la sesión

1. Detalles del Informe: En formato Word

2.1. Entregar el informe, en formato Word, de la práctica con el siguiente formato:

Portada
Título
Desarrollo
Conclusiones

2.1. Mostrar el código en el informe y el resultado de su ejecución (mostrar figuras si el programa las
genera).

Indicar el IDE (entorno) usado para su ejecución en las primeras líneas como comentarios

2.3. En todas las gráficas deberá aparecer:

Título (title() )
Unidades de los ejes (xlabel() y ylabel() )
Leyenda, en caso de haber más de una señal en la gráfica

1. Detalles de los Archivos de programación

Si fuera necesario, generar una archivo para cada ejemplo y ejercicio de la guía indicando el
software de simulación utilizado .
Asignar un nombre para cada archivo que sea representativo del ejemplo o ejercicio asociado.

In [ ]:

También podría gustarte