<!-- canonical: https://jmrplens.github.io/phonometry/es/guides/porous-absorbers/ -->
Source: https://jmrplens.github.io/phonometry/es/guides/porous-absorbers/

A partir de la **resistividad al flujo** de un material poroso (la magnitud
que mide el [banco de flujo](/phonometry/es/guides/materials/)) los modelos
clásicos de fluido equivalente predicen su impedancia característica y su
número de onda complejos, y una pila de capas por **matrices de
transferencia** (mantas porosas, cámaras de aire, paneles perforados y
microperforados, membranas) predice el coeficiente de absorción de toda la
construcción antes de construir nada. Esta página cubre los tres modelos
porosos (Delany–Bazley, Miki, Johnson–Champoux–Allard), el solucionador
multicapa, las capas resonantes de Maa y la integral de incidencia aleatoria
(Paris). Las contrapartes de medida están en
[Materiales acústicos](/phonometry/es/guides/materials/); la valoración del
espectro predicho vive en
[la sección ISO 11654 de esa misma página](/phonometry/es/guides/materials/).

## 1. Modelos de fluido equivalente de un material poroso

Un material poroso de esqueleto rígido se comporta como un *fluido
equivalente* con una impedancia característica compleja $Z_c$ y un número de
onda $k$ (convención temporal $e^{+j\omega t}$, de modo que un medio pasivo
tiene $\mathrm{Im}(k) < 0$).

**Delany–Bazley** (Mechel 2e secc. G.11; Bies 5e apéndice D, tabla D.1;
Hopkins ecs. 1.171–1.174) es la ley de potencias de un parámetro en la
variable del absorbente $X = \rho_0 f / \sigma$:

$$
\frac{Z_c}{\rho_0 c_0} = 1 + C_1 X^{-C_2} - j\,C_3 X^{-C_4}, \qquad
\frac{k}{k_0} = 1 + C_5 X^{-C_6} - j\,C_7 X^{-C_8},
$$

con los coeficientes clásicos de lana de roca/fibra de vidrio
$(0{,}0571,\,0{,}754,\,0{,}087,\,0{,}732,\,0{,}0978,\,0{,}700,\,0{,}189,\,0{,}595)$
y un rango de ajuste declarado $0{,}01 < X < 1{,}0$ (porosidad cercana a
uno). La biblioteca incluye también los juegos de la tabla D.1 ajustados a
poliéster (`"garai_pompoli"`) y a espumas (`"dunn_davern"`, `"wu"`). Fuera
del rango de ajuste se emite un `PorousAbsorberWarning` y los valores
extrapolados se devuelven igualmente; el fallo clásico es una parte real
*negativa* de la impedancia de entrada de la capa a baja frecuencia (Mechel
secc. G.12).

**Miki** (1990) reajustó los mismos datos de Delany–Bazley bajo una
restricción de pasividad (positivo-real), de modo que el modelo se mantiene
físicamente bien comportado por debajo del rango de ajuste; es la elección
habitual cuando un modelo de un parámetro debe evaluarse en banda ancha.

