[Animation_ChatGPT.py added
This commit is contained in:
parent
4db4e5f899
commit
af4e888db0
63
code/Animation_ChatGPT.py
Normal file
63
code/Animation_ChatGPT.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Tue Oct 15 16:46:07 2024
|
||||||
|
|
||||||
|
@author: ernesto311
|
||||||
|
"""
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from scipy.signal import welch
|
||||||
|
from matplotlib.animation import FuncAnimation, PillowWriter
|
||||||
|
|
||||||
|
# Generate distances and corresponding frequencies
|
||||||
|
distances = np.arange(-400, 451, 1)
|
||||||
|
f1 = 800
|
||||||
|
f2 = f1 + distances
|
||||||
|
|
||||||
|
# Time parameters
|
||||||
|
dt = 0.00001
|
||||||
|
t = np.arange(0, 2, dt)
|
||||||
|
|
||||||
|
# Set up the figure and axis for the animation
|
||||||
|
fig, axs = plt.subplots(1, 2, layout='constrained')
|
||||||
|
axs[0].set_xlabel('Time [s]')
|
||||||
|
axs[0].set_ylabel('Amplitude')
|
||||||
|
axs[1].set_xlabel('Frequency [Hz]')
|
||||||
|
axs[1].set_ylabel('Power [1/Hz]')
|
||||||
|
axs[1].set_xlim(0, 1500)
|
||||||
|
|
||||||
|
# Function to compute and plot the power spectrum
|
||||||
|
def plot_powerspectrum(i):
|
||||||
|
# Clear the previous plots
|
||||||
|
axs[0].cla()
|
||||||
|
axs[1].cla()
|
||||||
|
|
||||||
|
# Generate the signal
|
||||||
|
x = np.sin(2*np.pi*f1*t) + 0.2 * np.sin(2*np.pi*f2[i]*t)
|
||||||
|
x[x < 0] = 0 # Apply half-wave rectification
|
||||||
|
|
||||||
|
# Plot the signal (first 20 ms for clarity)
|
||||||
|
axs[0].plot(t[t < 0.02], x[t < 0.02])
|
||||||
|
axs[0].set_title(f"Signal (f2={f2[i]} Hz)")
|
||||||
|
axs[0].set_xlabel('Time [s]')
|
||||||
|
axs[0].set_ylabel('Amplitude')
|
||||||
|
axs[0].set_ylim(0, 1.2)
|
||||||
|
|
||||||
|
# Compute power spectrum
|
||||||
|
freq, power = welch(x, fs=1/dt, nperseg=2**16)
|
||||||
|
|
||||||
|
# Plot the power spectrum
|
||||||
|
axs[1].plot(freq, power)
|
||||||
|
axs[1].set_xlim(0, 1500)
|
||||||
|
axs[1].set_ylim(0, 0.05)
|
||||||
|
axs[1].set_title(f'Power Spectrum (f2={f2[i]} Hz)')
|
||||||
|
axs[1].set_xlabel('Frequency [Hz]')
|
||||||
|
axs[1].set_ylabel('Power [1/Hz]')
|
||||||
|
|
||||||
|
# Create the animation
|
||||||
|
ani = FuncAnimation(fig, plot_powerspectrum, frames=len(distances), interval=500)
|
||||||
|
|
||||||
|
# Display the animation
|
||||||
|
ani.save("signal_animation.gif", writer=PillowWriter(fps=30))
|
||||||
|
plt.show()
|
Loading…
Reference in New Issue
Block a user