Ir al contenido

A partir de la resistividad al flujo de un material poroso (la magnitud que mide el banco de flujo) 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 modelo multicapa, las capas resonantes de Maa y la integral de incidencia aleatoria (Paris). Los tres modelos suponen que el esqueleto no se mueve nunca; la página cubre además qué hacer cuando sí lo hace: la corrección de inercia de esqueleto flexible por debajo de la frecuencia de desacoplo, y la capa poroelástica de Biot completa, cuya onda del esqueleto produce una resonancia de cuarto de onda que ningún fluido equivalente puede reproducir. Las contrapartes de medida están en las guías del tubo de impedancia y de la cámara reverberante; la valoración del espectro predicho vive en la sección ISO 11654 de esta última; y los parientes de metamaterial resonante de estas construcciones, paneles ranurados de sonido lento que alcanzan la absorción perfecta en el acoplamiento crítico, tienen su propia guía, Metaabsorbentes.

1. Modelos de fluido equivalente de un material poroso

Sección titulada «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 y un número de onda (convención temporal , de modo que un medio pasivo tiene ).

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 :

con los coeficientes clásicos de lana de roca/fibra de vidrio y un rango de ajuste declarado (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. Miki enuncia su propia ventana de validez en la variable del artículo, : la ventana de Delany–Bazley dividida por , de modo que las dos difieren en un factor de alrededor de 1,2 y no por un desliz de pluma. La biblioteca avisa sobre en delany_bazley y sobre en miki, cada uno frente a su propio rango publicado.

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 , la porosidad , la tortuosidad y las longitudes características viscosa/térmica , dan la densidad efectiva y el módulo de compresibilidad con los límites exactos en continua, a alta frecuencia, y la transición isoterma-adiabática en .

import numpy as np
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
Impedancia característica y número de onda normalizados de un material poroso con resistividad al flujo de 20 kPa s/m2 predichos por el modelo de Miki en una rejilla log-log: las componentes reales e imaginarias caen hacia la unidad y hacia cero al subir la frecuenciaImpedancia característica y número de onda normalizados de un material poroso con resistividad al flujo de 20 kPa s/m2 predichos por el modelo de Miki en una rejilla log-log: las componentes reales e imaginarias caen hacia la unidad y hacia cero al subir 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 y , de modo que una capa delgada solo trabaja donde su espesor es una fracción apreciable de la longitud de onda dentro del material.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

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 , recuperados por la reducción de matriz de transferencia ASTM E2611) se conecta al modelo de capas exactamente igual que uno modelado.

Panel izquierdo: la impedancia característica normalizada de un material de 20 kPa s por metro cuadrado con Delany-Bazley, Miki y Johnson-Champoux-Allard de 20 hercios a 20 kilohercios en ejes log-log, con la ventana de ajuste de 0,01 a 1 en la variable del absorbente sombreada; las tres curvas se superponen dentro de la ventana y se separan por debajo. Panel derecho: la parte real de la impedancia de entrada de una capa de 50 mm con respaldo rígido con los mismos tres modelos, donde la curva de Delany-Bazley se hace negativa por debajo de 74,6 hercios mientras que Miki y JCA siguen positivasPanel izquierdo: la impedancia característica normalizada de un material de 20 kPa s por metro cuadrado con Delany-Bazley, Miki y Johnson-Champoux-Allard de 20 hercios a 20 kilohercios en ejes log-log, con la ventana de ajuste de 0,01 a 1 en la variable del absorbente sombreada; las tres curvas se superponen dentro de la ventana y se separan por debajo. Panel derecho: la parte real de la impedancia de entrada de una capa de 50 mm con respaldo rígido con los mismos tres modelos, donde la curva de Delany-Bazley se hace negativa por debajo de 74,6 hercios mientras que Miki y JCA siguen positivas

Los tres modelos, y lo que cuesta salirse del rango de ajuste. Dentro de la ventana las curvas son prácticamente el mismo material, que es la razón de que los ajustes de un parámetro se sigan usando. Por debajo se separan, y el panel derecho enseña la consecuencia en la magnitud que usa de verdad quien diseña: para esta capa de 50 mm con respaldo rígido, Delany–Bazley devuelve una resistencia negativa por debajo de 74,6 Hz, una capa pasiva que genera energía. La restricción de pasividad de Miki la mantiene positiva, y JCA es física en todo el rango por construcción. El aviso PorousAbsorberWarning salta aquí; los valores extrapolados se devuelven igualmente, así que darse cuenta es cosa de quien llama.

Mostrar el código de esta figura
f_cmp = np.geomspace(20.0, 20000.0, 400)
for name, medium in (
("Delany-Bazley", materials.delany_bazley(f_cmp, 20000.0)),
("Miki", materials.miki(f_cmp, 20000.0)),
):
zs = materials.layered_absorber(
f_cmp, [materials.PorousLayer(0.05, medium)]
).normalized_impedance
below = f_cmp[zs.real < 0.0]
print(name, "Re(Zs) < 0 por debajo de",
f"{below.max():.1f} Hz" if below.size else "nunca")
# Delany-Bazley Re(Zs) < 0 por debajo de 74.6 Hz
# Miki Re(Zs) < 0 nunca

1.1 De dónde salen los cinco números de JCA

Sección titulada «1.1 De dónde salen los cinco números de JCA»

Delany–Bazley y Miki necesitan un número medido. JCA necesita cinco, y quien tenga una muestra real ha de sacar los otros cuatro de algún sitio.

La resistividad al flujo es la única que tiene una norma detrás: ISO 9053-1 o -2, en la guía de resistencia al flujo de aire. Es además la primera que hay que volver a medir cuando un modelo y una medida discrepan.

La porosidad es la porosidad abierta (conectada): la relación entre el volumen de aire y el volumen total, contando solo el aire que no queda encerrado dentro del esqueleto, de modo que una burbuja cerrada de una espuma pertenece al esqueleto y no a (Allard & Atalla 2e, secc. 2.5.1). Se mide por métodos de desplazamiento de gas (Zwikker y Kosten 1949; Champoux et al. 1991) y, para la mayoría de los materiales fibrosos y las espumas de celda abierta, «queda muy cerca de 1», que es la razón de que 0,95–0,99 sea una conjetura de partida defendible y de que rara vez sea el parámetro que importa.

La tortuosidad es una propiedad intrínseca de la microgeometría: es aquello a lo que tiende la densidad efectiva, multiplicado por , cuando se anula el espesor de piel viscoso. Se puede evaluar a partir de medidas de conductividad eléctrica sobre un esqueleto saturado con un fluido conductor (secc. 4.9), o junto con las dos longitudes características mediante transmisión ultrasónica (secc. 5.3.5). Vale 1 para poros rectos normales a la superficie y crece con cualquier dispersión de la velocidad microscópica.

Las longitudes características , son las más difíciles de obtener directamente: el método de referencia es la transmisión ultrasónica en dos gases (helio y aire), y la espuma resuelta del propio libro, con , sale con µm, µm y justo de esa medida (Leclaire et al. 1996, reproducida como fig. 5.5). Fíjate en la relación: ahí , ni 1 ni 3. Es una propiedad de la geometría del poro, así que trátala como algo que hay que encontrar, no que suponer. Cuando no se dispone de un banco ultrasónico, la vía práctica es un ajuste inverso contra una impedancia superficial medida a incidencia normal, la magnitud que devuelve el tubo de impedancia; y cuando ni siquiera eso está al alcance, el recurso en forma cerrada con hace que JCA vuelva a caer sobre Delany–Bazley dentro de su rango de ajuste.

