<!-- canonical: https://docs.jmrp.io/phonometry/es/devices/emission/sound-power-pressure/ -->
Source: https://docs.jmrp.io/phonometry/es/devices/emission/sound-power-pressure/

De las vías normalizadas hasta el nivel de potencia acústica $L_W$, los
métodos de presión son los que no necesitan nada más exótico que un
sonómetro: muestrear la presión acústica sobre una superficie que envuelve la
fuente, promediarla en energía, corregirla y sumar el término de superficie.
Esta guía cubre los tres. Los métodos de **superficie envolvente** de
ISO 3744 (grado de ingeniería) e ISO 3746 (grado de inspección) funcionan in
situ, sobre uno o más planos reflectantes, y limpian el nivel superficial
con la corrección de ruido de fondo $K_1$ y la corrección de entorno $K_2$.
El **método de precisión** de ISO 3745 traslada la misma idea a una cámara
anecoica o semianecoica cualificada, donde una malla fija de micrófonos
muestrea directamente el campo libre y las correcciones de grado 1 son
meteorológicas en lugar de ambientales. La sección 3 presenta la
determinación como ficha de ensayo de estilo acreditado, y la sección 4 vuelve
la superficie envolvente de ISO 3744 e ISO 3746 hacia una fuente que no
funciona de forma estacionaria en absoluto, la ráfaga de ruido cuyo descriptor
es el nivel de energía acústica $L_J$ del apartado 8.3. Esa vía es solo suya:
ISO 3745 no define ningún nivel de energía acústica. Qué vía encaja con
qué trabajo, y las alternativas de cámara reverberante e intensidad, se
sopesan en [Potencia acústica](/phonometry/es/devices/emission/sound-power/).

## 1. Superficie envolvente, presión acústica (ISO 3744 / ISO 3746)

Coloca la fuente sobre un plano reflectante e imagina una **superficie de
medición** de área $S$ que la envuelve: una semiesfera para una fuente
compacta, una caja (paralelepípedo recto) para una grande o alargada.
Muestrea el nivel de presión acústica en un conjunto de posiciones de micrófono
sobre esa superficie, promédialas en energía, y la potencia acústica se obtiene
porque una superficie suficientemente difusa capta toda la energía radiada:

