Laboratorio 2 Señales
Laboratorio 2 Señales
Laboratorio 2 Señales
FACULTAD DE INGENIERÍA
PROGRAMA DE INGENIERÍA ELECTRÓNICA
ANÁLISIS DE SEÑALES
Laboratorio 3:
Señales en Tiempo Discreto
CONTENIDO:
1. INTRODUCCIÓN
1
2. OBJETIVOS 2
3. REPRESENTACIÓN DE SEÑALES 2
4. BIBLIOGRAFÍA 9
DESARROLLO:
1. Introducción
Continuando el laboratorio de tratamiento de señales y cómo refuerzo de la los
resultados de aprendizaje del curso (procesamiento de las señales en tiempo discreto)
se ilustrarán algunas propiedades de las señales en tiempo-discreto diferenciándolas de
las señales de tiempo continúo bajo el lenguaje Python. Una señal en tiempo-continuo
toma valores en todo punto en el tiempo, mientras que una señal en el tiempo-discreto
está definida solamente en valores enteros de la variable “tiempo”. Sin embargo,
mientras una señal en tiempo-discreto puede ser fácilmente guardada y procesada en
un computador, es imposible guardar los valores de una señal en tiempo continuo para
todos los puntos a lo largo de una línea real. En los computadores realmente no se
puede almacenar ni mostrar una señal continua pero se hace una aproximación
asignando valores de la señal a intervalos de tiempo pequeños muy inferiores a la unidad
lo cual en el fondo es una restricción de tiempo, y además, también se hace la restricción
de los posibles valores que puede tener en amplitud cuantizandola de acuerdo a las
posibles clases de variables permitidas en el software (UINT8, 16, 32, SINT8, 16, 32,
LOGICAL, SINGLE y DOUBLE), y se grafican uniendo los puntos con líneas rectas dando la
impresión de infinitos valores. En las señales discretas se usan las mismas clases de
variables pero la diferencia es que cada valor de amplitud corresponde a un intervalo de
tiempo discreto entero y su gráfica muestra espacios vacíos entre muestras.
1. Objetivos
• Generación, la representación y el manejo de señales continuas y
discretas
• Realizar algunas operaciones entre señales
• Utilizar formas básicas de graficación, programación
2. Representación de señales
Genere una variable tipo matriz en un editor de Python de su preferencia y visualice los
resultados en consola:
a = [1 2 3]
print(a)
Crea una matriz nombrada “a” con dimensiones de 1 × 3 (fila x columna). La variable “a”
es almacenada en lo que es llamado el espacio de variables y en el editor como ya se
mencionó se podrá visualizar en el explorador de variables. Ahora, si se quiere trabajar
las variables como arreglos tal cual lo trabaja Matlab, se necesitan instalar la librería
Numpy. Por ejemplo si se quiere visualizar una lista como un arreglo tipo matriz el código
sería el siguiente:
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(a)
Guarda la transpuesta de “a” en la matriz “b”. En este caso, “b” es una matriz también
2 × 2.
A menudo, se quiere aplicar una operación por ejemplo multiplicar elemento por
elemento de dos arreglos. Por ejemplo, se puede querer elevar al cuadrado cada
elemento de “a”. En este caso, se puede usar el comando siguiente:
c = a*a
El símbolo .* le dice a Matlab que la multiplicación debe ser aplicada a cada elemento
de “a”. Entonces la operación .* no es una operación matricial. La convención trabaja
con muchos comandos tales como la división y la potenciación respectivamente, ./, .^.
El resultado entonces es un vector “c” 4x4, multiplicando los elementos:
Algunas funciones y comandos básicos que se pueden usar como referencia futura
básica son:
Para visualizar las partes real e imaginaria de un número y calcular su magnitud y fase
se requiere de la librería Numpy:
import numpy as np
y = 2 * (1 + 4*1j)
# Extrayendo la parte real
pr = y.real
# Extrayendo la parte imaginaria
pi = y.imag
# Calculando la magnitud
c = np.abs(y)
# Calculando el ángulo (en radianes)
ca = np.angle(y)
# Obteniendo el conjugado
x = np.conj(y)
# Imprimiendo los resultados
print(f"Parte real: {pr}")
print(f"Parte imaginaria: {pi}")
print(f"Magnitud: {c}")
print(f"Ángulo (en radianes): {ca}")
print(f"Conjugado: {x}")
Algunas matrices especiales que se podrán utilizar durante el curso por supuesto
también con Numpy como librería clave para mantener la lógica aprendida para
programar con Matlab:
import numpy as np
# Matriz vacía
M = np.array([])
# Matriz de ceros 2x3
M1 = np.zeros((2, 3))
# Matriz de unos 2x3
M2 = np.ones((2, 3))
# Matriz identidad 3x3
M3 = np.eye(3)
print("M:", M)
print("M1:", M1)
print("M2:", M2)
print("M3:", M3)
Un ejemplo de creación de los vectores de tiempo para emular señales continuas y
comparando con la creación de los vectores de tiempo para generar señales discretas
sinusoidales ambas:
import numpy as np
import matplotlib.pyplot as plt
# Definición de t y n
t = np.arange(0, 10.1, 0.1) # Note que 10.1 es usado para incluir el 10 en
el rango, similar a MATLAB
n = np.arange(0, 11) # 11 para incluir el 10 en el rango
# Definición de x y x1
x = np.cos(2*t)
x1 =np.cos(2*np.pi*n/8)
plt.plot(t, x)
plt.xlabel('t')
plt.ylabel('x')
plt.title('Plot of x = cos(2t)')
plt.grid(True)
plt.show()
plt.figure()
plt.stem(n, x1, use_line_collection=True) # use_line_collection para
mejorar la eficiencia
plt.xlabel('n')
plt.ylabel('x1')
plt.title('Stem plot of x1 = cos(n)')
plt.grid(True)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
# Escalón unitario
u = np.where(n >= 0, 1, 0)
# Rampa
r=n*u
# Exponencial
e = (0.2**n) * u
# Delta Dirac
plt.subplot(2, 2, 1)
plt.stem(n, d, use_line_collection=True)
plt.title('Delta function')
# Escalón unitario
plt.subplot(2, 2, 2)
plt.stem(n, u, use_line_collection=True)
plt.title('Unit step function')
# Rampa
plt.subplot(2, 2, 3)
plt.stem(n, r, use_line_collection=True)
plt.title('Ramp function')
# Exponencial Creciente
plt.subplot(2, 2, 4)
plt.stem(n, e, use_line_collection=True)
plt.title('Exponential function')
Informe de laboratorio:
A1 = su edad/10
A2 = 1.2 A1
37.2
𝑡"! = 3 7𝑇
𝑀
41.3
𝑡"# = −( )𝑇
𝐷
Grafique las tres señales en una sola figura con la función plt.plot, genere una grilla y
ponga título a cada gráfica que la identifique con etiquetas en el eje y y en el eje x. la
primera gráfica debe ser roja, la segunda azul y la tercera verde (es decir el color de las
curvas).
Realice una segunda figura con las tres gráficas en cuadros diferentes pero en la misma
figura usando los comandos plt.subplot.
Realice los cálculos de los desfases en radianes de las tres señales, con una nueva figura
reescriba y grafique las señales en función del desfase en radianes.
𝑥(𝑡) = 𝐴𝑐𝑜𝑠(2𝜋(4000)𝑡 − 𝜑)
Reescriba las mismas señales en forma exponencial (fasorial) y grafíquelas en una nueva
figura,
Como segunda asignación se solicita que realicen el script y grafiquen las señales
mostradas a continuación en los intervalos de tiempo solicitados con un tamaño de paso
apropiado (en el caso de señales complejas se debe graficar por aparte la parte real,
imaginaria, la magnitud y la fase):
Informe de laboratorio:
Anexe los procedimientos, agregue el código de python generado para cada uno de
los ítems, tareas solicitadas y los resultados del procedimiento en el informe, es decir,
incluya cada una de las gráficas y resultados que se solicitan.
!
Realice la siguiente figura: 𝑦 = 𝑥𝑒 !" , −3 ≤ 𝑥 ≤ 3
Ahora, realice las siguientes figuras, incluyendo las leyendas, etiquetas, título y tipos de gráficas
teniendo en cuenta el color:
3. BIBLIOGRAFÍA
• Signals and Systems, an introduction to analog and digital signal processing, Alan
Oppenheim. (1983). Prentice-Hall
• Signal and Systems - General. B. Girod R. Rabenstein A. Stenger – Jhon Wiley &
Sons. (2001).
• Digital Signal Processing. Schaum's Outline. Mcgraw-Hill (1999).
• Digital Signal Processing using Matlab v4. Ingle and Proakis. ()PWS publishing
Company.