<!-- canonical: https://docs.jmrp.io/phonometry/es/perception/hearing/hearing-protectors/ -->
Source: https://docs.jmrp.io/phonometry/es/perception/hearing/hearing-protectors/

Un protector auditivo no se mide sobre un acoplador. La ISO 4869-1 lo coloca a
dieciséis personas y registra el desplazamiento del umbral que
consigue cada una, así que lo que vuelve del laboratorio es una
**distribución**: una atenuación por sujeto y banda de octava, con una
dispersión que a menudo es un tercio de la media. La ISO 4869-2 es la norma que
convierte esa distribución en un número con el que se puede actuar, y lo
primero que hace es negarse a usar la media.

## De dónde sale la distribución (ISO 4869-1)

La ISO 4869-1 mide la atenuación en el umbral de audición. Las señales de ensayo
son bandas de tercio de octava de ruido rosa centradas en las frecuencias de
octava de 125 Hz a 8 kHz, con 63 Hz opcional (4.1). Cada uno de los dieciséis
sujetos busca su umbral para cada una de ellas dos veces, con los oídos libres y
con el protector puesto, la mitad del panel en cada orden, y la atenuación de
ese sujeto en esa banda es la diferencia (4.6.2) entre el umbral con el oído
ocluido, $L_{\mathrm{occluded}}$, y con el oído libre, $L_{\mathrm{open}}$:

$$
A_{j,f} = L_{\mathrm{occluded},j,f} - L_{\mathrm{open},j,f}
$$

Un informe da esos valores individuales y, por cada señal de ensayo, su media,
su desviación típica y la incertidumbre expandida de la media (apartado 6). El
anexo A modela la atenuación como el valor medido más tres entradas de media
nula, la del método (el grupo de sujetos, la colocación, el juicio del umbral,
el operador, la muestra), la del equipo de ensayo y la del entorno. Dentro de un
mismo laboratorio, la incertidumbre típica combinada de una medición concreta es
la desviación típica de su media, y el factor de cobertura es 2:

$$
u = \frac{s}{\sqrt{N}}, \qquad U_{95} = 2u
$$

```python

from phonometry import hearing

# Tabla A.3 de la ISO 4869-1: una orejera sobre dieciséis sujetos, de 125 Hz a 8 kHz.
tabla_a3 = np.array([
    [9.6, 13.5, 27.5, 32.4, 35.2, 29.1, 28.5],  [14.1, 20.2, 25.8, 32.0, 28.9, 35.3, 35.7],
    [21.8, 27.8, 28.3, 46.6, 37.4, 40.1, 38.7], [18.5, 22.2, 36.5, 44.8, 39.1, 30.6, 33.5],
    [15.6, 21.9, 31.8, 42.5, 38.9, 38.3, 37.1], [18.7, 28.6, 31.3, 39.0, 35.6, 35.3, 29.4],
    [23.0, 26.5, 34.0, 41.3, 40.8, 38.7, 35.9], [17.3, 21.7, 25.0, 30.7, 38.6, 37.9, 40.8],
    [19.4, 19.6, 28.0, 36.6, 40.7, 34.9, 39.4], [11.6, 20.4, 22.6, 38.0, 39.2, 33.9, 30.3],
    [20.5, 21.8, 29.2, 40.7, 36.2, 35.7, 38.4], [18.3, 19.6, 26.2, 34.6, 32.7, 34.9, 26.6],
    [15.1, 17.5, 30.1, 39.0, 39.4, 38.2, 39.5], [21.7, 20.8, 28.3, 39.5, 38.1, 40.0, 38.4],
    [15.9, 17.8, 26.0, 40.6, 38.0, 40.2, 37.2], [11.8, 18.4, 29.6, 37.2, 40.8, 36.0, 29.9],
])
reat = hearing.real_ear_attenuation(tabla_a3)
print(np.round(reat.mean_db, 1))                  # [17.1 21.1 28.8 38.5 37.5 36.2 35. ]
print(np.round(reat.standard_deviation_db, 1))    # [3.9 3.9 3.5 4.5 3.2 3.2 4.6]
print(np.round(reat.expanded_uncertainty_db, 1))  # [2.  1.9 1.7 2.2 1.6 1.6 2.3]

# La rejilla es la entrada de todos los métodos de la ISO 4869-2 de abajo, sin cambios.
print(np.round(hearing.assumed_protection_value(reat.attenuation_db).apv, 1))
# [13.1 17.2 25.3 34.  34.3 33.  30.4]
```

También pueden entrar los propios umbrales, como `open_threshold_db` y
`occluded_threshold_db`; solo tienen que compartir referencia, porque un nivel
de presión sonora y uno de nivel de audición dan la misma diferencia. Todo se
calcula con precisión completa y lo redondea quien lo imprime, que es lo que
dicen hacer las Tablas A.3 y B.1.

*A la izquierda, la Tabla A.3: la dispersión entre sujetos es de varios
decibelios, y la incertidumbre expandida de la media que se dibuja sobre ella es
la mitad de esa dispersión, porque dieciséis sujetos la dividen por cuatro y el
factor de cobertura la vuelve a duplicar. A la derecha, la Tabla B.1: dos
ensayos de la orejera en dos condiciones de ensayo (por ejemplo, dos posiciones
de la diadema), que solo en 8 kHz difieren más de lo que permiten las dos
incertidumbres.*

<details>
<summary>Ver el código de esta figura</summary>

```python

# Una línea cada una, con los resultados calculados en esta página.
reat.plot(language="es")   # media hacia abajo, sujetos tenues, U95 como barras (6 l))
plt.show()

media_2 = [16.8, 21.0, 28.3, 38.2, 35.5, 34.6, 38.9]
u95_2 = [1.6, 1.2, 1.4, 1.5, 1.5, 1.7, 2.5]
hearing.assess_attenuation_difference(
    reat, media_2, second_expanded_uncertainty_db=u95_2
).plot(language="es")
plt.show()
```

</details>

### ¿Son distintas dos mediciones? (anexo B)

Dos atenuaciones medias difieren significativamente al nivel del 5 % cuando su
diferencia supera la raíz de la suma de los cuadrados de sus incertidumbres
expandidas (B.1.2):

