<!-- canonical: https://docs.jmrp.io/phonometry/es/devices/emission/free-field-qualification/ -->
Source: https://docs.jmrp.io/phonometry/es/devices/emission/free-field-qualification/

Todo nivel de potencia acústica de precisión descansa en dos cosas que se
miden antes de que llegue la máquina. Una cámara anecoica o semianecoica es
un campo libre en la medida en que lo muestra su cualificación, y un método de
comparación acierta en la medida en que acierta la potencia calibrada de su
fuente sonora de referencia. ISO 26101 cualifica la cámara por la ley del
cuadrado inverso, ISO 3745 somete esa cualificación a los criterios del
método de precisión en su anexo A, que la modificación 1:2017 reescribió de
arriba abajo para remitir a ISO 26101, e ISO 6926 dice qué debe cumplir una
fuente sonora de referencia y cómo se calibra su potencia. Esta guía cubre los
recorridos y las desviaciones de la ley del cuadrado inverso, cómo ajusta la
biblioteca la intensidad de la fuente $b$ y el origen matemático, el
veredicto del anexo A modificado sobre una cámara semianecoica sintética, y
una fuente de referencia calibrada sobre la semiesfera de 2 m, juzgada frente
al apartado 5 y entregada a un método de comparación. Las determinaciones en
sí están en
[Potencia acústica por métodos de presión](/phonometry/es/devices/emission/sound-power-pressure/)
y en [Potencia acústica en cámara reverberante](/phonometry/es/devices/emission/sound-power-reverberation/).

## 1. La ley del cuadrado inverso a lo largo de un recorrido (ISO 26101)

Una fuente pequeña en campo libre pierde 6 dB cada vez que se duplica la
distancia. El método de la pérdida por divergencia del apartado 5.1 de
ISO 26101 mide cuánto se aparta de eso una sala real: un micrófono se
desplaza por **recorridos** rectos que se alejan de una fuente de ensayo, y en
cada punto $i$, a la distancia $r_i$ del origen matemático del recorrido, el
nivel medido $L_{pi}$ se compara con la estimación de la fórmula (2),

$$
L_p(r_i) = b - 20 \lg\frac{r_i}{r_0}\ \mathrm{dB}, \qquad r_0 = 1\ \mathrm{m},
$$

y la desviación de la fórmula (4) es $\Delta L_{pi} = L_{pi} - L_p(r_i)$. Si
la fuente deriva más de 0,2 dB mientras se mide un recorrido (5.1.2.2 d)), un
micrófono de control en una posición fija corrige cada lectura con la
fórmula (1), $L_{pi} = L'_{pi} - L_{p,\mathrm{ref},i} + L_{p,\mathrm{ref},0}$.
La sala queda cualificada hasta la mayor distancia a la que todas las
desviaciones, en todos los recorridos y a todas las frecuencias, se mantienen
dentro de los límites de la tabla A.1:

| Sala | Hasta 630 Hz | De 800 Hz a 5 000 Hz | Desde 6 300 Hz |
| :--- | :---: | :---: | :---: |
| Anecoica | ±1,5 dB | ±1,0 dB | ±1,5 dB |
| Semianecoica | ±2,5 dB | ±2,0 dB | ±3,0 dB |

El anexo A de ISO 26101 y el anexo A modificado de ISO 3745 imprimen las
mismas celdas. Un `MicrophoneTraverse` guarda un recorrido: los puntos como
`(x, y, z)` en el sistema de la sala, con `z` hacia arriba y el plano
reflectante de una cámara semianecoica en `z = 0`, los niveles con una columna
por frecuencia de ensayo y, si se quiere, las lecturas del micrófono de
control y el ruido de fondo. `MicrophoneTraverse.along` traza uno a lo largo
de una recta. Un campo de cuadrado inverso exacto es la primera forma
cerrada: queda cualificado hasta el final de todos los recorridos, con $b$
igual al nivel a 1 m y ninguna desviación en ningún punto.

```python

from phonometry import emission

d = np.arange(0.30, 3.0001, 0.05)            # pasos de 5 cm de 0,3 m a 3 m
exact = 90.0 - 20.0 * np.log10(d)             # 90 dB a 1 m, sin reflexiones
paths = [(1, 1, 1), (1, 1, 0.3), (0, 1, 0.5), (1, 0, 0.2), (-1, 0.5, 0.6)]
traverses = [emission.MicrophoneTraverse.along(u, d, exact) for u in paths]
fit = emission.inverse_square_law_deviations(
    traverses, frequencies_hz=[1000.0], room="anechoic")
print(round(fit.maximum_qualified_radius_m, 2))   # 3.0 m
print(fit.source_strength_db[:, 0].round(2))      # [90. 90. 90. 90. 90.]
print(fit.largest_deviation_db.round(3))          # [0.]
```

La segunda forma cerrada es una sala con una reflexión conocida. Una pared
totalmente reflectante 2,5 m por delante de la fuente, tomada como una imagen
incoherente, suma $D(r) = 10 \lg[1 + (r/(2w - r))^2]$ al nivel a la distancia
$r$, y el recorrido está cualificado mientras la dispersión de ese exceso no
pase del doble de la tolerancia: a 1 kHz en una cámara anecoica, 2 dB.
Despejando $r$, el límite cae en 2,187 m, y el último punto de una rejilla de
5 cm antes de él es 2,15 m.

```python
wall = 2.5                                    # una pared totalmente reflectante a 2,5 m
d = np.arange(0.50, 2.4001, 0.05)
excess = 10.0 * np.log10(1.0 + (d / (2.0 * wall - d)) ** 2)
reflected = emission.MicrophoneTraverse.along(
    (1, 0, 0), d, 90.0 - 20.0 * np.log10(d) + excess)
one = emission.inverse_square_law_deviations(
    [reflected], frequencies_hz=[1000.0], room="anechoic")
print(round(float(one.traverse_radius_m[0, 0]), 2))    # 2.15 m
inside = d <= one.traverse_radius_m[0, 0]
print(round(float(np.ptp(one.deviations_db[0][inside, 0])), 3))   # 1.903 dB
print(round(float(np.ptp(excess[inside])), 3))                    # 1.903 dB
print(round(float(one.source_strength_db[0, 0]), 3))              # 91.005 dB
print(round(float(one.initial_source_strength_db[0, 0]), 3))      # 90.913 dB
```

