Ir al contenido

Ruido de helicópteros: el método del hemisferio

Normas aplicables: ECAC.CEAC Doc 32Research Project NOISE SC01EUR 25379 ENReferencias: Chien y Soroka 1975Delany y Bazley 1970

El ruido de los helicópteros es muy directivo, así que el método de ECAC Doc 32 describe la fuente con un hemisferio de ruido: niveles de presión acústica en bandas de tercio de octava sobre una malla esférica de acimut y ángulo polar , definidos a una distancia de referencia fija de 60 m en condiciones atmosféricas de referencia de la OACI. Situar esa fuente en un receptor añade el ajuste de propagación .

El EPNL que calcula esta página es la misma magnitud que pide la certificación de ala fija; lo único que cambia es la descripción de la fuente. El Capítulo 8 del Anexo 16 de la OACI hace volar el helicóptero nivelado a 150 m sobre un micrófono central, con otros dos a 150 m a cada lado.

Certificación de ruido de helicópteros en sobrevuelo del Capítulo 8 del Anexo 16 de la OACI: vista lateral de un helicóptero en vuelo nivelado a 150 m, 492 ft, justo sobre un micrófono central en el suelo, con la regla de velocidad de referencia de 0,9 VH, y un recuadro en planta donde la trayectoria cruza una línea de tres micrófonos, uno en la trayectoria y dos a 150 m a cada lado; las notas indican al menos seis pasadas repartidas por igual entre viento en cara y en cola, EPNL en EPNdB en los tres puntos, micrófonos a 1,2 m del suelo y los 45 grados de elevación con unos 212 m de distancia oblicua al par lateral en el instante de la verticalCertificación de ruido de helicópteros en sobrevuelo del Capítulo 8 del Anexo 16 de la OACI: vista lateral de un helicóptero en vuelo nivelado a 150 m, 492 ft, justo sobre un micrófono central en el suelo, con la regla de velocidad de referencia de 0,9 VH, y un recuadro en planta donde la trayectoria cruza una línea de tres micrófonos, uno en la trayectoria y dos a 150 m a cada lado; las notas indican al menos seis pasadas repartidas por igual entre viento en cara y en cola, EPNL en EPNdB en los tres puntos, micrófonos a 1,2 m del suelo y los 45 grados de elevación con unos 212 m de distancia oblicua al par lateral en el instante de la vertical

La biblioteca implementa el método, no los datos: con phonometry no se distribuye ninguna base de datos de hemisferios, y no hay lector de ficheros NORAH, así que los arrays de más abajo los tiene que montar quien lee. Salen de dos sitios. Uno es una campaña de ensayos en vuelo: se hace volar el helicóptero sobre un array de micrófonos en tierra, el espectro de cada dirección de emisión se lleva de vuelta, deshaciendo la propagación, hasta una esfera de referencia de 60 m en condiciones de referencia de certificación de ruido de la OACI (101 325 Pa, 298,15 K, 70 % de humedad relativa), y la medida sigue la práctica del Vol. I del Anexo 16 a la que apunta el §4.2 de la Doc 32. El otro es la base de datos de referencia NORAH2, que cubre once tipos de helicóptero.

Un hemisferio utilizable lleva algo más que niveles. El formato de fichero NORAH (Apéndice A de la Doc 32) registra la distancia de referencia POLDIST, si incluye o no la absorción atmosférica, el indicador de ausencia de valor, la atmósfera del propio hemisferio (TAMB, RELHUM, PAMB), y después las condiciones en las que se adquirieron los datos: la temperatura, la humedad y la presión de medida a 10 m, el régimen de rotor, la velocidad indicada, el ángulo de trayectoria, las actitudes de cabeceo y alabeo y las componentes de viento. La velocidad y el ángulo de trayectoria no son metadatos: son la clave por la que la interpolación entre condiciones de vuelo de más abajo busca el hemisferio, así que un hemisferio sin ellos no puede colocarse en una base de datos.

Lo que puede ver un array en tierra es limitado, y esa es la razón por la que los hemisferios reales llegan con agujeros. La Doc 32 exige cubrir al menos y los ángulos polares comprendidos entre los dos instantes de 10 dB por debajo; medir ángulos laterales más abiertos, o ángulos polares que se acerquen a 0° y a 180°, pide un montaje más elaborado. El relleno de huecos de la Ec. 6/7 es la consecuencia directa de ese límite, no un detalle de implementación: fuera del parche medido el nivel es el del bin lleno más cercano, y la media energética de ellos cuando hay varios igual de cerca.

La matriz de condiciones que debería abarcar una base de datos la fija el §4.1 de la Doc 32: hemisferios a ángulos de descenso con intervalos de al menos 3° y cuatro velocidades distintas, para cubrir la región de descenso donde vive la interacción pala-vórtice; ángulos de ascenso a la velocidad de mejor régimen de subida o a una velocidad de despegue típica, incluido el ángulo de ascenso máximo que declare el manual de vuelo; y vuelo nivelado a 0,9 con incrementos de kt (o , el que sea menor), kt y kt. Fuera de la envolvente que abarcan esas condiciones, la interpolación degenera a vecino más próximo, y en silencio.

Cuando una clase no tiene ningún hemisferio, el §3.2 de la Doc 32 da la regla de sustitución: agrupar el tipo temporalmente con una clase que sí lo tenga, eligiendo una clase cuyos niveles de certificación de ruido sean inferiores a los del objetivo o queden dentro de su horquilla; cuando no hay niveles de certificación disponibles o encajan varias clases, el peso pasa a ser el parámetro que manda y se toma la clase que mejor case por debajo del peso del tipo, con el desplazamiento de nivel puesto a cero para que la estimación siga siendo conservadora. Dentro de una clase, el desplazamiento es la diferencia de niveles de certificación registrados, los de despegue, sobrevuelo y aproximación corrigiendo respectivamente las condiciones de ascenso, nivelada y descenso, y entra aquí como level_offset.

Un RotorcraftHemisphere contiene los niveles de banda sobre la malla acimut/polar.

CampoFormaUnidades y convenio
frequencies(F,)centros de banda de tercio de octava en Hz; el formato NORAH lleva 31 bandas de 10 Hz a 10 kHz
azimuth (A,)grados alrededor del eje del morro: recto hacia abajo, a estribor, a babor; 19 valores cada 10°
polar (P,)grados desde el morro: hacia delante, al través de la aeronave, hacia atrás; 19 valores cada 10°
levels(A, P, F)niveles de presión acústica de banda en dB a la distancia de referencia; NaN en los bins que la medida no cubrió
distanceescalardistancia de referencia en metros, 60 por defecto

Los dos ángulos son las coordenadas esféricas de la Ec. 3 de la Doc 32, , , en ejes cuerpo con hacia abajo, de modo que se mide desde el morro y gira alrededor del eje del morro empezando por el recto hacia abajo. hemisphere_source_level(h, azimuth_deg, polar_deg) toma los ángulos en ese orden y devuelve un nivel por banda: hemisphere_source_level(h, 0.0, 90.0) es el nivel radiado verticalmente hacia abajo, que es lo que oye un micrófono justo debajo de un sobrevuelo nivelado, mientras que un receptor a 500 m del costado de ese mismo sobrevuelo a 150 m se direcciona aproximadamente en . Equivocar el signo de refleja la aeronave; tratar como un ángulo desde la vertical traspone el array y da una directividad verosímil pero falsa. NaN y 0 dB no son intercambiables: los bins sin medir tienen que ser NaN, porque se rellenan desde el bin lleno angularmente más cercano antes de la consulta bilineal, y un 0 dB guardado se tomaría como dato. h.mirrored() implementa la relación de sentido de rotor de la Ec. 2 invirtiendo el signo del acimut.

