<!-- canonical: https://jmrplens.github.io/phonometry/es/start/why-phonometry/ -->
Source: https://jmrplens.github.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
[incidencia #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$).

| | phonometry | python-acoustics |
| :--- | :--- | :--- |
| Salida | Envolvente continua con ponderación temporal (un valor por muestra) | Salida escalonada (un valor cada $\tau$ segundos) |
| Unidades de entrada | Presión acústica en bruto (Pa); se eleva al cuadrado internamente | Se espera la magnitud energética (Pa²) como entrada |
| Filtro | Promediado exponencial estable (polo en $s=-1/\tau$) | Diseño teóricamente inestable (polo en el semiplano derecho) estabilizado reiniciando el estado cada $\tau$ segundos |
| Comportamiento | Verdadera ponderación temporal IEC | Más cercano a un integrador por bloques ($L_{\mathrm{eq},\tau}$) |

Un polo en el eje real negativo corresponde a una respuesta al impulso
exponencial decreciente ($h(t) \propto e^{-t/\tau}$), exactamente lo que
significa «ponderación temporal exponencial»: los eventos pasados se olvidan
exponencialmente. Un polo en el eje real positivo crece sin límite; el reinicio
por bloques lo oculta, pero 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-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 - 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 no contiene ningún $T_\mathrm{b}$, 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 3 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 |

**Resultados de python-acoustics (ponderación Fast, pasando la señal al cuadrado
como requiere esa biblioteca):**

| Duración de la ráfaga | Objetivo IEC (dB) | Límite clase 1 (dB) | python-acoustics (dB) | Error (dB) | Estado |
| :--- | :--- | :--- | :--- | :--- | :--- |
| 200 ms | −1,0 | ±0,5 | −0,97 | +0,03 | ✅ CUMPLE |
| 50 ms | −4,8 | ±1,0 | −3,93 | **+0,87** | ✅ CUMPLE |
| 10 ms | −11,1 | ±1,0 | −10,90 | +0,20 | ✅ CUMPLE |
| 1 ms | −21,0 | +1,0 / −2,0 | −20,90 | +0,10 | ✅ CUMPLE |

**Las dos bibliotecas pasan todas las filas mostradas**, y decir lo contrario
sería exagerar: lo que importa aquí es la *forma* del error, no un
incumplimiento. phonometry se mantiene a menos de 0,05 dB de la referencia de la
Tabla 4 en todas las duraciones, menos del 5 % del margen de clase 1, porque a
un detector exponencial continuo no le queda ningún parámetro libre que
equivocar. El integrador por bloques también se queda dentro de clase 1, pero
gasta 0,87 de los 1,0 dB disponibles a 50 ms, y los gasta por un motivo que es
suerte y no diseño: cómo se reparte la ráfaga a caballo de un bloque de 125 ms.
Lee las dos tablas junto a la primera columna de la Tabla 4, que se estrecha a
±0,5 dB para ráfagas de 200 ms y más largas: en ese extremo a un integrador por
bloques no le queda 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 primera tabla, de modo
que las filas de phonometry 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-e^{-T_\mathrm{b}/\tau})$ contiene $T_\mathrm{b}$
y nada del reloj; la traza por bloques 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 incidencia #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 un 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 Tabla 2 | Límites de estabilidad a corto plazo del calibrador (dependientes de la frecuencia, clase 1) en `sensitivity()` | `tests/metrology/test_calibration_validation.py` |
| IEC 61252:1993 | Las magnitudes de exposición sonora personal, `sound_exposure()` y el nivel normalizado a 8 h `lex_8h()` | `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 se mantiene dentro de las
tolerancias de clase 1 hasta 16 kHz a las frecuencias de muestreo habituales
gracias al sobremuestreo interno (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

- **python-acoustics** se archivó en febrero de 2024 y ya no se mantiene; la
  comparación de arriba se ejecutó contra su última versión publicada.
- **acoustic-toolbox**, el sucesor comunitario de python-acoustics, construye
  sus ponderaciones temporal y frecuencial de IEC 61672-1 sobre `pyoctaveband`,
  el nombre anterior de esta biblioteca, que desde la 2.1.0 es un envoltorio
  sobre phonometry. Solo toma de aquí los filtros: su propio `weighting.py`
  sigue llevando tablas de ponderación A y C por tercios de octava escritas
  directamente en el código.
- **MoSQITo** se centra en métricas psicoacústicas de calidad sonora y ya
  cubre buena parte de ese terreno: sonoridad de Zwicker, sonoridad y aspereza
  de ECMA-418-2, agudeza de DIN 45692, relaciones tono-ruido y de prominencia
  de ECMA-74 y el índice de inteligibilidad del habla de ANSI S3.5. phonometry
  implementa esa misma familia y 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, que MoSQITo no expone. Lo que más
  cambia es el entorno. Aquí esas métricas viven en la misma batería de
  conformidad que el núcleo de metrología y se componen directamente con los
  filtros de ponderación, la balística, el filtrado por bandas y la
  calibración que las alimentan.
- **pyroomacoustics** simula respuestas al impulso de salas para cadenas de
  audio y aprendizaje automático (fuentes imagen, trazado de rayos,
  conformación de haz, estimación de la dirección de llegada), y también llega
  al lado de la medición, con adquisición de la respuesta al impulso por barrido
  y un estimador de RT60. Lo que no lleva es el juego de parámetros de
  ISO 3382. Los modelos de fuentes imagen y FDTD de phonometry están fijados a
  formas cerradas publicadas, y la respuesta al impulso de fuentes imagen 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.