Las desviaciones se dispersan exactamente lo que añade la pared, 1,903 dB, y
el $b$ que ajusta la biblioteca, 91,005 dB, no es el valor inicial de la
fórmula (3), la media de $L_{pi} + 20 \lg(r_i/r_0)$ sobre todos los puntos,
90,913 dB, que `initial_source_strength_db` da a su lado.

### Cómo se hace la medida

Se coloca la fuente de ensayo donde se colocarán las fuentes que se van a
medir: en el centro de una cámara anecoica, o sobre el plano reflectante de
una semianecoica, tan cerca de él como lo permita su zona radiante (A.3.2). Se
comprueba que radia de forma bastante uniforme (anexo B, apartado 4 de esta
guía). Se trazan de cinco a ocho recorridos rectos desde un mismo origen
dentro de la fuente, en la parte de la sala que se usa para medir (A.3.3):
hacia un diedro, hacia un triedro, hacia el centro de la superficie más
uniforme, hacia la superficie más cercana y hacia lo que peor aspecto tenga,
una puerta, una ventana, una abertura de ventilación, y se anota a qué
objetivo apunta cada uno (`targets=`) para que el veredicto compruebe que
están los cinco. Cada uno
empieza a no más de un cuarto de la longitud de onda de la frecuencia más
baja y llega hasta el límite del espacio que se quiere cualificar, con puntos
equiespaciados (5.1.4.3). En cada punto se anota el nivel a cada frecuencia de
ensayo, el nivel del micrófono de control junto a él si la fuente puede
derivar, y el ruido de fondo. Se cualifica con tonos salvo que todas las
fuentes que se vayan a medir sean de banda ancha (A.4.1).

## 2. Cómo ajusta la biblioteca b y el origen

La fórmula (2) deja $b$ libre: «is adjusted to optimize the fit of the
measured sound pressure levels into the tolerance range, to maximize the
qualified distance from the test sound source». La NOTA 1 propone una
búsqueda iterativa que parte de la fórmula (3), y ninguna fuente imprime ni la
búsqueda ni un ejemplo resuelto, así que la regla se diseña aquí y se
declara. Se escribe $y_i = L_{pi} + 20 \lg(r_i/r_0)$, de modo que
$\Delta L_{pi} = y_i - b$. Los puntos hasta una distancia $R$ caben dentro de
$\pm t$ para algún $b$ exactamente cuando la dispersión de sus $y_i$ es como
mucho $2t$, y esa dispersión solo puede crecer con $R$. Así, la distancia
cualificada de un recorrido a una frecuencia es el último punto de la tirada
más larga desde el origen cuya dispersión de $y$ no pasa de $2t$, y cualquier
$b$ entre $\max y - t$ y $\min y + t$ cualifica esa tirada. La biblioteca
toma el punto medio, $b = (\max y + \min y)/2$, que deja el mismo margen a los
dos límites. Ningún otro $b$ cualifica una tirada más larga, así que no hay
nada que iterar. Cuando un recorrido empieza más allá del radio que cumplen
todos, su $b$ se centra en su propia tirada cualificada.

El origen necesita una regla propia. El apartado 5.1.3.2 de ISO 26101 y el
A.3.3 modificado exigen que todos los recorridos compartan un único origen
matemático dentro del volumen físico que ocupa la fuente de ensayo; el anexo
de 2012 ajustaba en cambio un desplazamiento del centro acústico a lo largo de
cada recorrido, y A.1 d) advierte de que las salas cualificadas así pueden
cualificar ahora sobre menos. Con `origin_m`, las distancias salen de las
posiciones. Con `source_box_m`, la caja que ocupa la fuente, la biblioteca
busca en ella el origen con el mayor radio de A.2.4. Una distancia
cualificada termina o bien donde una desviación sale de la tabla A.1, y eso
lo decide la sala, o bien en el último punto medido, y eso lo decide la
medida; mover el origen mueve la distancia a ese último punto sin decir nada
de la sala. Por eso los orígenes se comparan por las distancias a las que la
sala corta una tirada, y una tirada que llega a su último punto cuenta a la
distancia de ese punto al centro de la caja, la misma para todos los
orígenes; los radios que difieren menos del milímetro que resuelve la
búsqueda cuentan como iguales. Los empates van al origen cuyas curvas llenan
de media la menor parte de la banda de la tabla A.1, y después al más cercano
al centro de la caja. En un campo exacto de cuadrado inverso la sala no corta
ninguna tirada, las curvas solo son planas desde el punto del que diverge el
campo, y la búsqueda devuelve ese punto. La búsqueda es una rejilla de cinco puntos por eje
seguida de una búsqueda por compás que divide su paso a la mitad hasta 1 mm:
determinista, dentro de la caja por construcción y nunca peor que el mejor
punto de la rejilla.

## 3. Una cámara semianecoica

El ejemplo es una cámara semianecoica sintética de 8 m por 6 m por 5 m entre
las puntas de las cuñas, cuyo suelo rígido es el plano reflectante y devuelve
toda la presión. La fuente está en una cavidad del suelo, como recomienda
A.3.2.2, así que el sonido diverge desde un punto del plano, a 2 cm y −1 cm
del pie de la fuente, y la fuente coincide con su imagen en el suelo. Cada
pared y el techo devuelven una imagen coherente, con su propia imagen en el
suelo, a través del coeficiente de reflexión de presión de sus cuñas, 0,30 a
100 Hz, que baja hasta 0,05 a 10 kHz. Seis recorridos salen del pie de la
fuente con pasos de 25 mm, uno por cada trayectoria que pide A.3.3, cada uno
con su objetivo, y otro más hacia el techo, y se miden a las once
frecuencias de A.2.3, que enumera `qualification_frequencies_hz`: las bandas
de tercio de octava por debajo de 125 Hz y por encima de 4 000 Hz y las
frecuencias centrales de octava entre ambas.