El ajuste inverso son unas pocas líneas, y merece la pena ejecutarlo primero contra una «medida» sintética para poder comprobar la recuperación:

from scipy.optimize import least_squares
f_fit = np.geomspace(200.0, 1600.0, 40) # la banda útil de un tubo de 100 mm
def surface_impedance(sigma, viscous):
"""Zs normalizada de una capa JCA de 50 mm con respaldo rígido."""
medium = materials.johnson_champoux_allard(
f_fit, sigma, porosity=0.98, tortuosity=1.05,
viscous_length=viscous, thermal_length=2.5 * viscous,
)
layer = materials.layered_absorber(f_fit, [materials.PorousLayer(0.05, medium)])
return layer.normalized_impedance
# Hace las veces del resultado de tubo: una probeta cuyos parámetros verdaderos
# conocemos.
measured = surface_impedance(22000.0, 9.0e-5)
def residual(p): # sigma en kPa s/m2, Lambda en um
z = surface_impedance(p[0] * 1e3, p[1] * 1e-6)
return np.concatenate([(z - measured).real, (z - measured).imag])
fit = least_squares(residual, x0=[10.0, 50.0],
bounds=([1.0, 10.0], [200.0, 500.0]))
print(round(fit.x[0] * 1e3), round(fit.x[1], 1)) # 22000 90.0 -- ambos recuperados

Van con él dos advertencias. Ajustar los cinco parámetros a la vez está indeterminado frente a un solo espectro de impedancia: mantén en su valor medido o cercano a la unidad, mantén salvo que haya una razón para moverlo, y deja que el ajuste encuentre y las longitudes. Y cuando una ajustada sale lejos de la respuesta del banco de flujo, cree al banco: un ajuste que ha absorbido un error de montaje dentro de los parámetros del material predecirá mal cualquier otra construcción.

Esqueletos flexibles: cuando el armazón se mueve (Allard & Atalla 11.3.4)

Sección titulada «Esqueletos flexibles: cuando el armazón se mueve (Allard & Atalla 11.3.4)»

Todos los modelos anteriores suponen que el esqueleto no se mueve. Eso solo es cierto por encima de la frecuencia de desacoplo de Zwikker y Kosten,

con la densidad aparente del esqueleto (la densidad de la muestra tal como se pesa, no la del material del que están hechas las fibras). Por debajo de el acoplamiento visco-inercial es lo bastante fuerte para que la onda en los poros arrastre al esqueleto, y un esqueleto ligero (fibra de vidrio de grado aeronáutico, fieltros, velos finos) aporta una inercia nada despreciable. Despreciar la rigidez del esqueleto pero no su masa en la formulación mixta presión-desplazamiento de Biot deja un fluido equivalente con el mismo módulo de compresibilidad y una densidad efectiva corregida (Allard & Atalla 2e, ecs. 11.53-11.55, según Panneton 2007):

donde es la densidad efectiva de esqueleto rígido de cualquiera de los tres modelos anteriores y es la densidad total aparente del material. En qué se ancla esa forma, y con qué debilidad, lo expone la nota de validación del final de este apartado. Tiene dos límites que merece la pena conocer como física:

  • esqueleto pesado: al crecer la corrección se anula y se recupera el resultado de esqueleto rígido;
  • baja frecuencia: la densidad de esqueleto rígido diverge como , mientras que la flexible converge al valor finito y real . Un esqueleto rígido prohíbe el movimiento de cuerpo rígido de la muestra; uno flexible lo permite, y por eso el modelo flexible es el adecuado para una probeta sin sujeción dentro de un tubo de impedancia.

limp_frame recibe un PorousMediumResult y devuelve otro, así que encaja directamente en un PorousLayer de la pila.

Densidad efectiva normalizada frente a la frecuencia de 0 a 2000 hercios para una capa fibrosa blanda, comparando los modelos de esqueleto rígido y flexible. La parte real del esqueleto rígido es una línea discontinua plana en 1,2 mientras su parte imaginaria se hunde por debajo del borde inferior del gráfico bajo la frecuencia de desacoplo de 127 hercios, marcada con una línea vertical punteada. La parte real del esqueleto flexible parte de la densidad total aparente de 25,9 en cero hercios y cae suavemente hasta la línea del esqueleto rígido hacia los 1500 hercios, mientras su parte imaginaria baja hasta menos 12 cerca de 130 hercios y luego se confunde con la curva de esqueleto rígidoDensidad efectiva normalizada frente a la frecuencia de 0 a 2000 hercios para una capa fibrosa blanda, comparando los modelos de esqueleto rígido y flexible. La parte real del esqueleto rígido es una línea discontinua plana en 1,2 mientras su parte imaginaria se hunde por debajo del borde inferior del gráfico bajo la frecuencia de desacoplo de 127 hercios, marcada con una línea vertical punteada. La parte real del esqueleto flexible parte de la densidad total aparente de 25,9 en cero hercios y cae suavemente hasta la línea del esqueleto rígido hacia los 1500 hercios, mientras su parte imaginaria baja hasta menos 12 cerca de 130 hercios y luego se confunde con la curva de esqueleto rígido

La misma capa fibrosa blanda de 50 mm con ambos modelos (Allard & Atalla, tabla 11.2, el juego de datos de entrada de su fig. 11.2). Por encima de la frecuencia de desacoplo las dos predicciones son indistinguibles, que es la comprobación que el propio gráfico hace de la corrección; por debajo, la densidad efectiva de esqueleto rígido se dispara y la flexible se asienta en .

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import (
PorousLayer, decoupling_frequency, johnson_champoux_allard,
layered_absorber, limp_frame, limp_frame_applicable,
)
# Allard & Atalla, tabla 11.2: capa fibrosa blanda, 50 mm.
f = np.linspace(1.0, 2000.0, 800)
rigid = johnson_champoux_allard(
f, 25e3, porosity=0.98, tortuosity=1.02,
viscous_length=90e-6, thermal_length=180e-6,
)
limp = limp_frame(rigid, frame_density=30.0, porosity=0.98)
print(round(decoupling_frequency(25e3, porosity=0.98, frame_density=30.0), 1))
# 127.4
print(round(float(limp.effective_density[0].real), 1)) # 31.2 = rho_t
print(limp_frame_applicable(20e3), limp_frame_applicable(25e3)) # True False
limp.plot(language="es") # Zc y k normalizados del medio corregido
plt.show()
# A mano, la vista de la fig. 11.2:
rho0 = rigid.air_density
fig, ax = plt.subplots()
for medium, style in ((rigid, "--"), (limp, "-")):
ax.plot(f, medium.effective_density.real / rho0, style)
ax.plot(f, medium.effective_density.imag / rho0, style)
ax.set(xlabel="Frecuencia [Hz]", ylabel="rho_e / rho_0", ylim=(-30, 30))
plt.show()

La corrección solo merece la pena donde el esqueleto es realmente flexible. Beranek (1947) exigía entre el módulo de compresibilidad del esqueleto en vacío y el del fluido de los poros; el estudio de interacción esqueleto-estructura de Doutres et al. (2007) lo relajó a , que para el aire ( kPa) es la regla práctica de que el esqueleto ha de ser más blando que unos 20 kPa. limp_frame_applicable aplica cualquiera de los dos umbrales. Ninguno tiene en cuenta el montaje: una espuma fina y ligera desacoplada de una estructura vibrante por una cámara de aire se comporta como flexible muy por encima del límite, y un material adherido a una estructura vibrante no debe tratarse como de esqueleto rígido en absoluto.