$$
|m_1 - m_2| > \sqrt{U_{95,1}^2 + U_{95,2}^2}
$$

La Tabla B.1 lo aplica a la orejera de arriba y a un segundo ensayo de ella en
otra condición de ensayo (la posición de la diadema es el ejemplo que da
B.1.2), del que la norma solo imprime medias e incertidumbres:

```python
media_2 = [16.8, 21.0, 28.3, 38.2, 35.5, 34.6, 38.9]
u95_2 = [1.6, 1.2, 1.4, 1.5, 1.5, 1.7, 2.5]
diferencia = hearing.assess_attenuation_difference(
    reat, media_2, second_expanded_uncertainty_db=u95_2
)
print(np.round(diferencia.criterion_db, 1))  # [2.5 2.3 2.2 2.7 2.2 2.3 3.4]
print(diferencia.significant_frequencies)    # [8000.]
```

Cuando no hay datos de la medición concreta, B.1.1 y B.2 toman las
incertidumbres típicas de la Tabla A.2 (dentro de un laboratorio) y de la
Tabla B.2 (entre laboratorios), para tapones y orejeras en tres intervalos de
frecuencia. La biblioteca guarda las tres componentes de cada una y deriva de
ellas los valores combinado y expandido, lo que reproduce todas las celdas
impresas. Con dos incertidumbres iguales el criterio pasa a ser
$\sqrt{2}\,U_{95}$, y B.1.1 lo evalúa sobre el valor redondeado que imprime su
tabla, y escribe esa entrada: «$\sqrt{2}$ × 2,3 dB = 3,3 dB». El balance sin
redondear da 3,21 dB:

```python
tapon = hearing.REAT_WITHIN_LABORATORY_UNCERTAINTY["earplug"]["250 Hz up to 4 kHz"]
print(round(tapon.expanded_db, 2))                                          # 2.27
print(round(hearing.minimum_significant_difference(2.3), 1))                # 3.3
print(round(hearing.minimum_significant_difference(tapon.expanded_db), 2))  # 3.21

# La U95 típica banda a banda, lista para assess_attenuation_difference.
print(np.round(hearing.reat_expanded_uncertainty(reat.frequencies, protector="earplug"), 1))
# [3.2 2.3 2.3 2.3 2.3 2.3 3.2]
```

Entre laboratorios, el mismo tapón necesita 9,3 dB según la cuenta de B.2
($\sqrt{2}$ × 6,6 dB), o 9,37 dB a partir de los 6,62 dB sin redondear: en lo
que más discrepan dos laboratorios es en cómo se colocan el protector sus
sujetos.

### La sala de ensayo (4.2.2)

El campo sonoro se cualifica sin el sujeto ni la silla. El nivel a 15 cm del
punto de referencia sobre los tres ejes se queda dentro de ±2,5 dB del nivel en
él, las posiciones derecha e izquierda a menos de 3 dB entre sí, y desde 500 Hz
un micrófono direccional girado 360° ve una variación no mayor de la que la
Tabla 1 le permite según su rechazo en campo libre (20 dB desde un rechazo de
25 dB, hasta 5 dB para uno de 10 dB, y ningún micrófono por debajo):

```python
campo = hearing.check_reat_sound_field(
    {"front": [0.8] * 7, "back": [-0.6] * 7, "left": [1.1] * 7,
     "right": [-1.2] * 7, "up": [1.9] * 7, "down": [-2.0] * 7},
    [0.0] * 7,
    rotation_levels_db=[[0.0] * 7, [4.0] * 7],
    free_field_rejection_db=17.0,
)
print(hearing.allowable_field_variation(17.0))  # 10.0
print(campo.passes)                             # True
```

El apartado 4.2.2 b) es un requisito del apartado, no un añadido: si falta la
rotación, `campo.directionality_judged` es falso y `campo.passes` también,
mientras `campo.uniform` y `campo.balanced` siguen dando el veredicto de a)
banda a banda.

## Primero la distribución (apartado 5)

Los tres métodos toman una media menos un múltiplo de su propia dispersión, y se
diferencian en sobre qué la toman. El método por bandas de octava la toma sobre
las atenuaciones de cada banda, y el resultado es el valor de protección
supuesta:

$$
APV_{fx} = m_f - \alpha\, s_f
$$

$\alpha$ es la inversa de la distribución normal acumulada estándar en el
rendimiento de protección $x$ (Tabla 1), así que $APV_{f84}$ con $\alpha = 1$
es la atenuación que alcanza o supera el 84 % de los usuarios, y $APV_{f98}$
con $\alpha = 2$ es la que alcanzan todos menos uno de cada cincuenta. Citar un
protector por su media sería describir a un usuario que no existe.

Los métodos HML y SNR no llegan a formar ese valor. Calculan antes un índice por
sujeto, frente a los ocho ruidos de referencia de la Tabla 2 o frente al ruido
rosa de la Tabla 3, y aplican la misma reducción sobre esos índices (Fórmulas
(3) a (5) y (19)). Lo que comparten los tres es la elección de $x$ y de su
$\alpha$.

```python

from phonometry import hearing

# Atenuación ISO 4869-1 de un protector: 16 sujetos, ocho bandas de octava de
# 63 Hz a 8 kHz. Es el ejemplo sobre el que los anexos A a D de la ISO 4869-2
# trabajan de principio a fin.
atenuacion = np.array([
    [4, 8, 13, 18, 20, 30, 35, 30],   [6, 12, 16, 21, 29, 35, 47, 35],
    [10, 16, 17, 23, 25, 32, 48, 37], [3, 7, 12, 18, 20, 25, 33, 30],
    [8, 10, 16, 16, 25, 27, 43, 32],  [4, 7, 10, 15, 19, 32, 35, 31],
    [5, 5, 9, 16, 20, 25, 30, 28],    [15, 15, 21, 26, 25, 38, 46, 38],
    [5, 6, 10, 13, 19, 22, 29, 28],   [9, 9, 10, 19, 20, 27, 37, 31],
    [9, 16, 18, 24, 25, 35, 44, 39],  [5, 6, 11, 12, 17, 20, 28, 28],
    [7, 10, 17, 22, 25, 35, 41, 44],  [6, 8, 16, 18, 19, 19, 30, 33],
    [10, 12, 17, 25, 28, 33, 45, 40], [12, 13, 17, 27, 29, 38, 49, 41],
], dtype=float)

apv = hearing.assumed_protection_value(atenuacion)          # x = 84 % por defecto
print(np.round(apv.mean_attenuation, 1))    # [ 7.4 10.  14.4 19.6 22.8 29.6 38.8 34.1]
print(np.round(apv.standard_deviation, 1))  # [3.3 3.6 3.6 4.6 4.  6.2 7.4 5.2]
print(np.round(apv.apv, 1))                 # [ 4.1  6.4 10.7 14.9 18.8 23.4 31.3 28.9]

# Un rendimiento más estricto resta más de esa misma dispersión.
estricto = hearing.assumed_protection_value(atenuacion, performance=98)
print(np.round(apv.apv - estricto.apv, 1))  # [3.3 3.6 3.6 4.6 4.  6.2 7.4 5.2]
```