**Johnson–Champoux–Allard (JCA)** es el modelo semifenomenológico de cinco
parámetros (Cox & D'Antonio 3e ecs. 6.19–6.25): la resistividad al flujo
$\sigma$, la porosidad $\phi$, la tortuosidad $\alpha_\infty$ y las
longitudes características viscosa/térmica $\Lambda$, $\Lambda'$ dan la
densidad efectiva y el módulo de compresibilidad con los límites exactos
$j\omega\rho_e \to \sigma$ en continua,
$\rho_e \to (\alpha_\infty \rho_0/\phi)(1 + (1-j)\,\delta_v/\Lambda)$ a alta
frecuencia, y la transición isoterma-adiabática en $K_e$.

```python

from phonometry import materials

f = np.geomspace(200.0, 4000.0, 200)
db = materials.delany_bazley(f, 20000.0)          # sigma en Pa s/m2
mk = materials.miki(f, 20000.0)
jca = materials.johnson_champoux_allard(
    f, 20000.0, porosity=0.98, tortuosity=1.0,
    viscous_length=8.7e-5, thermal_length=8.7e-5,
)
print(np.round(db.normalized_impedance[0], 3))    # (2.598-2.209j)
print(np.round(mk.normalized_impedance[0], 3))    # (2.286-1.965j)
print(np.round(jca.normalized_impedance[0], 3))   # (2.321-2.075j)

db.plot()   # componentes normalizadas de Zc y k frente a la frecuencia
```

*La presentación clásica de un modelo de fluido equivalente (Cox y D'Antonio
3.ª ed., figs. 6.19–6.20): a baja frecuencia dominan las fuerzas viscosas y
el material se ve rígido y con pérdidas (las cuatro componentes grandes); al
subir la frecuencia las componentes caen hacia los límites de aire libre
$Z_c \to \rho_0 c_0$ y $k \to k_0$, de modo que una capa delgada solo
trabaja donde su espesor es una fracción apreciable de la longitud de onda
dentro del material.*

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

```python

from phonometry import materials

f = np.geomspace(100.0, 5000.0, 260)
mk = materials.miki(f, 20000.0)          # sigma = 20 kPa s/m^2

# Una línea: componentes normalizadas de Zc y k en una rejilla log-log.
mk.plot(language="es")
plt.show()

# A mano, desde los campos del resultado:
fig, ax = plt.subplots()
ax.loglog(f, mk.normalized_impedance.real, label="Re(Zc)/rho c")
ax.loglog(f, -mk.normalized_impedance.imag, "--", label="-Im(Zc)/rho c")
ax.loglog(f, mk.normalized_wavenumber.real, label="Re(k)/k0")
ax.loglog(f, -mk.normalized_wavenumber.imag, "--", label="-Im(k)/k0")
ax.set(xlabel="Frecuencia [Hz]", ylabel="Valor característico normalizado")
ax.legend()
plt.show()
```

</details>

Los tres modelos coinciden estrechamente dentro del rango de ajuste de
Delany–Bazley (Cox & D'Antonio, figs. 6.19–6.21, hacen la misma
comparación); JCA extiende la predicción con base física fuera de él. Un
`PorousMediumResult` construido con datos medidos (por ejemplo los $Z_c$,
$k$ recuperados por la
[reducción de matriz de transferencia ASTM E2611](/phonometry/es/guides/materials/))
se conecta al solucionador de capas exactamente igual que uno modelado.

## 2. Predicción multicapa por matrices de transferencia

Cada capa fluida de espesor $d$ aporta la matriz de cadena (Cox & D'Antonio
ec. 2.29; equivalente a la recursión de impedancias de Bies ec. D.95 y al
esquema de Mechel secc. D.4)

$$
\begin{bmatrix} p \\ u \end{bmatrix}_{\text{frente}} =
\begin{bmatrix}
\cos(k_x d) & j Z_x \sin(k_x d) \\
j \sin(k_x d)/Z_x & \cos(k_x d)
\end{bmatrix}
\begin{bmatrix} p \\ u \end{bmatrix}_{\text{fondo}},
$$

con el número de onda en profundidad
$k_x = \sqrt{k^2 - k_0^2 \sin^2\theta}$ por la ley de Snell y
$Z_x = Z_c k / k_x$. Las láminas resonantes delgadas entran como impedancias
en serie $[[1, z], [0, 1]]$. Cerrar la cadena con una pared rígida (o aire
libre, o cualquier impedancia) da la impedancia de superficie, el factor de
reflexión $R(\theta)$ y $\alpha(\theta) = 1 - |R|^2$. Una única capa porosa
sobre pared rígida se reduce a la forma cerrada de libro
$Z_s = -j Z_c \cot(k d)$ (Mechel secc. D.3, ec. 1).

```python

from phonometry import materials

f = np.geomspace(200.0, 4000.0, 300)
med = materials.miki(f, 20000.0)
res = materials.layered_absorber(f, [materials.PorousLayer(0.05, med)])
i = np.argmin(np.abs(f - 1000.0))
print(round(res.absorption[i], 3))               # 0.937 a 1 kHz

res.plot()   # alpha(f) con |R| superpuesto
```

El solucionador evalúa las magnitudes físicas mediante una recursión de
admitancias numéricamente robusta (inmune al desbordamiento
$e^{|\mathrm{Im}(k_x)| d}$ de las entradas matriciales crudas en capas
extremadamente atenuantes) y aun así expone la matriz de cadena completa
(recíproca por construcción, $\det T = 1$) en `transfer_matrix`, lista para
la [maquinaria ASTM E2611](/phonometry/es/guides/materials/)
(`TransferMatrix`).

*Cuatro construcciones, un mismo presupuesto de 50 mm: la capa porosa
funciona en banda ancha pero decae a baja frecuencia; los diseños
microperforado, perforado y de membrana cambian ancho de banda por un pico
resonante situado cada vez más abajo. Las líneas punteadas son las formas
cerradas de cavidad poco profunda; el modelo completo queda por debajo
porque la masa viscosa del tapón de aire y la profundidad finita de la
cámara no son despreciables.*

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

```python

from phonometry import materials as m

f = np.geomspace(50.0, 5000.0, 500)
med = m.miki(f, 20000.0)
med_light = m.miki(f, 10000.0)
designs = {
    "Poroso 50 mm": [m.PorousLayer(0.05, med)],
    "MPP + cámara": [m.MicroperforatedPlateLayer(0.5e-3, 0.15e-3, 0.008),
                     m.AirLayer(0.048)],
    "Perforado + poroso": [m.PerforatedPlateLayer(0.006, 0.0025, 0.05),
                           m.PorousLayer(0.025, med), m.AirLayer(0.019)],
    "Membrana + poroso": [m.MembraneLayer(2.0), m.AirLayer(0.01),
                          m.PorousLayer(0.038, med_light)],
}
fig, ax = plt.subplots()
for label, layers in designs.items():
    ax.semilogx(f, m.layered_absorber(f, layers).absorption, label=label)
ax.set(xlabel="Frecuencia [Hz]", ylabel="Coeficiente de absorción")
ax.legend()
plt.show()
```

</details>

Detrás de cada una de esas curvas hay una simple lista de capas, leída de
delante hacia atrás en el orden en que la onda incidente la encuentra.
`plot_absorber_stack` dibuja esa lista a escala antes de ejecutar ninguna
física, y un resultado resuelto retiene sus capas, así que
`materials.layered_absorber(f, layers).plot_geometry()` dibuja la misma
sección desde el propio resultado.

*La lista de capas tal y como la encuentra la onda: placa microperforada,
cámara de aire, capa porosa, respaldo rígido. Dibujar el apilado a escala
antes de calcular nada permite cazar de un vistazo el clásico despiste de
metros frente a milímetros en un espesor.*

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

```python

from phonometry import materials

f = np.linspace(200.0, 4000.0, 100)
layers = [
    materials.MicroperforatedPlateLayer(0.001, 0.0002, 0.01),
    materials.AirLayer(0.03),
    materials.PorousLayer(0.05, materials.miki(f, 20000.0)),
]

# La función libre dibuja cualquier lista de capas; un resultado resuelto
# retiene sus capas, así que esto dibuja la misma sección:
#   materials.layered_absorber(f, layers).plot_geometry()
materials.plot_absorber_stack(layers, language="es")
plt.show()
```

</details>

## 3. Láminas resonantes: perforado, microperforado, membrana

**Panel perforado.** Los tapones de aire de los orificios son la masa de un
resonador de Helmholtz: $m = (\rho_0/\varepsilon)\,[t + 2\delta a +
\sqrt{8\nu/\omega}\,(1 + t/2a)]$ con el área abierta $\varepsilon$, el
factor de corrección de extremo $\delta$ por extremo de orificio y la
resistencia viscotérmica
$r = (\rho_0/\varepsilon)\sqrt{8\nu\omega}\,(1 + t/2a)$ (Cox & D'Antonio
ecs. 7.6/7.12). La corrección de extremo por defecto es el ajuste de
interacción de la función de Fok
$\delta = 0{,}85\,(1 - 1{,}47\sqrt{\varepsilon} + 0{,}47\varepsilon^{3/2})$
(tabla 7.1), válido para cualquier área abierta. Para una cámara poco
profunda la resonancia es
$f_0 = (c_0/2\pi)\sqrt{\varepsilon/(t'\,d)}$ (ec. 7.4).

**Panel microperforado (MPP).** Con orificios submilimétricos la capa
límite viscosa llena el orificio y el panel absorbe *sin ningún material
poroso*. La biblioteca implementa la impedancia exacta de tubo corto de Maa
(Maa 1998, ec. 2),

$$
z_1 = j\omega\rho_0 t \left[ 1 -
\frac{2}{x\sqrt{-j}}\,\frac{J_1(x\sqrt{-j})}{J_0(x\sqrt{-j})} \right]^{-1},
\qquad x = a\sqrt{\rho_0 \omega/\eta},
$$

más las correcciones de extremo de la ec. 5 (resistencia superficial
$\tfrac{1}{2}\sqrt{2\omega\rho_0\eta}$ y reactancia de pistón $0{,}85\,d$ en
total), dividida por el área abierta. La constante de perforado $x$ (proporcional al
radio del orificio sobre el espesor de la capa límite viscosa) lo gobierna
todo: en la resonancia $\omega_0 m = \cot(\omega_0 D/c_0)$ la absorción
máxima es $4r/(1+r)^2$ y el ancho de banda de media absorción es
$f_2/f_1 = \pi/\mathrm{arccot}(1+r) - 1$ (Maa, ecs. 9–21, tabla I).

```python

from phonometry import materials

# Maa (1998), fig. 5: d = t = 0,2 mm, orificios cada 2,5 mm, cámara de 6 cm.
eps = (np.pi / 4.0) * (0.2 / 2.5) ** 2
f = np.linspace(100.0, 4000.0, 2000)
res = materials.layered_absorber(
    f, [materials.MicroperforatedPlateLayer(0.2e-3, 0.1e-3, eps),
        materials.AirLayer(0.06)],
)
i = np.argmax(res.absorption)
print(f"alpha máximo = {res.absorption[i]:.2f} a {f[i]:.0f} Hz")
# alpha máximo = 0.96 a 677 Hz
res.plot()   # alpha(f) con |R| superpuesto: el pico resonante del MPP
```

*El propio diseño de la fig. 5 de Maa, sin material poroso alguno: las
pérdidas viscosas de los orificios submilimétricos amortiguan la resonancia
panel-cámara en un pico de absorción ancho. El rasgo estrecho cerca de
2,9 kHz es la resonancia de media onda de la cámara, donde la cámara
presenta un nodo de presión al panel y la absorción se hunde antes de que la
siguiente resonancia la recupere.*

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

```python

from phonometry import materials

# Maa (1998), fig. 5: d = t = 0,2 mm, orificios cada 2,5 mm, cámara de 6 cm.
eps = (np.pi / 4.0) * (0.2 / 2.5) ** 2
f = np.linspace(100.0, 4000.0, 1200)
res = materials.layered_absorber(
    f, [materials.MicroperforatedPlateLayer(0.2e-3, 0.1e-3, eps),
        materials.AirLayer(0.06)],
)

# Una línea: alpha(f) con |R| superpuesto.
res.plot(language="es")
plt.show()

# A mano, desde los campos del resultado:
fig, ax = plt.subplots()
ax.semilogx(f, res.absorption, label="Absorción alpha")
ax.semilogx(f, np.abs(res.reflection), "--", label="Factor de reflexión |R|")
ax.set(xlabel="Frecuencia [Hz]", ylabel="Coeficiente")
ax.legend()
plt.show()
```

</details>

**Membrana.** Una lámina impermeable flexible es la masa superficial
$z = j\omega m$ (Cox ec. 7.14; Bies ec. D.96); sobre una cámara resuena en
el clásico $f_0 \approx 60/\sqrt{m d}$ (adiabático;
$\approx 50/\sqrt{m d}$ cuando la cámara está rellena de poroso y es
isoterma, Cox ecs. 7.9/7.10). Las formas cerradas se exponen como
`helmholtz_resonance_frequency` y `membrane_resonance_frequency`; la
respuesta completa en frecuencia sale de la misma pila de capas.

## 4. Incidencia oblicua y aleatoria

`layered_absorber(..., angle=theta)` evalúa la pila completa de reacción
volumétrica a cualquier ángulo polar; las láminas son de reacción local
(independientes del ángulo) y las capas fluidas refractan según la ley de
Snell; para un MPP sobre cámara esto reproduce exactamente la forma cerrada
oblicua de Maa (ec. 23). El coeficiente de incidencia aleatoria es la
integral de Paris (Mechel secc. D.5, ec. 9)

$$
\alpha_{dif} = \frac{2}{\sin^2\theta_{lim}} \int_0^{\theta_{lim}}
\alpha(\theta)\,\cos\theta\,\sin\theta\,\mathrm{d}\theta,
$$

evaluada por cuadratura de Gauss–Legendre en `diffuse_field_absorption`
(``angle_limit`` por defecto 90°; se usan truncamientos a 75–87°). Para una
superficie de *reacción local* con impedancia normalizada conocida la
integral tiene la forma cerrada de Mechel ec. 10, expuesta como
`statistical_absorption`; su máximo sobre todas las impedancias pasivas es
el **0,951** publicado (en $z \approx 1{,}57$).

```python

from phonometry import materials

f = np.array([250.0, 500.0, 1000.0, 2000.0])
med = materials.miki(f, 20000.0)
layers = [materials.PorousLayer(0.05, med)]
normal = materials.layered_absorber(f, layers)
diffuse = materials.diffuse_field_absorption(f, layers)
print(np.round(normal.absorption, 2))    # [0.26 0.62 0.94 0.95]
print(np.round(diffuse.absorption, 2))   # [0.37 0.68 0.9  0.95]
diffuse.plot()   # alpha_dif(f); superpón normal.absorption para comparar

print(round(float(materials.statistical_absorption(1.567 + 0j)), 3))  # 0.951
```

*Por qué la cámara reverberante lee más alto que el tubo: la integral de
Paris pondera los ángulos oblicuos, cuyas ondas recorren un camino más largo
dentro de la capa, así que $\alpha_{dif}$ supera al $\alpha(0°)$ de
incidencia normal justo donde la capa es delgada frente a la longitud de
onda. Es la contraparte de modelo de la discusión tubo frente a cámara
reverberante de
[Materiales acústicos](/phonometry/es/guides/materials/).*

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

```python

from phonometry import materials

f = np.geomspace(125.0, 4000.0, 200)
layers = [materials.PorousLayer(0.05, materials.miki(f, 20000.0))]
normal = materials.layered_absorber(f, layers)
diffuse = materials.diffuse_field_absorption(f, layers)

# Una línea, y después la superposición de incidencia normal en los mismos ejes:
ax = diffuse.plot(language="es")
ax.plot(f, normal.absorption, "--", label="Incidencia normal alpha(0)")
ax.legend()
plt.show()
```

</details>

## 5. Paneles ranurados de sonido lento con resonadores de Helmholtz

Un panel rígido perforado por una red periódica de ranuras finas cerradas,
cada ranura cargada en su pared superior por una red de resonadores de
Helmholtz, es un absorbente de reacción local y muy sublongitud de onda
(Jiménez et al. 2017). Los resonadores frenan el sonido dentro de la ranura y
bajan su resonancia muy por debajo de la frecuencia de cuarto de onda, de modo
que un panel de pocos centímetros resuena en las centenas bajas de hercios.
Las pérdidas visco-térmicas en la ranura submilimétrica y en los cuellos de
los resonadores son las que hacen posible la absorción *perfecta*: cuando la
pérdida intrínseca compensa exactamente la fuga de la estructura, el cero del
coeficiente de reflexión cae sobre el eje de frecuencia real y $\alpha = 1$
(acoplamiento crítico).

La matriz de transferencia del panel es la cadena
$T = M_{\Delta l}\,\prod_n (M_s\,M_{HR}^{(n)}\,M_s)$ de medios pasos de ranura
(con impedancia característica de la ranura
$Z_s = \sqrt{\kappa_s \rho_s}/S_s$), resonadores como dispersores puntuales en
derivación $[[1,0],[1/Z_{HR},1]]$ y una corrección de radiación de la ranura.
El coeficiente de reflexión con fondo rígido es
$R = (T_{11}\cos\theta - Z_0 T_{21})/(T_{11}\cos\theta + Z_0 T_{21})$ con
$Z_0 = \rho_0 c_0 / S_0$ y $\alpha = 1 - |R|^2$. La ranura usa los parámetros
visco-térmicos de canal estrecho y los cuellos y cavidades cuadrados la serie
de conducto rectangular de Stinson (1991).

`critical_coupling_design` invierte el modelo: dada una frecuencia y un ángulo
objetivo, ajusta la longitud de la cavidad (que fija la resonancia) y la altura
de la ranura (que fija la pérdida) para que se cumplan las dos condiciones de
adaptación $\mathrm{Re}(Z)\cos\theta = Z_0$ e $\mathrm{Im}(Z) = 0$, colocando
el cero de reflexión sobre el eje real. La geometría devuelta da entonces
$\alpha \approx 1$ a la frecuencia de diseño.

```python

from phonometry import (
    HelmholtzResonator, critical_coupling_design, slit_helmholtz_absorber,
)

base = HelmholtzResonator(
    neck_length=1.0e-3, neck_side=3.0e-3,
    cavity_length=30.0e-3, cavity_side=27.0e-3,
)
design = critical_coupling_design(
    300.0, base, lattice_step=3.0e-2, period=5.0e-2,
)
print(round(design.absorption, 4))          # ~1.0 (absorción perfecta)
print(round(design.slit_height * 1e3, 3))    # altura de ranura resuelta, mm

f = np.linspace(150.0, 500.0, 700)
res = slit_helmholtz_absorber(
    f, design.resonator, slit_height=design.slit_height,
    lattice_step=3.0e-2, period=5.0e-2,
)
res.plot()   # alpha(f) con |R| superpuesto; pico = 1 a 300 Hz
```

La geometría resuelta merece un vistazo antes que la curva de absorción. El
resonador se dibuja con `.plot()` y el resultado del panel con
`.plot_geometry()`, ambos acotados y a escala.

*Los cuatro números que definen el resonador: el lado y la longitud del
cuello fijan la masa móvil y la mayor parte de la pérdida, y el lado y la
longitud de la cavidad fijan la rigidez. `critical_coupling_design` conserva
esta sección y reajusta la longitud de la cavidad para colocar la
resonancia.*

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

```python

from phonometry import HelmholtzResonator

resonator = HelmholtzResonator(
    neck_length=1.0e-3, neck_side=3.0e-3,
    cavity_length=30.0e-3, cavity_side=27.0e-3,
)
resonator.plot(language="es")   # sección acotada, a escala
plt.show()
```

</details>

*Un periodo del diseño resuelto, a escala: el panel entero tiene 30 mm de
profundidad, $\lambda/38$ a 300 Hz, y la ranura submilimétrica que hace toda
la absorción apenas se ve. Esa es justamente la gracia del mecanismo de
sonido lento.*

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

```python

from phonometry import HelmholtzResonator, critical_coupling_design, materials

base = HelmholtzResonator(
    neck_length=1.0e-3, neck_side=3.0e-3,
    cavity_length=30.0e-3, cavity_side=27.0e-3,
)
design = critical_coupling_design(
    300.0, base, lattice_step=3.0e-2, period=5.0e-2,
)

# La función libre dibuja cualquier lista de resonadores; un resultado de
# slit_helmholtz_absorber retiene su geometría, así que res.plot_geometry()
# dibuja el mismo periodo.
materials.plot_slit_absorber_geometry(
    [design.resonator], slit_height=design.slit_height,
    lattice_step=3.0e-2, period=5.0e-2,
    language="es")
plt.show()
```

</details>

*Un resonador, una ranura, un equilibrio entre pérdida y fuga. El diseño con
acoplamiento crítico alcanza $\alpha = 1$ a 300 Hz en un panel de solo
$\lambda/38$ de profundidad; estrechar la ranura sobreamortigua la resonancia
y ensancharla la subamortigua, y ambos bajan el pico por debajo de uno.*

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

```python

from phonometry import (
    HelmholtzResonator, critical_coupling_design, slit_helmholtz_absorber,
)

a, d, f0 = 3.0e-2, 5.0e-2, 300.0
base = HelmholtzResonator(1.0e-3, 3.0e-3, 30.0e-3, 27.0e-3)
design = critical_coupling_design(f0, base, lattice_step=a, period=d)
h0 = design.slit_height

f = np.linspace(150.0, 500.0, 700)
fig, ax = plt.subplots()
for factor, label in [(1.0, "acoplamiento crítico"),
                      (0.6, "ranura estrecha"), (1.7, "ranura ancha")]:
    res = slit_helmholtz_absorber(
        f, design.resonator, slit_height=factor * h0,
        lattice_step=a, period=d,
    )
    ax.plot(f, res.absorption, label=label)
ax.set(xlabel="Frecuencia [Hz]", ylabel="Coeficiente de absorción")
ax.legend()
plt.show()
```

</details>

## Notas prácticas

**Rangos de ajuste.** Delany–Bazley avisa (y extrapola) fuera de
$0{,}01 < X < 1$ y Miki fuera de $0{,}01 < f/\sigma < 1$; los valores por
debajo del rango deben tratarse como cualitativos. JCA necesita cuatro parámetros más pero se comporta
físicamente en todo el rango; con
$\Lambda = \Lambda' = \sqrt{8\alpha_\infty\eta/(\phi\sigma)}$ y
$\alpha_\infty = 1$ sigue a Delany–Bazley dentro del rango de ajuste.

**Reacción local frente a volumétrica.** El solucionador de capas es de
reacción volumétrica (el sonido refracta y viaja dentro de las capas).
`statistical_absorption` supone reacción local, una buena aproximación para
resistividades altas, cámaras compartimentadas o revestimientos resonantes
delgados; para capas porosas gruesas y ligeras integre el modelo volumétrico
con `diffuse_field_absorption` (Mechel secc. D.6).

**Dónde se comprobaron los números.** Ningún estándar rige estos modelos
de predicción; son métodos de libro y de revista implementados en sala
limpia desde las fuentes de las referencias de más abajo. Los modelos están fijados dígito a
dígito a las tablas de coeficientes impresas (Bies tabla D.1, Miki
ecs. 30–34), el solucionador a las formas cerradas anteriores y a la
recuperación por `TransferMatrix` de la
[página del tubo de impedancia](/phonometry/es/guides/materials/), el MPP a
la propia aproximación de Maa (acuerdo declarado de ~6 % con la ec. 2
exacta), a su ejemplo de diseño y a su tabla I, y la integral de Paris a su
forma cerrada de reacción local. El modelo de sonido lento (ranura +
resonador de Helmholtz) está fijado a sus anclas analíticas exactas: el diseño
con acoplamiento crítico alcanza $\alpha = 1$ a la frecuencia de diseño, las
densidades efectivas de la ranura y del conducto cuadrado se reducen a las
resistividades de Poiseuille $12\eta/h^2$ y $28.454\eta/w^2$ cuando
$\omega \to 0$, y los parámetros efectivos tienden a $\rho_0$, $\kappa_0$ al
desvanecerse las capas límite. Cinco erratas encontradas en las fuentes
durante este trabajo están registradas en el
[registro de erratas](https://github.com/jmrplens/phonometry/blob/main/docs/ERRATA.md).

## Qué cubre esta guía

**Cubierto.** Ningún estándar rige estos modelos de predicción: son métodos
de libro y de revista implementados en sala limpia desde Mechel, Bies, Cox y
D'Antonio, Miki (1990), Maa (1998), Johnson, Koplik y Dashen (1987) y
Jiménez et al. (2016/2017), las fuentes listadas arriba. Esto cubre los
modelos de fluido equivalente porosos (`delany_bazley`, `miki`,
`johnson_champoux_allard`), el solucionador multicapa por matrices de
transferencia (`layered_absorber` con `PorousLayer`, `PerforatedPlateLayer`,
`MicroperforatedPlateLayer` y `MembraneLayer`), los coeficientes de
incidencia aleatoria por la integral de Paris (`diffuse_field_absorption`,
`statistical_absorption`) y el absorbente de ranura con resonador de
Helmholtz de acoplamiento crítico (`slit_helmholtz_absorber`,
`critical_coupling_design`).

**No cubierto.** El libro de Cox y D'Antonio trata tanto difusores como
absorbentes, pero esta guía solo implementa la mitad de absorbentes. La
predicción del difusor de gradiente de fase de Schroeder vive en un módulo
aparte (`materials.diffuser_design`), documentada en
[Dispersión superficial, difusión y absorción in situ](/phonometry/es/guides/surface-scattering/).

## Véase también

- [Materiales acústicos](/phonometry/es/guides/materials/): las normas de
  medida con las que conectan estos modelos de predicción, a saber,
  ISO 9053-1/-2 (resistividad al flujo), ISO 10534-1/-2 y ASTM E2611 (tubo
  de impedancia) e ISO 354 / ISO 11654 (absorción de incidencia aleatoria y
  su valoración).