```python
grid = emission.qualification_frequencies_hz()
print(grid)   # [100. 125. 250. 500. 1000. 2000. 4000. 5000. 6300. 8000. 10000.]

walls = [(0, -4.0), (0, 4.0), (1, -3.0), (1, 3.0), (2, 5.0)]   # las puntas de las cuñas
wedge = np.interp(np.log10(grid), np.log10([100, 125, 250, 500, 10000]),
                  [0.30, 0.22, 0.12, 0.07, 0.05])
centre = np.array([0.02, -0.01, 0.0])         # el punto del que diverge el sonido

def measured(points):
    k = 2.0 * np.pi * grid / 343.0
    images = [(centre, 1.0)]
    for axis, plane in walls:
        image = centre.copy()
        image[axis] = 2.0 * plane - centre[axis]
        images.append((image, wedge))
    p = 0.0
    for source, gain in images:
        for mirrored in (source, source * (1.0, 1.0, -1.0)):   # y su imagen en el suelo
            r = np.linalg.norm(points - mirrored, axis=1)[:, None]
            p = p + gain * np.exp(-1j * k * r) / r
    return 88.0 + 20.0 * np.log10(np.abs(p))  # 94 dB a 1 m con el suelo

paths = [   # nombre, hacia dónde apunta, el objetivo de A.3.3 al que sirve
    ("diedro", (4.0, 3.0, 2.5), ("dihedral corner",)),
    ("triedro", (-4.0, 3.0, 5.0), ("trihedral corner",)),
    ("centro de una pared", (0.0, -3.0, 2.5), ("boundary centre",)),
    ("pared más cercana", (0.0, 3.0, 1.2), ("closest boundary",)),
    ("puerta", (-4.0, -1.5, 1.0), ("unique features",)),
    ("hacia el techo", (1.5, 1.0, 4.0), ()),
]
d = np.arange(0.25, 3.0001, 0.025)            # pasos de 25 mm de 0,25 m a 3 m
traverses = []
for name, towards, aims in paths:
    unit = np.asarray(towards) / np.linalg.norm(towards)
    traverses.append(emission.MicrophoneTraverse.along(
        towards, d, measured(d[:, None] * unit), name=name, targets=aims,
        background_levels_db=np.full(grid.size, 25.0)))

room = emission.inverse_square_law_deviations(
    traverses, frequencies_hz=grid, room="hemi-anechoic",
    source_box_m=((-0.05, -0.05, 0.0), (0.05, 0.05, 0.08)))
print(room.origin_m.round(3))                 # [0.005 0.05  0.   ] m
print(room.band_radius_m.round(2))            # [2.76 2.95 2.95 ... 2.95] m
print(room.largest_deviation_db.round(1))     # [2.5 2.3 1.2 1.2 1.3 1.3 1.2 ...] dB
print(round(room.maximum_qualified_radius_m, 2))   # 2.76 m

foot = emission.inverse_square_law_deviations(
    traverses, frequencies_hz=grid, room="hemi-anechoic", origin_m=(0.0, 0.0, 0.0))
print(round(foot.maximum_qualified_radius_m, 2))   # 2.73 m
at_centre = emission.inverse_square_law_deviations(
    traverses, frequencies_hz=grid, room="hemi-anechoic", origin_m=centre)
print(round(at_centre.maximum_qualified_radius_m, 2))   # 2.72 m
print(at_centre.largest_deviation_db.round(1))     # [2.4 1.7 1.2 0.8 0.7 0.6 0.6 ...] dB
```

Solo los 100 Hz quedan limitados por la sala: la pared que tiene delante el
recorrido «centro de una pared» devuelve el 30 % de la presión, y su
desviación sale de los ±2,5 dB de la tabla A.1 a 2,76 m. A todas las demás
frecuencias los recorridos cualifican hasta su último punto, a 2,95 m del
origen que eligió la búsqueda, que queda sobre el suelo en el borde de la
caja, donde la tirada de 100 Hz es más larga. Con el origen en el pie de la
fuente, los mismos datos cualifican hasta 2,73 m. Con el origen en el punto
del que diverge de verdad el sonido, a 6 cm del que eligió la búsqueda, las
desviaciones por encima de 500 Hz se reducen a la mitad, de 1,1 a 1,3 dB a
0,6 a 0,7 dB, pero la sala solo cualifica hasta 2,72 m: la búsqueda cambia
margen dentro de la tolerancia por distancia, que es lo que le pide la
fórmula (2), y el margen que cede pesa más en los puntos más cercanos a la
fuente. El suelo no añade ninguna ondulación propia, porque el centro
acústico está en su plano. Si estuviera 3 cm por encima, la fuente y su
imagen interferirían a lo largo de todos los recorridos, y la sala solo
cualificaría hasta 0,44 m, retenida ahí por 4 kHz y 6,3 kHz, con 8 kHz poco
más allá, en 0,72 m: por eso A.3.2.2 pide el centro a menos de una décima de
longitud de onda del suelo.

*Las desviaciones a lo largo de los seis recorridos a 100 Hz y a 1 kHz. A
100 Hz la reflexión de la pared que tiene delante el recorrido «centro de una
pared» forma un patrón estacionario de unos metros de periodo que cruza el
límite inferior a 2,76 m, y ese punto fija el radio de toda la sala. A 1 kHz
la ondulación es rápida y pequeña, y todos los recorridos cualifican hasta su
final.*

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

```python

# room es el resultado calculado arriba.
fig, (low, high) = plt.subplots(1, 2, figsize=(12.5, 5.6))
room.plot(ax=low, frequency_hz=100.0, language="es")
room.plot(ax=high, frequency_hz=1000.0, language="es")
plt.show()
```

</details>

### Las funciones de ajuste