*A la izquierda, el protector: el valor de protección supuesta queda una
desviación típica completa por debajo de la media, y la separación es mayor
donde lo es la dispersión, en 4 kHz. A la derecha, el método: la recta HML y
los ocho ruidos de referencia con los que se ajustó, con las respuestas de los
tres métodos para el mismo ruido.*

<details>
<summary>Ver el código de esta figura</summary>

```python

# apv es el AssumedProtectionResult calculado arriba. Una línea:
apv.plot(language="es")   # media, dispersión sombreada y la protección supuesta
plt.show()

# El lado HML, a mano.
hml = hearing.hml_rating(atenuacion)
alta, media, baja = hml.reported
izda, dcha = np.array([-4.0, 2.0]), np.array([2.0, 12.0])
fig, ax = plt.subplots()
ax.plot(izda, media - (alta - media) / 4 * (izda - 2), color="#1f77b4")
ax.plot(dcha, media - (media - baja) / 8 * (dcha - 2), color="#1f77b4")
ax.plot([-2, 2, 10], [alta, media, baja], "o", color="#d62728", label="H, M, L")
diferencias = np.asarray(hearing.HML_REFERENCE_C_MINUS_A)
ax.plot(np.repeat(diferencias, 16), hml.predicted_reduction.T.reshape(-1), ".",
        color="#2ca02c", alpha=0.5, label="ruidos de referencia")
ax.set(xlabel="LpC - LpA [dB]", ylabel="Reducción prevista del nivel de ruido [dB]")
ax.legend()
plt.show()
```

</details>

## Tres métodos, en orden decreciente de lo que necesitan saber

*Un modelo de protector sobre dieciséis sujetos, reducido de tres maneras y
enfrentado a un mismo ruido. Solo el método por bandas de octava pasa por el
valor de protección supuesta; HML y SNR calculan antes un índice por sujeto y
descuentan la dispersión sobre esos índices, y los tres quedan a un decibelio
unos de otros.*

### El método por bandas de octava (apartado 6)

El más fiel, y el único que ve la forma del ruido: se resta el valor de
protección supuesta banda a banda del espectro ponderado A y se suma lo que
queda.

$$
L'_{p,\mathrm{A}x} = 10 \lg \sum_{k=1}^{8} 10^{0,1\left(L_{p,f(k)} + A_{f(k)} - APV_{f(k)x}\right)}\ \mathrm{dB}
$$

```python
# El ruido del anexo B: niveles por banda de octava de una nave, LpA = 104 dB.
ruido = [75.0, 84.0, 86.0, 88.0, 97.0, 99.0, 97.0, 96.0]
octava = hearing.octave_band_protected_level(ruido, apv)
print(round(octava.effective_level, 1))   # 81.4
print(octava.reported_level)              # 81
print(round(octava.noise_reduction, 1))   # 22.6
```

El sumatorio recorre las ocho octavas desde 63 Hz, o siete desde 125 Hz cuando
el ruido o el protector no tienen dato en 63 Hz. El apartado 6 redondea el
resultado al entero más próximo, que es lo que hace `reported_level`;
`effective_level` conserva el valor sin redondear.

### El método HML (apartado 7)

Tres números en lugar de un espectro. $H$, $M$ y $L$ son la reducción prevista
del nivel de ruido que da este protector para ruidos de referencia cuya
$(L_{p,\mathrm{C}} - L_{p,\mathrm{A}})$ vale $-2$, $+2$ y $+10$ dB, ajustados sobre los ocho
espectros de referencia de la Tabla 2. Aplicarlos solo necesita los niveles
ponderados C y A del ruido real:

$$
PNR_x = M_x - \frac{H_x - M_x}{4}\left(L_{p,\mathrm{C}} - L_{p,\mathrm{A}} - 2\right)
\quad\text{si } (L_{p,\mathrm{C}} - L_{p,\mathrm{A}}) \leq 2\ \mathrm{dB}
$$

$$
PNR_x = M_x - \frac{M_x - L_x}{8}\left(L_{p,\mathrm{C}} - L_{p,\mathrm{A}} - 2\right)
\quad\text{en otro caso},\qquad L'_{p,\mathrm{A}x} = L_{p,\mathrm{A}} - PNR_x
$$

```python
hml = hearing.hml_rating(atenuacion)
print(hml.reported)                       # (24, 18, 13)

por_hml = hearing.hml_protected_level(104.0, 103.0, hml)
print(round(por_hml.noise_reduction, 1))  # 22.5
print(por_hml.reported_level)             # 82
```

Las dos ramas se encuentran en $+2$ dB, que es donde se define la propia $M$,
así que la recta tiene un codo y no un salto. Los valores que entran en ellas
son los **redondeados**: el apartado 7.2 redondea $H$, $M$ y $L$ al entero más
próximo, que es con lo que se publica un protector, así que es lo que consume
la aplicación.

### El método SNR (apartado 8)

Un número, contra un ruido rosa, restado del nivel ponderado C.

$$
L'_{p,\mathrm{A}x} = L_{p,\mathrm{C}} - SNR_x
$$