El hemisferio de ruido de helicópteros de ECAC Doc 32 y sus dos ángulos, en tres paneles. El panel a es el plano central vertical a acimut cero: un helicóptero con una semicircunferencia de 60 m de radio debajo, el ángulo polar theta corriendo de 0 en el morro a 90 justo debajo y a 180 en la cola, y la banda polar medida entre los dos instantes de 10 dB por debajo destacada sobre el arco. El panel b es el mismo hemisferio visto desde popa: el acimut phi vale 0 justo debajo, más 90 a estribor y menos 90 a babor, con la banda lateral medida de menos 60 a más 60 grados destacada y una nota de que fuera de ella los bins se rellenan. El panel c coloca la esfera de 60 m sobre una trayectoria de vuelo: el helicóptero sobre una traza a trazos con su ángulo de alabeo marcado y la distancia oblicua r bajando hasta un receptor a 1,2 m del suelo. El pie da los tres ajustes de propagación y el contrato del array: niveles indexados por acimut, ángulo polar y banda en dB a 60 m bajo la atmósfera de referencia de la OACI de 25 grados Celsius, 70 por ciento de humedad relativa y 101,325 kilopascales, 19 acimutes por 19 ángulos polares cada 10 grados y 31 bandas de tercio de octava de 10 Hz a 10 kHz, bins sin medir a NaN y nunca a 0 dB, y los miembros de clase con rotor especular leyendo los mismos datos en menos phiEl hemisferio de ruido de helicópteros de ECAC Doc 32 y sus dos ángulos, en tres paneles. El panel a es el plano central vertical a acimut cero: un helicóptero con una semicircunferencia de 60 m de radio debajo, el ángulo polar theta corriendo de 0 en el morro a 90 justo debajo y a 180 en la cola, y la banda polar medida entre los dos instantes de 10 dB por debajo destacada sobre el arco. El panel b es el mismo hemisferio visto desde popa: el acimut phi vale 0 justo debajo, más 90 a estribor y menos 90 a babor, con la banda lateral medida de menos 60 a más 60 grados destacada y una nota de que fuera de ella los bins se rellenan. El panel c coloca la esfera de 60 m sobre una trayectoria de vuelo: el helicóptero sobre una traza a trazos con su ángulo de alabeo marcado y la distancia oblicua r bajando hasta un receptor a 1,2 m del suelo. El pie da los tres ajustes de propagación y el contrato del array: niveles indexados por acimut, ángulo polar y banda en dB a 60 m bajo la atmósfera de referencia de la OACI de 25 grados Celsius, 70 por ciento de humedad relativa y 101,325 kilopascales, 19 acimutes por 19 ángulos polares cada 10 grados y 31 bandas de tercio de octava de 10 Hz a 10 kHz, bins sin medir a NaN y nunca a 0 dB, y los miembros de clase con rotor especular leyendo los mismos datos en menos phi

hemisphere_source_level lee el nivel en una dirección de emisión arbitraria: primero rellena los huecos de la malla desde los bins llenos angularmente más cercanos (Ec. 14/15, con caché) y después interpola de forma bilineal en el dominio de energía sobre los cuatro bins vecinos (Ec. 13), de modo que las celdas parcialmente medidas se mantienen continuas con sus esquinas medidas.

from phonometry import aircraft
h = aircraft.RotorcraftHemisphere(frequencies=freqs, azimuth=phi, polar=theta, levels=levels)
lv = aircraft.hemisphere_source_level(h, 0.0, 90.0) # recto hacia abajo, por banda, a 60 m
h.plot() # directividad proa-popa
Dos paneles de un hemisferio de ruido de helicóptero sintético. A la izquierda, la sección proa-popa a acimut cero: nivel de fuente a 60 m frente al ángulo polar, de 0 hacia delante a 180 hacia atrás, para las bandas de 100 Hz, 631 Hz y 3981 Hz, con la banda polar medida entre 40 y 140 grados sombreada y las curvas planas fuera de ella, donde los valores están rellenados. A la derecha, la banda de 631 Hz sobre toda la malla acimut-polar como contorno relleno, con un lóbulo fuerte cerca de 140 grados de polar y acimut cero, la cobertura medida marcada con un rectángulo a trazos de 40 a 140 grados de polar y de menos 60 a más 60 grados de acimut, y una nota de que 9,4 dB separan la celda medida más ruidosa de la más silenciosaDos paneles de un hemisferio de ruido de helicóptero sintético. A la izquierda, la sección proa-popa a acimut cero: nivel de fuente a 60 m frente al ángulo polar, de 0 hacia delante a 180 hacia atrás, para las bandas de 100 Hz, 631 Hz y 3981 Hz, con la banda polar medida entre 40 y 140 grados sombreada y las curvas planas fuera de ella, donde los valores están rellenados. A la derecha, la banda de 631 Hz sobre toda la malla acimut-polar como contorno relleno, con un lóbulo fuerte cerca de 140 grados de polar y acimut cero, la cobertura medida marcada con un rectángulo a trazos de 40 a 140 grados de polar y de menos 60 a más 60 grados de acimut, y una nota de que 9,4 dB separan la celda medida más ruidosa de la más silenciosa

Por qué el método necesita un hemisferio: en la banda más directiva, 9,4 dB separan la dirección medida más ruidosa de la más silenciosa, y el lóbulo se sitúa en , bien por detrás de la vertical. Las tres secciones de la izquierda muestran que la directividad depende de la frecuencia: la banda baja es casi plana, la banda media lleva el lóbulo y la banda alta está callada en todas partes, así que un único nivel de fuente no puede sustituirla. Fíjate además en lo que hacen las curvas fuera de la banda sombreada: se vuelven planas. Eso es el relleno de huecos, no medida.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
# Un hemisferio sintético sobre la malla de la Doc 32: 31 bandas, 19 x 19
# ángulos, con un lóbulo de frecuencias medias por detrás del través y las
# celdas que un array en tierra no puede ver dejadas a NaN.
freqs = 1000.0 * 10.0 ** (np.arange(-20, 11) / 10.0)
az, po = np.arange(-90.0, 91.0, 10.0), np.arange(0.0, 181.0, 10.0)
spectrum = 88.0 - 12.0 * np.log10(freqs / 100.0) ** 2
band = np.exp(-((np.log10(freqs) - np.log10(630.0)) ** 2) / 0.08)
levels = (spectrum[None, None, :]
- 0.030 * np.abs(po - 110.0)[None, :, None]
- 0.020 * np.abs(az)[:, None, None]
+ 7.0 * np.exp(-((po - 140.0) ** 2) / (2 * 16.0 ** 2))[None, :, None]
* np.exp(-(az ** 2) / (2 * 34.0 ** 2))[:, None, None]
* band[None, None, :])
unseen = (np.abs(az)[:, None] > 60.0) | (po[None, :] < 40.0) | (po[None, :] > 140.0)
h = aircraft.RotorcraftHemisphere(freqs, az, po, np.where(unseen[:, :, None],
np.nan, levels))
fig, (ax, ax2) = plt.subplots(1, 2, figsize=(12, 5.4))
for f in (100.0, 630.0, 4000.0):
h.plot(ax=ax, band=f, language="es")
ax.axvspan(40.0, 140.0, color="0.85", zorder=0)
idx = int(np.nanargmax(np.nanmax(levels, axis=(0, 1)) - np.nanmin(levels, axis=(0, 1))))
filled = np.array([[aircraft.hemisphere_source_level(h, a, p)[idx] for p in po]
for a in az])
cs = ax2.contourf(po, az, filled, levels=12)
ax2.plot([40, 140, 140, 40, 40], [-60, -60, 60, 60, -60], "k--")
fig.colorbar(cs, ax=ax2, label="Nivel de fuente a 60 m [dB]")
plt.show()

El nivel del hemisferio a 60 m se lleva al receptor con tres ajustes (§A.4): spherical_spreading_adjustment (, Ec. 24), atmospheric_adjustment ( con el coeficiente de ISO 9613-1, Ec. 26/27) y ground_effect_adjustment (interferencia directo/ reflejado sobre un plano de impedancia, Chien-Soroka Ec. 28-35, con la impedancia de Delany-Bazley y las clases de resistividad de flujo CNOSSOS "A"-"H").

Ajuste por efecto de suelo de helicópteros frente a la frecuencia de tercio de octava para suelo duro y blando, con refuerzo a baja frecuencia, un valle de interferencia profundo y la región incoherente de alta frecuenciaAjuste por efecto de suelo de helicópteros frente a la frecuencia de tercio de octava para suelo duro y blando, con refuerzo a baja frecuencia, un valle de interferencia profundo y la región incoherente de alta frecuencia

Una geometría, dos clases de suelo, y la superficie dura es la más extrema en los dos sentidos: refuerza más a baja frecuencia (+5,3 dB frente a +4,7 dB en 50 Hz), cancela mucho más a fondo en el primer mínimo (−13,7 dB frente a −7,8 dB) y sigue oscilando en torno a +2,4 dB en 5 kHz, donde la curva blanda ya se ha asentado hacia una suma incoherente cercana a +0,6 dB. Las tres regiones se leen debajo del código.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
freqs = 1000.0 * 10.0 ** (np.arange(-13, 11) / 10.0) # tercios 50 Hz-10 kHz
hs, hr, dp = 150.0, 1.5, 500.0 # geometría de sobrevuelo
grass = aircraft.ground_effect_adjustment(freqs, hs, hr, dp, flow_resistivity="D")
asphalt = aircraft.ground_effect_adjustment(freqs, hs, hr, dp, flow_resistivity="G")
fig, ax = plt.subplots()
ax.axhline(0.0, color="0.5", linewidth=1.0)
ax.semilogx(freqs, asphalt, marker="o", markersize=3,
label="Duro (asfalto/hormigón, clase G)")
ax.semilogx(freqs, grass, marker="s", markersize=3,
label="Blando (hierba/pasto, clase D)")
ax.set(xlabel="Frecuencia central de banda de tercio de octava [Hz]",
ylabel="Ajuste por efecto de suelo ΔLg [dB]",
title="Efecto de suelo de helicópteros (ECAC Doc 32, Chien-Soroka)")
ax.grid(True, which="both", alpha=0.3)
ax.legend()
plt.show()
import numpy as np
from phonometry import aircraft
freqs = 1000.0 * 10.0 ** (np.arange(-13, 11) / 10.0) # tercios 50 Hz-10 kHz
r = 500.0
recibido = (lv
+ aircraft.spherical_spreading_adjustment(r)
+ aircraft.atmospheric_adjustment(freqs, r)
+ aircraft.ground_effect_adjustment(freqs, 150.0, 1.5, 500.0, flow_resistivity="D"))