$$
\overline{L'_p} = 10\log_{10}\left( \frac{1}{N_\mathrm{M}} \sum_i 10^{L'_{pi}/10} \right), \qquad
L_W = \overline{L'_p} - K_1 - K_2 + 10\log_{10}\frac{S}{S_0},\quad S_0 = 1\ \text{m}^2 .
$$

La prima marca sobre qué se toma la media: aquí son los niveles por posición
**sin corregir**, y $K_1$ y $K_2$ se restan después de la media, de modo que
$\overline{L'_p}$ es `mean_pressure_level` y $\overline{L'_p} - K_1 - K_2$ es
`surface_pressure_level`. La media de ISO 3745 de la sección 2 está construida
al revés, y las primas son el único aviso de ello.

Dos correcciones depuran el nivel superficial. La **corrección por ruido de
fondo** elimina la energía que habría estado presente con la fuente apagada, a
partir del margen $\Delta L_p$ entre los niveles con la fuente encendida y los
de fondo,

$$
K_1 = -10\log_{10}\left( 1 - 10^{-\Delta L_p/10} \right),
$$

y la **corrección ambiental** elimina la acumulación reverberante de la sala
de ensayo a partir de su área de absorción acústica equivalente $A$,

$$
K_2 = 10\log_{10}\left( 1 + \frac{4 S}{A} \right).
$$

El área de la superficie es una forma cerrada de la geometría: una semiesfera
es $S = 2\pi r^2$ sobre un plano reflectante (dividida entre dos y entre cuatro
para dos y tres planos), y una caja de un plano es $S = 4(ab + bc + ca)$ con
$a = 0{,}5\,l_1 + d$, $b = 0{,}5\,l_2 + d$, $c = l_3 + d$ para la distancia de
medición $d$. ISO 3746 (inspección) comparte todas las fórmulas pero es más burda: menos
posiciones de micrófono, un criterio de fondo de 3 dB en lugar de 6 dB, y
validez hasta $K_2 \le 7\ \text{dB}$ en lugar de 4 dB.

### Dimensionar la superficie

Ni $r$ ni $d$ son de libre elección, y las dos se miden desde la **caja de
referencia**: el paralelepípedo recto más pequeño que encierra justo a la
fuente, de lados $l_1 \times l_2 \times l_3$, apoyado en el plano reflectante
(apartado 7.1). Su origen $O$ es el centro de la caja formada con sus imágenes
en los planos contiguos, y la **dimensión característica de la fuente** $d_0$ es
la distancia de $O$ a la esquina más alejada de la caja de referencia:

$$
d_0 = \sqrt{(l_1/2)^2 + (l_2/2)^2 + l_3^2}
$$

sobre un plano reflectante, con $l_1$ sin dividir entre dos sobre dos planos y
con $l_1$ y $l_2$ sin dividir sobre tres. Esa es la $d_0$ que rotula la figura
de abajo, y la norma acota con ella la superficie: el radio de la semiesfera
debe ser al menos $2 d_0$, no menor de 1 m y no mayor de 16 m (apartado 7.2.3;
los 0,5 m solo se admiten para productos pequeños en un rango de frecuencias
limitado), y la distancia de medición de la caja debe ser al menos 0,25 m y
preferiblemente 1 m o más (apartado 7.2.4, con una nota de que $d < 0{,}5$ m
limita el rango de baja frecuencia).

Con números, sobre una máquina de suelo de 1,4 × 0,9 × 1,1 m:
$d_0 = \sqrt{0{,}7^2 + 0{,}45^2 + 1{,}1^2} = 1{,}38$ m, así que una semiesfera
necesita $r \ge 2{,}8$ m y $S = 2\pi r^2 = 49{,}3$ m². Esa misma máquina
encajonada a $d = 1$ m da $a = 1{,}7$ m, $b = 1{,}45$ m, $c = 2{,}1$ m y
$S = 4(2{,}47 + 3{,}05 + 3{,}57) = 36{,}3$ m² (una cuarta parte menos de
superficie), y una superficie que cabe en una nave de ensayo normal. Esa es la
razón habitual de que una fuente grande o alargada se encajone en vez de
cubrirse con una cúpula, y el apartado 7.2.3 lo dice sin rodeos: cuando el radio
necesario crece tanto que dejan de cumplirse los requisitos de entorno del
apartado 4, no debe usarse una semiesfera en absoluto.

Leído al revés, esto acota también los ejemplos de esta página. El `radius=1.5`
de abajo es legítimo para una fuente de $d_0 \le 0{,}75$ m (un aparato de
sobremesa o una bomba pequeña), y no para la máquina de 1,4 m recién calculada;
el `radius=4.0` del ejemplo de informe de la sección 3 cubre $d_0$ hasta 2 m.

La superficie de caja lleva su propio conjunto de posiciones, y no es el
conjunto hemisférico del Anexo B: `measurement_positions` lanza un error a
propósito con una caja, porque ISO 3744 define esas posiciones por
**subdivisión en áreas** (Anexo C, normativo). Cada uno de los cinco planos de
la superficie de medición se considera por separado y se divide en áreas
parciales iguales cuyo lado no supere $3d$; las posiciones clave son entonces el
centro de cada área parcial más sus esquinas, excluidas las que se meten en el
plano reflectante, lo que da un mínimo de nueve posiciones cuando un área
parcial cubre cada plano (apartado C.1; diez con una subdivisión triangular). El
grado de inspección se queda solo con los centros de las áreas parciales. La
dirección de referencia de cada micrófono es la normal a su cara, salvo en una
esquina de la superficie, donde apunta al origen $O$ de la caja de referencia
(apartado 7.2.2).

### Preparar la medición

`levels_positions` no es un array de decibelios cualquiera: es el nivel
**promediado en el tiempo** por posición y por banda con la fuente funcionando
en su modo declarado, tomado a través de una cadena que la norma especifica.
Todo el sistema de instrumentación (micrófonos, cables y el paravientos si se
monta) debe cumplir la clase 1 de IEC 61672-1, y los filtros la clase 1 de
IEC 61260 (apartado 5.1). Antes y después de cada serie se aplica a cada
micrófono un calibrador acústico de clase 1 según IEC 60942 para comprobar toda
la cadena de medida y, sin ajuste alguno entremedias, las dos lecturas no deben
diferir en más de **0,5 dB**; si difieren más, la serie se descarta, no se
corrige (apartado 5.2). La conformidad del propio sistema se verifica en un
laboratorio trazable a intervalos no mayores de dos años, y la del calibrador a
intervalos no mayores de un año. La mecánica de esa comprobación está en
[Calibración](/phonometry/es/signals/metrology/calibration/).

Cada micrófono se orienta con su dirección de referencia normal a la superficie
de medición y, en una esquina de una superficie de caja, apuntando al origen $O$
(apartado 7.2.2), que es la razón de que una cápsula de campo libre y una de
campo difuso se apunten de forma distinta sobre el mismo trípode.

Cada nivel se promedia en el tiempo sobre un periodo típico de funcionamiento:
el intervalo **debería ser de 20 s o más y debe ser de al menos 10 s**, y hay
que indicarlo en el informe de ensayo (apartado 8.2.1). Un micrófono en
recorrido integra sobre un número entero de recorridos completos, y al menos
dos. La lectura de fondo se toma **inmediatamente antes o inmediatamente
después** de la lectura con la fuente, en las mismas posiciones y sobre el mismo
intervalo; así que `background_levels` es una medida `(NM, NB)` del mismo día y
del mismo conjunto de posiciones, no un espectro copiado de otra sesión, y
emparejar lecturas dispares es la forma más común de acabar con un $K_1$
equivocado.

```python

from phonometry import emission

# SPL en banda de octava (dB) en las 10 posiciones de la semiesfera de ISO 3744
# (Anexo B), con la fuente en marcha, más el espectro de fondo con ella apagada.
freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000])
base = np.array([70.0, 74.0, 78.0, 80.0, 79.0, 76.0, 72.0, 66.0])
rng = np.random.default_rng(0)
levels = base + rng.normal(0.0, 0.5, size=(10, 8))     # (posiciones, bandas)
background = np.full((10, 8), 55.0)

# Coordenadas de micrófono del Anexo B de ISO 3744 en una semiesfera de radio 1.5 m.
mic_xyz = emission.measurement_positions("hemisphere", radius=1.5, reflecting_planes=1)
print(mic_xyz.shape)                                    # (10, 3)

res = emission.sound_power_pressure(
    levels, "hemisphere", radius=1.5, reflecting_planes=1,
    background_levels=background, frequencies=freqs,
    room=emission.RoomEnvironment(reverberation_time=0.6, volume=300.0),  # -> K2
)
print(round(res.surface_area, 2))                       # 14.14 m^2 (= 2*pi*1.5^2)
print(round(float(res.environmental_correction[0]), 2)) # K2 = 2.32 dB
print(round(res.sound_power_level_a, 1))                # LWA = 92.4 dB
print(round(res.uncertainty, 1))                        # U = 3.0 dB (2*sigma_R0)
print(np.round(res.sound_power_level, 1))               # LW por banda

res.plot()   # barras de nivel de potencia acústica por banda; LWA en el título (requiere matplotlib)
```

*Una barra por banda: la presión superficial promediada en energía menos las
correcciones de fondo ($K_1$) y ambiental ($K_2$) más el término de superficie
$10\log_{10}(S/S_0)$ dan $L_W(f)$, y la suma energética ponderada A entre bandas da
el número único $L_{W\mathrm{A}}$ del título.*

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

```python

from phonometry import emission

# SPL en banda de octava (dB) en las 10 posiciones de la semiesfera de ISO 3744
# (Anexo B), con la fuente en marcha, más el espectro de fondo con ella apagada.
freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000])
base = np.array([70.0, 74.0, 78.0, 80.0, 79.0, 76.0, 72.0, 66.0])
rng = np.random.default_rng(0)
levels = base + rng.normal(0.0, 0.5, size=(10, 8))     # (posiciones, bandas)
background = np.full((10, 8), 55.0)
res = emission.sound_power_pressure(
    levels, "hemisphere", radius=1.5, reflecting_planes=1,
    background_levels=background, frequencies=freqs,
    room=emission.RoomEnvironment(reverberation_time=0.6, volume=300.0),  # -> K2
)

# res es el SoundPowerResult calculado arriba. Una línea:
res.plot(language="es")
plt.show()

# A mano: un espectro de barras de LW con el total ponderado A en el título.
freqs = res.frequencies
positions = np.arange(freqs.size)
fig, ax = plt.subplots()
ax.bar(positions, res.sound_power_level, width=0.7, color="#1f77b4")
ax.set_xticks(positions)
ax.set_xticklabels([f"{f:g}" for f in freqs], rotation=45, ha="right")
ax.set_xlabel("Frecuencia [Hz]")
ax.set_ylabel("Nivel de potencia acústica LW [dB]")
ax.set_title(
    f"Potencia acústica por superficie envolvente (ISO 3744)  "
    f"LWA = {res.sound_power_level_a:.1f} dB(A)")
plt.show()
```

</details>

El total ponderado A $L_{W\mathrm{A}}$ se combina a partir de las potencias por banda
con
las correcciones de ponderación A del Anexo E de ISO 3744, así que necesita
`frequencies`. Pasar un `RoomEnvironment` como `room`
(`reverberation_time` + `volume`, o `absorption_area`, o
`mean_absorption_coefficient` + `room_surface`) habilita
$K_2$; omítelo y el campo se trata como libre ($K_2 = 0$). Si el margen de
fondo cae por debajo del criterio del grado o $K_2$ supera el límite de
validez, un
`SoundPowerWarning` avisa de que los niveles son cotas superiores; la
determinación se devuelve igualmente.

### Trampas de K1 y K2

Ambas correcciones restan energía al nivel superficial, así que sobreestimar
cualquiera de las dos subestima la emisión. Por eso las normas las acotan, y
por eso la mayoría de las disputas sobre un resultado de superficie
envolvente se remontan a uno de estos hábitos:

- **$K_1$ tiene un precipicio, no una pendiente.** Con 15 dB de margen la
  corrección es de tan solo 0,14 dB (despreciable); en el criterio de
  ingeniería de 6 dB ya es 1,26 dB, el mayor valor que acepta el grado. Por
  debajo del criterio la norma no permite aplicar la fórmula: $K_1$ se acota
  y el resultado se declara cota superior. Nunca extrapoles la resta a un
  margen menor; aumenta el margen (emplazamiento más silencioso, superficie más cercana) o
  pásate al método de intensidad.
- **$K_1$ supone un fondo estacionario.** La lectura con la fuente apagada debe
  tomarse en las mismas posiciones y con la sala en el mismo estado, y la
  energía de fondo debe ser la misma durante ambas lecturas. Un sistema de
  ventilación que cicla o un vehículo que pasa durante cualquiera de las dos
  invalida la pareja; la resta energética supone además que la fuente y el
  fondo son incoherentes, lo que vale para el ruido ajeno pero no para las
  reflexiones de la propia fuente.
- **$K_2$ elimina la acumulación media de la sala, no las reflexiones
  discretas.** Una pared cercana, un carro u otra máquina justo fuera de la
  superficie añaden una contribución especular concentrada en unos pocos
  micrófonos. Ese desequilibrio aflora en el índice de directividad aparente
  $DI_i^*$, y ninguna corrección promedio de sala puede eliminarlo: desplaza
  la superficie, retira el reflector o trátalo con absorción.
- **$K_2$ vale lo que valga $A$.** Con $A$ de Sabine ($0{,}16\,V/T$), los
  errores en el tiempo de reverberación o en el volumen se propagan
  directamente. En el límite de validez $K_2 = 4\ \text{dB}$ cerca del 60 %
  de la energía medida proviene de la sala, no de la fuente, y un error del
  20 % en $A$ aún modifica $L_W$ en unos 0,5 dB.
  Prefiere un $T_{60}$ medido a un coeficiente de absorción estimado, y mantén
  la distancia de medición lo bastante pequeña para que $K_2$ quede
  holgadamente por debajo del límite.

*Las dos correcciones tienen formas opuestas. $K_1$ es plana hasta que el margen
se cierra y entonces sube con fuerte pendiente, que es la razón de que las
normas la acoten en el criterio en vez de dejar correr la fórmula; $K_2$ crece
sin límite a medida que la superficie llena la sala, y la banda del ±20 %
enseña lo que cuesta una $A$ estimada en el límite de validez.*

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

```python

# K1 se lee de la propia sound_power_pressure, barriendo el fondo bajo un nivel
# superficial fijo; K2 tiene su propia forma cerrada.
margenes = np.linspace(0.5, 20.0, 200)
k1 = [float(emission.sound_power_pressure(
          np.full((10, 1), 80.0), "hemisphere", radius=2.0,
          background_levels=np.full((10, 1), 80.0 - m),
          frequencies=np.array([1000.0])).background_correction[0])
      for m in margenes]
razon = np.geomspace(0.05, 10.0, 200)

fig, (axi, axd) = plt.subplots(1, 2, figsize=(12, 5))
axi.plot(margenes, k1)
axi.axvline(6.0, linestyle="--")        # criterio de ISO 3744
axi.set(xlabel="ΔLp [dB]", ylabel="K1 [dB]", ylim=(0, 4.2))
axd.semilogx(razon, 10.0 * np.log10(1.0 + razon))
axd.axhline(4.0, linestyle="--")        # límite de validez de ISO 3744
axd.set(xlabel="4S/A", ylabel="K2 [dB]")
plt.show()
```

</details>

Una corrección que la fórmula de superficie envolvente **no** lleva es la
meteorológica. La Ec. 18 supone la impedancia característica de referencia del
aire, así que la determinación es una determinación «para las condiciones
meteorológicas del momento y del lugar del ensayo» (apartado 8.2.5). Por encima
de 500 m de altitud o por debajo de 10 °C eso pasa a ser un sesgo, y el apartado
8.2.5 exige entonces llevar el resultado a las condiciones de referencia según
el **Anexo G, que es normativo**: el mismo tipo de término que las secciones de
ISO 3741 e ISO 3745 escriben explícitamente como $C_1$ y $C_2$. Su tamaño: el
apartado H.4.2.7 dice que por debajo de 500 m no hace falta ninguna corrección
meteorológica ni de impedancia de radiación, que a 120 m y 23 °C la corrección
es nula y que a 500 m llega a 0,6 dB. Dos de esas tres cosas se sostienen. El
Anexo G, que es el texto normativo al que remite ese mismo apartado, sitúa la
corrección en 0,394 dB a 500 m y 23,0 °C, y el cero de 120 m sale exacto, que es
lo que demuestra que sus ecuaciones se están leyendo como la norma pretende. Los
0,6 dB son una errata de imprenta, y queda registrada con su aritmética en el
[registro de erratas](https://github.com/jmrplens/phonometry/blob/main/docs/ERRATA.es.md). `sound_power_pressure` no implementa
ningún término así y no admite argumento alguno de temperatura o presión, de
modo que una determinación en una planta de montaña o al aire libre en invierno
añade después la corrección del Anexo G: `reference_atmosphere_correction`
evalúa $C_1 + C_2$ a partir de la temperatura y la presión estática (o de la
altitud, mediante la Ec. G.2), y la sección 4 la muestra aplicada, ya que la
Ec. G.1 la suma a $L_W$ exactamente como la Ec. G.3 la suma a $L_J$.

### Parámetros de `sound_power_pressure()`

| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `levels_positions` | array 2D | dB | `(NM, NB)` | Una fila por posición, una columna por banda (o una única columna ponderada A) |
| `surface` | str | — | `'hemisphere'` / `'box'` | Forma de la superficie de medición |
| `radius` | float | m | > 0 (semiesfera) | Radio de la semiesfera $r$ |
| `dimensions` | (float, float, float) | m | > 0 (caja) | $(l_1, l_2, l_3)$ del paralelepípedo de referencia |
| `distance` | float | m | > 0 (caja) | Distancia de medición $d$ |
| `reflecting_planes` | int | — | `1` / `2` / `3`, por defecto `1` | Divide entre dos/cuatro el área de la semiesfera |
| `background_levels` | array 2D o espectro | dB | `(NM, NB)`, o `(NB,)` / `(1, NB)` | Habilita $K_1$; un espectro único se difunde a todas las posiciones |
| `frequencies` | array 1D | Hz | centros de banda nominales | Habilita $L_{W\mathrm{A}}$ (Anexo E) |
| `room` | `RoomEnvironment` o None | — | por defecto `None` (campo libre) | Los datos de sala tras $K_2$; sus campos son las tres vías hacia $A$ de abajo |
| `room.absorption_area` | float o array 1D | m² | > 0 | $A$ para $K_2$ (directo); un array por banda → $K_2$ por banda |
| `room.reverberation_time`, `room.volume` | float/array, float | s, m³ | > 0 | $A = 0{,}16\,V/T$ para $K_2$; $T$ por banda → $K_2$ por banda |
| `room.mean_absorption_coefficient`, `room.room_surface` | float/array, float | -, m² | `(0,1]`, > 0 | $A = \alpha\,S_v$ (Ec. A.7); $\alpha$ por banda → $K_2$ por banda |
| `grade` | str | — | `'engineering'` (por defecto) / `'survey'` | ISO 3744 vs ISO 3746 |
| `omc_uncertainty` | float | dB | por defecto `0.0` | $\sigma_\text{omc}$, inestabilidad de operación/montaje, incorporada a $U$ |

Devuelve un `SoundPowerResult`: `sound_power_level` ($L_W$ por banda),
`surface_pressure_level` ($L_p$ tras $K_1$/$K_2$), `mean_pressure_level`,
`background_correction`/`environmental_correction` ($K_1$/$K_2$),
`directivity_index` (índice de directividad aparente $DI_i^*$ por posición de
micrófono **y** banda de frecuencia, forma `(NM, NB)`; ISO 3744 apartado 8.4),
`surface_area`, `sound_power_level_a` ($L_{W\mathrm{A}}$), `uncertainty`
(expandida, 95 %) y `grade`. `measurement_positions('hemisphere', radius=…,
reflecting_planes=…, tones=…, grade=…)` devuelve las coordenadas normativas
`(N, 3)` de micrófono (Tabla B.1 para fuentes tonales, B.2 para banda ancha).
Esas coordenadas se dibujan directamente con `plot_microphone_positions`, que
representa el array sobre su superficie de medición en 3-D, numerado como en
la norma.

*Dónde se colocan de verdad los diez micrófonos del Anexo B sobre el
hemisferio de 2 m: las alturas se escalonan para que el array muestree toda
la superficie por igual, que es lo que permite que la media energética de
los diez niveles sustituya a la integral de superficie.*

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

```python

from phonometry import emission

# Los 10 micrófonos del Anexo B de ISO 3744 sobre un hemisferio de 2 m.
emission.plot_microphone_positions(emission.measurement_positions("hemisphere", radius=2.0),
                                   radius=2.0, language="es")
plt.show()
```

</details>

### Cuántas posiciones, y cuándo añadir más

Diez es el número para **un** plano reflectante. Frente a dos planos el conjunto
son las cinco posiciones clave 2, 3, 6, 7 y 9 de la Tabla B.2; en un rincón,
frente a tres planos, son las tres posiciones 1, 2 y 3 de la Tabla B.3
(apartado 8.1.1). El grado de inspección usa conjuntos aún más burdos: cuatro
posiciones sobre un plano.

Esos números son un punto de partida, no un resultado. El apartado 8.1.1 exige
posiciones **adicionales** si se cumple cualquiera de tres condiciones:

- **a)** el recorrido de los niveles ponderados A entre las posiciones clave
  supera 10 dB sobre un plano reflectante, 5 dB sobre dos o 3 dB sobre tres;
- **b)** el índice de directividad aparente ponderado A supera 5 dB en alguna
  dirección;