```python
snr = hearing.snr_rating(atenuacion)
print(snr.reported)                       # 21

por_snr = hearing.snr_protected_level(snr, l_p_c=103.0)
print(por_snr.reported_level)             # 82

# Cuando solo se registró el nivel ponderado A, la Fórmula (24) reconstruye el
# ponderado C a partir de una estimación de la diferencia y cae en el mismo sitio.
print(hearing.snr_protected_level(snr, l_p_a=104.0, c_minus_a=-1.0).reported_level)  # 82
```

El apartado 8.3 admite además el nivel sin ponderar en lugar del ponderado C, y
el apartado 7.3 dice lo mismo para HML. Con ruido de mucho contenido en muy
baja frecuencia queda alto, así que es un recurso y no un equivalente.

Como el ruido de referencia es fijo, el índice no dice nada de la forma del
ruido con el que se va a encontrar, que es justo lo que recuperan los tres
valores del método HML.

## A qué número hacer caso

Los tres métodos responden a la misma pregunta y rara vez coinciden exactamente.
Con el ejemplo de arriba, el mismo protector en el mismo ruido da **81 dB,
82 dB y 82 dB**, y la NOTA con la que cierra la introducción sitúa las
diferencias de 3 dB o menos entre protectores comparables por debajo de la
resolución del ejercicio. El orden no es una clasificación: el método por
bandas de octava usa más información y es el preferible cuando se tiene el
espectro, mientras que HML y SNR existen precisamente para cuando no se tiene.

El método por bandas de octava arranca en 63 Hz cuando el ruido y el protector
tienen dato ahí, y en 125 Hz cuando alguno no lo tiene (apartado 6). Los
cálculos HML y SNR arrancan siempre en 125 Hz, haya lo que haya en 63 Hz, que
es la razón de que los espectros de referencia de la Tabla 2 (apartado 7) y de
la Tabla 3 (apartado 8) empiecen ahí.

Una advertencia sobre los espectros de referencia: el anexo C reimprime la
Tabla 2 como su Tabla C.1 y la reimpresión contradice al original en dos
celdas. La Tabla 2 es la que reproduce los propios resultados del anexo, y es
la que lleva esta biblioteca; la discrepancia está registrada en
[ERRATA](/phonometry/es/reference/errata/).

## Orejeras de reducción activa del ruido (ISO 4869-6)

Una orejera de reducción activa del ruido añade un circuito de cancelación a
una carcasa pasiva, y el circuito trabaja sobre todo a baja frecuencia, donde la
carcasa es más débil. Un ensayo de umbral no lo ve: la ISO 4869-1 trabaja a
niveles muy por debajo de aquellos en los que el circuito tiene algo que
cancelar. Por eso la ISO 4869-6 mide las dos mitades por separado, sobre los
mismos dieciséis sujetos, y las suma sujeto a sujeto. Sus métodos están
pensados para exposiciones a ruido estable y no se aplican a ruidos con
componentes impulsivos (cláusula 1):

- la atenuación **pasiva** es el resultado de la ISO 4869-1 con el circuito
  apagado, en bandas de octava;
- la **pérdida por inserción activa** (5.4.3) es el nivel en cada oído con el
  circuito apagado menos el nivel con él encendido, medido con un micrófono en
  el conducto auditivo cerrado (ISO 11904-1) en bandas de tercio de octava de un
  ruido de banda ancha a entre 85 dB y 95 dB:

$$
\alpha_{j,e,f} = L_{\mathrm{passive},j,e,f} - L_{\mathrm{active},j,e,f}
$$

con $L_{\mathrm{passive}}$ el nivel en el oído con el circuito apagado y
$L_{\mathrm{active}}$ el nivel con él encendido.

El anexo A trata su incertidumbre como la ISO 4869-1 trata la de la
atenuación, sobre los dieciséis valores del oído con la menor pérdida por
inserción, e imprime un ejemplo, la Tabla A.3:

```python
# Tabla A.3 de la ISO 4869-6: la pérdida por inserción activa del oído de menor
# pérdida de dieciséis sujetos en las frecuencias de octava de 63 Hz a 8 kHz.
tabla_a3_anr = np.array([
    [18.4, 23.9, 21.6, 5.2, -4.5, -0.2, -1.3, -1.0], [19.4, 23.0, 21.7, 5.7, -6.4, -0.4, 0.8, -1.9],
    [19.7, 23.1, 20.8, 3.6, -4.2, -2.9, 0.2, -0.6], [19.8, 23.1, 18.7, 2.2, -4.9, -0.5, -0.2, 0.2],
    [20.5, 24.5, 20.2, 3.1, -4.4, -2.9, -1.4, 0.3], [18.8, 24.4, 20.8, 3.9, -4.3, -2.6, -0.4, -0.2],
    [21.7, 24.4, 22.2, 4.7, -5.2, -5.1, -1.5, -0.3], [20.5, 22.7, 24.3, 8.8, -8.8, -3.1, -4.8, -0.7],
    [22.9, 23.2, 20.7, 5.4, -6.5, -2.8, -0.5, -1.0], [21.9, 22.9, 23.1, 8.8, -8.4, -4.9, -2.6, -0.7],
    [23.7, 24.6, 20.8, 3.4, -6.4, -0.1, -0.3, -0.6], [22.0, 23.9, 20.3, 3.0, -4.2, -0.8, -1.0, 0.3],
    [23.2, 24.3, 20.9, 4.6, -5.6, -0.1, -0.5, -1.0], [21.5, 23.5, 23.3, 5.9, -5.2, -3.1, -3.6, -1.6],
    [24.3, 24.2, 22.5, 4.2, -6.3, -2.5, -0.9, -0.5], [23.8, 24.9, 20.7, 3.8, -4.8, -0.5, -0.3, 0.2],
])
insercion = hearing.active_insertion_loss(tabla_a3_anr)
print(np.round(insercion.mean_db, 1))                  # [21.4 23.8 21.4  4.8 -5.6 -2.  -1.1 -0.6]
print(np.round(insercion.expanded_uncertainty_db, 1))  # [0.9 0.4 0.7 0.9 0.7 0.8 0.7 0.3]
```

