Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Hector.torres1utp.ac.pa
INTRODUCCIÓN
Paso 2: Graficar la Señal
El Laboratorio 8 se centra en el análisis del espectro de
Ahora, necesitamos graficar la señal generada. Podemos hacerlo
potencia de señales mediante la Transformada Rápida de
con el siguiente código:
Fourier (FFT). Este laboratorio proporciona una
comprensión práctica de cómo las señales en el tiempo import matplotlib.pyplot as plt
pueden ser descompuestas en sus componentes de # Generamos la señal.
frecuencia, permitiendo una exploración detallada de las T = 1/100 # f_muestreo = 100Hz
características espectrales. Se aborda el impacto de la f = genera_senal(1000, T)
frecuencia de muestreo en la representación de la señal y # Graficamos los 100 primeros puntos de la señal para
se analiza cómo diferentes frecuencias y amplitudes poder verla bien.
contribuyen al espectro de potencia total.
plt.figure(1)
plt.title("Señal")
I. RESULTADOS
plt.plot(f[0:100])
Para realizar el laboratorio "Espectro de potencia" paso a paso,
siguiendo los procedimientos y respondiendo la pregunta 1, plt.show()
procederemos de la siguiente manera: Paso 3: Transformada Rápida de Fourier (FFT)
Paso 1: Generar la Señal El siguiente paso es calcular la transformada rápida de
Primero, necesitamos simular una señal combinando dos Fourier de la señal. El código sería:
frecuencias. Vamos a usar Python para esto. El código para from scipy.fft import fft, fftfreq
generar la señal sería algo así:
# Ahora sacamos la transformada discreta de
import numpy as np Fourier
def genera_senal(n, T): sp = fft(f)
""" # Calculemos el vector de frecuencias
n: cantidad de puntos freq = fftfreq(f.size, d=T)
T: Periodo de muestreo # Ahora graficamos la magnitud de los
""" componentes
# Constantes plt.figure(2)
w1 = 2 * np.pi * 10 # frecuencia 1 plt.title("FFT magnitud")
plt.plot(np.abs(sp))
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
# Función para generar la señal
def genera_senal(n, T, w1=2*np.pi*10, A1=10,
w2=2*np.pi*30, A2=5):
"""
n: cantidad de puntos
T: Periodo de muestreo
w1, w2: frecuencias angulares de las señales
A1, A2: amplitudes de las señales
"""
tiempo = np.arange(0, n) * T
f = A1 * np.sin(w1 * tiempo) + A2 * np.sin(w2 *
tiempo)
return f
# Parámetros de la señal
n = 1000 # Número de puntos
T = 1/100 # Periodo de muestreo (frecuencia de
muestreo = 100Hz)
# Generamos la señal
f = genera_senal(n, T)
# Graficamos la señal La pregunta 1 es: ¿Cuántos picos se observan en la respuesta de la
plt.figure(1) FFT y por qué?
plt.title("Señal Generada")
Para responder a esta pregunta, necesitamos observar la gráfica
plt.plot(f[0:100]) # Graficamos los primeros 100
generada en el Paso 3. Deberíamos ver picos que corresponden
puntos
a las frecuencias de las señales que hemos combinado. Sin
plt.xlabel("Tiempo") embargo, debido a la naturaleza de la FFT, cada frecuencia en la
plt.ylabel("Amplitud") señal original aparecerá como dos picos en la FFT, uno positivo
plt.show() y otro negativo. Esto se debe a que la FFT asume que la señal es
# Calculamos la Transformada Rápida de Fourier periódica y, por lo tanto, representa componentes de frecuencia
(FFT) tanto positivos como negativos.
sp = fft(f)
freq = fftfreq(n, T) El Paso 5
# Graficamos la magnitud de los componentes de la Vamos a añadir un filtro para visualizar solo la mitad positiva del
FFT espectro de frecuencias, ya que la FFT produce un espectro
plt.figure(2) simétrico y la parte negativa no aporta información adicional para
plt.title("FFT Magnitud") este análisis.
plt.plot(freq, np.abs(sp))
plt.xlabel("Frecuencia (Hz)") # Importamos las librerías necesarias
plt.ylabel("Magnitud") import numpy as np
plt.show() import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
# Función para generar la señal
def genera_senal(n, T, w1=2*np.pi*10, A1=10,
w2=2*np.pi*30, A2=5):
"""
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
n: cantidad de puntos
T: Periodo de muestreo
w1, w2: frecuencias angulares de las señales
A1, A2: amplitudes de las señales
"""
tiempo = np.arange(0, n) * T
f = A1 * np.sin(w1 * tiempo) + A2 * np.sin(w2 *
tiempo)
return f
# Parámetros de la señal
n = 1000 # Número de puntos
T = 1/100 # Periodo de muestreo (frecuencia de
muestreo = 100Hz)
# Generamos la señal
f = genera_senal(n, T)
# Graficamos la señal
plt.figure(1)
plt.title("Señal Generada")
plt.plot(f[0:100]) # Graficamos los primeros 100
puntos
plt.xlabel("Tiempo")
plt.ylabel("Amplitud")
plt.show()
# Calculamos la Transformada Rápida de Fourier
(FFT)
sp = fft(f)
freq = fftfreq(n, T)
# Graficamos la magnitud de los componentes de la
FFT
plt.figure(2)
plt.title("FFT Magnitud")
Paso 6
plt.plot(freq, np.abs(sp))
plt.xlabel("Frecuencia (Hz)") Vamos a graficar la potencia (el cuadrado de la magnitud) y
plt.ylabel("Magnitud") solamente graficaremos la primera mitad del vector. Primero
plt.show() creamos un vector de frecuencias. Esto nos dará la “potencia”
# Paso 5: Filtrar y mostrar solo la mitad positiva del de cada componente. Luego graficaremos solo los primeros 𝑁/2
espectro puntos, ya que los otros son redundantes.
indices_positivos = freq > 0
# Importamos las librerías necesarias
freq_positivas = freq[indices_positivos]
import numpy as np
sp_positivas = sp[indices_positivos]
import matplotlib.pyplot as plt
# Graficamos la magnitud de los componentes de la
from scipy.fft import fft, fftfreq
FFT (solo frecuencias positivas)
# Función para generar la señal
plt.figure(3)
def genera_senal(n, T, w1=2*np.pi*10, A1=10,
plt.title("FFT Magnitud (Frecuencias Positivas)")
w2=2*np.pi*30, A2=5):
plt.plot(freq_positivas, np.abs(sp_positivas))
"""
plt.xlabel("Frecuencia (Hz)")
n: cantidad de puntos
plt.ylabel("Magnitud")
T: Periodo de muestreo
plt.show()
w1, w2: frecuencias angulares de las señales
A1, A2: amplitudes de las señales
"""
tiempo = np.arange(0, n) * T
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
def genera_senal(n, T, w1=2*np.pi*10, A1=10, Al modificar el código del laboratorio "Espectro de potencia"
w2=2*np.pi*30, A2=5): para utilizar una frecuencia de muestreo de 50 Hz, nos
""" aproximamos al límite del teorema de Nyquist, lo que podría
n: cantidad de puntos resultar en aliasing, especialmente dado que la frecuencia más
T: Periodo de muestreo alta en la señal es de 30 Hz. Esta reducción en la frecuencia de
w1, w2: frecuencias angulares de las señales muestreo disminuye la resolución en frecuencia en la FFT, lo
A1, A2: amplitudes de las señales que puede dificultar la distinción entre frecuencias cercanas y
podría llevar a una representación menos precisa de la señal en
"""
el dominio del tiempo. Estos cambios afectan tanto la
tiempo = np.arange(0, n) * T
visualización de la señal en el tiempo como su análisis en el
f = A1 * np.sin(w1 * tiempo) + A2 * np.sin(w2 *
espectro de frecuencias, lo que es crucial para entender cómo la
tiempo)
frecuencia de muestreo influye en la interpretación de los datos
return f
en análisis de señales.
# Parámetros de la señal
n = 1000 # Número de puntos
T = 1/50 # Periodo de muestreo (frecuencia de
muestreo = 50Hz)
# Generamos la señal
f = genera_senal(n, T)
# Graficamos la señal
plt.figure(1)
plt.title("Señal Generada")
plt.plot(f[0:100]) # Graficamos los primeros 100
puntos
plt.xlabel("Tiempo")
plt.ylabel("Amplitud")
plt.show()
# Calculamos la Transformada Rápida de Fourier
(FFT)
sp = fft(f)
freq = fftfreq(n, T)
# Filtramos para mantener solo la mitad positiva del
espectro
indices_positivos = freq > 0
freq_positivas = freq[indices_positivos]
sp_positivas = sp[indices_positivos]
# Graficamos la magnitud de los componentes de la
FFT (solo frecuencias positivas)
plt.figure(2)
plt.title("FFT Magnitud (Frecuencias Positivas)")
plt.plot(freq_positivas, np.abs(sp_positivas))
plt.xlabel("Frecuencia (Hz)")
plt.ylabel("Magnitud")
plt.show()
# Graficar la potencia por componente
potencia = np.abs(sp_positivas)**2 II. CONCLUSIONES
plt.figure(3) Este laboratorio demostró la importancia de la FFT en el análisis de
plt.title("Potencia por Componente (Frecuencias señales, destacando cómo las características de una señal en el
Positivas)") tiempo se reflejan en su espectro de frecuencias. Se observó que la
plt.plot(freq_positivas, potencia) potencia espectral está directamente relacionada con el cuadrado de
plt.xlabel("Frecuencia (Hz)") la amplitud de las componentes de la señal. Además, se evidenció la
plt.ylabel("Potencia") relevancia de la frecuencia de muestreo en la precisión y calidad del
plt.show() análisis espectral. Este laboratorio no solo reforzó conceptos
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ
III. REFERENCIAS
[1] Chapra, S. C., & Canale, R. P. (2010). Métodos Numéricos para Ingenieros (6ta ed.). McGraw-Hill.