La base de datos estándar está registrada a 60 m, el valor por defecto. Si un hemisferio usa otra distancia polar (h.distance, p. ej. anillos en vuelo estacionario a 70 m), pásala a los dos ajustes dependientes de la distancia como reference_distance=h.distance.

La curva de suelo se lee en tres regiones. A baja frecuencia el rayo directo y su reflexión en el suelo llegan casi en fase, así que el nivel se acerca a 6 dB por encima del campo libre: 5,3 dB en 50 Hz sobre suelo duro en la figura, que suben hasta 5,8 dB. La primera cancelación se sitúa donde la diferencia de caminos es media longitud de onda, que para esta geometría, con la fuente a 150 m, el micrófono a 1,5 m y 500 m de separación horizontal, cae en 200 Hz y tiene 13,7 dB de profundidad; y va subiendo a medida que la aeronave pasa por la vertical, así que el ajuste es un peine móvil y no una forma espectral fija. Sobre hierba la impedancia finita gira la fase de la onda reflejada y absorbe parte de ella, así que el refuerzo es algo menor (4,7 dB en 50 Hz) y, lo que más importa, la cancelación es mucho menos completa: el primer mínimo es de 7,8 dB en lugar de 13,7 dB. A alta frecuencia los dos caminos se descorrelacionan hacia una suma incoherente, que es donde la curva blanda se asienta cerca de 0,6 dB mientras la dura sigue oscilando en 2,4 dB a 5 kHz. Todo esto es coherente por construcción, así que un nivel promediado sobre un evento entero muestra mucha menos estructura que cualquiera de estos espectros congelados.

Tres parámetros del emplazamiento deciden el término de suelo, y el valor por defecto no es el que quiere un emplazamiento con hierba:

CampoPor defectoA qué ponerlo
receiver_height1,2 mla altura de micrófono del Anexo 16; la figura de arriba usa 1,5 m para que el mínimo se vea
ground_elevation0,0 mpor receptor en emplazamientos desiguales, o un valor por punto de malla
flow_resistivity"G"suelo duro. Un emplazamiento de hierba o pasto tiene que pasar "C" o "D"

Las letras son las clases CNOSSOS-EU de la Tabla 3 de la Doc 32, en Pa·s/m²: "A" muy blando (nieve, musgo) a 12,5·10³, "B" suelo forestal blando a 31,5·10³, "C" suelo suelto sin compactar, césped, hierba o tierra suelta, a 80·10³, "D" suelo normal sin compactar como el pasto a 200·10³, "E" campo compactado y grava a 500·10³, "F" suelo denso compactado como una pista de grava o un aparcamiento a 2·10⁶, "G" superficies duras, la mayoría del asfalto y el hormigón normales, a 20·10⁶, y "H" superficies muy duras y densas, incluida el agua, a 200·10⁶. En lugar de una letra se admite una σ numérica en Pa·s/m², y también un array con un valor por punto de malla.

La atmósfera calla del mismo modo. El hemisferio está definido en las condiciones de referencia de la OACI y ya contiene la absorción de los primeros 60 m, que es la razón por la que solo se corrige el trayecto en exceso; el coeficiente para ese trayecto en exceso vale por defecto esas mismas condiciones de referencia (25 °C, 70 % de HR, 101,325 kPa) salvo que se pase un RotorcraftAtmosphere. La diferencia es mayor justo donde un espectro de helicóptero todavía lleva energía, las bandas de tercio de octava altas sobre trayectos oblicuos largos, así que un emplazamiento frío, seco o de gran altitud necesita el argumento. atmospheric_method elige "iso9613" (el valor por defecto) o "sae"; los dos coinciden en unos 0,05 dB por debajo de 3,15 kHz.

Condiciones de vuelo: interpolar entre hemisferios

Sección titulada «Condiciones de vuelo: interpolar entre hemisferios»

Una base de datos registra un hemisferio por condición de vuelo (velocidad aerodinámica , ángulo de trayectoria ). Las condiciones reales rara vez coinciden con una medida, así que la guía NORAH2 interpola (Ec. 3-10): ambos ejes se normalizan por sus rangos en la base de datos (con el factor empírico sobre el ángulo de trayectoria), una triangulación de Delaunay cubre las condiciones normalizadas, y una consulta dentro de la envolvente convexa mezcla su triángulo envolvente con pesos inversos a la distancia en el dominio de energía. Fuera de la envolvente se adopta la condición más cercana sin mezclar, que es también el comportamiento que ECAC Doc 32, 1.ª ed. prescribe para toda su envolvente (aún no define interpolación).

from phonometry import aircraft
speeds = [50.0, 70.0, 60.0] # un hemisferio por condición
angles = [0.0, 0.0, 10.0] # ángulos de trayectoria, grados
weights = aircraft.flight_condition_weights(speeds, angles, 60.0, 2.5)
lv = aircraft.interpolated_source_level(
[h_50_nivel, h_70_nivel, h_60_ascenso], speeds, angles,
60.0, 2.5, 0.0, 90.0) # nivel mezclado por banda

La velocidad aerodinámica, no la de suelo, selecciona el hemisferio; los pesos son invariantes a las unidades mientras la consulta use las de la base de datos. Los miembros de clase con rotor especular sustituyen h.mirrored() (Ec. 2, ) y los desplazamientos por nivel de certificación entran como level_offset.

Hay dos triangulaciones en juego, y no coinciden. Por defecto la biblioteca triangula el plano normalizado , que mantiene los dos ejes comparables para una base de datos cualquiera. Las tablas NORAH, en cambio, incluyen una triangulación del plano sin normalizar, y hay que pasarla como triangles siempre que estés reproduciendo un resultado NORAH, porque las dos discrepan sobre qué símplice encierra una consulta y, por tanto, sobre los pesos de la mezcla.

Dos paneles del plano de condiciones de vuelo. A la izquierda, el plano sin normalizar de velocidad aerodinámica frente a ángulo de trayectoria para una base de datos de veintidós condiciones, dieciséis de ellas una malla de descenso de cuatro por cuatro con puntos de ascenso y de vuelo nivelado alrededor, con su triangulación de Delaunay dibujada; una consulta a 38 metros por segundo y menos 7 grados cae dentro de un triángulo cuyos tres vértices llevan pesos inversos a la distancia de 0,42, 0,23 y 0,36, y una consulta a 60 metros por segundo y menos 11 grados cae fuera de la envolvente convexa, con una línea de puntos hasta la condición más cercana, que se adopta sin mezclar. A la derecha, los mismos puntos y las mismas consultas en el plano normalizado que la biblioteca usa por defecto: la misma consulta cae ahora en la otra mitad del cuadrilátero, así que mezcla las condiciones 5, 9 y 10 con pesos 0,42, 0,36 y 0,22 en lugar de las condiciones 5, 6 y 9Dos paneles del plano de condiciones de vuelo. A la izquierda, el plano sin normalizar de velocidad aerodinámica frente a ángulo de trayectoria para una base de datos de veintidós condiciones, dieciséis de ellas una malla de descenso de cuatro por cuatro con puntos de ascenso y de vuelo nivelado alrededor, con su triangulación de Delaunay dibujada; una consulta a 38 metros por segundo y menos 7 grados cae dentro de un triángulo cuyos tres vértices llevan pesos inversos a la distancia de 0,42, 0,23 y 0,36, y una consulta a 60 metros por segundo y menos 11 grados cae fuera de la envolvente convexa, con una línea de puntos hasta la condición más cercana, que se adopta sin mezclar. A la derecha, los mismos puntos y las mismas consultas en el plano normalizado que la biblioteca usa por defecto: la misma consulta cae ahora en la otra mitad del cuadrilátero, así que mezcla las condiciones 5, 9 y 10 con pesos 0,42, 0,36 y 0,22 en lugar de las condiciones 5, 6 y 9