Desde 1 kHz el circuito añade sonido en lugar de quitarlo, hasta 6 dB en
1 kHz, y los valores negativos se conservan tal cual. Las filas de la media y de
la desviación típica de la Tabla A.3 se reproducen exactas, pero sus filas de
$u$ y $U_{95}$ son la fórmula aplicada a la fila **redondeada** de encima
($1{,}4 / 4 = 0{,}35$ se imprime 0,4), lo que deja seis de sus ocho celdas de
$U_{95}$ una décima por encima del valor que definen A.1 y A.2. La biblioteca
devuelve el valor definido; la discrepancia está registrada en
[ERRATA](/phonometry/es/reference/errata/). El balance típico de la Tabla A.2
es `hearing.ANR_WITHIN_LABORATORY_UNCERTAINTY`, con $U_{95}$ = 1,56 dB.

### La atenuación total (5.5)

El apartado 5.5 suma las dos mitades por sujeto. La atenuación pasiva se
interpola en bandas de tercio de octava y se prolonga hasta 50 Hz y 10 kHz (a),
en cada banda solo se conserva el oído con la menor pérdida por inserción activa
(b), se suman las dos (c), cada octava es el promedio energético de sus tres
tercios de octava (d) y los dieciséis resultados por octava entran en los
métodos de la ISO 4869-2 al 84 % (e):

$$
A_{\mathrm{total,oct},j} = -10 \lg \left[\left(
\sum_{i=1}^{3} 10^{-0,1 A_{\mathrm{total},f_i,j}}\right) / 3\right] \mathrm{dB}
$$

La norma remite para los detalles a un libro de cálculo que publica ISO, y ese
libro interpola **linealmente en hercios** entre las frecuencias centrales
nominales, no sobre un eje logarítmico: 80 Hz queda al 27 % del camino de 63 Hz
a 125 Hz, no a un tercio. La biblioteca sigue el libro y reproduce cada paso
del apartado 5.5 que guarda: el oído con el valor menor, la interpolación, las
sumas, la Fórmula (1) y la media, la desviación típica y el $APV_{f84}$. El
libro redondea a 0,1 dB la interpolación, la Fórmula (1), la media y la
desviación típica, y deja el resto como sale; la biblioteca no redondea nada,
lo que mueve un total por octava o un $APV_{f84}$ menos de 0,1 dB.

<details>
<summary>Ver los datos del ejemplo de cálculo de ISO</summary>

```python
# La REAT de los dieciséis sujetos, bandas de octava de 63 Hz a 8 kHz.
reat_anr = np.array([
    [11.7, 15.7, 8.6, 10.7, 25.6, 22.7, 43.0, 38.0], [12.7, 20.3, 15.7, 13.4, 23.0, 24.3, 36.7, 42.0],
    [21.0, 22.7, 17.7, 18.0, 27.4, 31.0, 36.3, 45.0], [21.6, 22.0, 21.0, 13.4, 24.7, 30.3, 36.3, 42.3],
    [10.6, 10.0, 11.7, 16.0, 24.6, 23.4, 38.0, 42.4], [12.3, 13.3, 12.3, 17.6, 30.0, 22.6, 39.3, 43.3],
    [11.0, 10.0, 10.0, 13.6, 24.3, 25.4, 36.3, 37.4], [16.0, 12.0, 11.3, 13.0, 28.7, 25.7, 38.0, 35.0],
    [11.4, 11.6, 11.0, 13.7, 29.3, 24.3, 42.7, 37.6], [12.7, 12.0, 8.0, 9.0, 32.7, 25.6, 37.0, 41.0],
    [14.0, 10.3, 7.7, 15.0, 21.0, 22.7, 33.3, 33.0], [19.3, 18.3, 15.6, 16.3, 21.0, 26.4, 32.7, 31.0],
    [13.7, 15.4, 12.6, 13.4, 22.0, 19.0, 40.0, 33.3], [13.0, 15.3, 6.7, 12.0, 23.0, 28.7, 40.4, 38.0],
    [16.7, 21.6, 18.4, 18.0, 33.7, 37.7, 57.0, 50.6], [10.7, 15.0, 10.0, 11.7, 25.0, 22.0, 32.0, 38.7],
])
# Su pérdida por inserción activa del oído de menor pérdida, 24 tercios de octava de 50 Hz a 10 kHz.
ail_anr = np.array([
    [17.3, 18.4, 20.6, 23.3, 23.9, 24.8, 23.6, 21.6, 17.0, 12.1, 5.2, -0.7, -5.7, -4.5, -2.0, 0.1, -0.2, -6.5, -4.4, -1.3, -0.2, 0.2, -1.0, -0.1],
    [17.5, 19.4, 19.9, 21.7, 23.0, 23.9, 23.9, 21.7, 17.6, 12.8, 5.7, 0.8, -6.8, -6.4, -2.6, -1.2, -0.4, -1.6, -0.8, 0.8, -0.4, -1.3, -1.9, 0.7],
    [17.0, 19.7, 21.2, 22.0, 23.1, 24.6, 23.7, 20.8, 17.0, 11.6, 3.6, -2.0, -7.0, -4.2, -1.9, -0.6, -2.9, -6.2, -2.8, 0.2, 0.3, -1.0, -0.6, 0.6],
    [17.4, 19.8, 21.3, 22.4, 23.1, 22.3, 20.6, 18.7, 14.6, 9.7, 2.2, -2.6, -6.3, -4.9, -2.5, -1.4, -0.5, -2.9, -1.1, -0.2, 0.2, 0.1, 0.2, 1.1],
    [19.0, 20.5, 21.8, 23.1, 24.5, 24.5, 22.3, 20.2, 16.2, 10.6, 3.1, -1.5, -5.9, -4.4, -1.6, -0.8, -2.9, -7.7, -5.8, -1.4, 0.0, -0.6, 0.3, -0.7],
    [17.7, 18.8, 20.4, 23.0, 24.4, 25.3, 24.3, 20.8, 16.4, 10.6, 3.9, -1.7, -6.2, -4.3, -2.0, -1.2, -2.6, -5.1, -3.9, -0.4, 0.3, -0.1, -0.2, 0.3],
    [20.0, 21.7, 22.8, 23.2, 24.4, 24.1, 24.2, 22.2, 17.3, 12.5, 4.7, 0.2, -5.5, -5.2, -2.4, -1.5, -5.1, -8.7, -6.6, -1.5, -1.1, -1.7, -0.3, -0.4],
    [20.1, 20.5, 21.2, 21.4, 22.7, 24.7, 25.1, 24.3, 19.7, 15.5, 8.8, 5.4, -3.3, -8.8, -7.6, -4.1, -3.1, -6.2, -8.3, -4.8, -2.1, -0.6, -0.7, -1.9],
    [22.9, 22.9, 22.9, 22.9, 23.2, 24.0, 23.6, 20.7, 17.2, 11.7, 5.4, 0.1, -7.7, -6.5, -3.0, -1.9, -2.8, -3.9, -4.5, -0.5, 0.0, -0.7, -1.0, 1.1],
    [21.9, 21.9, 21.9, 21.9, 22.9, 24.3, 24.4, 23.1, 17.8, 14.3, 8.8, 5.3, -3.4, -8.4, -4.8, -2.7, -4.9, -5.0, -4.2, -2.6, -0.3, -0.4, -0.7, -0.4],
    [23.7, 23.7, 23.7, 23.7, 24.6, 24.3, 23.0, 20.8, 16.7, 11.1, 3.4, -2.2, -8.0, -6.4, -3.0, -1.7, -0.1, 0.0, -0.5, -0.3, -0.2, -1.8, -0.6, 0.0],
    [22.0, 22.0, 22.0, 22.0, 23.9, 24.1, 22.8, 20.3, 16.1, 11.1, 3.0, -1.8, -6.2, -4.2, -1.9, -0.1, -0.8, -6.0, -5.2, -1.0, -0.2, 0.1, 0.3, 0.7],
    [23.2, 23.2, 23.2, 23.2, 24.3, 23.9, 23.5, 20.9, 16.8, 11.8, 4.6, -1.2, -6.8, -5.6, -2.3, -1.2, -0.1, -1.5, -3.2, -0.5, 0.8, 0.1, -1.0, -0.3],
    [21.5, 21.5, 21.5, 21.5, 23.5, 24.6, 25.1, 23.3, 17.6, 13.4, 5.9, 1.6, -4.3, -5.2, -2.3, -1.2, -3.1, -7.3, -4.0, -3.6, 0.0, -1.3, -1.6, 0.6],
    [24.3, 24.3, 24.3, 24.3, 24.2, 24.6, 23.9, 22.5, 17.7, 12.4, 4.2, -0.2, -7.2, -6.3, -2.2, -1.0, -2.5, -6.9, -3.1, -0.9, 0.0, -0.1, -0.5, 0.6],
    [23.8, 23.8, 23.8, 23.8, 24.9, 24.2, 22.3, 20.7, 15.9, 10.9, 3.8, -0.4, -6.7, -4.8, -2.1, -0.7, -0.5, -6.3, -3.4, -0.3, 0.2, 0.1, 0.2, 1.3],
])
```