La consecuencia práctica, para la capa de 50 mm anterior con respaldo rígido, es un coeficiente de absorción menor en los dos tercios inferiores de una octava y algo mayor a ambos lados de 500 Hz:

import numpy as np
from phonometry import (
PorousLayer, johnson_champoux_allard, layered_absorber, limp_frame,
)
bands = np.array([100, 125, 160, 200, 250, 315, 400, 500, 1000], dtype=float)
rigid = johnson_champoux_allard(
bands, 25e3, porosity=0.98, tortuosity=1.02,
viscous_length=90e-6, thermal_length=180e-6,
)
limp = limp_frame(rigid, frame_density=30.0, porosity=0.98)
for medium in (rigid, limp):
print(layered_absorber(bands, [PorousLayer(0.05, medium)]).absorption.round(2))
# [0.07 0.11 0.17 0.24 0.32 0.43 0.54 0.64 0.88] esqueleto rígido
# [0.04 0.08 0.15 0.24 0.36 0.48 0.61 0.71 0.91] esqueleto flexible

Nota honesta sobre la validación. Allard & Atalla contiene exactamente una tabla de valores calculados en todo el libro, y no es una impedancia superficial: todas las parejas predicción-medida de los capítulos de materiales porosos, la fig. 11.2 incluida, son figuras. Ninguna fuente publicada de las comprobadas (el propio Allard & Atalla, Cox & D’Antonio, Mechel y la bibliografía de Biot y de los ensayos interlaboratorio) tabula tampoco esta magnitud. El anclaje es por tanto la propia ec. 11.55 impresa, transcrita término a término frente a la página. Los dos límites exactos que el libro enuncia en prosa (esqueleto pesado y ) también se comprueban, pero valen menos de lo que parece: una variante de la ecuación con el signo cambiado satisface ambos, y reproduce además la caída como del residuo de esqueleto pesado, así que los límites no distinguen la forma impresa de esa variante. La frecuencia de desacoplo evaluada sobre la lana de vidrio completamente especificada de su tabla 6.1, donde la aritmética pura da 43,27 Hz, es independiente de todo esto.

Esqueletos elásticos: la capa de Biot completa (Allard & Atalla 6 y 11)

Sección titulada «Esqueletos elásticos: la capa de Biot completa (Allard & Atalla 6 y 11)»

El modelo flexible tira la rigidez del esqueleto a la basura. Consérvala y la capa porosa deja de ser un fluido: la teoría de Biot trata el armazón como un sólido elástico acoplado al fluido de los poros mediante un coeficiente de acoplamiento potencial y un coeficiente de acoplamiento inercial, y predice tres ondas en un material isótropo en lugar de una. Dos son de compresión y una de cizalla (Allard & Atalla 2e, cap. 6). Las relaciones tensión-deformación son

y para el caso habitual de un armazón cuyos granos sólidos son mucho más rígidos que el armazón que forman (, cierto en esqueletos de vidrio, roca y polímero) los tres coeficientes elásticos salen del módulo de cizalla , el coeficiente de Poisson y el módulo de compresibilidad del fluido de los poros (ecs. 6.26-6.29):

Con las densidades modificadas , , de la ec. 6.56, los dos números de onda de compresión salen como los autovalores de un problema 2x2 (ecs. 6.67-6.69) y el de cizalla de la ec. 6.83. biot_waves devuelve los tres, junto con las razones entre el desplazamiento del fluido y el del esqueleto, que indican en qué medio viaja cada onda. La onda cuyo es grande es la onda del aire, la que un fluido equivalente ya modela; la otra es la onda del esqueleto, que no tiene ningún equivalente en un fluido.

Panel superior: las partes real e imaginaria de los dos números de onda de compresión de Biot y la parte real del número de onda de cizalla frente a la frecuencia de 50 a 1500 hercios para una capa de lana de vidrio, con el intercambio de raíces de 495 hercios marcado por una línea vertical punteada. Panel inferior: los módulos de las dos razones de velocidad en eje logarítmico, la del aire plana por encima de 42 y la del esqueleto sobre la línea de la unidadPanel superior: las partes real e imaginaria de los dos números de onda de compresión de Biot y la parte real del número de onda de cizalla frente a la frecuencia de 50 a 1500 hercios para una capa de lana de vidrio, con el intercambio de raíces de 495 hercios marcado por una línea vertical punteada. Panel inferior: los módulos de las dos razones de velocidad en eje logarítmico, la del aire plana por encima de 42 y la del esqueleto sobre la línea de la unidad

Las tres ondas que predice la teoría de Biot donde un fluido equivalente predice una, para la lana de vidrio de la tabla 6.1 de Allard & Atalla. El panel inferior es lo que las nombra: nunca baja de 42, así que en la onda del aire se mueve el fluido de los poros y el esqueleto apenas, y esa es la onda que ya describen los modelos de fluido equivalente. se queda en 1, así que en la onda del esqueleto el fluido y el esqueleto se mueven juntos, y ningún fluido equivalente tiene siquiera esa rama. La línea punteada en 495 Hz es donde las dos raíces de compresión del modelo intercambian su lugar; el etiquetado sigue a y no al orden de los autovalores, así que las curvas siguen siendo continuas al cruzarla.

Mostrar el código de esta figura
# El BiotWavesResult de la lana de vidrio de la tabla 6.1. Su .plot() dibuja el
# panel superior; el inferior son dos de sus campos.
f_biot = np.linspace(50.0, 1500.0, 1451)
biot = materials.biot_waves(
materials.johnson_champoux_allard(
f_biot, 40e3, porosity=0.94, tortuosity=1.06,
viscous_length=0.56e-4, thermal_length=1.1e-4,
),
porosity=0.94, tortuosity=1.06, frame_density=130.0,
shear_modulus=2.2e6 * (1 + 0.1j),
)
print(round(float(abs(biot.airborne_velocity_ratio).min()), 1)) # 42.4
print(round(float(abs(biot.frame_borne_velocity_ratio[0])), 3)) # 1.002

biot_waves recibe el fluido equivalente de esqueleto rígido de los poros, normalmente un resultado de johnson_champoux_allard. Es deliberado: la inercia del esqueleto es asunto del propio modelo de Biot, así que pasarle un medio de limp_frame contaría esa inercia dos veces.

La consecuencia que le importa a quien diseña es una resonancia. Una capa pegada a una pared rígida mantiene su esqueleto quieto en la pared y libre en la cara frontal, de modo que la onda del esqueleto resuena a un cuarto de longitud de onda dentro de la capa, en

(ecs. 6.109-6.111), donde es el coeficiente elástico longitudinal del esqueleto en el vacío y su densidad aparente. frame_quarter_wave_resonance la evalúa. Nada en los modelos de esqueleto rígido o flexible puede producir ese pico.

