TRansformada de Fourier

https://www.dropbox.com/scl/fi/q4xuk6ys1jidw809uh07p/bb.wav?rlkey=96s0aah7o2n7gbcbcu8tdhtry&dl=0

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# Leer el archivo WAV
sample_rate, data = wavfile.read('bb.wav')
# Comprobar si el archivo es estereofónico o monofónico
if len(data.shape) == 2:
    # Si es estereofónico, tomamos solo uno de los canales
    data = data[:, 0]
# Crear un vector de tiempo
time = np.linspace(0, len(data) / sample_rate, num=len(data))
# Graficar la señal
plt.figure(figsize=(12, 6))
plt.plot(time, data)
plt.title('Señal acústica')
plt.xlabel('Tiempo (s)')
plt.ylabel('Amplitud')
plt.grid()
plt.show()
import numpy as np
import scipy.io.wavfile as wav
import matplotlib.pyplot as plt

def calcular_transformada_fourier(archivo_wav):
    # Leer el archivo WAV
    tasa_muestreo, datos = wav.read(archivo_wav)
    
    # Si el archivo es estéreo (más de un canal), tomamos solo el primer canal
    if len(datos.shape) > 1:
        datos = datos[:, 0]
    
    # Normalizar los datos para que estén entre -1 y 1
    datos_normalizados = datos / np.max(np.abs(datos), axis=0)

    # Calcular la transformada de Fourier
    transformada = np.fft.fft(datos_normalizados)

    # Obtener las frecuencias correspondientes
    frecuencias = np.fft.fftfreq(len(transformada), 1/tasa_muestreo)

    # Tomamos solo la mitad positiva (frecuencias reales)
    transformada = transformada[:len(transformada)//2]
    frecuencias = frecuencias[:len(frecuencias)//2]

    # Calcular la magnitud (módulo) de la transformada de Fourier
    magnitudes = np.abs(transformada)

    # Graficar el espectro de frecuencias
    plt.figure(figsize=(10, 6))
    plt.plot(frecuencias, magnitudes)
    plt.title('Transformada de Fourier del archivo WAV')
    plt.xlabel('Frecuencia (Hz)')
    plt.ylabel('Magnitud')
    plt.xlim([0,1000])
    plt.grid(True)
    plt.show()

# Nombre del archivo WAV
archivo_wav = 'bb.wav'
calcular_transformada_fourier(archivo_wav)