1.1 Señales Contínuas con Python

Referencia: Oppenheim 1.1 p1 pdf32, Lathi 1.3.1 p78, Hsu 1.2.A p1

Un ejemplo clásico de una señal contínua es una de forma sinusoidal como la mostrada en la figura.

\sin (\omega t)

La función de la señal en el tiempo se define en el intervalo [t0, tn) para n tramos y una frecuencia angular ω en radianes/segundo. Recordar que ω = 2πf, siendo f la frecuencia en Hz o unidades de 1/s, por si requiere hacer la conversión de frecuencias.

Para facilitar la tarea, en Python se usan las librerias para el manejo de vectores y gráficas:

    • vectores – numpy
    • gráficas – matplotlib.pyplot

Un resumen de gráficas en 2D de línea se presenta también en el curso MATG1052 de métodos numéricos. Tambien se dispone de un video tutorial: U1T2 Funciones y Gráficas .

Inicio e Ingreso de parámetros

En el bloque de INICIO se añaden las librerias numpy y matplotlib. Luego se definen los parámetros de la señal a usar y se describe la señal con la expresión matemática en su forma simplificada lambda.

Se añade el intervalo de observación y el número de muestras para la gráfica.

# Señales continuas
import numpy as np
import matplotlib.pyplot as plt

# INGRESO
w  = 1
fx = lambda t: np.sin(w*t)

t0 = 0   # intervalo [t0,tn]
tn = 2*np.pi
muestras = 51

Procedimiento – calcular valores

Para la gráfica, las muestras de tiempo t se almacenan en un vector de tamaño n. Entre cada valor de t existe una diferencia dt deteminada por n.

# PROCEDIMIENTO
# vector de tiempo
ti = np.linspace(t0,tn,muestras)

# señal
senal = fx(ti)

Salida – valores y gráfica

El resultado puede ser observado de dos formas:
– mostrando sus valores o
– sus gráficas.

Se presentan las dos opciones a escoger.

# SALIDA
np.set_printoptions(precision = 4)
print('tiempo: ')
print(ti)
print('señal: x(t) ')
print(senal)
tiempo: 
[0.     0.1257 0.2513 0.377  0.5027 0.6283 0.754 
 0.8796 1.0053 1.131  1.2566 1.3823 1.508  1.6336
 1.7593 1.885  2.0106 2.1363 2.2619 2.3876 2.5133
 2.6389 2.7646 2.8903 3.0159 3.1416 3.2673 3.3929
 3.5186 3.6442 3.7699 3.8956 4.0212 4.1469 4.2726
 4.3982 4.5239 4.6496 4.7752 4.9009 5.0265 5.1522
 5.2779 5.4035 5.5292 5.6549 5.7805 5.9062 6.0319
 6.1575]
señal: x(t) 
[ 0.0000e+00  1.2533e-01  2.4869e-01  3.6812e-01
  4.8175e-01  5.8779e-01  6.8455e-01  7.7051e-01
  8.4433e-01  9.0483e-01  9.5106e-01  9.8229e-01
  9.9803e-01  9.9803e-01  9.8229e-01  9.5106e-01
  9.0483e-01  8.4433e-01  7.7051e-01  6.8455e-01
  5.8779e-01  4.8175e-01  3.6812e-01  2.4869e-01
  1.2533e-01 -3.2162e-16 -1.2533e-01 -2.4869e-01
 -3.6812e-01 -4.8175e-01 -5.8779e-01 -6.8455e-01
 -7.7051e-01 -8.4433e-01 -9.0483e-01 -9.5106e-01
 -9.8229e-01 -9.9803e-01 -9.9803e-01 -9.8229e-01
 -9.5106e-01 -9.0483e-01 -8.4433e-01 -7.7051e-01
 -6.8455e-01 -5.8779e-01 -4.8175e-01 -3.6812e-01
 -2.4869e-01 -1.2533e-01]

Para observar el resultado de la señal, se grafica t vs señal. Para mejor identificación de ejes, se añade las etiquetas y las líneas de referencia.

# Gráfica
plt.plot(ti,senal)
plt.axhline(0, color='gray')
plt.axvline(0, color='gray')
plt.xlabel('t')
plt.ylabel('señal x(t)')
plt.grid()
plt.show()


Tarea

Para ésta sección, se cambiarán los parámetros de tiempo.

  • tn=8π
  • ω=2
  • cambiar la función a np.cos()
  • ¿se puede cambiar la amplitud de la señal a 4?

Instrucciones en Python

# Señales continuas
import numpy as np
import matplotlib.pyplot as plt

# INGRESO
w  = 1
fx = lambda t: np.sin(w*t)

t0 = 0   # intervalo [t0,tn]
tn = 2*np.pi
muestras = 51

# PROCEDIMIENTO
# vector de tiempo
ti = np.linspace(t0,tn,muestras)

# señal
senal = fx(ti)

# SALIDA
np.set_printoptions(precision = 4)
print('tiempo: ')
print(ti)
print('señal: x(t) ')
print(senal)

# Gráfica
plt.plot(ti,senal)
plt.axhline(0, color='gray')
plt.axvline(0, color='gray')
plt.xlabel('t')
plt.ylabel('señal x(t)')
plt.grid()
plt.show()