La misma consulta, dos triangulaciones, dos ternas distintas de hemisferios mezcladas. La diagonal del cuadrilátero que la rodea cambia de lado entre el plano sin normalizar y el normalizado, así que la triangulación sin normalizar mezcla las condiciones 5, 6 y 9 y la normalizada mezcla la 5, la 9 y la 10. Las dos son defendibles; solo una reproduce NORAH. Fuera de la envolvente ninguna mezcla nada, y se adopta entera la condición más cercana, cosa que cambia la respuesta sin avisar de nada, y es la trampa que conviene conocer.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from scipy.spatial import Delaunay
from phonometry import aircraft
# Una matriz de condiciones del 4.1 de la Doc 32: descenso a pasos de 3 grados y
# cuatro velocidades, ascenso a Vy y vuelo nivelado a 0,9 VH con los incrementos
# recomendados.
speeds = list(np.repeat([30.9, 36.0, 41.2, 46.3], 4)) + [33.4, 33.4, 64.8, 70.0, 57.1, 49.4]
angles = list(np.tile([-3.0, -6.0, -9.0, -12.0], 4)) + [6.0, 9.0, 0.0, 0.0, 0.0, 0.0]
v, g = np.asarray(speeds), np.asarray(angles)
raw_tri = Delaunay(np.column_stack([v, g])).simplices
print(aircraft.flight_condition_weights(v, g, 38.0, -7.0))
print(aircraft.flight_condition_weights(v, g, 38.0, -7.0, triangles=raw_tri))
# [(5, 0.42), (9, 0.36), (10, 0.22)] y [(5, 0.42), (6, 0.23), (9, 0.36)]
fig, ax = plt.subplots(figsize=(6, 5))
ax.triplot(v, g, raw_tri, color="0.6", lw=0.9)
ax.plot(v, g, "o", ms=5)
ax.plot([38.0], [-7.0], "*", ms=15)
ax.set(xlabel="Velocidad aerodinámica V [m/s]", ylabel="Ángulo de trayectoria γ [°]")
plt.show()

Un helicóptero en estacionario o al ralentí no se mide como un sobrevuelo: se mide sobre un anillo de micrófonos en tierra alrededor de la aeronave inmóvil (la práctica CAEP de estacionario con efecto suelo a la que remite la guía), un espectro de bandas por rumbo del anillo (0° en el morro, positivo a estribor), reducido a la distancia polar del anillo, normalmente 70 m frente a los 60 m de la base de datos de sobrevuelo. El §A.3.5 de la guía define cuatro condiciones (estacionario con efecto suelo, HIGE; estacionario sin efecto suelo, HOGE; ralentí a régimen reducido; y ralentí a régimen pleno) y tres enfoques en prioridad descendente: medir los cuatro anillos; medir el anillo HIGE y las otras tres condiciones solo en la dirección de 0°; o medir el anillo HIGE a secas y aplicar desplazamientos fijos.

hover_ring_hemisphere extiende el anillo a un RotorcraftHemisphere completo asumiendo directividad constante en φ: cada bin lee el anillo en el rumbo de su propia mitad (los bins de babor desde los rumbos negativos, los de estribor desde los positivos, y la columna bajo la aeronave toma la media energética de los valores del anillo en ), interpolando periódicamente en el dominio de energía. La implementación de referencia NORAH2 lee el mismo anillo por el rumbo horizontal de la dirección de emisión (directividad constante en elevación): mapping="bearing" la reproduce. Las dos lecturas coinciden en el borde del hemisferio y se separan varios dB en ángulos de emisión abruptos: justo bajo el estacionario la lectura de φ constante promedia babor y estribor donde el prototipo lee el rumbo del morro.

hover_derived_hemisphere deriva después HOGE y los ralentís del hemisferio HIGE con un desplazamiento de nivel uniforme: una diferencia medida en la dirección de 0° (Enfoque 2, pasada como offset_db) o las constantes publicadas del Enfoque 3: +12 dB para HOGE, −12 dB para el ralentí a régimen reducido y −2,5 dB para el ralentí a régimen pleno, todas desde el disco HIGE. Un desplazamiento espectral constante mueve el nivel ponderado A exactamente ese valor, que es como la Tabla 3 (definida sobre niveles ) se extiende a espectros de bandas.

import numpy as np
from phonometry import aircraft
# Un anillo de estacionario con la forma de una campaña real: un espectro de
# 31 tercios de octava por cada 30° de rumbo, reducido a los 70 m polares.
freqs = 1000.0 * 10.0 ** (np.arange(-20, 11) / 10.0) # tercios de 10 Hz a 10 kHz
bearings = np.arange(-180.0, 151.0, 30.0) # el anillo se cierra en ±180°
niveles_anillo = (86.0 - 10.0 * np.log10(freqs / 160.0) ** 2
+ 3.5 * np.cos(np.radians(bearings))[:, None])
hige = aircraft.hover_ring_hemisphere(freqs, bearings, niveles_anillo, distance=70.0)
hoge = aircraft.hover_derived_hemisphere(hige, "out_of_ground_hover") # +12 dB
ralenti_pleno = aircraft.hover_derived_hemisphere(hige, "full_rpm_idle") # -2,5 dB
Dos paneles de la derivación de la fuente de estacionario. A la izquierda, el anillo de estacionario con efecto suelo en la banda de 315 Hz: nivel de banda a 70 m frente al rumbo del anillo de menos 180 a 180 grados, con el máximo en el morro y cayendo hacia la cola, con la mitad de estribor unos decibelios por encima de la de babor. A la derecha, las secciones proa-popa de las cuatro fuentes derivadas frente al ángulo polar: el hemisferio HIGE construido desde el anillo, y las curvas de estacionario sin efecto suelo, ralentí a régimen pleno y ralentí a régimen reducido a más 12, menos 2,5 y menos 12 decibelios de él, con una nota de que directividad constante en phi significa que cada ángulo polar lee el anillo en más o menos ese rumboDos paneles de la derivación de la fuente de estacionario. A la izquierda, el anillo de estacionario con efecto suelo en la banda de 315 Hz: nivel de banda a 70 m frente al rumbo del anillo de menos 180 a 180 grados, con el máximo en el morro y cayendo hacia la cola, con la mitad de estribor unos decibelios por encima de la de babor. A la derecha, las secciones proa-popa de las cuatro fuentes derivadas frente al ángulo polar: el hemisferio HIGE construido desde el anillo, y las curvas de estacionario sin efecto suelo, ralentí a régimen pleno y ralentí a régimen reducido a más 12, menos 2,5 y menos 12 decibelios de él, con una nota de que directividad constante en phi significa que cada ángulo polar lee el anillo en más o menos ese rumbo

El anillo de la izquierda es la única medida; todo lo de la derecha se deriva de él. La sección HIGE arranca en el valor del morro del anillo y termina en el de la cola (esa es la extensión de φ constante en acción), y las otras tres fuentes son la misma directividad desplazada entera: +12 dB hasta HOGE, −2,5 dB hasta el ralentí a régimen pleno, −12 dB hasta el reducido.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
freqs = 1000.0 * 10.0 ** (np.arange(-20, 11) / 10.0) # tercios de 10 Hz a 10 kHz
bearings = np.arange(-180.0, 151.0, 30.0)
spectrum = 86.0 - 10.0 * np.log10(freqs / 160.0) ** 2
directivity = (3.5 * np.cos(np.radians(bearings))
+ 3.0 * np.exp(-((bearings - 120.0) ** 2) / (2.0 * 40.0**2)))
ring = spectrum[None, :] + directivity[:, None]
hige = aircraft.hover_ring_hemisphere(freqs, bearings, ring, distance=70.0)
k = int(np.argmin(np.abs(freqs - 315.0)))
theta = np.linspace(0.0, 180.0, 361)
fig, (ax, ax2) = plt.subplots(1, 2, figsize=(12, 5.2))
ax.plot(np.append(bearings, 180.0), np.append(ring[:, k], ring[0, k]),
marker="o")
ax.set(xlabel="Rumbo del anillo [°] (0° morro, +90° estribor)",
ylabel="Nivel de banda a 70 m [dB]")
for condition, label in ((None, "HIGE (del anillo)"),
("out_of_ground_hover", "HOGE (+12 dB)"),
("full_rpm_idle", "Ralentí a régimen pleno (-2,5 dB)"),
("reduced_rpm_idle", "Ralentí a régimen reducido (-12 dB)")):
h = hige if condition is None else aircraft.hover_derived_hemisphere(hige, condition)
ax2.plot(theta, [aircraft.hemisphere_source_level(h, 0.0, t)[k] for t in theta],
label=label)
ax2.set(xlabel="Ángulo polar θ [°] (0° hacia proa → 180° hacia popa)",
ylabel="Nivel de fuente a 70 m [dB]")
ax2.legend()
plt.show()

El rodaje es una selección entre dos de estas fuentes, no una fuente nueva: un helicóptero sin ruedas rueda en estacionario con efecto suelo (el hemisferio HIGE), y uno con ruedas rueda sobre ellas con el rotor al ralentí (el hemisferio de ralentí a régimen pleno). La frase de la guía los empareja al revés («… in-ground hover and full-rpm idle respectively»); el emparejamiento de aquí sigue la física de las dos operaciones (véase el registro de erratas).

con_ruedas = False # patines: el rodaje es un estacionario
taxi = ralenti_pleno if con_ruedas else hige # guía p. 19 (véase la salvedad)

