analisis experimental (escalones)

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

# Especificar el archivo WAV que deseas graficar
archivo_wav = 'escalon01.wav'  # Cambia esto por el nombre de tu archivo WAV
sample_rate, data = wavfile.read(archivo_wav)
    # Comprobar si los datos son estéreo o mono
if len(data.shape) == 2:data = data[:, 0]
tiempo = np.linspace(0, len(data) / sample_rate, num=len(data))
    # Graficar la señal
plt.figure(figsize=(12, 6))
plt.plot(tiempo, data)
plt.title('Señal Acústica')
plt.xlabel('Tiempo (s)')
plt.ylabel('Amplitud')
plt.grid()
plt.xlim(0, len(data) / sample_rate)  # Limitar el eje x al tiempo total
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

from scipy.io.wavfile import write
import math
from scipy.signal import stft
from scipy.fft import fft, fftfreq

## PARAMETROS DE LA SENIAL
fs       = 44100  # Frecuencia de muestreo en Hz (común para audio de alta calidad)

# Especificar el archivo WAV que deseas graficar
archivo_wav = 'escalon02.wav'  # Cambia esto por el nombre de tu archivo WAV
sample_rate, data = wavfile.read(archivo_wav)
if len(data.shape) == 2:data = data[:, 0]
tiempo = np.linspace(0, len(data) / sample_rate, num=len(data))


st = data
t  = tiempo

#n_padded = 200096  # Número de puntos para la DFT (aumenta la resolución)
#signal_padded = np.pad(st, (0, n_padded - len(st)), 'constant')
# Calcular la DFT
fft_values = fft(st)
fft_freqs = fftfreq(len(fft_values), 1/fs)
frequencies, times, Zxx = stft(st, fs=fs, nperseg=10256)


plt.figure(figsize=(12, 6))
plt.subplot(2, 2, 2)
plt.plot(t,st)
#plt.xlabel('Tiempo (s)')
plt.subplot(2, 2, 3)
plt.plot( np.abs(fft_values)[:len(fft_values)//2], fft_freqs[:len(fft_values)//2],'r')
#plt.title("Transformada Discreta de Fourier (DFT)")
plt.ylabel("Frecuencia (Hz)")
plt.xlabel("Magnitud")
plt.ylim([200,500])
plt.grid()
plt.subplot(2,2,4)
plt.pcolormesh(times, frequencies, np.abs(Zxx), shading='gouraud')
#plt.colorbar(label='Magnitud')
#plt.title('STFT de la Señal Sinusoidal de 330 Hz')
#plt.ylabel('Frecuencia (Hz)')
plt.xlabel('Tiempo (s)')
plt.ylim(200, 500)  # Limitar el rango de frecuencias
plt.grid()
plt.pcolormesh(times, frequencies, np.abs(Zxx), shading='gouraud')