Ir al contenido

phonometry

Medición, análisis y predicción acústica en Python. Cada métrica se implementa a partir del texto de su norma, y se comprueba en CI frente a las tablas de tolerancia y los ejemplos resueltos de esa misma norma en cada pull request.
365normas referenciadas, en 57 dominios
575figuras, cada una en claro y oscuro, en inglés y español
71fichas PDF con el formato de informe que define su norma, generadas por .report()

Qué es

phonometry es una biblioteca de Python para medición, análisis y predicción acústica. Le das una señal, un espectro medido o un conjunto de datos geométricos y de materiales, y te devuelve la magnitud que define la norma, con los términos intermedios a la vista.

Cada resultado es un dataclass tipado y congelado (frozen). Conserva los datos de entrada con los que se calculó, dibuja su propia figura con un .plot() de una línea en inglés o en español y, cuando una norma define un formato de informe, genera una ficha PDF de una página con .report().

La escribe y la mantiene una sola persona, se publica con licencia MIT en PyPI, se archiva con DOI en Zenodo y va por la versión 3.3.0. Necesita Python 3.13 o posterior con NumPy y SciPy; matplotlib, numba y reportlab son extras opcionales.

Para quién es

  • Consultores y laboratorios de ensayo que necesitan el número que define la norma y los términos que hay detrás, en una forma que se pueda llevar a un informe.
  • Investigadores que necesitan una implementación de referencia legible y citable en lugar de una caja negra, y ver de qué apartado sale cada fórmula.
  • Ingenieros de audio, firmware y producto que necesitan filtros y ponderaciones de clase 1, distorsión, sonoridad y métricas de habla dentro de sus propios bancos de ensayo.
  • Estudiantes y docentes, porque cada guía enuncia la norma, la fórmula y las hipótesis antes del código.

Qué no es

  • No es un instrumento certificado. El informe de conformidad consiste en que la biblioteca comprueba su propia salida frente a valores publicados en las normas; no es una calibración acreditada por un tercero. Una medición con validez legal sigue necesitando equipo con aprobación de modelo.
  • No es un sistema de adquisición de datos. Procesa los arrays y los archivos que le pases; no habla con tarjetas de sonido, micrófonos ni analizadores.
  • No implementa por completo todas las normas que cita. Cada guía indica qué apartados, métodos y anexos cubre y cuáles no.

Cómo se ve en uso

Dos cosas que hace la biblioteca, difíciles de afirmar y fáciles de enseñar: el resultado de un análisis se dibuja solo y, cuando una norma prescribe un formato de informe, ese mismo resultado lo genera en PDF.

Un análisis y la figura que dibuja

Niveles por bandas de tercio de octava de una señal de dos tonos, con los límites de banda de IEC 61260-1 y la densidad espectral de potencia bruta al fondo. La figura de abajo es la que está publicada en la documentación, no una maqueta.

import numpy as np
from phonometry import filters, signals
fs = 48_000
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 100 * t) + np.sin(2 * np.pi * 1000 * t)
spl, freq = filters.octave_filter(signal, fs=fs, fraction=3)
psd = signals.power_spectral_density(signal, fs=fs)
ax = psd.plot() # the result draws itself
Espectro en tercios de octava de una señal de dos tonos, con la densidad espectral de potencia bruta al fondoEspectro en tercios de octava de una señal de dos tonos, con la densidad espectral de potencia bruta al fondo
De la guía Primeros pasos: 33 bandas de 12,6 Hz a 20 kHz, con máximos en 100 Hz y 1 kHz.

Un índice global y la ficha que genera

El índice global de aislamiento a ruido aéreo de ISO 717-1 sobre las 16 bandas de tercio de octava que usa el índice, con el formato de un informe de laboratorio: cabecera de metadatos, tabla por bandas, la curva frente a la curva de referencia desplazada, el resultado de un solo número enmarcado y el veredicto frente al requisito. El código es la llamada que genera la ficha de al lado, con el bloque de metadatos reducido a los campos de los que se habla aquí.

import numpy as np
from phonometry import building, ReportMetadata
freqs = np.array([100, 125, 160, 200, 250, 315,
400, 500, 630, 800, 1000, 1250,
1600, 2000, 2500, 3150])
R = building.single_panel_transmission_loss(
freqs, mass_per_area=15.0,
critical_frequency=2000.0, loss_factor=0.02,
)
meta = ReportMetadata(
specimen="6 mm float glass pane",
laboratory="Phonometry reference example",
report_id="EXAMPLE-717-1",
requirement=30.0, # adds the verdict row
)
R.report("Rw_fiche.pdf", metadata=meta)
Informe de ejemplo ISO 717-1 a ruido aéreo (PDF)