- **c)** una fuente grande radia solo desde una parte pequeña de sí misma: las
  aberturas de una máquina por lo demás cerrada son el ejemplo de la propia
  norma.

Las dos cosas tienen respuestas distintas. La condición a) se atiende añadiendo
las posiciones 11 a 20 de la misma tabla (o, equivalentemente, repitiendo el
conjunto clave con la fuente girada −60° para la Tabla B.1 o 180° para la
Tabla B.2): la superficie se sigue muestreando por igual, así que la media
energética simple sigue valiendo. Las condiciones b) y c) se atienden con una
**investigación localizada**, posiciones extra concentradas alrededor del
máximo en número igual al recorrido de niveles hallado, y esas posiciones
llevan áreas de segmento *desiguales*, de modo que la media debe ser entonces la
ponderada por áreas del apartado 8.2.2.2 y no la media de áreas iguales que
calcula `sound_power_pressure`. La nota 3 añade una regla de prioridad que ahorra
mucho trabajo inútil: cuando el fondo en alguna posición está a menos de 6 dB del
nivel de fuente más alto, hay que reducir el fondo *antes* de añadir posiciones,
porque un fondo así de cerca es lo que está moviendo $DI_i^*$ de entrada.

Las dos comprobaciones son una línea cada una sobre el resultado que la página ya
ha calculado:

