Está en la página 1de 6

UNIVERSIDAD TECNOLÓGICA DE PANAMÁ

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

Laboratorio N° (8) – Espectro de potencia


Torres Hectore

Hector.torres1utp.ac.pa

Grupo: 1IM121 Fecha: 14 DE NOVIEMBRE DE


2023

RESUMEN: En el Laboratorio 8, se exploró el análisis del  A1 = 10 # Amplitud 1


espectro de potencia de señales mediante la Transformada  w2 = 2 * np.pi * 30 # frecuencia 2
Rápida de Fourier (FFT). Se generaron señales compuestas  A2 = 5 # Amplitud 2
por componentes sinusoidales de diferentes frecuencias y  # Generar un arreglo de valores de tiempo
amplitudes, y se analizó su transformación del dominio del  tiempo = np.arange(0, n) * T
tiempo al dominio de la frecuencia. Se examinó cómo las  # Calcular la señal directamente utilizando NumPy
amplitudes afectan el espectro de potencia y se estudió el
 f = A1 * np.sin(w1 * tiempo) + A2 * np.sin(w2 * tiempo)
impacto de cambiar la frecuencia de muestreo de 100 Hz a 50
 return f
Hz, destacando la importancia del teorema de Nyquist y la
resolución espectral. Este laboratorio proporcionó una Este código genera una señal que es la suma de dos señales
comprensión práctica de la FFT en el análisis de señales, sinusoidales con frecuencias de 10 Hz y 30 Hz,
subrayando la relación entre las características temporales de respectivamente.
una señal y su representación en el espectro de frecuencias.

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Á

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

 plt.show()

Paso 4: Análisis de la Respuesta de la FFT

Finalmente, analizamos la respuesta de la FFT

 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Á

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

 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Á

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

 f = A1 * np.sin(w1 * tiempo) + A2 * np.sin(w2 *  plt.plot(freq_positivas, potencia)


tiempo)  plt.xlabel("Frecuencia (Hz)")
 return f  plt.ylabel("Potencia")
 # Parámetros de la señal  plt.show()
 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)
Pregunta 3
 freq = fftfreq(n, T)
 # Graficamos la magnitud de los componentes de la ¿Le parece que el tamaño relativo (4:1) entre los dos picos es
FFT correcto?¿Porqué?
 plt.figure(2)
En el gráfico de potencia, los picos representan la potencia de
 plt.title("FFT Magnitud")
las componentes de frecuencia de 10 Hz y 30 Hz. El tamaño
 plt.plot(freq, np.abs(sp))
relativo de estos picos está directamente relacionado con la
 plt.xlabel("Frecuencia (Hz)")
amplitud de las señales originales. En nuestro código, la
 plt.ylabel("Magnitud") amplitud de la señal de 10 Hz (A1) es 10, mientras que la
 plt.show() amplitud de la señal de 30 Hz (A2) es 5. Esto significa que
 # Paso 5: Filtrar y mostrar solo la mitad positiva del esperaríamos que el pico correspondiente a 10 Hz sea más
espectro grande que el de 30 Hz, reflejando la mayor amplitud de la señal
 indices_positivos = freq > 0 de 10 Hz. Por lo tanto, el análisis del tamaño relativo entre los
 freq_positivas = freq[indices_positivos] dos picos nos permite concluir que la señal de 10 Hz tiene una
 sp_positivas = sp[indices_positivos] mayor contribución a la potencia total de la señal en
comparación con la señal de 30 Hz, lo cual es consistente con
las amplitudes definidas para cada frecuencia en la señal
 # Graficamos la magnitud de los componentes de la generada.
FFT (solo frecuencias positivas) Pregunta 4
 plt.figure(3)
 plt.title("FFT Magnitud (Frecuencias Positivas)") Repita todo el procedimiento pero ahora cambie la frecuencia de
 plt.plot(freq_positivas, np.abs(sp_positivas)) muestreo a 50Hz. Describa sus resultados y trate de explicarlos.
 plt.xlabel("Frecuencia (Hz)")
Código Modificado con Frecuencia de Muestreo de 50 Hz
 plt.ylabel("Magnitud")
 plt.show()

 # Paso 6: Graficar la potencia por componente  # Importamos las librerías necesarias


 potencia = np.abs(sp_positivas)**2  import numpy as np
 plt.figure(4)  import matplotlib.pyplot as plt
 plt.title("Potencia por Componente (Frecuencias  from scipy.fft import fft, fftfreq
Positivas)")  # Función para generar la señal
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

 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Á

CAMPUS DR. VÍCTOR LEVI SASSO

FACULTA DE INGENIERÍA MECÁNICA

fundamentales de procesamiento de señales sino que también


proporcionó una experiencia práctica en el análisis y la
interpretación de datos espectrales, elementos cruciales en
diversas aplicaciones de ingeniería y ciencia.

III. REFERENCIAS

[1] Chapra, S. C., & Canale, R. P. (2010). Métodos Numéricos para Ingenieros (6ta ed.). McGraw-Hill.

También podría gustarte