Impedancia superficial normalizada frente a la frecuencia de 200 a 1500 hercios para una capa de lana de vidrio de 100 milímetros pegada a una pared rígida, comparando el fluido equivalente de esqueleto rígido con la capa poroelástica de Biot completa. La parte real del esqueleto rígido cae suavemente de 3 a 1,5 como línea discontinua y su parte imaginaria sube suavemente de menos 3 a menos 0,9 como línea punteada. La parte real de Biot, en cambio, baja hasta 1,5 cerca de 450 hercios y rebota hasta 2,6 cerca de 520 hercios, mientras que la parte imaginaria de Biot alcanza un máximo agudo de menos 0,7 cerca de 480 hercios, ambos rasgos a ambos lados de la resonancia de cuarto de onda del esqueleto de 460 hercios marcada con una línea vertical punteada, y ambas curvas vuelven a las del esqueleto rígido por encima de 700 herciosImpedancia superficial normalizada frente a la frecuencia de 200 a 1500 hercios para una capa de lana de vidrio de 100 milímetros pegada a una pared rígida, comparando el fluido equivalente de esqueleto rígido con la capa poroelástica de Biot completa. La parte real del esqueleto rígido cae suavemente de 3 a 1,5 como línea discontinua y su parte imaginaria sube suavemente de menos 3 a menos 0,9 como línea punteada. La parte real de Biot, en cambio, baja hasta 1,5 cerca de 450 hercios y rebota hasta 2,6 cerca de 520 hercios, mientras que la parte imaginaria de Biot alcanza un máximo agudo de menos 0,7 cerca de 480 hercios, ambos rasgos a ambos lados de la resonancia de cuarto de onda del esqueleto de 460 hercios marcada con una línea vertical punteada, y ambas curvas vuelven a las del esqueleto rígido por encima de 700 hercios

La lana de vidrio de la tabla 6.1 de Allard & Atalla, 100 mm pegada a una pared rígida, con ambos modelos. Lejos de la resonancia las dos son indistinguibles, que es la comprobación que el propio gráfico hace de la capa de Biot; alrededor de ella la predicción poroelástica desarrolla el valle y el pico de la parte real y el máximo agudo de la parte imaginaria que el libro mide y dibuja en su fig. 6.10.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import (
PoroelasticLayer, PorousLayer, biot_waves, frame_elastic_coefficient,
frame_quarter_wave_resonance, johnson_champoux_allard, layered_absorber,
)
# Allard & Atalla, tabla 6.1: lana de vidrio "Domisol Coffrage", 100 mm, pegada.
f = np.linspace(200.0, 1500.0, 1301)
shear = 2.2e6 * (1 + 0.1j) # 220 N/cm2, factor de pérdidas 0,1
med = johnson_champoux_allard(
f, 40e3, porosity=0.94, tortuosity=1.06,
viscous_length=0.56e-4, thermal_length=1.1e-4,
)
print(frame_elastic_coefficient(shear, 0.0)) # (4400000+440000j)
print(round(frame_quarter_wave_resonance(
0.10, shear_modulus=shear, poisson_ratio=0.0, frame_density=130.0), 1))
# 459.9
waves = biot_waves(med, porosity=0.94, tortuosity=1.06,
frame_density=130.0, shear_modulus=shear)
print(round(float(abs(waves.airborne_velocity_ratio[800])), 1)) # 42.4
print(np.round(waves.frame_borne_velocity_ratio[-1], 3)) # (0.811+0.473j)
biot = layered_absorber(f, [PoroelasticLayer(0.10, med, 0.94, 1.06, 130.0, shear)])
rigid = layered_absorber(f, [PorousLayer(0.10, med)])
fig, ax = plt.subplots()
for res, style in ((rigid, "--"), (biot, "-")):
ax.plot(f, res.normalized_impedance.real, style)
ax.plot(f, res.normalized_impedance.imag, style)
ax.set(xlabel="Frecuencia [Hz]", ylabel="Zs / rho0 c0", ylim=(-3, 3))
plt.show()
waves.plot(language="es") # los tres números de onda de Biot
plt.show()

Dentro de una pila, una PoroelasticLayer lleva las seis variables que la teoría necesita, , de modo que layered_absorber pasa de la cadena de dos variables al ensamblado por matriz global del apdo. 11.5 de Allard & Atalla: las capas de fluido y las láminas conservan sus matrices 2x2, cada capa poroelástica entra por las seis amplitudes de onda de sus propios bloques y no por una matriz de transferencia, y ambas se unen mediante las matrices de acoplamiento impresas del apdo. 11.4. Resolver directamente en las amplitudes evita invertir , que es lo que hace tratable un esqueleto muy blando o muy grueso. Dos capas poroelásticas contiguas se acoplan como esqueletos pegados (su ec. 11.67); una lámina junto a una de ellas se acopla como pantalla libre, desacoplada mecánicamente. El transfer_matrix devuelto se rellena con nan en una pila así, porque para ella no existe una matriz de cadena 2x2; la impedancia superficial, el factor de reflexión y la absorción no se ven afectados.

Para la misma capa de 100 mm la resonancia mueve la absorción hasta 0,21 en su punto más agudo; en los centros de tercio de octava el mayor cambio es el 0,12 de 500 Hz:

import numpy as np
from phonometry import (
PoroelasticLayer, PorousLayer, johnson_champoux_allard, layered_absorber,
)
bands = np.array([250, 315, 400, 500, 630, 800, 1000], dtype=float)
med = johnson_champoux_allard(
bands, 40e3, porosity=0.94, tortuosity=1.06,
viscous_length=0.56e-4, thermal_length=1.1e-4,
)
shear = 2.2e6 * (1 + 0.1j)
for layer in (PorousLayer(0.10, med),
PoroelasticLayer(0.10, med, 0.94, 1.06, 130.0, shear)):
print(layered_absorber(bands, [layer]).absorption.round(2))
# [0.55 0.58 0.62 0.65 0.69 0.74 0.78] esqueleto rígido
# [0.53 0.56 0.61 0.77 0.71 0.74 0.78] Biot poroelástico

La capa compensa los cinco parámetros adicionales cuando el esqueleto es lo bastante rígido y pesado como para resonar en la banda de interés (lana mineral densa, espumas estructurales), cuando el material está pegado a una placa que lo sacude directamente, o cuando una impedancia medida muestra un rasgo que ningún fluido equivalente explica. Para una manta ligera y blanda al aire, limp_frame es mejor opción.

Nota honesta sobre la validación. No existe ninguna tabla publicada de ni de para una capa de Biot completamente especificada, ni aquí ni en ninguna otra fuente comprobada, así que este modelo no se puede anclar dígito a dígito como sí se hace con los módulos basados en normas. Lo que lo ancla, en orden decreciente de fuerza: el límite de esqueleto rígido, en el que hacer el esqueleto infinitamente rígido y pesado debe reproducir el fluido equivalente JCA, cuya conformidad está anclada en dígitos publicados, y lo hace con un residuo que cae exactamente como la inversa de la rigidez a lo largo de ocho décadas, con cuatro ángulos de incidencia y con y sin respaldo rígido; el límite flexible, en el que llevar la rigidez a cero reproduce limp_frame; la coincidencia a precisión de máquina entre las dos derivaciones independientes que da el libro, la forma cerrada de la ec. 6.107 del cap. 6 y el ensamblado por matriz global del cap. 11; y los tres números calculados que el libro sí imprime en prosa para la lana de vidrio de la tabla 6.1, los tres reproducidos: la onda del aire cambia de raíz en 495 Hz, por encima de 50 Hz y cae de 1,0 en 50 Hz a 0,82 en 1500 Hz. Este último lo reproduce , no , aunque la frase impresa diga «el módulo del cociente»: el modelo da , cuya parte real queda a un 1,1 % del valor impreso mientras su módulo, 0,939, se aparta un 14,5 %. Queda registrado en Erratas, junto con el barrido de parámetros que no logra acercar a 0,82. El pico de impedancia de la muestra más delgada del libro está impreso como 860 Hz y sale en 863,5 Hz con la regla del máximo de . Todo lo demás, incluido el comportamiento en incidencia oblicua más allá de su límite de esqueleto rígido, descansa en formas cerradas y en identidades estructurales, no en dígitos publicados.