</details>

```python
anr = hearing.anr_total_attenuation(reat_anr, ail_anr)
print(np.round(anr.assumed_protection.apv, 1))  # [31.6 34.5 29.1 16.9 15.2 19.9 27.8 33.5]
print(anr.hml.reported, anr.snr.reported)       # (21, 17, 19) 21

# La misma orejera con el circuito apagado, directa a la ISO 4869-2:
print(hearing.hml_rating(reat_anr).reported, hearing.snr_rating(reat_anr).reported)
# (24, 17, 12) 20
```

El circuito gana siete decibelios de $L$, el valor de baja frecuencia, y cuesta
tres de $H$: añade sonido desde 1 kHz. El número único se mueve un decibelio,
por eso un protector para un ruido de baja frecuencia se elige mejor por su $L$,
o por el método por bandas de octava, que por su SNR.

*A la izquierda, el ejemplo de cálculo de ISO para 5.5: el circuito añade más de 20 dB donde la carcasa pasiva es más débil, por debajo de 250 Hz, y quita unos decibelios desde 1 kHz. A la derecha, la propia pérdida por inserción activa, los mismos datos que el anexo A: la dispersión entre sujetos es pequeña, y por eso también lo es su incertidumbre expandida.*

<details>
<summary>Ver el código de esta figura</summary>

```python

anr.plot(language="es")  # pasiva, activa y total, con las octavas y el APV
plt.show()
# La pérdida por inserción del oído de menor pérdida del libro en sus 24 tercios
# de octava, de la que la Tabla A.3 es el subconjunto de las frecuencias de octava,
# con su incertidumbre expandida.
hearing.active_insertion_loss(ail_anr).plot(language="es")
plt.show()
```

</details>

### Funcionamiento lineal (5.4.4)

Un circuito de cancelación se satura, así que su pérdida por inserción solo
vale hasta cierto nivel exterior. Con ruido rojo y el circuito encendido, el
nivel exterior ponderado A sube en pasos de 5 dB desde el de la medida de la
pérdida por inserción hasta 110 dB como mucho, y el nivel en cada oído en la
octava de 125 Hz tiene que subir los mismos 5 dB, con ±1 dB de tolerancia. Lo
que se informa es el nivel exterior más alto hasta el que eso se cumple en
todas las muestras, sujetos y oídos:

```python
exterior = [90.0, 95.0, 100.0, 105.0, 110.0]
en_los_oidos = [[60.0, 65.0, 70.0, 75.0, 80.0],   # una fila por oído
                [61.0, 66.0, 71.0, 75.5, 78.0]]   # el último paso sube 2,5 dB
linealidad = hearing.assess_anr_linearity(exterior, en_los_oidos)
print(linealidad.maximum_linear_level_db)  # 105.0
print(linealidad.linear_to_110_db)         # False
```

También pueden entrar los tres niveles de tercio de octava en el oído, como
`ear_third_octave_levels_db`, que se suman en energía para formar la octava.

## Orejeras sobre un montaje de ensayo (ISO 4869-3)

Dieciséis sujetos son una semana de laboratorio. La ISO 4869-3 mide una orejera
sin ninguno: el montaje de ensayo acústico es un cilindro metálico de 135 mm de
diámetro con sus caras separadas 145 mm y un micrófono de presión enrasado con
una de ellas (5.1), y la **pérdida por inserción** es el nivel en ese micrófono
sin la orejera menos el nivel con ella asentada en el montaje, en bandas de
tercio de octava desde al menos 63 Hz hasta 8 kHz (5.3, 5.4.2):