Un evento de estacionario o ralentí es el evento único estándar con una trayectoria inmóvil: un hemisferio, una posición fija, el receptor de interés. El hemisferio derivado lleva la distance del anillo, que toda la cadena respeta como distancia de referencia; los hemisferios de estacionario y de sobrevuelo registrados a distancias distintas se ejecutan como eventos separados, que es también como la implementación de referencia cambia de fuente por modo de operación.

t = np.arange(0.0, 30.5, 0.5) # 30 s de estacionario a 3 m
track = np.column_stack([np.zeros_like(t), np.zeros_like(t),
np.full_like(t, 3.0)])
res = aircraft.rotorcraft_event_level([hige], [0.0], [0.0], t, track, (100.0, 0.0))

Lo que queda fuera de la implementación es el último recurso del §A.3.5 cuando no existe ningún dato de estacionario: corregir dos micrófonos laterales de vuelo nivelado al círculo de estacionario de 150 m por el método integrado del Anexo 16 de la OACI, una cadena de corrección de medida que este módulo (que consume hemisferios ya reducidos) no modela.

flight_path_kinematics deriva de una trayectoria con marcas de tiempo, por diferencias finitas centradas, todo lo que necesita el evento (Ec. 16-21 / Doc 32 Ec. 8-10): velocidad respecto al suelo, velocidad aerodinámica (sin viento), rumbo, curvatura, ángulo de alabeo y ángulo de trayectoria . La guía recomienda suavizar las trazas radar (p. ej. remuestreo con splines a cadencia de 0,5 s) antes de derivar.

kin = aircraft.flight_path_kinematics(times, positions) # posiciones (N, 3), m
kin.airspeed, kin.path_angle # seleccionan el hemisferio por punto
kin.bank_angle # inclina el hemisferio en virajes
kin.plot() # perfiles de velocidad y ángulos
Dos paneles de cinemática de trayectoria derivados de la misma traza. A la izquierda, una traza radar cruda con cadencia de 1 segundo y unos pocos metros de ruido de posición: las trazas de velocidad aerodinámica y de velocidad respecto al suelo oscilan entre 25 y 45 metros por segundo, el ángulo de trayectoria oscila decenas de grados y el ángulo de alabeo derivado es ruido inservible con un máximo de 41 grados. A la derecha, la misma traza remuestreada con un spline suavizador a cadencia de 0,5 segundos: las velocidades se asientan a menos de medio metro por segundo de 31, el ángulo de trayectoria es suave y el ángulo de alabeo muestra un único valle limpio a lo largo del viraje, con un máximo de 10 grados frente a los 9,2 grados que pide de verdad el viraje de 600 metros de radioDos paneles de cinemática de trayectoria derivados de la misma traza. A la izquierda, una traza radar cruda con cadencia de 1 segundo y unos pocos metros de ruido de posición: las trazas de velocidad aerodinámica y de velocidad respecto al suelo oscilan entre 25 y 45 metros por segundo, el ángulo de trayectoria oscila decenas de grados y el ángulo de alabeo derivado es ruido inservible con un máximo de 41 grados. A la derecha, la misma traza remuestreada con un spline suavizador a cadencia de 0,5 segundos: las velocidades se asientan a menos de medio metro por segundo de 31, el ángulo de trayectoria es suave y el ángulo de alabeo muestra un único valle limpio a lo largo del viraje, con un máximo de 10 grados frente a los 9,2 grados que pide de verdad el viraje de 600 metros de radio

La misma traza, derivada dos veces. El ángulo de alabeo se deriva de la curvatura, que es una segunda derivada de la posición, así que unos pocos metros de ruido radar con cadencia de 1 s convierten un viraje de 9,2° en 41° de disparate, y el marco de emisión se inclina con ese ángulo, de modo que el error se va derecho al nivel de fuente. Después de remuestrear con splines a 0,5 s la traza muestra un único valle limpio a lo largo del viraje, con un máximo de 10° frente a los 9,2° que pide la geometría. Suaviza antes de derivar.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import UnivariateSpline
from phonometry import aircraft
rng = np.random.default_rng(20260808)
t_true = np.arange(0.0, 120.001, 0.1)
speed, radius, sigma = 30.87, 600.0, 4.0 # 60 kt, viraje de 600 m, ruido de 4 m
turn = np.clip((t_true - 40.0) / (radius / speed), 0.0, np.pi / 2)
xy = np.column_stack([np.cumsum(np.cos(turn)), np.cumsum(np.sin(turn))]) * speed * 0.1
t_radar = np.arange(0.0, 120.001, 1.0)
raw = np.column_stack([np.interp(t_radar, t_true, xy[:, 0]),
np.interp(t_radar, t_true, xy[:, 1]),
300.0 - 1.2 * t_radar]) + rng.normal(0.0, sigma, (121, 3))
t_fine = np.arange(0.0, 120.001, 0.5)
smooth = np.column_stack([
UnivariateSpline(t_radar, raw[:, k], s=t_radar.size * sigma ** 2)(t_fine)
for k in range(3)])
fig, axes = plt.subplots(1, 2, figsize=(12, 5.4))
for ax, times, pos in ((axes[0], t_radar, raw), (axes[1], t_fine, smooth)):
aircraft.flight_path_kinematics(times, pos).plot(ax=ax, language="es")
plt.show()

rotorcraft_event_level ejecuta toda la cadena para un sobrevuelo en un receptor: por punto de trayectoria la condición de vuelo selecciona (o mezcla) los hemisferios, los ángulos de emisión direccionan el nivel de fuente (el marco se orienta con el rumbo y se inclina con el alabeo en virajes; la actitud de cabeceo está implícita en los hemisferios), y el historial recibido en tercios de octava se expresa en tiempo registrado (Ec. 22, ) y se integra: LASmax, SEL sobre el historial completo y sobre la ventana de certificación de 10 dB por debajo (Doc 32 Ec. 27), y EPNL según Anexo 16 de la OACI (Doc 32 Ec. 28).

res = aircraft.rotorcraft_event_level(
hemispheres, speeds, angles, # la base de datos
times, positions, # la trayectoria (m, z hacia arriba)
receiver=(120.0, 0.0), # posición en tierra del micrófono
ground=aircraft.RotorcraftGround(flow_resistivity="D")) # hierba
res.la_max, res.sel, res.epnl # LASmax, SEL, EPNL
res.plot() # el historial temporal LA(t)

Tres números del mismo evento, y no son intercambiables. El LASmax es un instante: el mayor nivel ponderado A del historial, y nada sobre cuánto duró el evento. El SEL integra el historial completo y lo normaliza a un segundo, así que supera al LASmax en una cantidad que crece con la distancia oblicua y decrece con la velocidad: para el sobrevuelo nivelado de más abajo, 60 kt a 150 m sobre una separación lateral de 120 m, la diferencia es de 10,3 dB; a la mitad de velocidad crece hasta 12,2 dB, y al doble de altura hasta 12,5 dB. El EPNL es otro cantar: se construye con espectros ponderados en noys y una corrección tonal sobre la ventana de 10 dB por debajo (Doc 32 Ec. 28, ejecutando la cadena del Apéndice 2 del Anexo 16), así que no es comparable con ninguno de los otros dos: para ese mismo evento marca 91,2 EPNdB frente a un SEL de 88,8 dB(A). El LASmax y el SEL se usan para contornos y para estudios de molestia, y el EPNL solo contra niveles de certificación.

La forma del historial también merece leerse. Cada emisión se estampa en el tiempo registrado , y es mayor lejos del punto de máxima aproximación y menor en él, así que el historial recibido se comprime a la ida y se estira a la vuelta: la curva es asimétrica antes de que intervenga directividad ninguna. Dónde cae entonces el LASmax depende del hemisferio: con el de más abajo, ligeramente lobulado hacia delante, llega aproximadamente un segundo antes que el sonido emitido en el punto de máxima aproximación, porque la dirección de emisión más ruidosa se alcanza un poco antes del través. Esa es la razón por la que el método lleva un hemisferio y no un nivel de fuente.

Nivel ponderado A frente al tiempo registrado para un sobrevuelo nivelado de un helicóptero: subida suave hasta LASmax sobre la ventana de 10 dB por debajo y descenso más lento, anotado con el SEL y el EPNL del eventoNivel ponderado A frente al tiempo registrado para un sobrevuelo nivelado de un helicóptero: subida suave hasta LASmax sobre la ventana de 10 dB por debajo y descenso más lento, anotado con el SEL y el EPNL del evento