2. Predicción multicapa por matrices de transferencia

Sección titulada «2. Predicción multicapa por matrices de transferencia»

Cada capa fluida de espesor 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)

con el número de onda en profundidad por la ley de Snell y . Las láminas resonantes delgadas entran como impedancias en serie . Cerrar la cadena con una pared rígida (o aire libre, o cualquier impedancia) da la impedancia de superficie, el factor de reflexión y . Una única capa porosa sobre pared rígida se reduce a la forma cerrada de libro (Mechel secc. D.3, ec. 1).

Detrás de las matrices hay una sola imagen física: una capa porosa con respaldo rígido es un fluido equivalente resumido en cinco números medibles. La capa de 50 mm de abajo, evaluada con el modelo JCA de cinco parámetros al que pertenecen esos números, absorbe el 91 % de una onda de 1 kHz en incidencia normal; el código que sigue pasa la misma capa por el ajuste de Miki de un parámetro, que queda algo más alto (0,937), una imagen honesta de la separación entre ambos modelos.

Sección de un absorbente poroso: una capa de lana mineral de 50 mm contra una terminación rígida, una onda plana en incidencia normal llegando por la izquierda, una pequeña flecha reflejada con el 9 % de la energía y la onda transmitida decayendo dentro de la capa, un círculo ampliado con el esqueleto de fibras y los poros llenos de aire, y el juego de parámetros JCA anotado con resistividad al flujo de 20 kPa s/m2, porosidad 0,98, tortuosidad 1,0 y longitudes características de 87 micrómetros, que da un coeficiente de absorción de 0,91 a 1 kHzSección de un absorbente poroso: una capa de lana mineral de 50 mm contra una terminación rígida, una onda plana en incidencia normal llegando por la izquierda, una pequeña flecha reflejada con el 9 % de la energía y la onda transmitida decayendo dentro de la capa, un círculo ampliado con el esqueleto de fibras y los poros llenos de aire, y el juego de parámetros JCA anotado con resistividad al flujo de 20 kPa s/m2, porosidad 0,98, tortuosidad 1,0 y longitudes características de 87 micrómetros, que da un coeficiente de absorción de 0,91 a 1 kHz
import numpy as np
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

Separar la capa de la pared. La jugada más habitual del diseño de absorbentes no es más material, es una cámara, y la razón está en la condición de contorno. Una capa porosa disipa a través de la velocidad de partícula de sus poros, y un respaldo rígido fuerza esa velocidad a cero en la pared, así que una capa delgada frente a la longitud de onda queda en la zona muerta y no hace casi nada en baja frecuencia. Sepárala de la pared y quedará cerca del máximo de velocidad a la frecuencia en la que la cámara es un cuarto de longitud de onda, , que son 858 Hz para una cámara de 100 mm (la propia presencia de la capa baja todavía más la ganancia útil). Merece la pena ver la aritmética:

# La misma manta de 50 mm, pegada a la pared y separada de ella.
bands_gap = np.array([125.0, 250.0, 500.0, 1000.0])
med_gap = materials.miki(bands_gap, 20000.0)
flat = materials.layered_absorber(bands_gap, [materials.PorousLayer(0.05, med_gap)])
spaced = materials.layered_absorber(
bands_gap, [materials.PorousLayer(0.05, med_gap), materials.AirLayer(0.10)]
)
thick = materials.layered_absorber(bands_gap, [materials.PorousLayer(0.15, med_gap)])
print(np.round(flat.absorption, 2)) # [0.09 0.26 0.62 0.94] 50 mm en la pared
print(np.round(spaced.absorption, 2)) # [0.44 0.78 0.9 0.77] 50 mm + cámara 100 mm
print(np.round(thick.absorption, 2)) # [0.52 0.71 0.8 0.89] 150 mm en la pared

A 250 Hz la capa de 50 mm sobre una cámara de 100 mm supera a 150 mm de manta maciza, 0,78 frente a 0,71, con un tercio del material y los mismos 150 mm de profundidad total. La jugada trae dos límites: la ganancia desaparece por encima de la primera media onda de la cámara, donde la capa vuelve a caer en un nodo de velocidad (se ve en la curva separada quedando por debajo de la pegada a 1 kHz), y sobre una superficie grande hay que compartimentar la cámara o el campo se propaga lateralmente por dentro en incidencia oblicua. Esta es la contraparte de predicción de los montajes tipo E-xxx y G-xxx de ISO 354, cuyo sufijo es exactamente esta .

El modelo multicapa evalúa las magnitudes físicas mediante una recursión de admitancias numéricamente robusta (inmune al desbordamiento de las entradas matriciales en bruto en capas extremadamente atenuantes) y aun así expone la matriz de cadena completa (recíproca por construcción, ) en transfer_matrix, lista para la maquinaria ASTM E2611 (TransferMatrix).

Absorción predicha en incidencia normal de cuatro construcciones de 50 mm: una capa porosa absorbe en banda ancha desde frecuencias medias, un panel microperforado sobre cámara presenta su pico cerca de 700 Hz, un panel perforado sobre poroso cerca de 500 Hz y una membrana sobre cámara con poroso cerca de 175 Hz; las líneas verticales punteadas marcan las resonancias de forma cerrada de Helmholtz y de membranaAbsorción predicha en incidencia normal de cuatro construcciones de 50 mm: una capa porosa absorbe en banda ancha desde frecuencias medias, un panel microperforado sobre cámara presenta su pico cerca de 700 Hz, un panel perforado sobre poroso cerca de 500 Hz y una membrana sobre cámara con poroso cerca de 175 Hz; las líneas verticales punteadas marcan las resonancias de forma cerrada de Helmholtz y de membrana

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

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.

Sección a escala de un absorbente de tres capas: una placa microperforada de 1 mm al frente, una cámara de aire de 30 mm y una capa porosa de 50 mm contra el respaldo rígido a la derecha, con cada espesor acotado y el sonido incidente llegando desde la izquierdaSección a escala de un absorbente de tres capas: una placa microperforada de 1 mm al frente, una cámara de aire de 30 mm y una capa porosa de 50 mm contra el respaldo rígido a la derecha, con cada espesor acotado y el sonido incidente llegando desde la izquierda

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

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

Sección titulada «3. Láminas resonantes: perforado, microperforado, membrana»

