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
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.
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’)