$$
IL_f = \overline{L}_{\mathrm{open},f} - \overline{L}_{\mathrm{occl},f}
$$

Es un método de cribado. Su objeto dice para qué sirve, comprobar la dispersión
de la producción para la aprobación de tipo o la certificación, el cambio de las
prestaciones con el tiempo, y si las muestras enviadas al ensayo subjetivo de la
ISO 4869-1 son típicas de su tipo, y para qué no: sus datos «are not intended to
be quoted as representing the real-ear sound attenuation of an ear-muff, nor the
protection provided by the ear-muff» (apartado 1). Así que nada de aquí lleva una
pérdida por inserción a los métodos de la ISO 4869-2 de más arriba, que toman la
atenuación en oído real de dieciséis sujetos.

```python
# Una orejera colocada tres veces en el montaje (5.4.3), de 63 Hz a 8 kHz.
bands = np.asarray(hearing.EARMUFF_TEST_BANDS_HZ)
loss = np.array([7.5, 9.0, 11.0, 13.5, 16.5, 20.0, 23.5, 27.0, 30.0, 32.5, 34.5,
                 36.0, 37.0, 37.5, 37.0, 36.0, 35.5, 36.5, 38.0, 37.0, 35.0, 33.5])
spread = np.array([[-0.6], [0.1], [0.5]]) * np.linspace(1.0, 2.2, 22)
open_level = np.full(22, 88.0)
fittings = open_level - loss + spread
il = hearing.earmuff_insertion_loss(
    open_level, fittings, isolation_cup_levels_db=open_level - 70.0
)
print(il.reported_db[[3, 9, 12, 18]])                   # [13.5 32.5 37.  38. ]
print(np.round(il.expanded_uncertainty_db[[3, 12, 21]], 1))  # [1.8 1.9 2.1]
print(il.repetitions_sufficient, bool(np.all(il.floor_adequate)))  # True True
```

El resultado se informa a 0,1 dB y se dibuja como pide el apartado 6, creciendo
hacia abajo en la escala de la IEC 60263 de 50 dB por década de frecuencia;
`.plot()` da a los ejes esa proporción tanto si los crea como si se le pasan. La incertidumbre del anexo B se evalúa banda a banda: los dos niveles
llevan la desviación típica de la media de sus repeticiones (B.3), o los 0,5 dB y
1,0 dB típicos de la Tabla B.1 cuando solo hay una, y el montaje, el campo y el
equipo añaden 0,3 dB, 0,5 dB y 0,2 dB. La Tabla B.1 con sus valores típicos da
$u$ = 1,3 dB y $U$ = 2,6 dB, que es `hearing.EARMUFF_INSERTION_LOSS_UNCERTAINTY`.
La copa de aislamiento en lugar de la orejera tiene que leer al menos 10 dB menos
(5.3), lo que comprueba `floor_adequate`, y `level_stable` y `response_smooth`
comprueban que la señal de ensayo se mantuvo dentro de ±1 dB y que dos bandas
contiguas de ella no difieren más de 5 dB.

El lugar de ensayo se cualifica como campo de incidencia aleatoria o como onda
plana progresiva (5.2). El campo de incidencia aleatoria es el campo difuso de la
ISO 8253-2 ([métodos de ensayo audiométricos](/phonometry/es/perception/hearing/audiometry/))
con la Tabla 1 propia de esta norma, y el anexo A señala que el propio montaje
puede hacer de micrófono direccional donde su índice frontal-aleatorio llega a
4 dB:

```python
index = [hearing.ATF_FRONT_TO_RANDOM_INDEX_DB.get(f, np.nan) for f in bands]
positions = dict.fromkeys(("front", "back", "left", "right", "up", "down"),
                          np.full(22, 1.0))
ring = np.zeros((2, 22))
ring[1] = 3.0
field = hearing.check_random_incidence_field(
    positions, np.zeros(22), directional_levels_db=ring, front_to_random_index_db=index
)
print(bands[field.directional_required & ~field.directional_judged])
# [ 500.  630.  800. 1000. 4000. 5000.]: estas las tiene que leer otro micrófono
```

`hearing.check_plane_progressive_wave` juzga el otro lugar del 5.2.3, las dos
posiciones de las caras a 2 dB y un micrófono direccional que lee al menos 10 dB
más de cara a la fuente que de espaldas, y `hearing.verify_fixture_isolation`
juzga el propio montaje: con su copa de aislamiento sellada, al menos 50 dB hasta
250 Hz, 65 dB de 315 Hz a 4 kHz y 55 dB por encima (5.1.4). La Tabla 1 de la
ISO 4869-3 imprime su primera fila como «> 5» mientras el 5.2.2 pide un índice
«of at least 5 dB»; la biblioteca sigue al texto, y la discrepancia está
registrada en [ERRATA](/phonometry/es/reference/errata/).

*A la izquierda, 5.4: tres colocaciones y su media, con la incertidumbre del
anexo B. A la derecha, 5.1.4: el montaje aísla su micrófono más de lo que lo hará
la orejera que ensaya, que es lo que hace medible la pérdida por inserción.*

<details>
<summary>Ver el código de esta figura</summary>

```python
isolation = hearing.verify_fixture_isolation(
    np.full(22, 120.0),
    120.0 - np.array([54, 55, 57, 59, 61, 63, 66, 68, 70, 71, 72, 73, 74, 74,
                      73, 72, 71, 70, 68, 64, 61, 59]),
)
fig, (left, right) = plt.subplots(1, 2, figsize=(13.5, 5.6))
il.plot(left, language="es")          # las colocaciones, su media y U, 50 dB por década hacia abajo
isolation.plot(right, language="es")  # el aislamiento frente a los tres tramos del 5.1.4
plt.show()
```

</details>

## Qué cubre esta guía