| Función | Apartado | Devuelve | Notas |
| :--- | :--- | :--- | :--- |
| `MicrophoneTraverse(positions_m, levels_db, monitor_levels_db=None, background_levels_db=None, name="", targets=())` | 5.1.3.2, A.3.3 | un recorrido | `nan` marca un punto no medido a una frecuencia, que es como se escribe un paso que cambia con la frecuencia; `targets` nombra hacia qué se elige la trayectoria entre `"dihedral corner"`, `"trihedral corner"`, `"boundary centre"`, `"closest boundary"` y `"unique features"` |
| `MicrophoneTraverse.along(direction, distances_m, levels_db, *, start_m=(0, 0, 0), ...)` | 5.1.3.2 | un recorrido | Trazado a lo largo de una recta |
| `inverse_square_law_deviations(traverses, *, frequencies_hz, room, origin_m=None, source_box_m=None)` | Fórmulas (1) a (4) | `InverseSquareLawResult` | Una llamada por fuente de ensayo; `origin_m` o `source_box_m`, no las dos |
| `inverse_square_law_tolerance_db(frequencies_hz, *, room)` | Tabla A.1 | límite por banda [dB] | Un tono se lee en la banda de tercio de octava que lo contiene |
| `qualification_frequencies_hz(low_hz=100.0, high_hz=10000.0)` | A.2.3 | frecuencias [Hz] | Once en el intervalo mínimo |

El resultado lleva las distancias, los niveles corregidos, $b$ por recorrido y
frecuencia junto al valor inicial de la fórmula (3), las desviaciones, la
distancia cualificada de cada recorrido (`traverse_radius_m`), de cada
frecuencia en todos los recorridos (`band_radius_m`) y de toda la sala
(`maximum_qualified_radius_m`), y la mayor desviación dentro del radio de cada
banda.

## 4. El veredicto del anexo A modificado

`check_free_field` somete una o varias fuentes ajustadas al anexo A que
escribió ISO 3745:2012/Amd.1:2017, y a los apartados de ISO 26101 a los que
remite:

- **Desviaciones y radio** (A.2.2, A.2.4): el radio máximo cualificado es la
  menor distancia cualificada sobre todos los recorridos y todas las
  frecuencias evaluadas, y los demás requisitos se juzgan dentro de él.
- **Frecuencias** (A.2.3): de 100 Hz a 10 000 Hz como mínimo. Lo que se quede
  por debajo es un intervalo reducido, y `conforming_range_hz` da la tirada
  contigua más ancha en la que se cumplen todos los requisitos juzgados, el
  intervalo con el que un informe puede declarar conformidad, nunca
  «conformidad plena».
- **Recorridos** (A.3.3): de cinco a ocho, hacia los cinco objetivos a) a e)
  tal como los nombran los recorridos, en la zona de trabajo de la sala, que
  se declara (`paths_in_working_area`) porque las posiciones no lo dicen, y en
  una cámara semianecoica todos dentro de los 20° a 80° desde la vertical en
  los que se midió la directividad de la fuente. Una trayectoria se juzga por
  su dirección, la recta de su primer a su último punto dentro del radio.
- **Puntos** (A.4.3): al menos 10 en cada recorrido y 50 en total dentro del
  radio, equiespaciados a cada frecuencia y separados como mucho una décima de
  longitud de onda por debajo de 250 Hz y 100 mm por encima. Los puntos
  añadidos entre dos de la rejilla cerca de una desviación máxima, como
  recomienda el último párrafo de A.4.3, no rompen la rejilla; el siguiente
  punto de la rejilla tiene que caer a menos de una décima de la separación
  mediana de donde lo pondría un paso, una tolerancia que ninguna fuente
  imprime.
- **Resolución y longitud de ISO 26101** (A.2.4, que cita 5.1.4.3 y A.4.3):
  un inicio a no más de un cuarto de longitud de onda de la frecuencia más
  baja y una tirada al menos así de larga, y una separación de como mucho una
  décima de longitud de onda por debajo de 1 kHz y 25 mm por encima. Ninguna
  de las dos reglas de separación dice qué lado rige en la banda que contiene
  su frecuencia frontera, 250 Hz o 1 kHz; el veredicto somete esa banda a la
  más estricta de las dos.
- **Ruido de fondo** (ISO 26101 5.1.2.2 c)): todos los puntos al menos 6 dB
  por encima de él.
- **Fuente de ensayo** (A.3.1, anexo B de ISO 26101):
  `verify_source_directionality` lee las 32 posiciones de una semiesfera de
  1,5 m (64 de una esfera en una cámara anecoica) que devuelve
  `directionality_positions`, y somete la mayor desviación respecto al nivel
  medio de cada banda a la tabla B.1.
- **Plano reflectante** (A.2.5): un coeficiente de absorción de como mucho
  0,06, y un plano que se extienda al menos un cuarto de longitud de onda y
  0,75 m más allá de la proyección de la superficie de medición.

Un requisito cuyos datos no se dieron aparece en `not_judged`, y `passes`
sigue en `False` hasta que se juzga.

```python
rows = np.arange(32)[:, None]
bands = np.arange(grid.size)[None, :]
source = emission.verify_source_directionality(
    80.0 + 0.4 * np.sin(0.7 * rows + bands) * (1.0 + bands / 10.0),
    frequencies_hz=grid, room="hemi-anechoic")
print(source.passes)                                         # True

check = emission.check_free_field(
    room, bandwidth="discrete-frequency", source_directionality=source,
    measurement_radius_m=1.5, paths_in_working_area=True,
    reflecting_plane_absorption_coefficient=0.02, reflecting_plane_margin_m=1.2)
print(check.passes, round(check.maximum_qualified_radius_m, 2))   # True 2.76
print(check.full_frequency_range, check.path_angles_met)          # True True
print(check.path_targets_met, bool(check.equal_spacing_met.all()))  # True True

unjudged = emission.check_free_field(room, bandwidth="discrete-frequency")
print(unjudged.passes, unjudged.not_judged)
# False ('source directionality', 'reflecting plane', 'working area')
```

La sala cualifica en conformidad plena para radios de medición de hasta
2,76 m, en frecuencias discretas y por tanto para fuentes tonales además de
para las de banda ancha (A.4.1). Una cualificación hecha con ruido de banda
ancha en tercios de octava se da con `bandwidth="broadband"` y solo vale para
fuentes de banda ancha.