Dos asimetrías en una misma curva, y ninguna es un artefacto del modelo. El = 78,5 dB(A) llega a los 64,56 s, un segundo entero antes que el sonido emitido en el punto de máxima aproximación (65,56 s), porque la dirección más ruidosa del hemisferio se alcanza un poco antes del través. Y la ventana de 10 dB por debajo ocupa 9,4 s por delante del máximo y 11,5 s por detrás: el tiempo retardado comprime la aproximación y estira el alejamiento. Integrar sus 20,9 s enteros y normalizar a un segundo da SEL = 88,8 dB(A), 10,3 dB por encima del máximo que marcaría el sonómetro.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
# Hemisferio sintético tipo helicóptero en la malla estándar de 31 bandas y 10°.
freqs = 1000.0 * 10.0 ** (np.arange(-20, 11) / 10.0) # tercios 10 Hz-10 kHz
az = np.arange(-90.0, 91.0, 10.0)
po = np.arange(0.0, 181.0, 10.0)
spectrum = 88.0 - 12.0 * np.log10(freqs / 100.0) ** 2 # joroba en baja-media
levels = (spectrum[None, None, :] - 0.045 * np.abs(po - 80.0)[None, :, None]
- 0.02 * np.abs(az)[:, None, None])
h = aircraft.RotorcraftHemisphere(freqs, az, po, levels)
speed = 30.87 # 60 kt, en m/s
t = np.arange(0.0, 130.01, 0.5)
track = np.column_stack([np.zeros_like(t), speed * (t - 65.0),
np.full_like(t, 150.0)])
event = aircraft.rotorcraft_event_level(
[h], [speed], [0.0], t, track, (120.0, 0.0),
ground=aircraft.RotorcraftGround(flow_resistivity="D"))
event.plot(language="es")
plt.show()

Los flujos de trabajo con trazas radar pueden pasar directamente los valores suavizados por punto de airspeed, path_angle, heading y bank_angle de un RotorcraftTrackState en lugar de derivarlos de las posiciones; cuando se derivan, la trayectoria está en metros y segundos, así que la base de datos de velocidades debe estar entonces en m/s.

rotorcraft_noise_contour evalúa el mismo evento sobre una malla completa en una pasada vectorizada por paso de emisión y reduce el historial de cada receptor a la huella SEL (metric="exposure") o LASmax (metric="maximum"):

import numpy as np
from phonometry import aircraft
res = aircraft.rotorcraft_noise_contour(
hemispheres, speeds, angles, times, positions,
x=np.linspace(-2000.0, 2000.0, 81),
y=np.linspace(-3000.0, 3000.0, 121),
metric="exposure",
ground=aircraft.RotorcraftGround(flow_resistivity="D"))
res.plot() # contornos SEL rellenos

El suelo puede variar entre receptores sin un modelo de elevación completo: flow_resistivity y ground_elevation del RotorcraftGround aceptan un valor por punto de malla (forma (len(y), len(x))), y el modelo de dos rayos de cada receptor usa entonces sus valores locales.

Dos mapas de contornos rellenos de nivel de exposición sonora del mismo sobrevuelo nivelado de un helicóptero sobre una malla de 3 km por 4 km, con la traza corriendo de norte a sur por el origen y el receptor del evento marcado a 120 m del costado. A la izquierda, pasto uniforme de clase D de CNOSSOS: los contornos son bandas suaves paralelas a la traza, que se ensanchan desde unos 300 m en el nivel de 95 dB hasta la malla entera en 65 dB. A la derecha, la misma pasada con una franja dura de 600 m que cruza la traza en ángulo recto, aportada como mapa de resistividad de flujo por punto de malla: dentro de la franja, marcada por dos líneas de puntos, todos los contornos se escalonan hacia fuera unos cientos de metros, así que la huella se hincha donde el suelo es reflectanteDos mapas de contornos rellenos de nivel de exposición sonora del mismo sobrevuelo nivelado de un helicóptero sobre una malla de 3 km por 4 km, con la traza corriendo de norte a sur por el origen y el receptor del evento marcado a 120 m del costado. A la izquierda, pasto uniforme de clase D de CNOSSOS: los contornos son bandas suaves paralelas a la traza, que se ensanchan desde unos 300 m en el nivel de 95 dB hasta la malla entera en 65 dB. A la derecha, la misma pasada con una franja dura de 600 m que cruza la traza en ángulo recto, aportada como mapa de resistividad de flujo por punto de malla: dentro de la franja, marcada por dos líneas de puntos, todos los contornos se escalonan hacia fuera unos cientos de metros, así que la huella se hincha donde el suelo es reflectante

El entregable de todo el método, y lo que le hace el suelo. Sobre pasto uniforme la huella es una banda a lo largo de la traza, con la anchura que le fijan el hemisferio y la distancia oblicua. Dale a esa misma pasada una franja dura de 600 m cruzando la traza, una plataforma, una pista, un lago, y todos los contornos se escalonan hacia fuera dentro de ella, porque la reflexión deja de absorberse. Ese escalón es el mapa de flow_resistivity por receptor haciendo su trabajo; un estudio que deje puesto el "G" por defecto está dibujando la imagen de la derecha en todas partes.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
x = np.linspace(-1500.0, 1500.0, 61)
y = np.linspace(-2000.0, 2000.0, 81)
sigma = np.where(np.abs(y)[:, None] < 300.0, 20.0e6, # la franja dura
np.full((y.size, x.size), 200.0e3)) # pasto en el resto
fig, axes = plt.subplots(1, 2, figsize=(11, 6.4))
for ax, ground in ((axes[0], aircraft.RotorcraftGround(flow_resistivity="D")),
(axes[1], aircraft.RotorcraftGround(flow_resistivity=sigma))):
res = aircraft.rotorcraft_noise_contour(
[h], [speed], [0.0], times, positions, x=x, y=y,
metric="exposure", ground=ground)
res.plot(ax=ax, language="es") # la gráfica va en kilómetros
ax.plot(positions[:, 0] / 1000.0, positions[:, 1] / 1000.0, "k--", lw=1.4)
plt.show()

Terreno: el plano medio del suelo y el apantallamiento

Sección titulada «Terreno: el plano medio del suelo y el apantallamiento»

La Doc 32, 1.ª ed., supone terreno plano. La guía de modelado NORAH2 de EASA (Olsen et al. 2024), que el resto de esta página sigue a nivel de ecuación, añade la maquinaria para emplazamientos reales. Una sección vertical variable se representa por su plano medio del suelo (Ec. 36-40), la recta de mínimos cuadrados a través de la polilínea del terreno calculada en forma cerrada; la fuente y el receptor entran en las ecuaciones de suelo plano con sus alturas equivalentes, medidas ortogonalmente a ese plano y con una cota inferior de 0,1 m. El suelo que cambia de tipo a lo largo del camino promedia su resistividad de flujo por el logaritmo, ponderada por la longitud de cada segmento (Ec. 41).

Dos paneles apilados. El de arriba es una sección de terreno de 800 m de largo que sube unos 30 m con dos ondulaciones, con el plano medio del suelo de mínimos cuadrados dibujado como una línea a trazos de pendiente 0,034; están marcados una fuente de helicóptero a 60 m sobre el origen de la sección y un receptor a 1,2 m sobre el terreno en el extremo opuesto, y de cada uno se dibuja la altura vertical verdadera como una línea de puntos que cae al terreno y la altura equivalente como una perpendicular continua al plano ajustado, rotuladas 58 m para la fuente y 5,1 m para el receptor. El panel inferior compara el ajuste por efecto de suelo resultante frente a la frecuencia de tercio de octava: calculado con las alturas verdaderas de 60 m y 1,2 m, el peine tiene su primer mínimo profundo cerca de 250 Hz, mientras que calculado con las alturas equivalentes de 58 m y 5,1 m el mínimo baja hasta unos 125 Hz y todo el patrón de interferencia se desplaza, apartándose varios decibelios de la curva de alturas verdaderas en la mitad del intervaloDos paneles apilados. El de arriba es una sección de terreno de 800 m de largo que sube unos 30 m con dos ondulaciones, con el plano medio del suelo de mínimos cuadrados dibujado como una línea a trazos de pendiente 0,034; están marcados una fuente de helicóptero a 60 m sobre el origen de la sección y un receptor a 1,2 m sobre el terreno en el extremo opuesto, y de cada uno se dibuja la altura vertical verdadera como una línea de puntos que cae al terreno y la altura equivalente como una perpendicular continua al plano ajustado, rotuladas 58 m para la fuente y 5,1 m para el receptor. El panel inferior compara el ajuste por efecto de suelo resultante frente a la frecuencia de tercio de octava: calculado con las alturas verdaderas de 60 m y 1,2 m, el peine tiene su primer mínimo profundo cerca de 250 Hz, mientras que calculado con las alturas equivalentes de 58 m y 5,1 m el mínimo baja hasta unos 125 Hz y todo el patrón de interferencia se desplaza, apartándose varios decibelios de la curva de alturas verdaderas en la mitad del intervalo