```python

# El nivel sumado en bandas por posición (para el recorrido ponderado A de la
# norma, se ponderan antes las bandas en A; aquí la fuente es lo bastante de
# banda ancha como para que no cambie el veredicto).
lp_a = 10.0 * np.log10(np.sum(10.0 ** (0.1 * levels), axis=1))
print(round(float(lp_a.max() - lp_a.min()), 2))       # 0.76 dB: condición a) holgada
print(round(float(np.abs(res.directivity_index).max()), 2))   # 1.1 dB: b) holgada
```

$DI_i^*$ es el índice de directividad aparente del apartado 8.4, el exceso del
nivel corregido de fondo en la posición $i$ sobre la media de la superficie, por
posición *y* por banda; es a lo que se refería la trampa de $K_2$ de arriba con
«aflora en el índice de directividad aparente». Una máquina que radia 5 dB más
hacia un micrófono que la media de la superficie no tiene el conjunto de
posiciones estropeado: tiene una directividad que las diez posiciones no pueden
resolver.

## 2. Grado de precisión, cámara anecoica (ISO 3745)

Cuando se requiere la máxima exactitud, ISO 3745 mide la potencia acústica en una
**cámara anecoica** o **semianecoica** cualificada, donde el campo libre permite que
un conjunto fijo de micrófonos muestree directamente la presión acústica radiada. Es
la contraparte de grado 1 del método de superficie envolvente de la Sección 1, con
coordenadas de micrófono normalizadas, una corrección por ruido de fondo por
posición y una corrección meteorológica explícita.

El panel izquierdo del clip de abajo es para lo que sirve esa sala. Con los
contornos absorbiendo, un micrófono solo ve lo que la fuente le manda, así que
el nivel cae con la distancia y el conjunto de posiciones tiene que muestrear
una superficie entera, que es la razón de que la única geometría que necesita
el método, una vez cualificada la sala, sea el término de superficie
$10\log_{10}(S/S_0)$. El panel derecho es la alternativa en cámara reverberante
de [ISO 3741](/phonometry/es/devices/emission/sound-power-reverberation/), y las
dos terminan en el mismo $L_W$.

**Nivel de potencia acústica (apartado 8).** El nivel de potencia acústica por banda es
el nivel de presión promediado en la superficie más el término de superficie y las
correcciones:

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

con $S = 4\pi r^2$ sobre la esfera o $S = 2\pi r^2$ sobre la semiesfera,
$S_0 = 1\ \text{m}^2$. $C_1$ y $C_2$ son las correcciones meteorológicas
(términos de referencia e impedancia de radiación); $C_3$ tiene en cuenta la
absorción del aire sobre el radio de medición. Las posiciones de micrófono son los
conjuntos normalizados de vectores unitarios de las Tablas D.1 (esfera), E.1
(semiesfera) y E.2 (semiesfera, banda ancha).

En esa fórmula no hay término $K_1$ aparte porque $\overline{L_p}$
(sin prima, a diferencia del de la sección 1) es la media sobre la superficie de los
niveles **después** de corregir cada uno por su cuenta el ruido de fondo,