*A la izquierda, el veredicto: todas las frecuencias cumplen todos los
requisitos, y la banda de 100 Hz fija el radio máximo cualificado. A la
derecha, la fuente de ensayo, medida en las 32 posiciones del anexo B, queda
holgadamente dentro de la tabla B.1 en todas las bandas.*

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

```python

# check y source son los resultados calculados arriba.
fig, (left, right) = plt.subplots(1, 2, figsize=(12.5, 5.6))
check.plot(ax=left, language="es")
source.plot(ax=right, language="es")
plt.show()
```

</details>

### Dos resoluciones para un mismo recorrido

A.2.4 pide a cada recorrido la resolución espacial del A.4.3 de ISO 26101,
una décima de longitud de onda por debajo de 1 kHz y 25 mm por encima,
mientras que el A.4.3 de la propia modificación fija una décima de longitud de
onda por debajo de 250 Hz y 100 mm por encima, y su último párrafo da por
supuestos recorridos de 100 mm. Las dos están impresas con «shall», así que
el veredicto juzga las dos e informa de cada una: `spacing_met` para el A.4.3
modificado e `iso26101_spacing_met` para la resolución que cita A.2.4. La
misma sala muestreada cada 100 mm cumple la primera en todas las frecuencias y
la segunda solo hasta 250 Hz, donde una décima de longitud de onda aún supera
los 100 mm, y cualifica sobre un intervalo reducido:

```python
coarse = [emission.MicrophoneTraverse(
              positions_m=t.positions_m[::4], levels_db=t.levels_db[::4],
              background_levels_db=t.background_levels_db[::4], name=t.name,
              targets=t.targets)
          for t in traverses]
room100 = emission.inverse_square_law_deviations(
    coarse, frequencies_hz=grid, room="hemi-anechoic",
    source_box_m=((-0.05, -0.05, 0.0), (0.05, 0.05, 0.08)))
check100 = emission.check_free_field(
    room100, bandwidth="discrete-frequency", source_directionality=source,
    measurement_radius_m=1.5, paths_in_working_area=True,
    reflecting_plane_absorption_coefficient=0.02, reflecting_plane_margin_m=1.2)
print(check100.passes, bool(check100.spacing_met.all()))    # False True
print(check100.iso26101_spacing_met[:4])                     # [ True  True  True False]
print(check100.conforming_range_hz, round(check100.conforming_radius_m, 2))
# (100.0, 250.0) 2.71
```

La incoherencia está en el [registro de erratas](/phonometry/es/reference/errata/).
Un laboratorio que tome el A.4.3 como la regla del anexo lee las dos marcas y
decide.

### La cualificación en una determinación

`sound_power_anechoic` toma el veredicto como `room_qualification`: el tipo de
sala tiene que casar con la superficie, y un `SoundPowerWarning` avisa cuando
la sala no está cualificada, cuando el radio de medida queda más allá del
cualificado o cuando una banda queda fuera del intervalo cualificado.

```python

levels = np.full((20, 3), 70.0)
with warnings.catch_warnings(record=True) as caught:
    warnings.simplefilter("always")
    emission.sound_power_anechoic(
        levels, "hemisphere", radius=2.8, frequencies=[500.0, 1000.0, 2000.0],
        room_qualification=check)
print(caught[0].message)
# The measurement radius 2.8 m lies beyond the qualified radius 2.76 m
# (ISO 3745:2012/Amd.1:2017, A.2.4).
```

### Las funciones del veredicto

| Función | Apartado | Devuelve | Notas |
| :--- | :--- | :--- | :--- |
| `check_free_field(results, *, bandwidth, source_directionality=None, measurement_radius_m=None, reflecting_plane_absorption_coefficient=None, reflecting_plane_margin_m=None, paths_in_working_area=None, speed_of_sound=343.0)` | Anexo A modificado | `FreeFieldCheck` | Un resultado por fuente de ensayo, con frecuencias disjuntas; lo que no se dio queda en `not_judged` |
| `verify_source_directionality(levels_db, *, frequencies_hz, room)` | Anexo B de ISO 26101 | `SourceDirectionalityResult` | 32 o 64 posiciones, una columna por banda |
| `directionality_positions(room, *, radius_m=1.5)` | B.3.2 de ISO 26101 | posiciones [m] | Elevación desde la vertical, acimut de 45° en 45° |
| `directionality_tolerance_db(frequencies_hz, *, room)` | Tabla B.1 | límite por banda [dB] | 5 dB por encima de 10 kHz |

## 5. Una fuente sonora de referencia (ISO 6926)

Una fuente sonora de referencia es la vara de medir de todo método de
comparación: ISO 3741 en cámara reverberante, ISO 3743-1 e ISO 3743-2 en una
sala de ensayo pequeña, ISO 3747 in situ, ISO 9295 en la octava de 16 kHz. El apartado 5 de ISO 6926 dice qué debe cumplir. Su emisión
es estable: la desviación típica en condiciones de repetibilidad de tres
niveles de potencia acústica repetidos o de cinco niveles de presión sonora,
fórmula (1), respecto a su media energética, no pasa de la tabla 1, 0,8 dB de
50 Hz a 80 Hz, 0,4 dB de 100 Hz a 160 Hz y 0,2 dB de 200 Hz a 20 kHz, y en el
intervalo de su alimentación eléctrica o mecánica que declara el fabricante,
la tensión de red por ejemplo, ninguna banda se mueve más de 0,3 dB en un
sentido u otro (5.2). Su espectro es de banda ancha: de 100 Hz a 10 000 Hz todas las bandas de tercio de
octava caben en un intervalo de 12 dB y a no más de 3 dB de sus vecinas, 16 dB
y 4 dB en un intervalo ampliado más allá (5.4). Su índice de directividad
$D_{\mathrm{I}i} = L_{pi} - \overline{L_p}$ no pasa de 6 dB en ninguna banda
de 100 Hz a 10 000 Hz (5.5), salvo que esté rotulada solo para cámaras
reverberantes. Y se recalibra cuando una banda se ha movido más de 2,83 veces
la tabla 1 entre dos comprobaciones (5.6).