Panel perforado. Los tapones de aire de los orificios son la masa de un resonador de Helmholtz: con el área abierta , el factor de corrección de extremo por extremo de orificio y la resistencia viscotérmica (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 (tabla 7.1), válido para cualquier área abierta. Para una cámara poco profunda la resonancia es (ec. 7.4). En esas dos expresiones, es el espesor de la placa, el radio del orificio, el área abierta (área de orificios sobre área de panel), la viscosidad cinemática del aire, el espesor de placa con corrección de extremo y la profundidad de la cámara tras el panel.

Por qué un panel perforado necesita material poroso detrás. La fórmula de resonancia coloca el pico; la resistencia decide su altura y su anchura, y ahí es donde un panel perforado corriente es flojo. Sus orificios miden milímetros, así que la pérdida viscosa de cada tapón es una fracción pequeña de : sobre una cámara vacía la construcción es un resonador de Q alta que absorbe en una banda estrecha y no hace casi nada fuera de ella. El arreglo habitual es poner la resistencia que falta dentro de la cámara, una capa porosa o un velo resistivo, lo que baja y ensancha el pico hacia la condición de adaptación. Esa es exactamente la razón de que el diseño «perforado + poroso» de la figura de arriba lleve un PorousLayer detrás de la placa, y de que el MPP de más abajo pueda prescindir de él: sus orificios submilimétricos aportan ellos mismos la resistencia. De ahí salen dos consecuencias de diseño: colocar la capa porosa donde la velocidad de partícula es alta, es decir, contra la placa perforada y no tumbada sobre el respaldo rígido, y apuntar a una resistencia total al flujo del orden de . Ese mismo enunciado leído como adaptación de impedancia es la condición de acoplamiento crítico de la guía de metaabsorbentes.

Las tres láminas toman argumentos posicionales, y la dimensión del orificio es un radio, no un diámetro: la mitad del orificio taladrado. Equivocarse ahí calcula la resonancia y la absorción de pico de un orificio del doble del tamaño real.

ClaseParámetroUnidadesNotas
PerforatedPlateLayerthicknessmEspesor de la placa
hole_radiusmRadio del orificio , la mitad del diámetro taladrado
open_areaRazón de perforación = área de orificios / área de panel
end_correction por extremo de orificio; None usa el ajuste de interacción de Fok
MicroperforatedPlateLayerthicknessmEspesor de la placa
hole_radiusmRadio del orificio
open_areaRazón de perforación
end_correctionPor defecto 0.85, la reactancia de pistón de Maa
MembraneLayersurface_densitykg/m²Masa por unidad de superficie
resistancePa·s/mResistencia al flujo añadida; por defecto 0.0

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),

más las correcciones de extremo de la ec. 5 (resistencia superficial y reactancia de pistón en total), dividida por el área abierta. La constante de perforado (proporcional al radio del orificio sobre el espesor de la capa límite viscosa) lo gobierna todo: en la resonancia la absorción máxima es y el ancho de banda de media absorción es (Maa, ecs. 9–21, tabla I).

import numpy as np
from phonometry import materials
# Maa (1998), fig. 5: diámetro de orificio 0,2 mm (o sea hole_radius = 0,1 mm),
# placa de 0,2 mm de espesor, 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
Absorción predicha del panel microperforado de Maa sobre una cámara de 6 cm: un pico resonante ancho que alcanza alpha 0,96 cerca de 677 Hz, con el módulo del factor de reflexión como su imagen especular, y un rasgo secundario estrecho cerca de la resonancia de media onda de la cámara a 2,9 kHzAbsorción predicha del panel microperforado de Maa sobre una cámara de 6 cm: un pico resonante ancho que alcanza alpha 0,96 cerca de 677 Hz, con el módulo del factor de reflexión como su imagen especular, y un rasgo secundario estrecho cerca de la resonancia de media onda de la cámara a 2,9 kHz

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.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import materials
# Maa (1998), fig. 5: diámetro de orificio 0,2 mm (o sea hole_radius = 0,1 mm),
# placa de 0,2 mm de espesor, 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()

Membrana. Una lámina impermeable flexible es la masa superficial (Cox ec. 7.14; Bies ec. D.96); sobre una cámara resuena en el clásico (adiabático; 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.

Las clases de capa de arriba entregan su impedancia de transferencia al modelo multicapa, y el modelo devuelve , que es como se evalúa una lámina resonante, no como se diseña. Toda relación de diseño de esta sección está escrita en y , así que las mismas impedancias están expuestas por separado: perforated_plate_impedance, microperforated_plate_impedance y membrane_impedance, que devuelven en Pa·s/m antes de normalizar, más perforation_end_correction para el factor de Fok. Con ellas el argumento de diseño se cierra sobre sí mismo: la reactancia cruza la de la cámara en la resonancia, y la resistencia ahí fija tanto la altura del pico como el ancho de banda:

# La geometría de la propia fig. 5 de Maa, leída como impedancia en su pico de
# 677,5 Hz.
rho_c = 1.205 * 343.0
f_peak = np.array([677.5])
z_mpp = materials.microperforated_plate_impedance(
f_peak, thickness=0.2e-3, hole_radius=0.1e-3, open_area=eps
)
r_mpp = float(z_mpp.real[0]) / rho_c
print(round(r_mpp, 3), round(float(z_mpp.imag[0]) / rho_c, 3)) # 1.531 1.077
print(round(4 * r_mpp / (1 + r_mpp) ** 2, 3)) # 0.956 = el alpha del pico de arriba
# El mismo panel con orificios milimétricos: un orden de magnitud menos de
# resistencia, de ahí el pico estrecho que necesita respaldo poroso.
z_perf = materials.perforated_plate_impedance(
f_peak, thickness=0.006, hole_radius=0.0025, open_area=0.05
)
print(round(float(z_perf.real[0]) / rho_c, 4)) # 0.0925, 16 veces menor
# Una membrana es reactancia pura salvo que se aporte una resistencia de fijación.
print(np.round(materials.membrane_impedance(f_peak, surface_density=2.0), 1))
# [0.+8513.6j]
# La interacción de Fok: los orificios apretados acortan el tapón efectivo.
print(round(materials.perforation_end_correction(0.05), 3)) # 0.575 frente a 0.85
Resistencia y reactancia normalizadas del panel microperforado de Maa frente a la frecuencia de 100 hercios a 4 kilohercios, con la reactancia de cotangente negativa de su cámara de 60 mm dibujada como una segunda curva. Las dos reactancias se cruzan cerca de 677 hercios, donde la resistencia vale 1,53, y un eje acompañante muestra la absorción alcanzando 0,96 exactamente a esa frecuenciaResistencia y reactancia normalizadas del panel microperforado de Maa frente a la frecuencia de 100 hercios a 4 kilohercios, con la reactancia de cotangente negativa de su cámara de 60 mm dibujada como una segunda curva. Las dos reactancias se cruzan cerca de 677 hercios, donde la resistencia vale 1,53, y un eje acompañante muestra la absorción alcanzando 0,96 exactamente a esa frecuencia

Toda la regla de diseño de esta sección en una imagen. La reactancia del panel y la de la cámara se cruzan en 677 Hz: ese cruce es la resonancia, y la coloca la geometría. Lo que ocurre en el cruce lo fija la resistencia de ahí, , que da , el pico que calcula la pila, recuperado a partir de dos números. Un panel con orificios milimétricos tiene una dieciséis veces menor, así que su cruce sería igual de agudo y mucho menos absorbente, que es todo el argumento a favor de los orificios submilimétricos o del respaldo poroso.

Mostrar el código de esta figura
f_sheet = np.geomspace(100.0, 4000.0, 400)
z_sheet = materials.microperforated_plate_impedance(
f_sheet, thickness=0.2e-3, hole_radius=0.1e-3, open_area=eps
) / rho_c
cavity = -1.0 / np.tan(2.0 * np.pi * f_sheet * 0.06 / 343.0)
print(round(float(z_sheet.real[0]), 2), round(float(cavity[0]), 2))

La pila de matrices de transferencia supone una construcción infinita, lateralmente uniforme y de reacción local. Para que esa hipótesis sobreviva en obra tienen que cumplirse cinco cosas.

  1. Compartimenta o rellena la cámara que hay tras una lámina resonante. El modelo unidimensional y la hipótesis de reacción local necesitan los dos celdas pequeñas frente a la longitud de onda a la frecuencia de diseño. Una cámara sin compartimentar tras una lámina perforada deja que el campo se propague lateralmente, lo que convierte un diseño de reacción local en uno de reacción volumétrica y suele ensanchar y bajar el pico.
  2. Sella el perímetro contra el soporte, o la cámara queda ventilada y la resonancia para la que se sintonizó no existe.
  3. Comprueba el área abierta contra la lámina que realmente compraste. La del modelo es la relación geométrica para orificios de diámetro a un paso . Las rebabas, la pintura y los orificios submilimétricos parcialmente obturados mueven directamente la resistencia del MPP, y la resistencia es de lo que depende la altura del pico.
  4. Monta la membrana flexible y sin tensión. Sujetarla y rigidizarla añade una fuerza recuperadora que el modelo no tiene, y empuja por encima de la estimación .
  5. No des el respaldo por supuesto. La pila dibujada termina en una pared rígida; una construcción sobre un soporte elástico necesita que esa impedancia de respaldo se pase explícitamente con termination= en lugar de dejarla en "rigid".

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)