$$
\overline{L_p} = 10\log_{10}\left[\frac{1}{N_\mathrm{M}} \sum_i
10^{0{,}1\left(L'_{pi} - K_{1i}\right)}\right]
$$

(apartado 9.4.3.1). Así que la corrección vive dentro de la media, un $K_{1i}$
por posición, en lugar de restarse de la media como hace ISO 3744.
`mean_pressure_level` es la media energética bruta y `surface_pressure_level`
la corregida, que es el $\overline{L_p}$ de la fórmula de arriba.

**El radio no es libre** (apartados 8.1/8.2). Debe cumplir $r \ge 2 d_0$, con
$d_0$ la distancia del centro acústico al punto más alejado de la fuente (en
cámara semianecoica, $r \ge 2 d_0$ o $r \ge 3 h_0$, el que sea mayor, siendo
$h_0$ la altura del centro acústico sobre el suelo), $r \ge \lambda/4$ a la
frecuencia más baja de interés y $r \ge 1$ m (0,5 m solo para una fuente
pequeña y poco ruidosa en una banda limitada) con toda la superficie dentro
de la región cualificada según el Anexo A o el B. Con números: una fuente de
sobremesa de 0,6 × 0,5 × 0,7 m tiene
$d_0 = \sqrt{0{,}3^2 + 0{,}25^2 + 0{,}7^2} = 0{,}80$ m, así que $r \ge 1{,}6$ m;
con una banda más baja de 100 Hz, $\lambda/4 = 0{,}86$ m no manda, y el mínimo
de 1 m tampoco. El `radius=1.0` de los ejemplos de abajo solo vale, por tanto,
para una fuente de menos de unos 0,5 m de dimensión característica.

**El conjunto de posiciones tampoco lo es.** Primero se usan las posiciones 1
a 20, y las 21 a 40 se añaden solo cuando la diferencia entre el nivel más
alto y el más bajo en alguna banda de interés no es menor que la mitad del
número de posiciones; una comprobación sobre datos que el lector ya tiene,
`levels.max(0) - levels.min(0) >= 0.5 * levels.shape[0]`. Si con 40 posiciones
sigue sin cumplirse, hace falta una investigación localizada y las posiciones
pasan entonces a tener áreas desiguales, que es para lo que está `areas=`.

```python

from phonometry import emission

# Las 40 posiciones normalizadas de la semiesfera (vectores unitarios escalados por el radio).
pos = emission.precision_positions("hemisphere", radius=1.0, count=40)
print(pos.shape)                      # (40, 3)

# SPL en banda de octava/tercio (dB) en cada una de las 40 posiciones; aquí un
# valor uniforme de 74 dB en una banda. El resultado lleva S = 2*pi*r^2 y LW con C1+C2+C3.
levels = np.full((40, 1), 74.0)
res = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0)
print(round(res.surface_area, 3))                 # 6.283  (2*pi*1^2)
print(np.round(res.sound_power_level, 2))         # [81.85]
```

*Los conjuntos de precisión, dibujados desde la misma llamada a
`precision_positions` que hace el fragmento de arriba. Las veinte primeras
muestrean la superficie por sí solas; las veinte siguientes se añaden solo
cuando el recorrido de niveles de banda dispara la ampliación, y una
investigación localizada posterior lleva áreas desiguales.*

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

```python

fig, (axi, axd) = plt.subplots(1, 2, subplot_kw={"projection": "3d"})
emission.plot_microphone_positions(
    emission.precision_positions("hemisphere", radius=1.0, count=40),
    ax=axi, radius=1.0)
emission.plot_microphone_positions(
    emission.precision_positions("sphere", radius=1.0, count=20),
    ax=axd, radius=1.0)
plt.show()
```

</details>

**Correcciones por ruido de fondo y meteorológica.** La corrección por ruido de
fondo $K_1$ se aplica **por posición** y se acota donde la diferencia
señal-fondo es pequeña (Ec. 11); la corrección meteorológica se evalúa a partir de
la temperatura y la presión estática medidas.

```python

from phonometry import emission

# K1 para una diferencia señal-fondo de 6 dB en una banda de borde <=200 Hz: el
# límite es 1.26 dB (Ec. 11). Los niveles de fuente y fondo son [posiciones, bandas].
k1 = emission.precision_background_correction(
    np.array([[56.0]]), np.array([[50.0]]), np.array([200.0]))
print(round(float(k1[0, 0]), 4))      # 1.2563

# Correcciones meteorológicas en la referencia de 23 C, 101.325 kPa (Ec. 16):
mc = emission.meteorological_corrections(temperature_c=23.0, static_pressure_kpa=101.325)
print(round(mc.c1, 4), round(mc.c2, 4))   # -0.1282 0.0

# Incertidumbre expandida (EJEMPLO del apartado 10.5): sigma_R0 = 0.5, sigma_omc = 2.0,
# k = 2 -> U = 4.1 dB.
print(round(emission.precision_uncertainty(0.5, 2.0, 2.0), 3))   # 4.123
```

La `MeteorologicalCorrection` es un par de escalares (más el $C_3$ por banda
cuando el coeficiente de atenuación se aporta por banda), no un espectro
dibujable: las correcciones se pliegan en el `PrecisionSoundPowerResult` como
sus campos `c1`/`c2`/`c3`, y la ficha `.report()` las imprime en su franja de
base de medición.

Los márgenes y los intervalos que hay detrás de esos números son más estrictos
que los de la sección 1. El fondo, promediado sobre todas las posiciones, debe
quedar al menos **6 dB** por debajo del nivel de fuente en todas las bandas y al
menos **10 dB** por debajo entre 250 Hz y 5 kHz (apartado 5.2.1.1), una banda
que no lo alcance puede excluirse en cambio del rango de interés si su potencia
de banda ponderada A corregida queda al menos 15 dB por debajo de la más alta
(apartado 5.2.1.2). Donde el margen se quede corto de todos modos, el apartado
9.4.2 congela $K_{1i}$ en el valor que produce el criterio, 1,26 dB para las
bandas de 200 Hz y por debajo y de 6,3 kHz y por encima, 0,46 dB entre 250 Hz y
5 kHz, y *exige* entonces que el informe de ensayo, y las tablas y gráficas que
contenga, indiquen que esas bandas son cotas superiores.
`precision_background_correction` aplica exactamente esa regla; declarar la
omisión es cosa de quien lee.

El promediado es más largo que el de ISO 3744: al menos **30 s** en las bandas
centradas en 160 Hz y por debajo y al menos **10 s** de 200 Hz hacia arriba
(apartado 9.4.1), con el intervalo indicado en el informe, y al menos dos
recorridos completos cuando se usa un micrófono en recorrido. El fondo se mide
inmediatamente antes o inmediatamente después de la fuente, en las mismas
posiciones y sobre el mismo intervalo. Cuarenta posiciones a 30 s en las bandas
graves son la razón de que una campaña de grado 1 lleve mucho más tiempo que la
de grado 2 de la sección 1: el coste del grado es sobre todo tiempo.

### Parámetros de `sound_power_anechoic()`

| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `levels_positions` | array 2D | dB | `(NM, NB)` | Una fila por posición, una columna por banda |
| `surface` | str | — | `'sphere'` / `'hemisphere'` | Cámara anecoica o semianecoica |
| `radius` | float | m | > 0 | Radio de medición $r$; acotado por $2 d_0$, $\lambda/4$ y el suelo de 1 m de arriba |
| `background_levels` | array 2D o espectro | dB | coincide con `levels_positions` | Habilita el $K_{1i}$ por posición de la Ec. 11 |
| `frequencies` | array 1D | Hz | una por banda | Habilita $L_{W\mathrm{A}}$ y el $C_3$ por banda |
| `areas` | array 1D | m² | una por posición | Áreas de segmento desiguales, para una investigación localizada (apartado 9.4.3.2); si se omite se suponen iguales |
| `temperature_c` | float | °C | por defecto `23.0` | Fija $C_1$, $C_2$ |
| `static_pressure_kpa` | float | kPa | por defecto `101.325` | Fija $C_1$, $C_2$ |
| `air_absorption_coefficient` | float o array 1D | dB/m | por defecto `None` | El término $C_3$ de absorción del aire; se aporta, no se calcula |
| `sigma_omc` | float | dB | por defecto `0.0` | Desviación típica de funcionamiento y montaje, apartado 10.5 |
| `coverage_factor` | float | — | por defecto `2.0` | La $k$ de $U = k\sqrt{\sigma_{R0}^2 + \sigma_\text{omc}^2}$ |

Los dos últimos son toda la historia de la incertidumbre, y el valor por defecto
la esconde: si se deja como está, `sigma_omc = 0` afirma que la instalación es
perfectamente repetible y la ficha imprime $U = 1{,}0$ dB. Los 4,1 dB que
declara el ejemplo de abajo son lo que cuesta esa misma determinación una vez se
admite el valor de EJEMPLO $\sigma_\text{omc} = 2{,}0$ dB del apartado 10.5.

Sobre varias bandas `sound_power_anechoic` devuelve un `PrecisionSoundPowerResult`
representable que lleva el $L_W$ por banda y el total ponderado A:

```python

from phonometry import emission

# Una máquina con pico en frecuencias medias medida sobre el conjunto hemisférico de
# 40 posiciones (Anexo E). levels_positions es el espectro de presión superficial
# (40, NB): un espectro base con pico cerca de 1 kHz más una pequeña dispersión espacial por posición.
freqs = np.array([125, 250, 500, 1000, 2000, 4000, 8000], float)
base = 70.0 + 8.0 * np.exp(-(np.log2(freqs / 1000.0) ** 2) / 2.0)
rng = np.random.default_rng(7)
levels = base[None, :] + rng.normal(0.0, 1.0, (40, freqs.size))

# sigma_omc es la desviación típica de funcionamiento y montaje del
# apartado 10.5; con el valor de EJEMPLO 2.0 dB y el factor de cobertura por
# defecto k = 2, la incertidumbre expandida U = k*sqrt(sigma_R0^2 + sigma_omc^2)
# son los 4.1 dB que imprime la ficha de abajo. Con su valor por defecto 0
# informa 1.0 dB.
result = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0,
                                       frequencies=freqs, sigma_omc=2.0)
print(round(result.sound_power_level_a, 1))   # 89.3
print(round(float(result.uncertainty), 1))    # 4.1  dB
result.plot()   # espectro LW, LWA en el título (requiere matplotlib)
```

*Una barra por banda: la presión promediada en la superficie más las correcciones
de área, ruido de fondo y meteorológica dan $L_W(f)$, y la suma energética
ponderada A entre bandas da el número único $L_{W\mathrm{A}}$ del título.*

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

```python

from phonometry import emission

# Una máquina con pico en frecuencias medias medida sobre el conjunto hemisférico de
# 40 posiciones (Anexo E). levels_positions es el espectro de presión superficial
# (40, NB): un espectro base con pico cerca de 1 kHz más una pequeña dispersión espacial por posición.
freqs = np.array([125, 250, 500, 1000, 2000, 4000, 8000], float)
base = 70.0 + 8.0 * np.exp(-(np.log2(freqs / 1000.0) ** 2) / 2.0)
rng = np.random.default_rng(7)
levels = base[None, :] + rng.normal(0.0, 1.0, (40, freqs.size))
result = emission.sound_power_anechoic(levels, "hemisphere", radius=1.0, frequencies=freqs)

# result es el PrecisionSoundPowerResult calculado arriba. Una línea:
result.plot(language="es")
plt.show()

# A mano: un espectro de barras de LW con el total ponderado A en el título.
freqs = result.frequencies
positions = np.arange(freqs.size)
fig, ax = plt.subplots()
ax.bar(positions, result.sound_power_level, width=0.7, color="#1f77b4")
ax.set_xticks(positions)
ax.set_xticklabels([f"{f:g}" for f in freqs], rotation=45, ha="right")
ax.set_xlabel("Frecuencia [Hz]")
ax.set_ylabel("Nivel de potencia acústica LW [dB]")
ax.set_title(
    f"Potencia acústica de precisión (ISO 3745)  LWA = {result.sound_power_level_a:.1f} dB(A)")
plt.show()
```

</details>

<span id="informe-de-medicion"></span>

## 3. El informe de medición (`.report()`)

Una determinación de potencia acústica termina en un *documento*. Todos los
resultados de esta página siguen siendo dibujables mientras se trabaja con
ellos (`res.plot()` traza interactivamente el mismo espectro $L_W$ que la
ficha compone), y el paso de informe lo envuelve en el entregable. Tanto el
resultado de superficie envolvente (`SoundPowerResult`, ISO 3744/3746) como el
resultado de precisión (`PrecisionSoundPowerResult`, ISO 3745) exponen un método
`.report()` que escribe una ficha PDF de una página con el formato de una hoja
de ensayo de potencia acústica: la línea de base normativa que nombra el método
aplicado y el grado de exactitud, un encabezado opcional de metadatos (cliente,
fuente de ruido, entorno de ensayo, instrumentación, clima, fecha), una tabla
por bandas (frecuencia nominal de octava/tercio de octava, el nivel de presión
acústica de superficie $L_p$ y el nivel de potencia acústica de banda $L_W$), el
espectro de potencia acústica $L_W(f)$ con eje de bandas nominal, y un recuadro
con el nivel de potencia acústica ponderado A $L_{W\mathrm{A}}$ (dB re 1 pW) acompañado
del $L_W$ total, la incertidumbre expandida $U$ y el área de la superficie de
medición $S$.

Los metadatos se proporcionan mediante un `ReportMetadata`, cuyos campos
aplicables aquí son la **descripción de la fuente** (`specimen`), el **entorno
de ensayo** (`test_room`), el **cliente**, la **instrumentación**, la
**temperatura**, la **humedad relativa** y la **presión ambiente**, la **fecha
del ensayo** (`test_date`) y la identidad del pie (`laboratory`, `operator`,
`report_id`, `notes`); el área de la superficie de medición $S$ procede del
propio resultado y se imprime en el recuadro y en la franja de base, junto con las
correcciones aplicadas (el ruido de fondo $K_1$ y el entorno $K_2$ para el
método de superficie ISO 3744/3746, o las meteorológicas $C_1$/$C_2$/$C_3$ para
el método de precisión ISO 3745). Indicar `requirement` añade un veredicto
CUMPLE/NO CUMPLE frente a un límite declarado de potencia acústica ponderada A
(la emisión de potencia acústica es una magnitud en la que menos es mejor, así
que la fuente cumple igual o por debajo del límite). `verbose=True` añade el
nivel promedio energético $L_p'$ a la tabla, y para el resultado de superficie
ISO 3744/3746 añade además las columnas de corrección $K_1$/$K_2$ (el resultado
de precisión no lleva $K_2$ en absoluto y pliega su $K_1$ por posición dentro de
la media de superficie, así que la ficha imprime $C_1$/$C_2$/$C_3$ en su franja
de base en lugar de esas columnas). `language="es"` genera la ficha en español
con decimales de coma.

```python

from phonometry import ReportMetadata, emission

freqs = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000], float)
# Diez espectros de posición idénticos sobre un hemisferio de radio 4 m; ruido
# de fondo uniforme 10 dB por debajo y área de absorción equivalente
# A = 1500 m^2 (para que K1, K2 sean significativos y dentro del límite de
# validez del grado de ingeniería).
surface = np.array([72.0, 76, 80, 82, 81, 78, 73, 66])
res = emission.sound_power_pressure(
    np.tile(surface, (10, 1)), "hemisphere", radius=4.0,
    background_levels=np.tile(surface - 10.0, (10, 1)),
    frequencies=freqs, grade="engineering",
    room=emission.RoomEnvironment(absorption_area=1500.0),
)

res.report(
    "sound_power.pdf",
    metadata=ReportMetadata(
        client="Planta de fabricación de ejemplo",
        specimen="Grupo hidráulico (de suelo)",
        test_room="Cámara semianecoica sobre suelo reflectante",
        instrumentation="Sonómetro clase 1 (IEC 61672-1), n/s 0042",
        laboratory="Laboratorio de referencia Phonometry",
        report_id="EXAMPLE-3744",
        requirement=105.0,
    ),
    language="es",
)   # LWA = 103,7 dB(A) re 1 pW -> límite declarado 105 dB(A): CUMPLE
```

La ficha de ejemplo se regenera con `make reports` y se mantiene renderizada en
el repositorio; pulsa la vista previa para abrir el PDF.

El resultado de precisión escribe la misma hoja desde el lado de ISO 3745, con
las correcciones meteorológicas en su franja de base en lugar del par
$K_1$/$K_2$. Es la medición de la sección 2 sobre las 40 posiciones del
hemisferio, la del espectro representado más arriba:

```python
from phonometry import ReportMetadata

result.report(
    "potencia-precision.pdf",
    metadata=ReportMetadata(
        client="Planta de fabricación de ejemplo",
        specimen="Máquina con pico en medias frecuencias",
        test_room="Cámara anecoica cualificada, red de 40 posiciones en hemisferio",
        measurement_standard="ISO 3745",
    ),
    language="es",
)   # LWA = 89,3 dB(A) re 1 pW, U = 4,1 dB
```

## 4. Nivel de energía acústica de una ráfaga (apartado 8.3)

Todo lo anterior describe una fuente que funciona de forma estacionaria durante
todo el intervalo de promediado: la Ec. 18 da un *ritmo* de flujo de energía, y
caracteriza a la máquina solo mientras la máquina es invariante en el tiempo.
Una carrera de prensa, un portazo o un escape neumático radian su energía en
una fracción de segundo y luego se detienen, así que la norma les da una
magnitud propia, el **nivel de energía acústica**

$$
L_J = 10\log_{10}\frac{J}{J_0}, \qquad J = \int_{t_1}^{t_2} P(t)\,\mathrm{d}t, \qquad J_0 = 1\ \text{pJ}
$$

(apartados 3.22 y 3.23): la energía que radia el suceso, en decibelios re 1 pJ,
en lugar de la potencia que no tiene. Su determinación (apartado 8.3, y
apartado 8.4 de ISO 3746 para el grado de inspección) es la cadena de la
sección 1 con una sustitución. Cada micrófono registra el **nivel de presión
acústica de suceso aislado integrado en el tiempo**

$$
L_E = 10\log_{10}\left[\frac{\int_{t_1}^{t_2} p^2(t)\,\mathrm{d}t}{E_0}\right], \qquad E_0 = (20\ \mu\text{Pa})^2\ \text{s}
$$

(apartado 3.4) a través de una ventana que abarca toda la ráfaga, en todas las
posiciones a la vez (no se permite un micrófono en desplazamiento, apartado
8.3.1), y $L_E$ va después a donde iba $L_p$: el promedio energético sobre las
posiciones de 8.2.2 (apartado 8.3.3), la corrección de fondo $K_1$ (Ec. 21) y
la corrección de entorno $K_2$ (Ec. 22), el término de superficie (Ec. 23):

$$
L_J = \overline{L'_E} - K_1 - K_2 + 10\log_{10}\frac{S}{S_0}.
$$

Las dos magnitudes se encuentran en una fuente estacionaria. Sobre una ventana
de duración $T$ la integral de un $p^2$ constante es $T p^2$, así que
$L_E = L_{p,T} + 10\log_{10}(T/T_0)$ con $T_0 = 1$ s (apartado 3.4, NOTA 1),
y la energía que una fuente estacionaria radia en $T$ segundos es
$L_J = L_W + 10\log_{10}(T/T_0)$: una máquina de 90 dB que funciona 10 s ha
emitido $L_J = 100$ dB. Esa identidad es lo que dibuja la figura de abajo, y
aquello a lo que los propios tests de la biblioteca anclan la cadena de energía
acústica, campo a campo.

*A la izquierda, el nivel de suceso aislado acumulado de una ráfaga de impacto
y de una fuente estacionaria de 80 dB a lo largo de una ventana de 10 s: los
90 dB de la ráfaga están todos ahí en el primer segundo tras el impacto, la
fuente estacionaria sube como $10\log_{10}(t/T_0)$ y alcanza los mismos 90 dB
en $T$. A la derecha, el $L_J$ por bandas de octava de la misma carrera de
prensa medida sobre una semiesfera de 2 m, con el total ponderado A en el
título.*

```python

from phonometry import emission

# Una carrera de prensa medida en las 10 posiciones de la semiesfera de ISO 3744
# (r = 2 m), cinco carreras una a una: (sucesos, posiciones, bandas), octavas 125 Hz - 8 kHz.
bands = np.array([125, 250, 500, 1000, 2000, 4000, 8000], dtype=float)
stroke = np.array([84.0, 88.0, 91.0, 92.0, 90.0, 86.0, 80.0])   # niveles de suceso aislado, dB
rng = np.random.default_rng(83)
events = stroke + rng.normal(0.0, 0.8, size=(5, 10, bands.size))

burst = emission.sound_energy_pressure(
    events, "hemisphere", radius=2.0,
    background_levels=np.full((10, bands.size), 62.0),   # promediado en los mismos 10 s
    integration_time=10.0, frequencies=bands,
    room=emission.RoomEnvironment(reverberation_time=1.2, volume=900.0),   # -> K2
)
print(burst.events)                                        # 5 (Ec. 19 sobre el primer eje)
print(round(float(burst.environmental_correction[0]), 2))  # K2 = 2.64 dB
print(np.round(burst.sound_energy_level, 1))               # LJ por banda, máximo 103.5 dB en 1 kHz
print(round(burst.sound_energy_level_a, 1))                # LJA = 107.7 dB(A)

burst.plot()   # LJ por banda, LJA en el título (requiere matplotlib)
```

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

```python

# Izquierda: el nivel de suceso aislado acumulado de las dos fuentes. La ráfaga
# decae con una constante de tiempo de 0,35 s y guarda una exposición de 90 dB;
# la fuente estacionaria es de 80 dB, así que alcanza los mismos 90 dB en T = 10 s.
p0_sq = (20e-6) ** 2
e0 = p0_sq * 1.0
t = np.linspace(0.0, 10.0, 4001)
dt = t[1] - t[0]
burst_p2 = np.where(t >= 2.0, (e0 * 1e9 / 0.35) * np.exp(-(t - 2.0) / 0.35), 0.0)
steady_p2 = np.full_like(t, p0_sq * 1e8)
fig, (axl, axr) = plt.subplots(1, 2, figsize=(12.5, 5.4))
with np.errstate(divide="ignore"):
    axl.plot(t, 10 * np.log10(np.cumsum(burst_p2) * dt / e0), label="ráfaga de impacto")
    axl.plot(t, 10 * np.log10(np.cumsum(steady_p2) * dt / e0), label="estacionaria, 80 dB")
axl.set(xlabel="Tiempo [s]", ylabel="Nivel de suceso aislado LE(t) [dB]", ylim=(60, 94))
axl.legend()

# Derecha: el espectro de LJ es el resultado calculado arriba.
burst.plot(ax=axr, language="es")
plt.show()
```

</details>

### Cinco sucesos, uno a uno o todos a la vez

La norma pide al menos **cinco** sucesos (apartado 8.3.1), medidos uno a uno o
como una sola lectura que los abarque todos, y reduce ambos casos al nivel de
*un* suceso en cada posición: el promedio energético de las $N_\mathrm{e}$
lecturas individuales,

$$
L'_{Ei} = 10\log_{10}\left[\frac{1}{N_\mathrm{e}}\sum_{q=1}^{N_\mathrm{e}} 10^{0.1 L'_{Ei,q}}\right]
\qquad \text{(Ec. 19)},
$$

o la lectura única menos los $10\log_{10} N_\mathrm{e}$ de los sucesos que
contiene,

$$
L'_{Ei} = L'_{Ei,N_\mathrm{e}} - 10\log_{10} N_\mathrm{e} \qquad \text{(Ec. 20)}.
$$

`sound_energy_pressure` admite las tres formas en que llega `levels_positions`:
un array `(Ne, NM, NB)` de los sucesos medidos uno a uno (Ec. 19, como en el
fragmento anterior), una lectura `(NM, NB)` de una sola medición que abarca
`events=Ne` sucesos (Ec. 20), o el nivel medio de suceso aislado `(NM, NB)` ya
formado. Menos de cinco sucesos se aceptan con un `SoundPowerWarning`, y
`mean_single_event_level` expone la misma reducción por sí sola:

```python
five_at_once = emission.mean_single_event_level(np.full((10, 1), 97.0), events=5)
print(round(float(five_at_once[0, 0]), 2))          # 90.01 dB: 97 - 10 lg 5 (Ec. 20)
one_by_one = emission.mean_single_event_level(np.array([89.0, 91.0, 90.0, 90.5, 89.5]))
print(round(float(one_by_one), 2))               # 90.06 dB: la media energética (Ec. 19)
```

### El fondo se compara sobre la misma ventana

El apartado 8.3.1 hace medir el fondo como nivel *promediado en el tiempo*
sobre el mismo tiempo de integración $T$ que los sucesos, y la Ec. 21 forma
$K_1$ a partir de $\Delta L_E = \overline{L'_E} - \overline{L_{p(\mathrm{B})}}$.
Esos dos niveles no comparten referencia: $L_E$ es una energía re
$E_0 = p_0^2 \cdot 1$ s y $L_p$ una presión cuadrática media re $p_0^2$, y
$K_1$ resta una energía de otra. La energía que el fondo aporta a una ventana
de $T$ segundos es su propia exposición sobre esa ventana,
$L_{p(\mathrm{B})} + 10\log_{10}(T/T_0)$ (la misma identidad de la NOTA 1),
así que eso es lo que `sound_energy_pressure` compara con el nivel del suceso,
y por eso `integration_time` es obligatorio siempre que se da
`background_levels`. Leído al pie de la letra, un fondo de 62 dB bajo una
ráfaga de 78 dB en una ventana de 10 s parecería 16 dB por debajo y no
recibiría corrección; como energía son 72 dB, el margen es el criterio de
ingeniería de 6 dB, y $K_1$ es sus 1,26 dB completos. El [registro de
erratas](https://github.com/jmrplens/phonometry/blob/main/docs/ERRATA.es.md)
recoge la lectura. Con el fondo en su sitio, los criterios y el tope son los de
la sección 1: de 6 dB a 15 dB para el grado de ingeniería, de 3 dB a 10 dB
para el grado de inspección de ISO 3746, y un `SoundPowerWarning` cuando una
banda cae por debajo.

```python
# 62 dB promediados en 10 s son 72 dB re E0; una ráfaga de 78 dB queda entonces 6 dB por encima.
k1 = emission.sound_energy_pressure(
    np.full((10, 1), 78.0), "hemisphere", radius=2.0,
    background_levels=np.full(1, 62.0), integration_time=10.0,
).background_correction
print(round(float(k1[0]), 2))    # K1 = 1.26 dB, el valor en el criterio de 6 dB
```

La identidad con la sección 1 se cumple entonces hasta el último dígito. Las
mismas diez posiciones, fondo y sala, con todos los niveles subidos
$10\log_{10}(T/T_0)$ para una ventana de 10 s, dan un $L_J$ exactamente 10 dB
por encima de $L_W$ en todas las bandas, y los mismos $K_1$, $K_2$ e
incertidumbre expandida, que el apartado 9.1 (Ec. 24) hace comunes a ambas
magnitudes:

```python
# La medición de la sección 1 leída como ventana de 10 s: LJ = LW + 10 lg(T/T0) exactamente.
octaves_hz = np.array([63, 125, 250, 500, 1000, 2000, 4000, 8000])
rng = np.random.default_rng(0)
ten_positions = np.array([70.0, 74.0, 78.0, 80.0, 79.0, 76.0, 72.0, 66.0]) + rng.normal(0.0, 0.5, size=(10, 8))
quiet = np.full((10, 8), 55.0)
workshop = emission.RoomEnvironment(reverberation_time=0.6, volume=300.0)
steady = emission.sound_power_pressure(
    ten_positions, "hemisphere", radius=1.5, reflecting_planes=1,
    background_levels=quiet, frequencies=octaves_hz, room=workshop,
)
ten_seconds = emission.sound_energy_pressure(
    ten_positions + 10.0, "hemisphere", radius=1.5, reflecting_planes=1,
    background_levels=quiet, integration_time=10.0, frequencies=octaves_hz, room=workshop,
)
print(np.round(ten_seconds.sound_energy_level - steady.sound_power_level, 6))   # 10.0 en todas las bandas
print(round(ten_seconds.sound_energy_level_a - steady.sound_power_level_a, 6))  # 10.0
```

### Condiciones meteorológicas de referencia (Anexo G)

La Ec. 23 vale para las condiciones meteorológicas del ensayo, y por encima de
500 m de altitud o por debajo de 10 °C el apartado 8.3.6 exige llevar el nivel
a los 101,325 kPa y 23,0 °C de referencia mediante el Anexo G,
$L_{J\mathrm{ref,atm}} = L_J + C_1 + C_2$ (Ec. G.3), con

$$
C_1 = -10\log_{10}\frac{p_\mathrm{s}}{p_{\mathrm{s},0}} + 5\log_{10}\frac{273{,}15 + \theta}{\theta_0}, \qquad
C_2 = -10\log_{10}\frac{p_\mathrm{s}}{p_{\mathrm{s},0}} + 15\log_{10}\frac{273{,}15 + \theta}{\theta_1},
$$

$\theta_0 = 314$ K y $\theta_1 = 296$ K. $C_1$ es la corrección de magnitud de
referencia a través de la impedancia característica del aire (se omite cuando
$K_2$ salió del ensayo de comparación absoluta de A.2), $C_2$ la corrección de
impedancia de radiación de un monopolo. Cuando la presión estática no se
midió, la Ec. G.2 la estima a partir de la altitud,
$p_\mathrm{s} = p_{\mathrm{s},0}(1 - aH_\mathrm{a})^b$. La comprobación de
H.4.2.7 de que la corrección se anula a 120 m y 23 °C se cumple hasta la
diezmilésima de decibelio.

```python
# Una determinación a 1 200 m y 8 C, llevada a 101.325 kPa y 23 C (Ec. G.3).
corr = emission.reference_atmosphere_correction(8.0, altitude=1200.0)
print(round(corr.static_pressure_kpa, 1))    # 87.7 kPa, de la Ec. G.2
print(round(corr.c1, 3), round(corr.c2, 3), round(corr.total, 2))   # 0.386 0.291 0.68 dB
lj_ref = burst.sound_energy_level + corr.total    # Ec. G.3; la Ec. G.1 suma lo mismo a LW
```

### Parámetros de `sound_energy_pressure()`

| Parámetro | Tipo | Unidades | Rango / valor por defecto | Notas |
| :--- | :--- | :--- | :--- | :--- |
| `levels_positions` | array 2D o 3D | dB | `(NM, NB)` o `(Ne, NM, NB)` | Niveles de suceso aislado: por suceso en el primer eje (Ec. 19), una lectura de `events` sucesos (Ec. 20), o la media de un suceso |
| `surface`, `radius`, `dimensions`, `distance`, `reflecting_planes` | como en la sección 1 | | | La misma superficie de medición y los mismos mínimos de posiciones |
| `events` | int o None | | `>= 1`, por defecto `None` | $N_\mathrm{e}$ abarcados por una lectura (Ec. 20); al menos 5 sin aviso |
| `background_levels` | array 2D o espectro | dB | `(NM, NB)`, o `(NB,)` / `(1, NB)` | Fondo promediado en el tiempo sobre la misma ventana; activa $K_1$ (Ec. 21) |
| `integration_time` | float | s | > 0, obligatorio con `background_levels` | La ventana $T$; el fondo se compara como su exposición $L_{p(\mathrm{B})} + 10\log_{10}(T/T_0)$ |
| `frequencies` | array 1D | Hz | centros de banda nominales | Activa $L_{J\mathrm{A}}$ (Ec. E.2) |
| `room` | `RoomEnvironment` o None | | por defecto `None` (campo libre) | Los datos de sala tras $K_2$, como en la sección 1 |
| `grade` | str | | `'engineering'` (por defecto) / `'survey'` | Apartado 8.3 de ISO 3744 frente a apartado 8.4 de ISO 3746 |
| `omc_uncertainty` | float | dB | por defecto `0.0` | $\sigma_\text{omc}$, incorporada a $U$ como para $L_W$ |

Devuelve un `SoundEnergyResult`: `sound_energy_level` ($L_J$ por banda),
`surface_event_level` ($\overline{L_E}$ tras $K_1$/$K_2$, Ec. 22),
`mean_event_level` ($\overline{L'_E}$), `background_correction`/
`environmental_correction`, `directivity_index` (por posición y banda),
`surface_area`, `sound_energy_level_a` ($L_{J\mathrm{A}}$), `uncertainty`,
`grade`, `events` ($N_\mathrm{e}$, o `None` cuando se aportaron las medias) e
`integration_time`. `reference_atmosphere_correction(temperature_c,
static_pressure_kpa=…, altitude=…)` devuelve un
`ReferenceAtmosphereCorrection`
con `c1`, `c2`, su `total` y la `static_pressure_kpa` empleada.

## Qué cubre esta guía

La determinación por superficie envolvente de ISO 3744/3746
(`sound_power_pressure`): las áreas de superficie de semiesfera y caja, las
correcciones $K_1$ de fondo y $K_2$ de entorno con sus límites de validez, las
posiciones de micrófono del Anexo B (`measurement_positions`,
`plot_microphone_positions`) y el total ponderado A del Anexo E. La
determinación de precisión de ISO 3745 (`sound_power_anechoic`): las mallas
fijas de los Anexos D/E (`precision_positions`), la corrección de fondo por
posición (`precision_background_correction`, Ec. 11), las correcciones
meteorológicas $C_1$/$C_2$/$C_3$ y la incertidumbre expandida del apartado
10.5 (`precision_uncertainty`). Ambos resultados presentan la ficha de
potencia acústica de estilo acreditado mediante `.report()`. El nivel de
energía acústica $L_J$ de una ráfaga de ruido sobre la misma superficie
envolvente (`sound_energy_pressure`, apartado 8.3 de ISO 3744 y apartado 8.4
de ISO 3746): los niveles de suceso aislado de $N_\mathrm{e}$ sucesos uno a uno
o en una sola lectura (`mean_single_event_level`, Ec. 19/20), el $K_1$ de la
Ec. 21 con el fondo comparado sobre la misma ventana, $K_2$, la Ec. 23 y el
$L_{J\mathrm{A}}$ del Anexo E, y la corrección del Anexo G a las condiciones
meteorológicas de referencia (`reference_atmosphere_correction`, Ec. G.1/G.3).

Ninguna de las dos determinaciones ejecuta la cualificación del recinto en
la que se apoya: la cualificación de campo libre de la cámara anecoica o
semianecoica es un paso propio, por ISO 26101 frente al anexo A modificado de
ISO 3745, en
[Campo libre y fuente de referencia](/phonometry/es/devices/emission/free-field-qualification/),
cuyo veredicto toma `sound_power_anechoic` como `room_qualification` para
avisar, y la validez de $K_2$ en ISO 3744 solo emite avisos. La corrección del **Anexo G** de ISO 3744 a las condiciones
meteorológicas de referencia, exigida por encima de 500 m de altitud o por
debajo de 10 °C (apartados 8.2.5 y 8.3.6), la evalúa
`reference_atmosphere_correction` pero nunca se aplica dentro de una
determinación: `sound_power_pressure` y `sound_energy_pressure` no admiten
argumento de temperatura ni de presión, y la suma se añade a mano. ISO 3745
no define un nivel de energía acústica propio, así que una ráfaga en la cámara
anecoica de precisión no tiene aquí ninguna vía. La corrección meteorológica
$C_3$ de ISO 3745 necesita un coeficiente de absorción del aire que aporta
quien llama (`air_absorption_coefficient=`); este módulo no lo calcula a
partir de ISO 9613-1. La elección entre las siete vías, y la declaración ISO
4871 que un resultado alimenta, viven en [Potencia
acústica](/phonometry/es/devices/emission/sound-power/).

## Véase también

- [Potencia acústica](/phonometry/es/devices/emission/sound-power/): la elección entre
  las siete vías de determinación, los grados de precisión y la declaración
  de emisión sonora de ISO 4871.
- [Potencia acústica en cámara reverberante (ISO 3741)](/phonometry/es/devices/emission/sound-power-reverberation/):
  la alternativa de precisión en campo difuso cuando la fuente puede viajar
  a una cámara cualificada.
- [Potencia acústica por barrido de intensidad (ISO 9614)](/phonometry/es/devices/emission/sound-power-intensity/):
  las vías que toleran el ruido de fondo estacionario que un método de
  presión no puede restar.
- [Acústica de salas](/phonometry/es/buildings/rooms/room-acoustics/): el tiempo de
  reverberación y el área de absorción equivalente que alimentan $K_2$.
- [Niveles](/phonometry/es/signals/levels/levels/): el promediado en energía y la
  ponderación A que sustentan $L_{W\mathrm{A}}$.
- [Teoría](/phonometry/es/reference/theory/environment-transport/): las
  derivaciones de $K_1$/$K_2$ y $C_1$/$C_2$.
- Referencia de la API: [`emission.sound_power`](/phonometry/es/reference/api/power/sound-power/).
- Teoría: [Determinación de la potencia acústica](/phonometry/es/reference/theory/environment-transport/#determinación-de-la-potencia-acústica-iso-374437453746-iso-3741-iso-9614-123): la derivación de la superficie envolvente de la ISO 3744/3746 y la corrección ambiental que necesita.
