Primeros pasos
phonometry es una biblioteca de Python para la medida acústica, desde los
bancos de filtros de octava fraccional y la ponderación frecuencial hasta los
niveles sonoros y las métricas normalizadas. Cada métrica se verifica frente a
la norma que la rige, 427 comprobaciones numéricas en total.
Instálala con pip install phonometry; el primer ejemplo de abajo filtra una
señal en tercios de octava y devuelve el nivel de presión acústica de cada
banda.
Instalación
Sección titulada «Instalación»Opción 1: Desde PyPI (recomendada)
pip install phonometryExtras opcionales:
pip install phonometry[plot] # matplotlib, para gráficas de respuesta y métodos .plot() de resultadospip install phonometry[perf] # numba, ponderación temporal 'impulse' más rápidapip install phonometry[report] # reportlab + svglib, para que los métodos .report() generen fichas PDF normativaspip install phonometry[full] # todos los anterioresOpción 2: Clonar e instalar
git clone https://github.com/jmrplens/phonometry.gitcd phonometrypip install .Opción 3: Submódulo de git
git submodule add https://github.com/jmrplens/phonometry.git# Después, instálalo en modo editable para usarlo desde tu proyectopip install -e ./phonometryLa cadena de procesado de un vistazo
Sección titulada «La cadena de procesado de un vistazo»Todo análisis con phonometry es un subconjunto de una misma cadena: tomar la señal cruda, convertirla a unidades físicas, ponderarla en frecuencia, dividirla en bandas normalizadas, suavizarla en el tiempo y reducirla a métricas:
Cada etapa es una función o clase independiente que puedes usar por separado; las guías las recorren de izquierda a derecha (Calibración → Ponderación frecuencial → Bancos de filtros → Ponderación temporal → Niveles).
Uso básico: análisis en tercios de octava
Sección titulada «Uso básico: análisis en tercios de octava»Analiza una señal y obtén el nivel de presión acústica (SPL) por banda de frecuencia.
import numpy as npfrom phonometry import metrology
fs = 48000t = np.linspace(0, 1, fs, endpoint=False)# Señal compuesta: 100 Hz + 1000 Hzsignal = np.sin(2 * np.pi * 100 * t) + np.sin(2 * np.pi * 1000 * t)
# Aplicar el banco de filtros de 1/3 de octavaspl, freq = metrology.octave_filter(signal, fs=fs, fraction=3)
print(f"Bandas: {freq}")# Bandas: [12.589254117941678, 15.848931924611138, ..., 19952.623149688785] (33 bandas)print(f"SPL [dB]: {spl}")# SPL [dB]: [46.88395351 47.96774897 49.04991279 ...] — ~90.7 dB en 100 Hz y ~90.9 dB en 1 kHzEjemplo de análisis espectral en tercios de octava de una señal compleja.
Mostrar el código de esta figura
import matplotlib.pyplot as pltimport scipy.signalimport numpy as npfrom phonometry import metrology
fs = 48000t = np.linspace(0, 1, fs, endpoint=False)# Señal compuesta: 100 Hz + 1000 Hzsignal = np.sin(2 * np.pi * 100 * t) + np.sin(2 * np.pi * 1000 * t)# Aplicar el banco de filtros de 1/3 de octavaspl, freq = metrology.octave_filter(signal, fs=fs, fraction=3)
# Fondo gris: la PSD de la señal cruda (Welch), desplazada justo por debajo# de los SPL de banda para comparar ambas formas espectrales en un mismo eje.f_psd, psd = scipy.signal.welch(signal, fs, nperseg=8192)psd_db = 10 * np.log10(psd + 1e-12)psd_db += np.max(spl) - np.max(psd_db) - 5
fig, ax = plt.subplots()ax.semilogx(f_psd, psd_db, color="gray", alpha=0.6, label="PSD de la señal cruda")ax.semilogx(freq, spl, marker="o", markerfacecolor="white", label="Bandas de 1/3 de octava")ax.set_xlabel("Frecuencia [Hz]")ax.set_ylabel("SPL [dB]")ax.legend()plt.show()Analizar un archivo de audio
Sección titulada «Analizar un archivo de audio»from scipy.io import wavfilefrom phonometry import metrology
# Cargar un archivo WAV estándarfs, signal = wavfile.read("measurement.wav")
# Analizar# Nota: para obtener valores SPL reales debes calibrar la entrada.# Consulta la guía de calibración.spl, freq = metrology.octave_filter(signal, fs=fs, fraction=3)El audio entero (por ejemplo, datos int16 de un WAV) se convierte internamente a
float64, así que es seguro pasar directamente la salida de wavfile.read.
Siguientes pasos
Sección titulada «Siguientes pasos»El análisis en octavas de arriba usa el núcleo metrology, uno de los quince
espacios de nombres de dominio; las secciones de la barra lateral recorren el
resto, desde la psicoacústica y la acústica de salas, edificación y vibraciones
hasta el ruido ambiental, aeronáutico y submarino, la electroacústica y la
simulación de ondas FDTD. Cada objeto de resultado expone una figura
.plot(language="en"|"es") de una línea y, cuando una norma define un formato
de informe, un método .report() que genera la ficha PDF normativa.
- Bancos de filtros: elige una arquitectura e inspecciona sus respuestas
- Calibración y dBFS: obtén valores SPL reales
- Por qué phonometry: la filosofía de diseño basada en conformidad
- Informe de conformidad: el valor esperado y el calculado de las 427 comprobaciones
- Referencia de la API: todos los parámetros de cada función
- Bibliografía: los libros y artículos que sustentan cada guía, cada uno con un enlace verificado