senial sinusoidal de 5 segndos

Podemos generar una senial acustica con l siguiente programa

import numpy as np
from scipy.io.wavfile import write

# Parámetros de la señal
frecuencia = 440  # Frecuencia en Hz (Ejemplo: 440 Hz corresponde a la nota A4)
duracion = 5  # Duración en segundos
amplitud = 32767  # Amplitud máxima (para 16-bit PCM)

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

# Crear el tiempo de la señal
t = np.linspace(0, duracion, int(fs * duracion), endpoint=False)

# Crear la señal sinusoidal
senal = amplitud * np.sin(2 * np.pi * frecuencia * t)

# Convertir la señal a un formato adecuado para WAV (entero de 16 bits)
senal_int16 = np.int16(senal)

# Guardar el archivo WAV
write("senal_sinusoidal.wav", fs, senal_int16)

print("Archivo WAV generado con éxito.")

El archivo wav que se genera es el siguiente

https://www.dropbox.com/scl/fi/rcya733dbsswtjazqkxjb/senal_sinusoidal1.wav?rlkey=h07h7wg0u69b7wmpfna446ruu&dl=0

Nosotros podemos escuchar ese archivo, ademas, podemos graficarlo mediante el siguiente programa

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

# Función para graficar la señal de un archivo WAV
def graficar_senal_wav(archivo_wav):
    # Leer el archivo WAV
    sample_rate, data = wavfile.read(archivo_wav)

    # Comprobar si los datos son estéreo o mono
    if len(data.shape) == 2:
        # Si es estéreo, tomar solo un canal
        data = data[:, 0]

    # Generar el eje de tiempo
    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()

# Especificar el archivo WAV que deseas graficar
archivo_wav = 'senal_sinusoidal1.wav'  # Cambia esto por el nombre de tu archivo WAV
graficar_senal_wav(archivo_wav)

si hacemos un zoom usando plt.xlim([1,1.1]) tenemos

Nos damos cuenta de que esta senial es perfectamente sinusoidal.

Esta senial genera un archivo wav. Ese archivo wav lo podemos mandar por bluetooth a una bocina. El sonido de la bocina lo podemos grabar con un microfono y generar un nuevo archivo wav.

https://www.dropbox.com/scl/fi/p6svgl4uksvnneop9oryf/test02_4440.wav?rlkey=z7u595izv2wdzb3czy3pf1oin&dl=0

Analizamos este archivo con el mismo programa y obtenemos

haciendo un zoom tenemos

Esta senial es bastante sinusoidal, es decir, al parecer no pierde mucho calidad.

Para convencernos de que la senial es bastante sinusoidal, la comparamos con una senial teorica plt.plot(tiempo,15000np.sin(2.03.1416440tiempo+0.5*3.1416),’.r’)