El apartado 8 la calibra en una cámara semianecoica cualificada para banda
ancha por el anexo A de ISO 3745 (8.1), sobre el plano reflectante, en una
semiesfera de 2 m de radio (8.2.1). La fórmula (2) lleva el nivel de
superficie al nivel de potencia acústica en las condiciones de referencia del
apartado 4, 23,0 °C y 101,325 kPa:

$$
L_W = \overline{L_p} + 10 \lg\frac{S}{S_0}\ \mathrm{dB} + C_1 + C_2 + C_3,
$$

con $C_1 = -10 \lg(p_\mathrm{s}/p_{\mathrm{s},0}) + 5 \lg(\theta/\theta_0)$,
$\theta_0 = 314$ K, la corrección por impedancia de radiación $C_2$ del
fabricante o del anexo A informativo, y la absorción del aire
$C_3 = A_0 (1{,}005\,3 - 0{,}001\,2 A_0)^{1{,}6}$ con $A_0 = a(f)\,r$. El
ejemplo es una fuente de tipo ventilador calibrada en las 20 posiciones fijas
del anexo E de ISO 3745 sobre la semiesfera de 2 m, a 20 °C, 45 % y 98,6 kPa,
que radia algo más hacia arriba a frecuencias altas.

```python
from phonometry import environment

thirds = np.array([100.0, 125.0, 160.0, 200.0, 250.0, 315.0, 400.0, 500.0, 630.0,
                   800.0, 1000.0, 1250.0, 1600.0, 2000.0, 2500.0, 3150.0, 4000.0,
                   5000.0, 6300.0, 8000.0, 10000.0])
source_lw = np.array([86.0, 86.8, 87.5, 88.1, 88.4, 88.6, 88.7, 88.6, 88.4, 88.1,
                      87.7, 87.2, 86.6, 85.9, 85.1, 84.2, 83.2, 82.1, 80.9, 79.6,
                      78.2])
positions = emission.precision_positions("hemisphere", radius=2.0, count=20)
upward = positions[:, 2:3] / 2.0 - 0.5
pattern = 4.0 * upward * np.sqrt(thirds / 10000.0)[None, :]
alpha = environment.air_attenuation(
    thirds, temperature_c=20.0, relative_humidity_percent=45.0,
    atmospheric_pressure_kpa=98.6)
levels = (source_lw[None, :] - 10.0 * np.log10(2.0 * np.pi * 2.0**2)
          + pattern - 2.0 * alpha[None, :])

air = emission.CalibrationConditions(
    temperature_c=20.0, static_pressure_kpa=98.6, air_absorption_db_per_m=alpha)
calibration = emission.reference_source_calibration(
    levels, frequencies_hz=thirds, arrangement="fixed", conditions=air)
print(calibration.sound_power_level_db[[0, 10, 20]].round(2))  # [86.06 87.77 78.41] dB
print(round(calibration.c1_db, 3), calibration.c2_db[0].round(3))   # -0.031 0.087
print(calibration.c3_db[[0, 10, 20]].round(3))                 # [0.001 0.009 0.351] dB
print(calibration.expanded_uncertainty_db[[0, 3, 16]].round(2))    # [1.57 0.98 1.96] dB
print(round(calibration.sound_power_level_a_db, 1))            # 97.6 dB
```

`CalibrationConditions` lleva el aire de la calibración: su temperatura y su
presión estática entran en $C_1$ y $C_2$, y su $a(f)$ entra en $C_3$. Si no se
pasa, la calibración se hace en las condiciones de referencia del apartado 4,
sin absorción del aire. La superficie se promedia como la promedia ISO 3745, con
`sound_power_anechoic`. $C_1$ y $C_2$ casi se anulan a esta presión y
temperatura, y dejan 0,06 dB; aquí $C_2$ es la fórmula (A.5) del anexo A para
una fuente cuya radiación se desconoce,
$-10 \lg(p_\mathrm{s}/p_{\mathrm{s},0}) + 7{,}5 \lg(\theta/\theta_1)$ con
$\theta_1 = 296$ K, y `c2_db` toma en su lugar el valor del fabricante, que es
el que prefiere 8.4. $C_3$ llega a 0,35 dB a 10 kHz en los 2 m de trayecto. La
incertidumbre expandida es $1{,}96\,\sigma_R$ con $\sigma_R$ tomada de la
columna de la tabla 2 de la disposición, 0,8 dB de 100 Hz a 160 Hz, 0,5 dB de
200 Hz a 3 150 Hz y 1,0 dB por encima para las posiciones fijas. De 50 Hz a
80 Hz, el anexo B sustituye los niveles de presión por niveles de intensidad
sonora cuando los dos coinciden dentro de la tabla B.1 de 50 Hz a 315 Hz
(`intensity_sound_power_level_db`).

`verify_reference_sound_source` juzga después el apartado 5. Una calibración
trae sus bandas, sus niveles y sus índices de directividad; las repeticiones
de 8.3.3 y el mayor cambio de cada banda en el intervalo de alimentación
declarado se pasan aparte, y una fuente calibrada en otro sitio, por ejemplo
en cámara reverberante por el apartado 9, pasa en su lugar sus niveles y sus
frecuencias. Lo que no se da aparece en `not_judged`, y la fuente no cumple
hasta que se juzga.

```python
jitter = np.array([[0.05], [-0.08], [0.04]]) * np.where(thirds < 200.0, 3.0, 1.0)
supply = 0.12 + 0.06 * np.cos(np.arange(thirds.size) / 3.0)   # con la red a +-10 %
verdict = emission.verify_reference_sound_source(
    calibration, repeated_levels_db=calibration.sound_power_level_db[None, :] + jitter,
    supply_variation_db=supply)
print(verdict.passes)                                        # True
print(round(verdict.core_range_db, 2), verdict.adjacent_step_db.max().round(2))
# 10.35 1.37
print(verdict.repeatability_db[[0, 4]].round(3), verdict.repeatability_limit_db[[0, 4]])
# [0.217 0.072] [0.4 0.2]
print(verdict.supply_variation_db.max().round(2), verdict.supply_met)   # 0.18 True

drift = emission.verify_reference_source_drift(
    calibration.sound_power_level_db,
    calibration.sound_power_level_db + np.where(thirds < 160.0, 1.2, 0.3),
    frequencies_hz=thirds)
print(drift.passes, drift.recalibration_required)            # False True
```