evaluada por cuadratura de Gauss–Legendre en diffuse_field_absorption (angle_limit por defecto 90°; se usan truncamientos a 75–87°). Ese truncamiento no es decoración y merece una regla de decisión. El integrando pondera sobre todo los ángulos oblicuos, y es justo cerca de la incidencia rasante donde la teoría del plano infinito deja de describir un ensayo real: una probeta finita y montada no se comporta como una capa ilimitada a 85°, y un campo difuso sobre una muestra de 10 a 12 m² sencillamente no entrega la energía rasante que supone la integral completa, así que el resultado sin truncar tiende a quedar por debajo de los valores medidos. Lo que hace la práctica se sigue de ahí: truncar en torno a 78° cuando la intención es compararse con una medición en cámara reverberante, y mantener 90° cuando la intención es el coeficiente teórico de incidencia aleatoria de una superficie infinita. Un truncado es una magnitud de ingeniería ajustada y no una magnitud física, así que el límite debe citarse junto al número: el fragmento de abajo imprime el tamaño de la decisión. 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 ).

import numpy as np
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
# Cuánto vale el truncamiento, sobre la misma capa.
truncated = materials.diffuse_field_absorption(f, layers, angle_limit=np.radians(78.0))
print(np.round(truncated.absorption - diffuse.absorption, 3))
# [-0.001 0.01 0.019 0.018] unas centésimas, y van en el sentido correcto
Absorción de incidencia aleatoria de una capa porosa de 50 mm por la integral de Paris comparada con su coeficiente a incidencia normal: la curva de campo difuso queda claramente por encima de la de incidencia normal por debajo de 700 Hz y ambas convergen hacia 0,95 a alta frecuenciaAbsorción de incidencia aleatoria de una capa porosa de 50 mm por la integral de Paris comparada con su coeficiente a incidencia normal: la curva de campo difuso queda claramente por encima de la de incidencia normal por debajo de 700 Hz y ambas convergen hacia 0,95 a alta frecuencia

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 supera al 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 Medida y clasificación de la absorción sonora.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
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()

No compares esto con el de una hoja de características. La integral de Paris se evalúa sobre una capa infinita y lateralmente uniforme. Una medición ISO 354 se hace sobre una probeta montada de 10 a 12 m² cuyos bordes difractan energía hacia dentro, que es la razón de que el medido supere 1 de forma rutinaria y de que el mismo producto salga distinto en dos salas. Espera que el valor medido corra por encima del predicho en torno a 0,1 a 0,2 en las bandas medias, y más cuanto menor sea la probeta y mayor su relación perímetro-superficie. El corolario para el ajuste de modelos es la mitad importante: ajusta los parámetros del material contra una medida de tubo, o contra la predicción difusa de un modelo en el que confíes, y nunca contra el de una hoja de características, porque el excedente de tamaño finito se absorbería dentro de una resistividad al flujo equivocada y se propagaría después a todas las construcciones que predigas con ella. Para lo que la predicción sirve es para comparar construcciones, para dimensionar un tratamiento antes de que exista y para alimentar un cálculo de sala que espera entrada de incidencia aleatoria; una especificación escrita contra un medido sigue teniendo que cerrarse con una medida.

Panel izquierdo: coeficiente de absorción frente al ángulo de incidencia de 0 a 90 grados para una capa porosa de 50 mm con respaldo rígido a 250, 500, 1000 y 2000 hercios, cada curva continua de reacción volumétrica acompañada por una discontinua de reacción local, con el truncamiento de 78 grados marcado. Panel derecho: el coeficiente de campo difuso integrado frente al coeficiente estadístico de reacción local a lo largo de la frecuencia, con el techo de 0,951 de la forma cerrada dibujado como línea punteadaPanel izquierdo: coeficiente de absorción frente al ángulo de incidencia de 0 a 90 grados para una capa porosa de 50 mm con respaldo rígido a 250, 500, 1000 y 2000 hercios, cada curva continua de reacción volumétrica acompañada por una discontinua de reacción local, con el truncamiento de 78 grados marcado. Panel derecho: el coeficiente de campo difuso integrado frente al coeficiente estadístico de reacción local a lo largo de la frecuencia, con el techo de 0,951 de la forma cerrada dibujado como línea punteada

El integrando que consume el promedio de Paris, y las dos maneras de promediarlo. Izquierda: de la misma capa de 50 mm a cuatro frecuencias, cada curva continua de reacción volumétrica (layered_absorber(..., angle=theta), en la que las capas fluidas refractan) acompañada por la curva de reacción local obtenida de la misma impedancia superficial a incidencia normal. Las dos coinciden en incidencia normal por construcción, se separan en el intervalo de 40° a 75° donde el integrando de Paris lleva la mayor parte de su peso (el modelo volumétrico absorbe más, porque la onda refracta y viaja más lejos dentro de la capa) y vuelven a converger cuando ambas se desploman hacia cero en rasante. La elección del modelo de reacción es, por tanto, una elección sobre la parte de la integral que más importa. Derecha: los dos resultados integrados a lo largo de la frecuencia, con el máximo de 0,951 de la forma cerrada de reacción local dibujado como un techo que ninguna impedancia pasiva puede superar.

Mostrar el código de esta figura
# alpha(theta) a una frecuencia, de las dos maneras.
theta = np.radians(np.linspace(0.0, 88.0, 60))
f_one = np.array([1000.0])
layers_one = [materials.PorousLayer(0.05, materials.miki(f_one, 20000.0))]
bulk = [float(materials.layered_absorber(f_one, layers_one, angle=float(t)).absorption[0])
for t in theta]
z_normal = materials.layered_absorber(f_one, layers_one).normalized_impedance[0]
local = [1.0 - abs((z_normal * np.cos(t) - 1.0) / (z_normal * np.cos(t) + 1.0)) ** 2
for t in theta]
print(round(bulk[0], 3), round(bulk[-1], 3)) # 0.937 0.161
print(round(local[0], 3), round(local[-1], 3)) # 0.937 0.138