Por qué existe la construcción. El receptor está a 1,2 m sobre el terreno, pero el terreno bajo él está 4 m por encima del plano que ajusta la sección, así que su altura equivalente es de 5,1 m, y el efecto de suelo es función de las alturas equivalentes, no de las verdaderas. Cuatro metros de relieve local mueven el primer mínimo de interferencia una octava. La cota inferior de 0,1 m existe para el caso contrario, un receptor en una hondonada por encima de la cual pasa el plano ajustado.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
d = np.linspace(0.0, 800.0, 33)
z = 0.035 * d + 6.0 * np.sin(d / 90.0) + 2.5 * np.sin(d / 31.0)
plane = aircraft.mean_ground_plane(d, z)
m, c = float(plane.slope), float(plane.intercept)
def equivalent(point):
"""Altura medida ortogonalmente al plano ajustado, con mínimo de 0,1 m."""
return max(abs(point[1] - m * point[0] - c) / np.hypot(1.0, m), 0.1)
src, rcv = (0.0, 60.0), (800.0, float(z[-1]) + 1.2)
freqs = 1000.0 * 10.0 ** (np.arange(-13, 11) / 10.0)
fig, (ax, ax2) = plt.subplots(2, 1, figsize=(10, 8))
plane.plot(ax=ax, language="es")
for heights, style in (((src[1] - z[0], 1.2), "--"),
((equivalent(src), equivalent(rcv)), "-")):
ax2.semilogx(freqs, aircraft.ground_effect_adjustment(
freqs, heights[0], heights[1], rcv[0], flow_resistivity="D"), style)
plt.show()

Cuando el terreno bloquea la línea de visión, el sonido sigue el camino convexo más corto sobre él (la guía NORAH2 lo llama la goma elástica) y cada vértice tocado es una arista de difracción. La atenuación combina la difracción pura de la diferencia de camino (Ec. 42-44, , con tope de 25 dB) con los efectos de suelo del lado fuente y del lado receptor, cada uno sobre su propio plano medio y ponderado por la difracción de su camino imagen (Ec. 45-47, el esquema CNOSSOS-EU que adopta la guía NORAH2). El efecto de suelo no se evalúa por separado en ese régimen.

Si todo eso merece o no la pena es una cuestión de longitudes de onda. El apantallamiento lo gobierna la diferencia de camino sobre el obstáculo medida en longitudes de onda, la atenuación crece con y tiene un tope de 25 dB, así que un metro de diferencia de camino vale poco en 100 Hz y muchísimo en 4 kHz. Para un helicóptero la geometría rara vez aparece: la fuente está normalmente a cientos de metros de altura, así que la línea de visión solo se rompe para receptores muy apartados a un lado o detrás de crestas, que es justo donde los niveles ya son bajos. Cerca de la traza, el terreno actúa a través del plano medio y de las alturas equivalentes de más arriba, no por apantallamiento. La regla práctica es ejecutar primero una sección con terrain_screening_adjustment en el receptor de peor pinta, y pagar el modelo de elevaciones completo solo si esa sección resulta estar apantallada.

from phonometry import diffraction_attenuation
bandas = [63.0, 250.0, 1000.0, 4000.0]
diffraction_attenuation(bandas, 0.0, edge_height=2.5) # incidencia rasante
diffraction_attenuation(bandas, 1.0, edge_height=2.5) # 1 m dentro de la sombra
Atenuación por difracción frente a la diferencia de camino para cuatro bandas de 63 Hz a 4 kHz, sobre una arista de 2,5 m: cada curva vale cero a la izquierda de su propio umbral dependiente de la banda cerca de la línea de visión, las tres bandas con C_h = 1 cruzan unos 4,8 dB en incidencia rasante mientras que la de 63 Hz cruza en 3,0 dB, y solo la curva de 4 kHz alcanza el tope de 25 dB dentro del rango representadoAtenuación por difracción frente a la diferencia de camino para cuatro bandas de 63 Hz a 4 kHz, sobre una arista de 2,5 m: cada curva vale cero a la izquierda de su propio umbral dependiente de la banda cerca de la línea de visión, las tres bandas con C_h = 1 cruzan unos 4,8 dB en incidencia rasante mientras que la de 63 Hz cruza en 3,0 dB, y solo la curva de 4 kHz alcanza el tope de 25 dB dentro del rango representado

Un único número cuenta toda la historia solo cuando la longitud de onda y están fijos a la vez: la curva de 4 kHz ya está en el tope de 25 dB en = 0,68 m, la de 1 kHz todavía sigue subiendo en = 1,5 m (22,5 dB, por debajo del tope), y la de 63 Hz solo llega a 7,2 dB ahí, frenada por su propio = 0,63 (Ec. 43, = 2,5 m) además de la longitud de onda mayor. En incidencia rasante las tres bandas con = 1 cruzan 4,8 dB, pero la de 63 Hz cruza en 3,0 dB, porque ese valor también depende de , no solo de la longitud de onda.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import diffraction_attenuation
bandas = np.array([63.0, 250.0, 1000.0, 4000.0])
delta = np.linspace(-0.4, 1.5, 441)
ld = np.array([diffraction_attenuation(bandas, float(d), edge_height=2.5)
for d in delta])
fig, ax = plt.subplots(figsize=(9, 6))
for i, etiqueta in enumerate(["63 Hz", "250 Hz", "1 kHz", "4 kHz"]):
ax.plot(delta, ld[:, i], label=etiqueta)
ax.axvline(0.0, color="0.5", linestyle="--")
ax.axhline(25.0, color="0.5", linestyle=":", label="tope de 25 dB")
ax.set(xlabel="Diferencia de camino δ [m]",
ylabel="Atenuación por difracción ΔLd [dB]")
ax.legend()
plt.show()

mean_ground_plane, mean_flow_resistivity y diffraction_attenuation exponen las piezas; terrain_screening_adjustment ejecuta la sección completa:

import numpy as np
from phonometry import aircraft
d = [0.0, 150.0, 260.0, 300.0, 340.0, 420.0, 600.0] # distancias de sección
z = [0.0, 4.0, 48.0, 62.0, 40.0, 8.0, 2.0] # alturas del terreno
freqs = 1000.0 * 10.0 ** (np.arange(-13, 11) / 10.0)
res = aircraft.terrain_screening_adjustment(
freqs, source=(0.0, 90.0), receiver=(600.0, 3.2), distances=d, heights=z,
flow_resistivity="D")
res.screened, res.path_difference # True, la delta de la goma elástica
res.adjustment # por banda, sustituye al ΔLg plano
res.plot() # la geometría de la sección
Sección de apantallamiento por terreno con una fuente de helicóptero, una colina que bloquea la línea de visión al micrófono y el camino difractado sobre su cresta, sobre el ajuste por banda de suelo y apantallamiento comparado con el peine de suelo planoSección de apantallamiento por terreno con una fuente de helicóptero, una colina que bloquea la línea de visión al micrófono y el camino difractado sobre su cresta, sobre el ajuste por banda de suelo y apantallamiento comparado con el peine de suelo plano

La colina vale 0,766 m de diferencia de camino, y ese único número es todo el espectro. Es una novena parte de la longitud de onda en 50 Hz y casi nueve longitudes de onda en 4 kHz, así que la curva apantallada marca −7,3 dB en la banda más baja y satura cerca del tope de 25 dB a partir de unos 2,5 kHz: 23,9 dB en 4 kHz. Leída frente al peine de suelo plano, la colina gana 12,3 dB en 50 Hz y unos 25 dB en lo alto del intervalo. El apantallamiento por terreno es un instrumento de alta frecuencia, y no arregla una queja de baja frecuencia.

Mostrar el código de esta figura
import matplotlib.pyplot as plt
import numpy as np
from phonometry import aircraft
freqs = 1000.0 * 10.0 ** (np.arange(-13, 11) / 10.0) # tercios 50 Hz-10 kHz
d = np.array([0.0, 150.0, 260.0, 300.0, 340.0, 420.0, 600.0])
z = np.array([0.0, 4.0, 48.0, 62.0, 40.0, 8.0, 2.0])
res = aircraft.terrain_screening_adjustment(
freqs, (0.0, 90.0), (600.0, 3.2), d, z, flow_resistivity="D")
flat = aircraft.ground_effect_adjustment(freqs, 90.0, 1.2, 600.0,
flow_resistivity="D")
fig, (ax, ax2) = plt.subplots(2, 1, figsize=(9, 7))
res.plot(ax=ax, language="es")
ax2.axhline(0.0, color="0.5", linewidth=1.0)
ax2.semilogx(freqs, flat, ls="--", marker="s", markersize=3,
label="Suelo plano (sin colina)")
ax2.semilogx(freqs, res.adjustment, marker="o", markersize=3,
label="Apantallado por la colina (Ec. 45-47)")
ax2.set(xlabel="Frecuencia central de banda de tercio de octava [Hz]",
ylabel="Ajuste de suelo y apantallamiento [dB]")
ax2.grid(True, which="both", alpha=0.3)
ax2.legend()
plt.show()