La fuente abarca 10,35 dB de 100 Hz a 10 000 Hz con saltos de como mucho
1,37 dB, se repite con 0,217 dB a 100 Hz frente a 0,4 dB, se mueve como mucho
0,18 dB en su intervalo de alimentación frente a 0,3 dB, y su mayor índice de
directividad, 1,75 dB a 10 kHz, queda lejos de 6 dB. Una comprobación
posterior que encuentra las dos bandas más bajas 1,2 dB más altas pide
recalibrar, porque 2,83 veces 0,4 dB son 1,13 dB.

*A la izquierda, los niveles calibrados con su incertidumbre expandida de la
tabla 2. A la derecha, cada requisito del apartado 5 como fracción de su
límite: todo lo que queda por debajo de 1 cumple. Los requisitos de cada
banda son curvas, y el rango de 5.4, que se cumple sobre muchas bandas a la
vez, es una línea que las atraviesa; es el que más cerca queda de su límite.
El índice de directividad crece con la frecuencia, a medida que la fuente
radia más hacia arriba, y también el salto entre bandas vecinas, a medida que
cae el espectro.*

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

```python

# calibration y verdict son los resultados calculados arriba.
fig, (left, right) = plt.subplots(1, 2, figsize=(12.5, 5.6))
calibration.plot(ax=left, language="es")
verdict.plot(ax=right, language="es")
plt.show()
```

</details>

### La calibración en un método de comparación

Todos los métodos de comparación aceptan la calibración donde aceptan los
niveles, y leen las bandas que necesitan: `sound_power_comparison` y
`sound_energy_comparison` (ISO 3741) y `high_frequency_sound_power_comparison`
(ISO 9295, solo banda ancha) en tercios de octava, `sound_power_hard_walled`
y `sound_energy_hard_walled` (ISO 3743-1),
`sound_power_special_room_comparison` (ISO 3743-2), `sound_power_in_situ` y
`sound_energy_in_situ` (ISO 3747) en octavas, cada una la suma energética de
sus tres bandas de tercio de octava. La evaluación de idoneidad de la
ISO 3743-2, apartado 6.7, `check_special_room_suitability`, la toma como la
calibración frente a la que se juzga la sala, también en octavas.
`sound_power_level_at` la lee directamente.

La calibración guarda $L_W$ en las condiciones de referencia, y $C_2$ es lo
que llevó hasta ellas la potencia que radiaba la fuente durante la
calibración. ISO 3741 pide $L_{W(\mathrm{RSS})}$ «corrected to the
meteorological conditions at the time of test» (fórmulas (21) y (31)),
ISO 9295 corrige como ISO 3741, y las dos partes de ISO 3743 dan $L_W$ «under
the meteorological conditions which occurred at the time and place of the
test» (anexo A de la parte 1, anexo E de la parte 2), así que esos métodos
leen la calibración a la temperatura y la presión del ensayo, como
$L_W - C_2$ con $C_2$ evaluado allí por la misma fórmula que usó la
calibración, la que 8.4 pide que compartan laboratorio y usuario.
ISO 3747 corrige en cambio los niveles medidos de la
fuente de referencia hasta su calibración según las especificaciones del
fabricante (ecuación (9)), y lee los niveles calibrados tal cual. Una
calibración hecha con el `c2_db` del fabricante no se puede leer en un
ensayo, porque solo el fabricante da $C_2$ allí, y lo dice.

```python
rng = np.random.default_rng(1)
lp_rss = 70.0 + rng.normal(0.0, 0.4, (6, thirds.size))    # seis posiciones
lp_st = lp_rss + 4.0                                      # 4 dB más en todas
test = emission.sound_power_comparison(lp_st, lp_rss, calibration, frequencies=thirds,
                                       temperature_c=18.0, static_pressure_kpa=96.0)
print(test.sound_power_level[[0, 10, 20]].round(2))       # [90.   91.72 82.36] dB
print(calibration.sound_power_level_at(
    [1000.0], temperature_c=18.0, static_pressure_kpa=96.0).round(2))   # [87.59] dB
print(calibration.sound_power_level_at(
    [125.0, 1000.0, 8000.0], bandwidth="octave").round(2))   # [91.64 92.52 84.65] dB
```

A 18 °C y 96 kPa la fuente radia 0,18 dB menos que en las condiciones de
referencia, $87{,}77 - 0{,}18 = 87{,}59$ dB a 1 kHz, y el $C_2$ propio de
ISO 3741, 0,13 dB, lleva de vuelta hasta ellas el resultado de la fuente en
ensayo.

### Las funciones de la fuente de referencia

| Función | Apartado | Devuelve | Notas |
| :--- | :--- | :--- | :--- |
| `reference_source_calibration(levels_db, *, frequencies_hz, arrangement, background_levels_db=None, maximum_levels_db=None, conditions=None, radiation="unknown", knee_frequency_hz=None, c2_db=None, intensity_sound_power_level_db=None, room_qualification=None, coverage_factor=1.96)` | 8, fórmula (2) | `ReferenceSourceCalibration` | `arrangement` es `"paths"` o `"fixed"`, la columna de la tabla 2; `room_qualification` avisa cuando la sala no cubre las bandas a 2 m (8.1) |
| `CalibrationConditions(*, temperature_c=23.0, static_pressure_kpa=101.325, air_absorption_db_per_m=None)` | 4, 8.4 | el aire de la fórmula (2) | Temperatura y presión estática para $C_1$ y $C_2$, $a(f)$ por banda para $C_3$ |
| `ReferenceSourceCalibration.sound_power_level_at(frequencies_hz, *, bandwidth="one-third-octave", temperature_c=None, static_pressure_kpa=None)` | 8.4 | $L_W$ por banda [dB] | Con las condiciones de un ensayo, $L_W - C_2$ allí |
| `verify_reference_sound_source(calibration, *, frequencies_hz=None, repeated_levels_db=None, supply_variation_db=None, directivity_index_db=None, reverberation_rooms_only=False)` | 5.2, 5.4, 5.5 | `ReferenceSoundSourceVerdict` | Tres repeticiones de potencia o cinco de presión; el mayor cambio en el intervalo de alimentación declarado |
| `verify_reference_source_drift(reference_levels_db, latest_levels_db, *, frequencies_hz)` | 5.6 | `ReferenceSourceDriftResult` | 2,83 veces la tabla 1 |
| `repeatability_standard_deviation(levels_db)` | Fórmula (1) | $\sigma_r$ por banda [dB] | Respecto a la media energética |
| `radiation_impedance_correction(*, temperature_c=23.0, static_pressure_kpa=101.325, radiation="unknown", frequencies_hz=None, knee_frequency_hz=None)` | Anexo A | $C_2$ [dB] | Monopolo, dipolo aerodinámico o desconocida |
| `knee_frequency(d0_m, *, speed_of_sound=343.0)` | Fórmula (A.1) | $f_\mathrm{k}$ [Hz] | $c/(2\pi d_0)$ |
| `reference_source_reproducibility_db(frequencies_hz, *, environment, arrangement=None, bandwidth="one-third-octave")` | Tabla 2 | $\sigma_R$ por banda [dB] | Las columnas de tercio de octava y de octava se leen por separado |

La fórmula (A.1) tiene un defecto propio: el anexo A define su $d_0$ como la
mitad de la dimensión característica de la fuente de ISO 3745, que el
apartado 3.14 de ISO 3745 ya define como la distancia del origen a la esquina
más lejana de la caja de referencia. `knee_frequency` toma la longitud que
entra en la fórmula, y el [registro de erratas](/phonometry/es/reference/errata/)
tiene los detalles.

## Qué cubre esta guía

El método de la pérdida por divergencia de ISO 26101:2017 con los criterios
del anexo A que escribió ISO 3745:2012/Amd.1:2017: la corrección del
micrófono de control de la fórmula (1), la estimación y las desviaciones de
las fórmulas (2) y (4) con el valor inicial de la fórmula (3), la intensidad
de la fuente $b$ ajustada como el punto medio de su intervalo admisible, el
origen matemático fijo o buscado dentro de la caja que ocupa la fuente de
ensayo (5.1.3.2, A.3.3), los límites de la tabla A.1 para cámaras anecoicas y
semianecoicas, las frecuencias de A.2.3 y el intervalo reducido, el radio
máximo cualificado de A.2.4, el número de recorridos, los objetivos a) a e),
la zona de trabajo y los ángulos de A.3.3, los puntos, su equiespaciado y la
separación máxima de A.4.3 junto a la resolución espacial y la longitud del
recorrido de A.4.3 y 5.1.4.3 de ISO 26101, el margen de 6 dB sobre el ruido
de fondo de 5.1.2.2 c), la directividad de la fuente de ensayo del anexo B y
la tabla B.1, el plano reflectante de A.2.5, y el veredicto tal como lo
consume `sound_power_anechoic`. ISO 6926:2016: los requisitos del apartado 5
(la tabla 1 y la variación con la alimentación de 5.2, el espectro de 5.4, el
índice de directividad de 5.5 y la recalibración de 5.6), la calibración en
cámara semianecoica del apartado 8 con la fórmula (2), $C_1$, el $C_2$ del
anexo A, $C_3$ y las bandas de intensidad del anexo B, la reproducibilidad de
la tabla 2, y la calibración tal como la consumen todos los métodos de
comparación, leída en las condiciones del ensayo donde ISO 3741 e ISO 3743
lo piden.

Ninguna fuente imprime un ejemplo resuelto, así que el ajuste se ancla en
formas cerradas y en las tablas impresas, y la regla que ajusta $b$ y el
origen, la tolerancia del equiespaciado y la banda que rige en la frontera de
una regla de separación son un diseño de esta biblioteca (apartados 2 y 4).
La zona de trabajo y el intervalo de alimentación se toman tal como se
declaran, y una calibración hecha con el $C_2$ del fabricante no se lleva a
las condiciones de un ensayo. El recorrido continuo de
5.1.4.3 se toma como los puntos derivados de su registro; no se realizan la
cualificación de una sala para una fuente concreta por la alternativa del
anexo B de ISO 3745, la incertidumbre de medida de 5.1.6 de ISO 26101, que
A.2.2 excluye, ni la corrección atmosférica de la NOTA 2 de ISO 26101. La
calibración de ISO 6926 en cámara reverberante (apartado 9) se toma por su
resultado, los niveles que un veredicto puede juzgar; la intensidad sonora del
anexo B se toma tal como la mide ISO 9614-3.

## Véase también

- [Potencia acústica por métodos de presión (ISO 3744 / ISO 3746 / ISO 3745)](/phonometry/es/devices/emission/sound-power-pressure/):
  la determinación de precisión en la sala que cualifica esta guía.
- [Potencia acústica en cámara reverberante (ISO 3741)](/phonometry/es/devices/emission/sound-power-reverberation/):
  el método de comparación al que sirve una fuente de referencia.
- [Potencia acústica en salas de ensayo pequeñas (ISO 3743)](/phonometry/es/devices/emission/sound-power-test-rooms/):
  la comparación en una sala de paredes rígidas y en una sala reverberante
  especial.
- [Potencia acústica in situ por comparación (ISO 3747)](/phonometry/es/devices/emission/sound-power-in-situ/):
  la comparación en octavas con una fuente de referencia donde está la máquina.
- [Potencia acústica en la octava de 16 kHz (ISO 9295)](/phonometry/es/devices/emission/sound-power-high-frequency/):
  la comparación en la octava más alta.
- [Erratas](/phonometry/es/reference/errata/): las dos resoluciones espaciales
  del anexo A modificado, y el $d_0$ de la fórmula (A.1) de ISO 6926.
- Referencia de la API: [`emission.free_field_qualification`](/phonometry/reference/api/power/free-field-qualification/)
  y [`emission.reference_sound_source`](/phonometry/reference/api/power/reference-sound-source/).
