Laboratorio 2
Laboratorio 2
Laboratorio 2
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
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)
https://archive.ics.uci.edu/ml/datasets.php (https://archive.ics.uci.edu/ml/datasets.php)
Ejemplos
Kaggle
https://www.kaggle.com/datasets (https://www.kaggle.com/datasets)
Ejmplos
1. Archivos .txt
Información BCR
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)
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,)
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)
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()
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)
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
signal_sin=np.asarray(signal_sin*2**15, dtype=np.int16)
write("signal_sin.wav", fs, signal_sin)
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
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
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
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/)
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 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)
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.]
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()
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()
plt.figure(figsize=(15,10))
plt.subplot(2,1,1)
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()
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))
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
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
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
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 [ ]: