<!-- canonical: https://docs.jmrp.io/phonometry/es/start/why-phonometry/ -->
Source: https://docs.jmrp.io/phonometry/es/start/why-phonometry/

phonometry es un conjunto de herramientas de medición acústica basado en
normas. Su elemento diferenciador no es la lista de funcionalidades, sino cómo
están construidas: cada métrica se implementa a partir del texto de la norma
que la rige, y los valores de referencia y límites de aceptación de la propia
norma se transcriben a la batería de tests y se exigen en CI. Esta página
explica ese enfoque con un caso de estudio concreto (la ponderación temporal
según **IEC 61672-1:2013**) y resume qué está verificado por conformidad hoy.
El análisis de la ponderación temporal se publicó originalmente en la
[issue #38](https://github.com/jmrplens/phonometry/issues/38).

## Filosofía de diseño: un caso de estudio sobre la ponderación temporal

La ponderación temporal estándar se define como una **función continua del
tiempo** mediante la ecuación diferencial

$$
\tau \frac{dy(t)}{dt} + y(t) = x^2(t)
$$

que corresponde a un filtro paso bajo estable de primer orden con un polo en el
semiplano izquierdo ($s = -1/\tau$). Vale la pena poner ese detector al lado de
la otra cosa con la que a veces se calcula una lectura Fast, un promedio de
energía que se reinicia cada $\tau$ segundos, porque los dos se confunden con
facilidad y responden a preguntas distintas:

| | Detector exponencial (IEC 61672-1) | Integrador por bloques |
| :--- | :--- | :--- |
| Salida | Envolvente continua con ponderación temporal, un valor por muestra | Escalonada, un valor por bloque |
| Mecanismo | Promediado exponencial estable, polo en $s=-1/\tau$ | Un promedio de energía reiniciado cada $\tau$ segundos; $\tau$ está en su reloj, no en su respuesta |
| Qué mide | El nivel Fast/Slow/Impulse de la norma | $L_{\mathrm{eq},\tau}$, energía por intervalo |

Un polo en el eje real negativo corresponde a una respuesta al impulso
exponencial decreciente ($h(t) \propto \mathrm{e}^{-t/\tau}$), exactamente lo que
significa «ponderación temporal exponencial»: los eventos pasados se olvidan
exponencialmente. Una implementación que en cambio
acumule energía y se reinicie cada $\tau$ segundos ha construido el
integrador por bloques, se llame como se llame, y una que coloque el polo en
el eje real positivo antes del mismo reinicio añade además un peso creciente
dentro de cada bloque: ninguna de las dos es la ponderación temporal, porque
el reinicio cambia la naturaleza de la medición.

De esa ecuación salen además los valores de referencia del apartado siguiente, y
vale la pena deducirlos una vez en lugar de dar por buena la Tabla 4. Intégrala
partiendo del reposo sobre una ráfaga de duración $T_\mathrm{b}$ y la envolvente alcanza
$(1-\mathrm{e}^{-T_\mathrm{b}/\tau})$ del valor estacionario que acabaría produciendo ese mismo
tono, así que el nivel máximo con ponderación temporal respecto del régimen
estacionario es

$$
\delta_{\text{ref}} = 10\lg\!\left(1 - \mathrm{e}^{-T_\mathrm{b}/\tau}\right)
$$

que es la Ecuación (7) de IEC 61672-1:2013. Con $\tau_\mathrm{F} = 0,125$ s da
−0,98 dB a 200 ms, −4,82 dB a 50 ms, −11,14 dB a 10 ms y −20,99 dB a
1 ms: la columna «Objetivo IEC» entera de la Tabla 4, con el redondeo de la
propia norma. La CI exige la identidad en todas las filas de Fast y Slow
(`test_delta_ref_equation7_consistency`, con una tolerancia de 0,15 dB), de
modo que la transcripción de la tabla está comprobada y no dada por buena.

La consecuencia sostiene el resto de esta página. Como la respuesta es una
función suave de $T_\mathrm{b}/\tau$, un detector que resuelva de verdad la ecuación
sigue la columna entera de una vez; un detector que promedia sobre bloques fijos
de 125 ms responde con la parte de la energía de la ráfaga que caiga en cada
bloque, que se mueve con la duración y con la alineación por igual pero no
lleva nada de la respuesta $T_\mathrm{b}/\tau$, y solo puede acertar allí
donde la ráfaga llene un bloque por casualidad.

## Verificación frente a IEC 61672-1 (ráfagas tonales)

La prueba rigurosa para la ponderación temporal es la **respuesta a ráfaga
tonal** (IEC 61672-1, Tabla 4), usando una ráfaga sinusoidal de 4 kHz referida
al nivel de régimen estacionario.

### Cómo se ejecuta la comprobación

La Tabla 4 fija la excitación pero no el montaje, así que aquí va el montaje. Se
genera una sinusoide de 4 kHz a 48 kHz durante 2 s. La **referencia** es el nivel
Fast estacionario de esa sinusoide continua, promediado sobre su último medio
segundo: una vez asentado el integrador, este es el $L_\mathrm{A}$ en la notación de la
norma. Después se recorta de *esa misma* sinusoide la ráfaga de la duración
indicada, de modo que su fase y su amplitud son idénticas a las del tono de
referencia, y se rodea de ceros. La **respuesta** es el máximo de la envolvente
Fast de esa ráfaga, expresado respecto de la referencia:
$10\log_{10}(\max \text{env} / \text{ref})$, que es el $L_\mathrm{AFmax} - L_\mathrm{A}$ de la
norma. Fíjate en qué verifica y qué no: la IEC 61672-1 enuncia estos límites
para el dispositivo de entrada eléctrica sobre un rango definido de niveles
estacionarios y sin indicación de sobrecarga (apartados 5.9.5-5.9.6), así que
los números de abajo verifican la *balística*, no un instrumento completo. Los
mismos valores de referencia están transcritos en
`tests/filters/test_iec_compliance.py` para F y S y para la columna $L_{\mathrm{A}E}$.

**Resultados de phonometry (ponderación Fast):**

| Duración de la ráfaga | Objetivo IEC (dB) | Límite clase 1 (dB) | phonometry (dB) | Error (dB) | Estado |
| :--- | :--- | :--- | :--- | :--- | :--- |
| 200 ms | −1,0 | ±0,5 | −0,98 | +0,02 | Cumple |
| 50 ms | −4,8 | ±1,0 | −4,82 | −0,02 | Cumple |
| 10 ms | −11,1 | ±1,0 | −11,14 | −0,04 | Cumple |
| 1 ms | −21,0 | +1,0 / −2,0 | −20,99 | +0,01 | Cumple |

El detector exponencial se mantiene a menos de 0,05 dB de la referencia de la
Tabla 4 en
todas las duraciones, y ninguna fila gasta más del 4 % de su propio margen
de clase 1, porque a
un detector que resuelve la ecuación que define la magnitud no le queda ningún
parámetro libre que equivocar. Un integrador por bloques también puede quedar
dentro de clase 1 con una alineación favorable, pero lo que gasta del margen
lo decide cómo se reparta la ráfaga a caballo de un bloque de 125 ms, que es
suerte y no diseño; y la primera columna de la Tabla 4 se estrecha a ±0,5 dB
para ráfagas de 200 ms y más largas, donde queda poco margen que perder.

*Envolventes Fast medidas (azul) que coinciden con los valores de referencia
de la Tabla 4 (discontinua) con un margen de 0,1 dB para ráfagas de
200/50/10 ms.*

El generador que hay detrás de esta figura es
`scripts/figures/signals.py::generate_tone_burst_iec`, y es el procedimiento
descrito arriba con tres de las filas de la Tabla 4: imprime
`env_db.max() - target`, que es la columna Error de la tabla, de modo
que las filas se pueden reproducir directamente.

La figura fija la ráfaga en un instante concreto, que es justo aquello de lo
que depende la respuesta del integrador por bloques y no la del detector
exponencial. Desliza esa misma ráfaga a través de una frontera de bloque de
125 ms y las dos se comportan de forma bien distinta: la lectura exponencial
queda clavada en −4,82 dB sea cual sea la alineación, con una dispersión de
0,001 dB, mientras que la lectura por bloques oscila 2,94 dB y se sale del
corredor de clase 1 en el 12 % de las alineaciones. A 200 ms, donde la Tabla 4
se estrecha a ±0,5 dB, el integrador por bloques queda fuera del corredor en el
81 % de ellas, porque una ráfaga de 200 ms siempre llena al menos parte de un
bloque y a menudo llena uno entero, y un bloque lleno lee el nivel
estacionario, 1,0 dB por encima del objetivo.

*La traza exponencial es plana porque $10\lg(1-\mathrm{e}^{-T_\mathrm{b}/\tau})$ contiene $T_\mathrm{b}$
y nada del reloj; la traza por bloques, a esta duración
fija, es un retrato de la alineación y de nada más. Las dos lecturas se calculan aquí con
`time_weighting(x, fs, mode="fast")` y con `leq` sobre segmentos consecutivos
de 125 ms, frente a la misma referencia de tono estacionario que define el
procedimiento de arriba.*

## Qué significa esto en la práctica

- Si necesitas **envolventes Fast/Slow/Impulse conformes con la norma**
  (comportamiento de sonómetro, un nivel por muestra), usa
  [`time_weighting`](/phonometry/es/signals/levels/time-weighting/) de phonometry.
- Si necesitas un **$L_\mathrm{eq}$ promediado por bloques para cada intervalo**, esa
  es una métrica distinta e igualmente válida; puedes calcularla con
  [`leq`](/phonometry/es/signals/levels/levels/) sobre segmentos consecutivos.
- Ambos enfoques son útiles; simplemente responden a preguntas distintas. La
  discrepancia descrita en la issue #38 proviene de comparar una
  envolvente continua con un integrador por bloques, no de un error de
  implementación.

## Verificación por conformidad en toda la biblioteca

Una nota sobre qué es una **clase de prestaciones**, ya que todos los veredictos
de esta página lo son. En IEC 61672-1 e IEC 61260-1 una clase no es un grado de
exactitud, sino un corredor de tolerancia con nombre alrededor de una respuesta
nominal: la clase 1 es el corredor estrecho, pensado para trabajo de precisión,
y la clase 2 el ancho, para reconocimientos generales, y los dos se ensanchan en
los extremos del rango de frecuencias, que es donde más cuesta cumplirlos. La
clase 0 era un corredor todavía más estrecho, de la edición retirada de 1995 de
IEC 61260, y aquí se mantiene como objetivo adicional voluntario para el banco
Butterworth por defecto. Así que «cumple» en esta página significa que la
respuesta calculada no se sale nunca del corredor que dibuja la norma; no
significa que el error sea cero, y el tamaño del margen es el número
interesante.

El caso de las ráfagas tonales de arriba no es una comprobación aislada. Para
cada norma que la biblioteca implementa, los valores de referencia y los límites
de aceptación se transcriben del texto oficial a la batería de tests, de modo
que cualquier regresión hace fallar la CI. Una muestra del núcleo de
metrología:

| Norma | Qué se verifica | Archivo de test |
| :--- | :--- | :--- |
| IEC 61672-1:2013 Tabla 3 | Ponderación A/C/Z en las 34 frecuencias nominales, límites de clase 1, a 48 y 96 kHz | `tests/filters/test_iec_weighting_table3.py` |
| IEC 61672-1:2013 Tabla 4 | Respuestas F/S a ráfagas tonales (de 1 s a 1 ms) y la columna $L_{\mathrm{A}E}$ para `sel()` | `tests/filters/test_iec_compliance.py` |
| IEC 61672-1:2013 Tabla 5 | Respuestas de pico de un ciclo/medio ciclo de `lc_peak()`, límites de clase 1 | `tests/signals/test_levels.py` |
| IEC 61260-1:2014 Tabla 1 | Límites de aceptación de clase 1/2 del banco de filtros mediante `verify_filter_class()` | `tests/filters/test_compliance.py` |
| ISO 7196:1995 Tabla 2 | Ponderación G (infrasonidos) en todos los valores nominales de respuesta, 0,25–315 Hz | `tests/filters/test_g_weighting.py` |
| ISO 226:2023 Tabla 1 y Anexo B | Líneas isofónicas y niveles de sonoridad frente a las tablas del Anexo B, umbral de audición frente a los parámetros $T_f$ de la Tabla 1 | `tests/psychoacoustics/loudness/test_contours.py` |
| ECMA-418-1:2024 | Prominencia tonal TNR/PR: anchos de banda críticos, separación de proximidad y criterios de prominencia frente a los ejemplos resueltos de los apartados 10–12 | `tests/psychoacoustics/quality/test_tonality.py` |
| ISO 1996-1:2016 | `lden()`, `ldn()` y `composite_rating_level()` frente a valores calculados a mano con las fórmulas | `tests/environment/assessment/test_rating.py` |
| IEC 60942:2017 Tablas 2 a 7, A.1 a A.5 y E.1 | Límites de estabilidad a corto plazo del calibrador por clase y frecuencia en `sensitivity()`, y cada requisito que `verify_sound_calibrator()` califica a partir de las medidas del laboratorio | `tests/metrology/test_calibration_validation.py`, `tests/metrology/test_sound_calibrator.py` |
| IEC 61672-3:2013 con IEC 61672-1:2013 Tablas 3, 4, 5 y B.1 | El dictamen de ensayos periódicos de `verify_sound_level_meter_periodic()` justo dentro, en y justo fuera de cada límite de aceptación que lee un apartado, para las dos clases, y en y justo por encima de cada incertidumbre máxima; la excepción del apartado 4.4; las cuatro tablas celda a celda donde las leen los ensayos periódicos; y las declaraciones del apartado 22 palabra por palabra | `tests/metrology/test_sound_level_meter.py` |
| IEC 61252:1993 | Las magnitudes de exposición sonora personal, `sound_exposure()` y el nivel normalizado a 8 h `lex_8h()`; IEC 61252:2025 ha sustituido desde entonces esa impresión, y la transcripción sigue apuntando al texto de 1993+A2 | `tests/signals/test_levels.py` |

La misma disciplina se aplica mucho más allá del núcleo de metrología: hoy la
batería ejecuta {totalChecks} comprobaciones numéricas de conformidad en
{domains} dominios y
{standards} normas, que abarcan la psicoacústica y la inteligibilidad del
habla, la acústica de salas, edificación y materiales, la vibración humana y de
máquinas, el ruido ambiental, el de aeronaves y helicópteros y el submarino, la
electroacústica, la sonoridad de programa, el control de ruido industrial, el
análisis espectral calibrado y la simulación FDTD de ondas. El informe numérico
completo (el valor esperado y el valor que calcula la biblioteca para cada
comprobación, regenerado en cada pull request) está publicado como
[informe de conformidad](/phonometry/es/reference/conformance/).

La misma costumbre de «primero la norma» aparece por debajo del nivel de las
métricas completas, en la parte numérica. Los bancos de filtros sitúan sus
puntos de −3 dB en los bordes de banda de **ANSI S1.11 / IEC 61260-1** para las
tres arquitecturas cuya parametrización lo permite, Butterworth, Chebyshev II y
Bessel, las dos últimas mediante correcciones que la parametrización en bruto de
scipy no aplicaría; Chebyshev I y el elíptico leen esos mismos bordes como su
borde de banda de paso con rizado constante, algo que se declara con su coste
medido en [Bancos de filtros](/phonometry/es/signals/filters/filter-banks/). El
banco Butterworth por defecto se verifica también frente a la clase 0, más
estricta, de la edición retirada IEC 61260:1995 / ANSI S1.11-2004 además de
frente a la clase 1 vigente. Y la ponderación A/C obtiene la
clase 1 en cada una de las ocho frecuencias de muestreo a las que la batería
la califica, de 8 a 192 kHz, en todas las frecuencias de la Tabla 3 por
debajo del Nyquist de cada una, porque el prototipo analógico se ajusta a la
frecuencia de muestreo en lugar de transformarse a ciegas
(consulta [Ponderación
frecuencial](/phonometry/es/signals/levels/weighting/)).

## Cuando lo que está mal es la fuente

Transcribir una norma en lugar de portar el código de otra persona tiene una
consecuencia que solo aparece a gran escala: antes o después el valor
recalculado y el impreso no coinciden, y a veces es el impreso el que no puede
ser correcto. Un ejemplo resuelto que contradice su propio apartado normativo,
una constante a la que la composición tipográfica le comió un dígito, una
referencia cruzada que apunta a la ecuación equivocada.

Esos casos no se parchean en silencio. Cada caso confirmado queda registrado en
las [erratas de las fuentes publicadas](/phonometry/es/reference/errata/) con
la edición impresa y el punto exacto, lo que dice el documento, por qué no
puede ser correcto, la evidencia independiente y la lectura que implementa la
biblioteca. Cuando esa lectura cambia algún número que la biblioteca da, la
entrada nombra la comprobación o el test que lo fija; cuando no lo cambia,
porque el defecto es una etiqueta, una referencia cruzada o una tabla que la
biblioteca nunca lee, la entrada lo dice así. Ya son {errataEntries}, entre
normas, documentos de guía, libros y artículos de revista, cada uno marcado
como notificado al organismo emisor o no. Un defecto listado ahí nunca es un
defecto del método: en todos los casos la lectura pretendida se ha podido
establecer a partir del propio documento o de la física.

Ese registro es la parte del enfoque más difícil de fingir. El código portado
desde otra implementación hereda lo que la errata le hiciera hacer, y nada en
él llega a notarlo nunca.

## Dónde encaja phonometry en el ecosistema Python

Varios proyectos de Python comparten terreno con phonometry, y la manera
honesta de situarlos es por aquello para lo que está construido cada uno, no
echando carreras entre ellos:

- **acoustic-toolbox** es el sucesor comunitario de python-acoustics, que se
  archivó en febrero de 2024. Es un conjunto de herramientas de acústica
  general, y sus ponderaciones temporal y frecuencial de IEC 61672-1 se
  apoyan en `pyoctaveband`, el nombre anterior de esta biblioteca, que desde
  la 2.1.0 es un envoltorio sobre phonometry.
- **MoSQITo** es la implementación abierta de referencia de las métricas
  psicoacústicas de calidad sonora: sonoridad de Zwicker, sonoridad y aspereza
  de ECMA-418-2, agudeza de DIN 45692, relaciones tono-ruido y de prominencia
  de ECMA-74, el índice de inteligibilidad del habla de ANSI S3.5. phonometry
  implementa esa misma familia, añade la sonoridad de ISO 532-2 e ISO 532-3,
  la tonalidad de ECMA-418-2, la intensidad de fluctuación y el modelo de
  molestia psicoacústica de Fastl y Zwicker, y las asienta en la misma batería
  de conformidad que el núcleo de metrología, compuestas directamente con los
  filtros de ponderación, la balística, el filtrado por bandas y la
  calibración que las alimentan.
- **pyroomacoustics** está construido para simular salas en cadenas de audio
  y aprendizaje automático: fuentes imagen, trazado de rayos, conformación de
  haz, estimación de la dirección de llegada, más la adquisición de respuestas
  al impulso por barrido. El lado de salas de phonometry es el de la medición:
  sus modelos de fuentes imagen y FDTD están fijados a formas cerradas
  publicadas, y una respuesta al impulso simulada pasa por el mismo análisis
  de `room_parameters` (EDT, T20, T30, C50, C80, D50, Ts, por bandas, con los
  indicadores de validez del rango de decaimiento de ISO 3382) que una medida.

Si tu trabajo necesita números que puedas defender frente a la tabla de
tolerancias de una norma, ya sea para informes de medición, evaluaciones
ambientales o contrastes con instrumentos, esa capa de verificación es la razón
de ser de phonometry. Y cuando la norma fija además cómo debe presentarse el
resultado, el propio objeto de resultado renderiza esa ficha de una página con
`.report()`, en inglés o en español, de modo que el documento que entregas
lleva los mismos números que la comprobación. Las fuentes que sustentan todo
ello están reunidas en la
[Bibliografía](/phonometry/es/reference/bibliography/), cada entrada con un
DOI verificado o un enlace oficial del editor.