Las capas clásicas de arriba absorben con volumen o con una cavidad de cuarto de onda. Sus parientes de metamaterial resonante, paneles rígidos de ranuras submilimétricas cargadas con resonadores de Helmholtz que ralentizan el sonido y alcanzan la absorción perfecta () en el acoplamiento crítico con paneles de solo de profundidad, se mudaron a su propia guía: Metaabsorbentes cubre el modelo de matrices de transferencia, el diseño por acoplamiento crítico y la comprobación cruzada FDTD de la celda mallada.

Rangos de ajuste. Delany–Bazley avisa (y extrapola) fuera de y Miki fuera de ; 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 y sigue a Delany–Bazley dentro del rango de ajuste.

Esqueleto rígido o flexible. Todos los modelos de fluido equivalente anteriores suponen un esqueleto inmóvil, lo que solo se cumple por encima de la frecuencia de desacoplo . Por debajo, un esqueleto ligero se mueve con el fluido de los poros, y limp_frame añade su inercia (Allard & Atalla, ecs. 11.53-11.55). Úsalo con fieltros, velos y fibra de vidrio ligera, con cualquier material medido sin sujeción en un tubo de impedancia y siempre que el esqueleto en vacío sea más blando que unos 20 kPa (limp_frame_applicable); no lo uses, ni tampoco el modelo rígido, con un material adherido a una estructura vibrante. Cuando el esqueleto es lo bastante rígido y pesado como para resonar en la banda de interés no vale ningún fluido equivalente: usa una PoroelasticLayer y la teoría de Biot completa.

Reacción local frente a volumétrica. El modelo 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 integra 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 modelo multicapa a las formas cerradas anteriores y a la recuperación por TransferMatrix de la página del tubo de impedancia, 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. Las erratas encontradas en las fuentes durante este trabajo están registradas en el registro de erratas.

  • Cubierto

    Los métodos de libro y de revista de Mechel, Bies, Cox y D’Antonio, Miki (1990), Maa (1998) y Johnson, Koplik y Dashen (1987), implementados en sala limpia como se describe arriba, junto con la teoría de Biot de los capítulos 6 y 11 de Allard y Atalla. Esto cubre los modelos de fluido equivalente porosos (delany_bazley, miki, johnson_champoux_allard, limp_frame), la capa poroelástica (biot_waves, biot_surface_impedance, PoroelasticLayer), el modelo multicapa por matrices de transferencia (layered_absorber con AirLayer, PorousLayer, PoroelasticLayer, PerforatedPlateLayer, MicroperforatedPlateLayer y MembraneLayer) y los coeficientes de incidencia aleatoria por la integral de Paris (diffuse_field_absorption, statistical_absorption). Las impedancias de transferencia de lámina que consumen las clases de capa también están expuestas por separado, que es como se diseña una lámina resonante en vez de solo evaluarla: perforated_plate_impedance, microperforated_plate_impedance, membrane_impedance y perforation_end_correction.

  • No cubierto

    Aquí no se mide nada: los cinco parámetros de JCA, el módulo de cizalla y el coeficiente de Poisson del esqueleto y la geometría de la lámina son todos entradas, y la sección 1.1 dice de dónde salen sin implementar ninguno de esos métodos de caracterización (solo se muestra el ajuste inverso contra una impedancia medida, y eso es scipy.optimize, no esta biblioteca). Las reglas de construcción del final de la sección 3 son práctica de ingeniería sin norma detrás, y la diferencia de tamaño finito entre un predicho y un medido se enuncia pero no se modela: nada de aquí reproduce el efecto de borde. 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 rejilla de fase de Schroeder vive en un módulo aparte (materials.diffusers.design), documentada en Difusores y sus coeficientes y, para los paneles en sublongitud de onda profunda cargados con resonadores, en Metadifusores. El absorbente de ranura con resonador de Helmholtz de acoplamiento crítico (slit_helmholtz_absorber, critical_coupling_design) es el tema de Metaabsorbentes.

  • Allard, J. F. y Atalla, N. (2009). Propagation of Sound in Porous Media: Modelling Sound Absorbing Materials (2.ª ed.). Wiley. https://doi.org/10.1002/9780470747339Capítulo 6: la teoría de Biot de un material poroso de esqueleto elástico, sus coeficientes elásticos, sus dos ondas de compresión y su onda de cizalla, y la impedancia de superficie y la resonancia de cuarto de onda del esqueleto de una capa con fondo rígido (ecs. 6.107-6.111). Capítulo 11: el método de matrices de transferencia, la matriz de capa poroelástica de seis variables (tabla 11.1), las matrices de acoplamiento (apdo. 11.4) y el ensamblado global (apdo. 11.5). Apartado 11.3.4: los límites de esqueleto rígido y blando de la teoría de Biot, la frecuencia de desacoplo y la densidad efectiva blanda (ecs. 11.53-11.55, según Panneton 2007). ISBN 978-0-470-74661-5.
  • Attenborough, K. y Van Renterghem, T. (2021). Predicting outdoor sound (2.ª ed.). CRC Press. https://doi.org/10.1201/9780429470806Capítulo 5: modelos de impedancia de suelos, incluida la familia JCA.
  • Bies, D. A., Hansen, C. H. y Howard, C. Q. (2017). Engineering noise control (5.ª ed.). CRC Press. https://doi.org/10.1201/9781351228152Apéndice D: propiedades de materiales porosos, juegos de coeficientes de la tabla D.1 y las recursiones de construcciones en capas D.91-D.99.
  • Cox, T. J. y D'Antonio, P. (2017). Acoustic absorbers and diffusers: Theory, design and application (3.ª ed.). CRC Press. https://doi.org/10.1201/9781315369211Modelado por matrices de transferencia (secc. 2.6), modelos porosos (secc. 6.5) y ecuaciones de diseño de absorbentes resonantes (seccs. 7.3/7.5).
  • Delany, M. E. y Bazley, E. N. (1970). Acoustical properties of fibrous absorbent materials. Applied Acoustics, 3(2), 105-116. https://doi.org/10.1016/0003-682X(70)90031-9Las relaciones empíricas originales y su validez declarada.
  • Hopkins, C. (2007). Sound insulation. Butterworth-Heinemann. https://doi.org/10.4324/9780080550473Sección 1.3.2.2: el modelo de gas equivalente y la forma SI de Delany-Bazley.
  • Johnson, D. L., Koplik, J. y Dashen, R. (1987). Theory of dynamic permeability and tortuosity in fluid-saturated porous media. Journal of Fluid Mechanics, 176, 379-402. https://doi.org/10.1017/S0022112087000727El modelo de tortuosidad dinámica tras la densidad efectiva JCA.
  • Maa, D.-Y. (1998). Potential of microperforated panel absorber. The Journal of the Acoustical Society of America, 104(5), 2861-2866. https://doi.org/10.1121/1.423870La impedancia exacta del MPP (ec. 2), las correcciones de extremo, las fórmulas de diseño y el ejemplo de la fig. 5 fijado en los tests.
  • Mechel, F. P. (Ed.). (2008). Formulas of acoustics (2.ª ed.). Springer. https://doi.org/10.1007/978-3-540-76833-3Secciones D.3-D.6 (reflexión en capas, esquema multicapa, integrales de campo difuso) y G.11 (relaciones empíricas de porosos).
  • Miki, Y. (1990). Acoustical properties of porous materials — Modifications of Delany-Bazley models. Journal of the Acoustical Society of Japan (E), 11(1), 19-24. https://doi.org/10.1250/ast.11.19La regresión positivo-real implementada en miki.