El evento y el contorno funcionan sobre emplazamientos reales pasando un modelo digital de elevaciones en el RotorcraftGround: terrain=(x, y, z) en el marco de la trayectoria. Cada par emisión-receptor muestrea entonces su propia sección vertical con paso terrain_resolution (por defecto, el tamaño de celda del modelo) y la evalúa con la maquinaria anterior; el suelo del receptor sale del modelo. El coste crece con puntos de trayectoria por puntos de malla, así que con terreno conviene mantener mallas de contorno moderadas.

res = aircraft.rotorcraft_event_level(
hemispheres, speeds, angles, times, positions, receiver=(1200.0, 300.0),
ground=aircraft.RotorcraftGround(terrain=(tx, ty, tz),
flow_resistivity="D"))

La implementación está anclada en la Tabla 4 de la guía NORAH2 (las 31 bandas), la divergencia inversa al cuadrado de forma cerrada, los límites analíticos de suelo rígido y rasante del efecto de suelo, consultas bilineales fuera de nodo sobre los hemisferios de referencia de los once tipos de helicóptero, símplices de interpolación comprobados a mano, cinemática de forma cerrada y la integral lorentziana del sobrevuelo. De extremo a extremo reproduce los casos ARP de verificación del prototipo NORAH2:

MagnitudOráculoCoincidencia
Niveles de banda, 31 bandasTabla 4 de la guía NORAH2exacta
Ángulos de emisiónprototipo NORAH2, casos ARP0,01°
Tiempo retardadoel mismo0,02 s
Nivel por paso, suelo duro, hasta 18 kmel mismo0,08 dB(A)
el mismo0,03 dB
SELel mismo0,05 dB en suelo duro, 0,4 dB en blando
Malla de contorno, 187 micrófonoscaso 3 ARP0,7 dB en el peor caso
el mismo0,1 dB
EPNLel mismo≈ 1,3 dB (véase más abajo)
LASmax/SEL de estacionario, 8 micrófonoscaso 4 ARP (estacionario sin efecto suelo)0,45 dB en el peor caso

La derivación de la Tabla 3 está anclada además en forma cerrada (la identidad anillo-borde, bins de φ constante calculados a mano, los desplazamientos exactos del Enfoque 3), y la fila de estacionario de la tabla es el caso de estacionario sin efecto suelo del prototipo reproducido con las convenciones del propio prototipo pasadas explícitamente: mapping="bearing" y su corrección de base de datos de +8 dB como offset_db. Sus ocho micrófonos abarcan rumbos, elevaciones, alturas de receptor de 0,01 m a 8,2 m y cuatro resistividades de flujo; el residuo culmina en los micrófonos del nadir, donde la interferencia amortiguada del prototipo más se aparta de la Ec. 30 coherente publicada.

La maquinaria de terreno está anclada en forma cerrada: el plano medio del suelo es exacto en perfiles lineales y simétricos, una sección plana reproduce el modelo de suelo plano a precisión de máquina y un plano inclinado su rotación analítica, la resistividad media logarítmica recupera la media geométrica, la difracción rasante da el clásico , y una colina comprobada a mano fija la diferencia de camino de la goma elástica. El tratamiento del suelo por receptor valida de extremo a extremo contra el caso 3 ARP del prototipo (187 micrófonos, cada uno sobre su propia elevación: cada nivel por paso a 0,08 dB(A), SEL/LASmax a 0,05 dB, la malla de contorno a 0,15 dB) y la malla de suelo mixto del caso 2 se reproduce en una sola llamada con resistividad por receptor. La versión pública del prototipo no incluye un caso de apantallamiento reconstruible (el marco de su modelo de terreno no pudo fijarse a las salidas publicadas), así que la cadena de difracción se ancla en las formas cerradas y en su filiación CNOSSOS-EU.

  • Cubierto

    El método del hemisferio de ECAC Doc 32 y la guía a nivel de ecuación NORAH2 de EASA (§A.3-A.5): el hemisferio de ruido y su consulta bilineal (RotorcraftHemisphere, hemisphere_source_level), los tres ajustes de propagación (spherical_spreading_adjustment, atmospheric_adjustment, ground_effect_adjustment, el modelo de Chien-Soroka con la impedancia de Delany-Bazley y las clases de resistividad de flujo CNOSSOS), la interpolación entre condiciones de vuelo (flight_condition_weights, interpolated_source_level), la derivación de fuente de estacionario, ralentí y rodaje de la Tabla 3 (hover_ring_hemisphere, hover_derived_hemisphere), la cinemática de la trayectoria (flight_path_kinematics), el SEL, LASmax y EPNL de evento único (rotorcraft_event_level), los contornos en malla de tierra (rotorcraft_noise_contour) y la cadena de plano medio del suelo y apantallamiento por terreno (mean_ground_plane, mean_flow_resistivity, diffraction_attenuation, terrain_screening_adjustment). Validado contra la Tabla 4 de la guía NORAH2, límites geométricos y rasantes en forma cerrada, y de extremo a extremo contra los casos de verificación ARP del prototipo NORAH2, incluida su operación de estacionario sin efecto suelo.

  • No cubierto

    El recurso del §A.3.5 para un tipo sin ningún dato de estacionario (dos micrófonos laterales de vuelo nivelado corregidos al círculo de estacionario de 150 m por el método integrado del Anexo 16 de la OACI) es una cadena de corrección de medida que este módulo, que consume hemisferios ya reducidos, no modela. Con phonometry no se distribuye ninguna base de datos de hemisferios, y no hay lector de ficheros NORAH: el método está implementado, los datos no, así que los arrays salen de una campaña de medida o de la base de datos de referencia NORAH2 y los monta quien lee. La refracción por gradientes atmosféricos queda fuera de la propia Doc 32, igual que la interpolación entre condiciones de vuelo, que sigue en su lugar la guía NORAH2.

  • Chien, C. F. y Soroka, W. W. (1975). Sound propagation along an impedance plane. Journal of Sound and Vibration, 43(1), 9-20. https://doi.org/10.1016/0022-460X(75)90200-XLa solución de interferencia de dos rayos sobre un plano de impedancia que sustenta el ajuste de efecto de suelo.
  • 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-9El modelo de impedancia de un parámetro (resistividad de flujo) que evalúa el efecto de suelo.
  • European Civil Aviation Conference. (2026). Report on standard method of computing rotorcraft noise contours (ECAC.CEAC Doc 32, 1.ª ed.). El método estándar de contornos de ruido de helicópteros cuyo modelo de fuente por hemisferio y ajustes de propagación implementa esta página. El PDF enlazado es la descarga gratuita; el documento está catalogado en la página de documentos de ECAC (https://www.ecac-ceac.org/documents/ecac-documents-and-international-agreements).
  • Kephalopoulos, S., Paviotti, M. y Anfosso-Lédée, F. (2012). Common noise assessment methods in Europe (CNOSSOS-EU) (EUR 25379 EN). Oficina de Publicaciones de la Unión Europea. https://doi.org/10.2788/31776Las clases de suelo por resistividad de flujo 'A'-'H' que acepta ground_effect_adjustment.
  • Olsen, H., Tuinstra, M. y van Oosten, N. (2024). Rotorcraft noise modelling guidance (Research Project NOISE SC01, entregable D1.5d, contrato EASA.2020.FC.06). European Union Aviation Safety Agency. La guía a nivel de ecuación (Ec. 13-35) que sustenta la implementación, con los valores de atenuación de la Tabla 4 y los hemisferios de referencia usados como oráculos. Alcance implementado (§A.3-A.5): el hemisferio de ruido, la divergencia esférica, la atenuación atmosférica (ISO 9613-1, Tabla 4), el efecto de suelo de Chien-Soroka (impedancia de Delany-Bazley, resistividad de flujo CNOSSOS), la interpolación entre condiciones de vuelo (Ec. 3-10), la cinemática de la trayectoria (Ec. 16-21 / Doc 32 Ec. 8-10), el tiempo registrado (Ec. 22), las métricas de evento único SEL/LASmax y EPNL (Doc 32 Ec. 27/28, Anexo 16 de la OACI Ap. 2), el plano medio del suelo y las alturas equivalentes (Ec. 36-40), la resistividad de flujo media logarítmica (Ec. 41), la cadena de apantallamiento por terreno (Ec. 42-47 con los apéndices de caminos de ruido de la guía; filiación CNOSSOS-EU) y la derivación de fuente de estacionario y ralentí de la Tabla 3 del §A.3.5 (extensión anillo-hemisferio con φ constante, desplazamientos de los Enfoques 2/3, selección de rodaje). Solo queda fuera de la implementación el recurso del §A.3.5 sin datos de estacionario (dos micrófonos laterales corregidos al círculo de estacionario de 150 m por el método integrado del Anexo 16 de la OACI). El PDF enlazado es la descarga gratuita; el proyecto está catalogado en la página del proyecto en EASA (https://www.easa.europa.eu/en/research-projects/environmental-research-rotorcraft-noise).