1.2 Señales Discretas con Python

Referencia: Oppenheim 1.3.2 fig.1.25 p24, Lathi 1.3.1 p78, Hsu 1.2.A p1

Para una señal discreta en un intervalo desde n0, con m muestras, tamaño de paso 1, se genera una secuencia numérica cuya gráfica es:

\sin [\omega n]

El muestreo para cada valor n se establece en el  intervalo [0, m) , para m muestras y con frecuencia ω = 2π/12 radianes/segundo.

Para el ejercicio se usa m=12

Semejante a las gráficas de señales contínua, el bloque de INICIO añade las librerías de numpy y matplotlib.

El bloque de INGRESO define los valores de los parámetros, la señal f(x) en formato simplificado lambda, con variable independiente n, el punto inicial n0 y el número de muestras m (recuerde contar el cero)

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

# INGRESO - parámetros
w  = 2*np.pi/12
fx = lambda n: np.sin(w*n)

n0 = 0  # intervalo en un periodo
muestras = 12+1

En el bloque de Procedimiento, los valores discretos de n se almacenan en un vector de tamaño m. La señal se puede crear usando la funcion sin() incluida en numpy.

# PROCEDIMIENTO
# vector ni discreto [n0,n0+muestras]
ni = np.arange(n0,n0+muestras,1)

senal = fx(ni)

Observe que los valores para n corresponden a una secuencia numérica.

El bloque de SALIDA puede mostrar los resultados en forma numérica o gráfica.

# SALIDA
np.set_printoptions(precision=4)
print('n: ')
print(ni)
print('señal x[n]: ')
print(senal)
n: 
[ 0  1  2  3  4  5  6  7  8  9 10 11 12]
señal x[n]: 
[ 0.0000e+00  5.0000e-01  8.6603e-01  1.0000e+00
  8.6603e-01  5.0000e-01  1.2246e-16 -5.0000e-01
 -8.6603e-01 -1.0000e+00 -8.6603e-01 -5.0000e-01
 -2.4493e-16]

Para observar el resultado de la señal, se grafica ni vs señal[n], añadiendo las etiquetas para cada eje, y mostrando el resultado con plt.show().

Se usa la gráfica stem() para obtener en la gráfica el punto y una línea que muestre la magnitud, semejante a las gráficas de los libros de texto.

# Gráficas
plt.stem(ni, senal)

plt.xlabel('n')
plt.ylabel('señal x[n]')
plt.grid()

plt.show()

Tarea

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

  • muestras = 50
  • ω0 = π/4 y ω0 = 15π/8
  • cambiar la función a np.cos()
  • ¿se puede cambiar la amplitud de la señal a 2 y ω0=1/6?

Instrucciones Python

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

# INGRESO - parámetros
w  = 2*np.pi/12
fx = lambda n: np.sin(w*n)

n0 = 0  # intervalo [n0,n0+muestras]
muestras = 12+1

# PROCEDIMIENTO
# vector n de muestras [n0,n0+muestras]
ni = np.arange(n0,n0+muestras,1)

senal = fx(ni)

# SALIDA
np.set_printoptions(precision=4)
print('n: ')
print(ni)
print('señal x[n]: ')
print(senal)

# Gráficas
plt.stem(ni, senal)
plt.xlabel('n')
plt.ylabel('señal x[n]')
plt.grid()
plt.show()