La atenuación del apartado 4.6.2 de la ISO 4869-1:2018 y su estadística
(4.6.3), la incertidumbre de la media del anexo A con los balances típicos de
las Tablas A.2 y B.2, la prueba de significación del anexo B (B.1.2, y la
diferencia mínima de B.1.1 y B.2) y las condiciones del campo sonoro del
apartado 4.2.2 con la Tabla 1, mediante `hearing.real_ear_attenuation`,
`hearing.assess_attenuation_difference`,
`hearing.minimum_significant_difference`, `hearing.reat_expanded_uncertainty`
y `hearing.check_reat_sound_field`. Todas las celdas derivadas de las Tablas
A.2, A.3 y B.2, la fila del criterio y el veredicto de la Tabla B.1 y las cuatro
diferencias mínimas se reproducen hasta el decimal impreso en la suite de tests
y en el informe de conformidad. La fila de diferencias de la Tabla B.1 coincide
a 0,1 dB, porque la norma imprime redondeadas las medias de su segundo ensayo:
en 8 kHz sale 3,94 dB frente a los 4,0 impresos.

La pérdida por inserción activa de la ISO 4869-6:2019 (5.4.1 y 5.4.3, a partir
de los niveles MIRE de los dos oídos o dada directamente), la elección del oído
con el valor menor de 5.5 b), la incertidumbre de su media del anexo A con el
balance típico de la Tabla A.2, la atenuación total de 5.5 a) a e) con la
Fórmula (1) y la comprobación de funcionamiento lineal de 5.4.4, mediante
`hearing.active_insertion_loss`, `hearing.anr_total_attenuation` y
`hearing.assess_anr_linearity`. La media y la desviación típica de la
Tabla A.3 y sus filas de $u$ y $U_{95}$ tal como las forma la tabla se
reproducen en la suite de tests y en el informe de conformidad, y también cada
paso del apartado 5.5 que guarda el libro de cálculo de ISO (filas 134-149,
182-197, 206-221, 230-245 y 247-249): las del oído de menor pérdida exactas, y
las demás dentro del redondeo que el libro aplica a lo largo de la cadena.

El valor de protección supuesta de la ISO 4869-2:2018 (apartado 5, Fórmula (1),
con los siete rendimientos de protección de la Tabla 1), el método por bandas
de octava (apartado 6, Fórmula (2)), el método HML (apartado 7, Fórmulas (3) a
(18), incluidos los ocho ruidos de referencia y los pesos empíricos de la
Tabla 2) y el método SNR (apartado 8, Fórmulas (19) a (24), contra el ruido
rosa de la Tabla 3), mediante `hearing.assumed_protection_value`,
`hearing.octave_band_protected_level`, `hearing.hml_rating`,
`hearing.hml_protected_level`, `hearing.snr_rating` y
`hearing.snr_protected_level`. Todas las cifras impresas del ejemplo que
recorre los anexos A a D se reproducen en la suite de tests y en el informe de
conformidad.

La pérdida por inserción de la ISO 4869-3:2007 de una orejera sobre el montaje
de ensayo acústico (5.4.2 y 5.4.3, informada como pide el apartado 6) con la
incertidumbre del anexo B y las comprobaciones del apartado 5.3 sobre la copa de
aislamiento, la estabilidad de la señal de ensayo y su espectro; el campo de
incidencia aleatoria del 5.2.2 con la Tabla 1 y el índice frontal-aleatorio del
propio montaje de la Tabla A.1; la onda plana progresiva del 5.2.3; y el
aislamiento acústico del montaje (5.1.4), mediante
`hearing.earmuff_insertion_loss`, `hearing.check_random_incidence_field`,
`hearing.check_plane_progressive_wave` y `hearing.verify_fixture_isolation`. Las
Tablas 1, A.1 y B.1 ($u$ = 1,3 dB, $U$ = 2,6 dB) y el aislamiento del 5.1.4 se
reproducen en la suite de tests y en el informe de conformidad. La pérdida por
inserción es una magnitud de cribado y no se convierte en una atenuación en oído
real.

La medición del umbral en sí no se simula: la selección y el entrenamiento de
los sujetos de la ISO 4869-1 (4.4), su procedimiento de colocación (4.5), el
equipo de ensayo (4.3), el tiempo de reverberación (4.2.3) y el ruido de fondo
(4.2.4, Tabla 2) de la sala y la fuerza de aplicación del apartado 5 son
requisitos de laboratorio que esta biblioteca no juzga, y parte de los umbrales
o de las atenuaciones que produjeron. También se dan por hechos la medida MIRE
de la ISO 11904-1 que hay detrás de la pérdida por inserción activa, las
señales de ensayo del apartado 5.3 y la comprobación de oscilaciones del
apartado 5.4.2, y también la construcción del montaje de la ISO 4869-3
(5.1.2, 5.1.3), la colocación de la orejera en él (5.4.1) y el ruido de fondo de
su lugar de ensayo (5.2.4). Tampoco está implementado el
tratamiento de incertidumbre del anexo E de la ISO 4869-2 sobre atenuaciones e
índices. Nada de aquí modela la diferencia entre la atenuación de laboratorio y
lo que un protector consigue en campo, que es el objeto del ISO/TR 4869-5 y es
sistemáticamente grande; aplicar un factor de reducción es una decisión de
política que esta biblioteca no toma por ti.

## Véase también

- [Exposición laboral al ruido (ISO 9612)](/phonometry/es/perception/hearing/occupational-exposure/):
  el nivel de exposición diaria al que alimenta el nivel protegido.
- [Pérdida auditiva inducida por ruido (ISO 1999)](/phonometry/es/perception/hearing/noise-induced-hearing-loss/):
  lo que hace a lo largo de una vida laboral la exposición que el protector no detuvo.
- [Umbral de audición (edad y cero de referencia)](/phonometry/es/perception/hearing/hearing-threshold/):
  la línea base contra la que se juzga cualquier exposición protegida.
- [Métodos de ensayo audiométricos (ISO 8253-1 y -2)](/phonometry/es/perception/hearing/audiometry/):
  el ensayo de campo difuso que comparte el lugar de la ISO 4869-3, y la sala y
  las reglas detrás de cada umbral con el que se mide un protector.
- Referencia de API: [`hearing.real_ear_attenuation`](/phonometry/es/reference/api/hearing/real-ear-attenuation/),
  [`hearing.hearing_protectors`](/phonometry/es/reference/api/hearing/hearing-protectors/),
  [`hearing.active_noise_reduction`](/phonometry/es/reference/api/hearing/active-noise-reduction/)
  y [`hearing.earmuff_insertion_loss`](/phonometry/es/reference/api/hearing/earmuff-insertion-loss/).