Ficha de aislamiento a ruido aéreo de una página para un vidrio flotado de 6 mm: cabecera de metadatos, tabla de R en tercios de octava junto al gráfico de esa curva frente a la de referencia desplazada, el resultado Rw (C; Ctr) = 31 (-1; -3) dB enmarcado y el veredicto (PASS, en inglés como el resto de la ficha) frente al requisito de 30 dB.

Descargar el informe (PDF)

Ficha del índice global a ruido aéreo (SoundReductionResult.report), Rw (C; Ctr).

Qué abarca

Diez áreas, 106 guías y 158 páginas de referencia de la API. Cada fila enlaza al índice del área; las designaciones son las normas realmente implementadas ahí, no una lista de lecturas.

ÁreaNormas implementadas
Análisis de señalBancos de filtros, ponderaciones, niveles, espectros, calibración e incertidumbre.IEC 61260-1ANSI S1.11IEC 61672-1ISO 7196IEC 61252ISO 1996-1IEC 60942GUM
Audición y percepciónSonoridad, calidad sonora, inteligibilidad del habla, audición y exposición.ISO 532-1/-2/-3ECMA-418-1/-2ISO 226DIN 45692IEC 60268-16ANSI S3.5DIN 45681ISO/PAS 20065ISO 7029ISO 389-7ISO 1999ISO 9612
Salas y edificaciónParámetros de sala, ruido de fondo, aislamiento en campo y laboratorio, predicción.ISO 3382-1/-2/-3ISO 16283-1/-2/-3ISO 10140ISO 10848ISO 15186-1/-2ISO 16251-1ISO 717-1/-2EN 12354-1…-6ISO 18233ISO 12999-1ISO 10052ANSI/ASA S12.2ASTM E413/E1414
Materiales y superficiesAbsorción, resistencia al flujo de aire, tubo de impedancia, modelos porosos y de metamaterial, difusores, dispersión.ISO 354ISO 11654ISO 10534-1/-2ISO 9053-1/-2ISO 17497-1/-2ISO 13472-1/-2EN 29052-1ISO 12999-2
Vibración y ruido estructuralMovilidad y FRF, aisladores, potencia radiada, uniones, vibración en humanos.ISO 7626-1/-2ISO 10846-1/-2/-3ISO 9611ISO/TS 7849-1/-2EN 15657EN 12354-5ISO 2631-1/-2/-4/-5ISO 5349-1/-2ISO 8041-1
Medio ambiente y transportePropagación en exteriores, barreras, refracción, indicadores ambientales, tráfico y aerogeneradores.ISO 9613-1/-2ISO 1996-1/-2ISO/PAS 1996-3NT ACOU 112CNOSSOS-EU (Directiva 2002/49/CE, anexo II)IEC 61400-11
Ruido de aeronavesNiveles de certificación, contornos de aeropuerto y el método de hemisferio para helicópteros.Anexo 16 OACIIEC 61265SAE ARP 866B/5534ECAC Doc 29ECAC Doc 32
Acústica submarinaNiveles re 1 µPa, ruido radiado por buques, hincado de pilotes, ruido ambiente, pérdidas por transmisión.ISO 18405ISO 17208-1/-2ISO 18406JOMOPANS-ECHO
Fuentes y dispositivosPotencia acústica, intensidad, declaraciones de emisión, electroacústica, sonoridad de programa.ISO 3741ISO 3744/3746ISO 3745ISO 9614-1/-2/-3IEC 61043ISO 4871IEC 60268-3/-4/-5ITU-R BS.1770-5EBU R 128
Simulación de ondasSimulación FDTD 2D determinista, acústica y elástica P-SV, validada frente a oráculos analíticos y no frente a una norma.sin norma que la rija

Empezar desde cero

Tres pasos, en orden. Los dos primeros son cuestión de minutos; al tercero vuelves una y otra vez.

  1. Instálala

    Python 3.13 o posterior. La instalación básica trae NumPy y SciPy; el extra completo añade las figuras, la ponderación temporal de impulso acelerada y la generación de fichas PDF.

    pip install phonometry[full]
    Opciones de instalación
  2. Haz un análisis de principio a fin

    La guía Primeros pasos recorre una vez toda la cadena de proceso, primero con una señal sintética y después con un archivo WAV: calibración, ponderación frecuencial, banco de filtros, ponderación temporal y los niveles que salen.

    Primeros pasos
  3. Ve a tu dominio

    Cada guía empieza por la norma que implementa, las magnitudes que define y las hipótesis, y sigue con el código y la figura. Cuando necesites la firma exacta, la referencia de la API tiene una página por módulo.

    Referencia de la API