<!-- canonical: https://jmrplens.github.io/phonometry/es/environment/sources/cnossos-rail-emission/ -->
Source: https://jmrplens.github.io/phonometry/es/environment/sources/cnossos-rail-emission/

Una carretera es una única línea fuente a 5 cm del pavimento. Una vía férrea son
**dos**, una a la altura de los ejes y otra a la del techo, porque un tren radia
desde puntos separados cuatro metros que se apantallan de forma distinta. El
apartado 2.3 del **Anexo II de la Directiva 2002/49/CE**, sustituido por los
métodos CNOSSOS-EU, construye ambas a partir de un espectro de rugosidad, unas
pocas funciones de transferencia y el flujo de tráfico.

Esta guía cubre la fuente ferroviaria, el apartado 2.3 del Anexo II con la base
de coeficientes del Apéndice G. La fuente viaria (2.2, Apéndice F) y el modelo
de propagación CNOSSOS-EU (2.5) van por separado.

## 1. Qué texto se implementa

El Anexo II es un blanco móvil y, del lado ferroviario, la superposición de
instrumentos es peor que del lado viario: la corrección de errores sustituyó el
Apéndice G **entero**, y la modificación de 2021 volvió a sustituir cinco de sus
siete tablas y reescribió tres piezas del método.

| Instrumento | Qué hace a la fuente ferroviaria |
| :--- | :--- |
| Directiva (UE) **2015/996** de la Comisión | Sustituye por completo el Anexo II. Aporta las fórmulas 2.3.1 a 2.3.18 y las Tablas G-1 a G-7. |
| **Corrección de errores** del DO L 5, 10.1.2018 | Sustituye el **Apéndice G entero** (suprime sus columnas de validez Mín./Máx. y añade los códigos descriptores a las cabeceras) y corrige la conversión de rugosidad `f = v/lambda`, donde el texto publicado dice que la velocidad va en km/h. Va en **metros por segundo**: leída al pie de la letra, la fórmula impresa se equivoca en un factor 3,6. |
| Directiva Delegada (UE) **2021/1226** de la Comisión | Sustituye íntegramente las Tablas **G-1b, G-2, G-3a, G-4 y G-7**; cambia la **regla de chirrido en curva**; convierte el ruido de puente en una **fuente independiente** construida sobre una función de transferencia en lugar de una constante; reescribe la **directividad vertical** de la fuente A; corrige tres rótulos de banda y un par de valores de la Tabla G-5. |

La biblioteca implementa el resultado consolidado, y cada tabla que se distribuye
anota en su comentario de qué instrumento procede. Tres de los cambios de 2021
son de comportamiento, no cosméticos, de modo que cualquier comparación con un
estudio anterior a 2021 debe tenerlos en cuenta: la rugosidad del carril de una
red media es ahora mucho mayor a longitudes de onda largas, la corrección por
puente tiene espectro en lugar de 1 dB o 4 dB planos, y la directividad vertical
es idénticamente nula por debajo del horizonte, donde la forma antigua daba una
corrección positiva.

## 2. Dos líneas fuente, y qué se asienta en cada una

El método sitúa **dos** líneas fuente incoherentes en el centro de la vía,
referidas al plano tangente a las dos superficies superiores de los carriles:

| Altura | Índice | Fuentes físicas asignadas |
| :--- | :--- | :--- |
| **0,5 m** (fuente A) | $h = 1$ | Ruido de rodadura (carril, rueda y superestructura de mercancías), ruido de impacto, chirrido en curva, ruido de puente, y las componentes de tracción y aerodinámicas que van bajas: engranajes, motores, carenados y pantallas. |
| **4,0 m** (fuente B) | $h = 2$ | Las componentes de tracción y aerodinámicas que van altas: escapes diésel, equipos de techo, el hueco del pantógrafo. |

Nada en el método decide por ti el reparto de la tracción. La Tabla G-5
tabula la potencia acústica de tracción **por separado para las dos alturas**, de
modo que el reparto se lee de la base de datos en lugar de suponerse; la
Directiva solo añade que, cuando una componente real queda entre las dos alturas
del modelo, su energía se distribuye proporcionalmente entre ambas.

### De una línea real a los descriptores

Los **descriptores** de las Tablas [2.3.a] y [2.3.b] son la interfaz entre un
registro nacional de material rodante y de vía y las tablas que se distribuyen:
cada dígito del código selecciona una de ellas. Un vehículo lleva cuatro dígitos
y una vía seis.

| Dígito del vehículo | Qué selecciona | Códigos | Biblioteca |
| :--- | :--- | :--- | :--- |
| 1 | Tipo de vehículo | `h` alta velocidad (> 200 km/h), `m` coche de viajeros automotor, `p` coche de viajeros remolcado, `c` tranvía urbano o metro ligero, `d` locomotora diésel, `e` locomotora eléctrica, `a` mercancías genérico, `o` otros | Elige la fila de `TractionVehicle` de la Tabla G-5 y si aplica el término de superestructura de mercancías |
| 2 | Número de ejes por vehículo | el número real | `RollingStock(axles=...)`, el $10\log_{10} N_\mathrm{a}$ de (2.3.8) |
| 3 | Tipo de freno | `c` zapata de fundición, `k` zapata de material compuesto o sinterizado, `n` sin freno sobre la banda de rodadura (disco, tambor, magnético) | `BrakeType.CAST_IRON` / `.COMPOSITE` / `.NON_TREAD` → la rugosidad de rueda de G-1a |
| 4 | Medida en la rueda | `n` ninguna, `d` amortiguadores, `s` pantallas, `o` otras | No selecciona ninguna tabla en el Apéndice G |

| Dígito de la vía | Qué selecciona | Códigos | Biblioteca |
| :--- | :--- | :--- | :--- |
| 1 | Base de la vía | `B` balasto, `S` losa, `L` puente con balasto, `N` puente sin balasto, `T` vía embebida, `O` otras | Con el dígito 3, la `TrackTransferClass` de G-3a; `L`/`N` activan además la fuente de puente de la sección 8 |
| 2 | Rugosidad de la cabeza del carril | `E` bien mantenida y muy lisa, `M` mantenimiento normal, `N` mal mantenida, `B` sin mantener y en mal estado | `RailRoughnessClass.WELL_MAINTAINED` / `.NORMAL` / `.NOT_WELL_MAINTAINED` / `.BAD` → G-1b |
| 3 | Tipo de placa de asiento | `S` blanda (150-250 MN/m), `M` media (250-800), `H` rígida (800-1 000) | La segunda mitad de la etiqueta de `TrackTransferClass`: `MONOBLOCK_MEDIUM` es «M/M» |
| 4 | Medidas adicionales | `N` ninguna, `D` amortiguador de carril, `B` barrera baja, `A` placa absorbente sobre losa, `E` carril embebido, `O` otras | Fuera del modelo de emisión |
| 5 | Juntas de carril | `N` ninguna, `S` una sola junta o aguja, `D` dos por cada 100 m, `M` más de dos por cada 100 m | La densidad de juntas $n_l$ de (2.3.12) |
| 6 | Curvatura | `N` recta, `L` 1 000-500 m, `M` por debajo de 500 y por encima de 300 m, `H` por debajo de 300 m | El radio que se pasa a `curve_squeal_excess` |

Dos selectores no tienen ningún dígito de descriptor y hay que tomarlos de la
hoja de características del vehículo: el **diámetro de rueda**
(`WheelDiameter`, que elige la función de transferencia de rueda de G-3b) y el
**filtro de contacto** (`ContactFilter`, una carga por eje en kN emparejada con
ese diámetro, Tabla G-2). Los fragmentos de esta página nombran los miembros de
la enumeración directamente por esa misma razón.

Cuando el registro no contesta, el propio método se agota: las clases de
rugosidad `N` y `B` no llevan espectro en el Apéndice G y las tiene que aportar
el Estado miembro, y lo mismo pasa con un sistema de vía que no encaje en ninguna
fila de G-3a: no hay valor por defecto ni interpolación, así que lo honrado es
declarar el espectro sustituido junto al resultado.

Para cada banda de tercio de octava, la ecuación de flujo convierte la potencia
acústica de un vehículo en potencia por metro de línea (2.3.2):

$$
L'_{W,\mathrm{eq,line},i}(\psi,\varphi) = L_{W,0,\mathrm{dir},i}(\psi,\varphi)
  + 10\,\log_{10}\!\left(\frac{Q}{1000\,v}\right),
$$

o, para un vehículo parado, la misma potencia direccional referida al tiempo al
ralentí sobre el periodo de referencia (2.3.4):

$$
L'_{W,\mathrm{eq,line},i}(\psi,\varphi) = L_{W,0,\mathrm{dir},i}(\psi,\varphi)
  + 10\,\log_{10}\!\left(\frac{T_\mathrm{idle}}{T_\mathrm{ref}\,L}\right).
$$

La segunda sustituye a la primera; no se suma a ella. $Q$ va en vehículos por
hora, $v$ en km/h, $L$ es la longitud del tramo de vía en metros, y
$T_\mathrm{idle}$ y $T_\mathrm{ref}$ comparten la unidad de tiempo en que se
den. Atención a la unidad: el término de flujo usa km/h, mientras que la
conversión de rugosidad dos apartados más abajo usa m/s. Las dos son correctas,
y confundirlas es el error más caro disponible en este modelo.

*A 160 km/h la vía es fuente A en casi todas partes: la línea de 4,0 m solo lleva
el ruido de tracción de la unidad, unos veinticinco decibelios por debajo. Es por
encima de 200 km/h, cuando aparece el ruido aerodinámico en el pantógrafo, cuando
la fuente B empieza a importar.*

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

```python

from phonometry import (
    BrakeType, ContactFilter, RailRoughnessClass, RailwayTrack, RailwayVehicle,
    RollingStock, TrackTransferClass, TractionVehicle, WheelDiameter,
    aerodynamic_sound_power, contact_filter, impact_roughness_single,
    rail_roughness, railway_source_power, track_transfer, traction_sound_power,
    wheel_roughness, wheel_transfer,
)

stock = RollingStock(
    axles=4,
    wheel_roughness=wheel_roughness(BrakeType.NON_TREAD),
    contact_filter=contact_filter(ContactFilter.LOAD_50_DIAMETER_920),
    wheel_transfer=wheel_transfer(WheelDiameter.MM_920),
    traction=traction_sound_power(TractionVehicle.ELECTRIC_MULTIPLE_UNIT),
    aerodynamic=aerodynamic_sound_power(),
)
track = RailwayTrack(
    rail_roughness=rail_roughness(RailRoughnessClass.NORMAL),
    track_transfer=track_transfer(TrackTransferClass.MONOBLOCK_MEDIUM),
    impact_roughness=impact_roughness_single(),
)
result = railway_source_power(
    RailwayVehicle(stock, flow_rate=96.0, speed=160.0), track, phi=90.0, psi=10.0,
)
result.plot(language="es")
plt.show()
```

</details>

*Izquierda: la tabla de asignación de esta sección, dibujada. El ruido de
rodadura es toda la fuente A a 160 km/h; la tracción es la única componente
presente en las dos alturas, y las entradas aerodinámica y de puente de
`result.components` vuelven como `nan` porque ninguna está activa aquí, que es la
regla de asignación mostrándose. Derecha: la fuente B es casi plana y luego
**salta**, porque el ruido aerodinámico solo se modela por encima de 200 km/h; la
fuente A no deja de subir. La fuente B no adelanta a la fuente A en este vehículo
a ninguna velocidad. La separación se cierra de 29,9 dB a 200 km/h a 18,7 dB a
350 km/h, y ese estrechamiento es el sentido en que el pantógrafo empieza a
importar.*

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

```python

# `stock`, `track`, `railway_source_power` y `RailwayVehicle` vienen del
# fragmento de la figura anterior; el resultado lleva sus propios ejes de frecuencia.
def total(bands):
    return 10.0 * np.log10(np.sum(10.0 ** (np.asarray(bands) / 10.0)))

fig, (izq, der) = plt.subplots(1, 2, figsize=(12, 4.6))
result = railway_source_power(
    RailwayVehicle(stock, flow_rate=96.0, speed=160.0), track, phi=90.0, psi=10.0)
for name, spectrum in result.components.items():
    for row, height in ((0, "0,5 m"), (1, "4,0 m")):
        values = np.asarray(spectrum)[row]
        if np.any(np.isfinite(values)):
            izq.semilogx(result.third_octave_frequencies, values,
                         label=f"{name} @ {height}")
izq.set(xlabel="Banda de 1/3 de octava [Hz]", ylabel="Potencia acústica [dB]")
izq.legend(fontsize="small")

velocidades = np.linspace(60.0, 350.0, 30)
for row, label in [(0, "Fuente A (0,5 m)"), (1, "Fuente B (4,0 m)")]:
    der.plot(velocidades, [
        total(railway_source_power(
            RailwayVehicle(stock, flow_rate=96.0, speed=float(v)),
            track, phi=90.0, psi=10.0).line_power[row]) for v in velocidades],
        label=label)
der.axvline(200.0, ls=":", label="Umbral aerodinámico")
der.set(xlabel="Velocidad v [km/h]", ylabel="Potencia de línea total [dB/m]")
der.legend(fontsize="small")
plt.show()
```

</details>

## 3. Ruido de rodadura: entra rugosidad, sale potencia acústica

El ruido de rodadura es la rueda y el carril excitándose mutuamente a través de
la rugosidad de las dos superficies de rodadura. El método separa la causa de la
radiación:

- **causa**: la rugosidad del carril $L_\mathrm{r,TR}$ (la segunda tabla de la G-1,
  aquí G-1b, que selecciona el
  dígito 2 del descriptor de vía) y la rugosidad de la rueda $L_\mathrm{r,VEH}$
  (la primera, G-1a, que selecciona el tipo de freno, dígito 3 del descriptor
  de vehículo), sumadas energéticamente y filtradas después por el **filtro de
  contacto** $A_3$ (Tabla G-2), que da cuenta del tamaño finito de la huella de
  contacto:

$$
L_{\mathrm{R,TOT},i} = 10\,\log_{10}\!\left(10^{L_{\mathrm{r,TR},i}/10} + 10^{L_{\mathrm{r,VEH},i}/10}\right) + A_{3,i};
$$

- **radiación**: tres funciones de transferencia independientes de la velocidad
  convierten esa rugosidad en potencia acústica por eje, una para la vía
  (Tabla G-3a, que selecciona los códigos de traviesa y placa de asiento), otra
  para la rueda (Tabla G-3b, que selecciona el diámetro de rueda) y otra para la
  superestructura de un vagón de mercancías (Tabla G-3c, que vale 0,0 dB en
  todas las bandas):

$$
L_{W,0,\mathrm{TR},i} = L_{\mathrm{R,TOT},i} + L_{H,\mathrm{TR},i} + 10\,\log_{10} N_\mathrm{a},
$$

y la misma suma para la rueda y la superestructura. Las tres componentes se
suman después energéticamente, y las tres se asientan en la fuente A.

El término de superestructura se aplica solo al tipo de vehículo `a`
(mercancías). Se emplea una velocidad mínima de **50 km/h**, o 30 km/h para
tranvías y metro ligero, para determinar la rugosidad, lo que congela el espectro
de la fuente por debajo de ella; el término de flujo sigue usando la velocidad
real. Mientras un vehículo está al ralentí, el ruido de rodadura se excluye por
completo.

## 4. La conversión de longitud de onda a frecuencia

La rugosidad se tabula frente a la **longitud de onda** y se lee en
$\lambda = v/f$, así que todo el espectro de rugosidad se desplaza a lo largo del
eje de frecuencias a medida que el tren acelera. Esa es la razón de que un tren
rápido suene brillante y uno lento no: la misma rugosidad de escala milimétrica
excita una banda más alta.

*La misma vía y la misma rueda a tres velocidades. La curva no cambia de forma,
se desplaza: multiplicar la velocidad por 2,7 la mueve bastante más de una octava
y la levanta, porque las longitudes de onda largas de una red media son las
rugosas.*

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

```python

from phonometry import (
    RAILWAY_THIRD_OCTAVE_BANDS, BrakeType, ContactFilter, RailRoughnessClass,
    contact_filter, rail_roughness, roughness_to_frequency,
    total_effective_roughness, wheel_roughness,
)

rail = rail_roughness(RailRoughnessClass.NORMAL)
wheel = wheel_roughness(BrakeType.NON_TREAD)
filt = contact_filter(ContactFilter.LOAD_50_DIAMETER_920)

fig, ax = plt.subplots()
for speed in (60.0, 160.0, 300.0):
    total = total_effective_roughness(
        roughness_to_frequency(rail[1], rail[0], speed),
        roughness_to_frequency(wheel[1], wheel[0], speed),
        roughness_to_frequency(filt[1], filt[0], speed),
    )
    ax.semilogx(RAILWAY_THIRD_OCTAVE_BANDS, total, label=f"v = {speed:g} km/h")
ax.legend()
plt.show()
```

</details>

Sobre esta conversión hay dos cosas que conviene decir con claridad, porque la
Directiva no zanja ninguna de las dos.

**La velocidad va en metros por segundo.** El texto publicado en 2015 dice km/h
en los dos sitios donde aparece la conversión, lo que situaría el espectro 3,6
veces demasiado bajo en frecuencia. La corrección de errores de 2018 arregló
ambos. Esta biblioteca implementa la forma corregida.

**La regla de interpolación es prosa, no una fórmula.** Todo lo que dice la
Directiva es que «las dos bandas de tercio de octava correspondientes definidas
en el dominio de longitud de onda se promediarán energética y
proporcionalmente», sin fórmula ni ejemplo numérico. Se distribuyen dos lecturas,
y la que va por defecto es la que reproduce el propio módulo de fuente de
referencia de la Comisión:

```python
from phonometry import RoughnessInterpolation

RoughnessInterpolation.PROPORTIONAL   # niveles interpolados linealmente en lambda
RoughnessInterpolation.ENERGY         # energías interpoladas linealmente en lambda
```

Difieren hasta cerca de 1 dB en un tramo de pendiente pronunciada del espectro.
Este es el mayor riesgo de interpretación del modelo ferroviario, y una
implementación que no diga qué regla usa no es comparable con otra.

Una tercera ambigüedad, menor, se resuelve sin conmutador. La modificación de
2021 puso las tablas que sustituyó en la serie normalizada de tercios de octava
de longitud de onda, pero su punto (20)(a) sustituye solo «la segunda tabla» de
la G-1, así que la rugosidad de rueda de la primera se sigue imprimiendo en
120, 12, 3,2 y 1,2 mm donde el resto de tablas ya
dice 125, 12,5, 3,15 y 1,25 mm. En lugar de forzar ambas a una rejilla común,
cada tabla se remuestrea en la rejilla que la Directiva imprime para ella.

## 5. Ruido de impacto y chirrido en curva

El **ruido de impacto** de juntas, agujas y cruzamientos se añade como una
rugosidad ficticia adicional, sumada energéticamente al total antes de aplicar
las funciones de transferencia (2.3.11). La Tabla G-4 se da para una junta cada
100 m, y cualquier otra densidad la escala (2.3.12):

$$
L_{\mathrm{R,IMPACT},i} = L_{\mathrm{R,IMPACT-SINGLE},i}
  + 10\,\log_{10}\!\left(\frac{n_l}{0{,}01}\right).
$$

Para vía con juntas se prescribe un valor por defecto
$n_l = 0{,}01\ \text{m}^{-1}$. El ruido
de impacto no se modeliza por debajo de la velocidad mínima ni al ralentí. El
incremento se aplica desde 50 m antes de la junta hasta 50 m después, lo que es
una instrucción de **segmentación**: el modelo da la potencia de la fuente, y
corresponde a la segmentación de la vía colocarla sobre los 100 m correctos.

El **chirrido en curva** es un exceso que se añade a la potencia acústica de
rodadura en todas las frecuencias. La regla es la que sustituyó la modificación
de 2021, no la de 2015:

| Vehículo | Condición | Exceso |
| :--- | :--- | :--- |
| Tren | $300\ \text{m} < R \le 500\ \text{m}$ sobre al menos 50 m de curva | 5 dB |
| Tren | $R \le 300\ \text{m}$ sobre al menos 50 m de curva | 8 dB |
| Tren | aguja con $R \le 300\ \text{m}$ | 8 dB |
| Tranvía | curva o aguja con $R \le 200\ \text{m}$ | 5 dB |

```python
from phonometry import curve_squeal_excess

curve_squeal_excess(280.0)                       # 8.0 dB
curve_squeal_excess(450.0)                       # 5.0 dB
curve_squeal_excess(280.0, tram=True)            # 0.0 dB, los tranvías piden R <= 200 m
curve_squeal_excess(280.0, track_length=20.0)    # 0.0 dB, la curva es demasiado corta
```

El texto de 2015 decía «8 dB para R < 300 m y 5 dB para 300 m < R < 500 m», lo
que dejaba los dos extremos sin regla alguna aunque el mismo párrafo acotaba el
efecto a «curvas con radio inferior **o igual** a 500 m». La redacción de 2021
cierra ambos intervalos.

## 6. Ruido de tracción y ruido aerodinámico

El **ruido de tracción** se tabula por vehículo y por altura de fuente
(Tabla G-5). La Directiva solo modeliza dos condiciones de marcha, velocidad
constante (que, dice, vale igualmente cuando el tren acelera o decelera) y
ralentí, y en las dos toma la potencia de la fuente en condiciones de carga
máxima. La Tabla G-5 tabula por tanto un **único** valor por banda y altura, y el
método lo lee para las dos condiciones: que
$L_{W,0,\mathrm{const},i} = L_{W,0,\mathrm{idling},i}$ es una consecuencia de
cómo está impresa la tabla, no una afirmación física de que una locomotora al
ralentí suene tanto como una en marcha. El ralentí
solo se considera si los trenes están parados más de media hora.

El **ruido aerodinámico** solo es relevante por encima de **200 km/h** y sigue
una ley logarítmica de velocidad en torno a $v_0 = 300\ \text{km/h}$
(2.3.13, 2.3.14):

$$
L_{W,0,i} = L_{W,0,h,i}(v_0) + \alpha_{h,i}\,\log_{10}\!\left(\frac{v}{v_0}\right),
$$

con $\alpha_1 = \alpha_2 = 50$ en todas las bandas, así que duplicar la velocidad
añade 15,05 dB. La Tabla G-6 es el espectro de referencia de un vehículo de 20 m
a $v_0$: en la altura baja es de banda ancha, en la alta es prácticamente
silencioso salvo una meseta de 1,6 kHz a 3,15 kHz entre 105 y 110 dB, que es el
pantógrafo.

## 7. Directividad de la fuente

Cada fuente se corrige en los dos planos antes de añadir el término de flujo
(2.3.5). La corrección **horizontal** es un dipolo (2.3.15), 0 dB en la
perpendicular a la vía y
$10\log_{10} 0{,}01 = -20\ \text{dB}$ a lo largo de ella:

$$
\Delta L_{W,\mathrm{dir,hor},i} = 10\,\log_{10}\!\left(0{,}01 + 0{,}99\,\sin^2\varphi\right).
$$

La corrección **vertical** de la fuente A (2.3.16) depende de la banda, y es una
de las piezas que reescribió la modificación de 2021. El texto vigente suprime
las barras de valor absoluto de la forma de 2015 y hace la corrección
idénticamente nula para $\psi \le 0$:

$$
\Delta L_{W,\mathrm{dir,ver},i} = \frac{40}{3}
  \left[\tfrac{2}{3}\sin 2\psi - \sin\psi\right]
  \log_{10}\!\left(\frac{f_{\mathrm{c},i} + 600}{200}\right), \quad 0 < \psi < \pi/2,
$$

y nula en el resto. Las dos ediciones discrepan en todo el semiespacio inferior,
y también por encima de unos 41,4 grados, donde el corchete se vuelve negativo.
Ambas están disponibles, porque comparar con un estudio calculado antes de 2021
requiere la antigua:

```python
from phonometry import DirectivityEdition, vertical_directivity

vertical_directivity(-30.0)                                        # ceros
vertical_directivity(-30.0, edition=DirectivityEdition.ORIGINAL_2015)  # positivo
```

*Izquierda: las dos ediciones solo coinciden en el primer cuadrante por debajo de
41,4°, que es exactamente donde el corchete
$\tfrac{2}{3}\sin 2\psi - \sin\psi$ es positivo. Por debajo del horizonte, el
texto de 2021 devuelve 0 dB donde el de 2015 devolvía hasta +2,4 dB a 250 Hz y
60° por debajo del horizonte; por encima de 41,4° la forma vigente se vuelve
negativa y la antigua no. Un estudio calculado antes de 2021 no es comparable
banda a banda si no se declara la edición. Derecha: el dipolo horizontal vale
20 dB entre un receptor situado al lado de la vía y otro situado en su
prolongación, y por eso una vía que apunta a una vivienda es un problema distinto
de una que pasa por delante.*

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

```python

# `vertical_directivity` y `DirectivityEdition` vienen del fragmento de arriba;
# el dipolo horizontal es la propia fórmula (2.3.15), una línea de numpy.
psi = np.linspace(-89.0, 89.0, 179)
bands = {7: "250 Hz", 19: "4 kHz"}       # índices en los 24 tercios de octava
fig, (izq, der) = plt.subplots(1, 2, subplot_kw={"projection": "polar"},
                               figsize=(12, 5.0))
for band, name in bands.items():
    for edition, style in [(DirectivityEdition.CURRENT, "-"),
                           (DirectivityEdition.ORIGINAL_2015, "--")]:
        values = [float(vertical_directivity(float(a), edition=edition)[band])
                  for a in psi]
        izq.plot(np.radians(psi), values, style,
                 label=f"{name}, {edition.value}")
izq.legend(fontsize="small", loc="lower left")

phi = np.radians(np.linspace(0.0, 360.0, 361))
der.plot(phi, 10.0 * np.log10(0.01 + 0.99 * np.sin(phi) ** 2))
der.set_title("Dipolo horizontal (2.3.15)", fontsize="small")
plt.show()
```

</details>

En la fuente B solo es direccional la fuente aerodinámica, $10\log_{10}(\cos^2\psi)$
para $\psi < 0$ (2.3.17); todo lo demás a 4,0 m es omnidireccional, igual que el
ruido
de puente a 0,5 m.

Un punto de interpretación: el 2.3.15 ofrece el dipolo «por defecto [...] para
la rodadura, el impacto, el chirrido, el frenado, los ventiladores y los efectos
aerodinámicos». El ruido de tracción distinto de los ventiladores no está en esa
lista, y la Directiva no da ninguna otra directividad horizontal para él. Esta
biblioteca aplica el dipolo a todas las fuentes, que es lo que hace el módulo de
fuente de referencia de la Comisión.

## 8. Puentes

Sobre un puente el tablero también radia. El texto de 2015 añadía una constante
al ruido de rodadura, 1 dB para hormigón o fábrica y 4 dB para acero con vía
balastada. La modificación de 2021 lo sustituyó por una **fuente independiente**,
construida exactamente como una componente de rodadura pero con la función de
transferencia de puente de la Tabla G-7 (2.3.18):

$$
L_{W,0,\mathrm{bridge},i} = L_{\mathrm{R,TOT},i} + L_{H,\mathrm{bridge},i}
  + 10\,\log_{10} N_\mathrm{a}.
$$

El ruido de rodadura del vehículo sobre el puente se sigue calculando de forma
normal, con la función de transferencia del sistema de vía que hay realmente en
el puente; el término de puente se le suma. Se asienta en la fuente A y es
omnidireccional, cosa que la modificación declara de forma explícita.

La Tabla G-7 tiene exactamente dos columnas, y la Directiva las rotula por el
exceso de puente ponderado A que representan y no por un tipo constructivo:
`BridgeType.PLUS_10_DBA` selecciona la columna «+10 dB(A)» y
`BridgeType.PLUS_15_DBA` la de «+15 dB(A)». No hay tercera columna ni
interpolación, así que elegir entre las dos es un juicio sobre el tablero, hecho
antes del cálculo y registrado con él.

```python
from phonometry import BridgeType, RailwayTrack, bridge_transfer

RailwayTrack(
    rail_roughness=..., track_transfer=...,
    bridge_transfer=bridge_transfer(BridgeType.PLUS_10_DBA),   # Tabla G-7, col. 1
)
```

## 9. Entregar la fuente a un modelo de propagación

La fuente ferroviaria se deriva en **bandas de tercio de octava** y se suma
después energéticamente en bandas de octava para la propagación, que es lo que
exige el 2.3.2 y lo que hizo explícito el punto (1) de la (UE) 2021/1226. El
objeto de resultado lleva ambas:

El `result` de aquí es el que construyó el fragmento de la sección 2 (abre su
bloque `<details>` para ver el vehículo y la vía que describe). **La fila 0 es la
fuente A a 0,5 m y la fila 1 la fuente B a 4,0 m**, los $h = 1$ y $h = 2$ de la
tabla de la sección 2:

```python
result.third_octave_line_power   # (2, 24), las dos alturas en tercios de octava
result.line_power                # (2, 8), lo mismo en bandas de octava
result.total_line_power          # (8,), las dos alturas sumadas energéticamente
result.components["rolling"]     # el desglose por fuente, antes de la directividad
result.frequencies               # los 8 centros de banda de octava
result.third_octave_frequencies  # los 24 centros de tercio de octava
```

Una componente que no está activa en la condición modelada vuelve como `nan` en
lugar de como un valor de suelo, así que `components["aerodynamic"]` por debajo
de 200 km/h y `components["bridge"]` fuera de un puente son ambas todo `nan`.

Dividir una línea fuente en fuentes puntuales equivalentes queda, en palabras
del apartado 2.5.3, «fuera del alcance de la presente metodología»: una fuente
puntual que represente un tramo de longitud $dL$ simplemente lleva
$L'_{W,\mathrm{eq,line},i} + 10\log_{10}(dL)$, que es aritmética.

CNOSSOS-EU tiene **su propio** método de propagación en el apartado 2.5 del
Anexo II, y no es la ISO 9613-2. Encadenar una emisión CNOSSOS con la propagación
ISO 9613-2 de esta biblioteca es una estimación de ingeniería legítima, pero no
es la cadena normativa CNOSSOS y no debe declararse como tal.

## 10. Qué está fijado con dígitos y qué no

El Anexo II no imprime **ningún ejemplo numérico ni valor de comprobación** en
todo el 2.3 ni en el Apéndice G, así que conviene ser explícito sobre qué mide
la concordancia del conjunto de pruebas.

**Verificado contra dígitos publicados.** Todas las tablas del Apéndice G,
contra el texto del Diario Oficial del instrumento que las promulgó. Y toda la
cadena de ecuaciones de extremo a extremo, contra el libro de pruebas de emisión
que la Comisión Europea publicó con su módulo de fuente de referencia: alimentar
las ecuaciones distribuidas con la base de coeficientes de **2015** con la que se
calculó ese libro reproduce **las 34 560 filas publicadas de los veinte vehículos
cuyas entradas de catálogo están bien formadas**, es decir 17 280 casos en las
dos alturas de fuente, con 0,0055 dB, dentro de los dos decimales que imprime.
Ciento veintitrés de esos casos están versionados en el repositorio y se ejecutan
en integración continua. Los tres vehículos que quedan fuera se describen en
`tests/data/cnossos/README.md`: sus filas recogen defectos del programa de
referencia, no del método.

Esa concordancia resuelve las partes ruidosas de la base de datos y no las
silenciosas: un coeficiente veinte decibelios por debajo de su vecino no mueve
el total, de modo que las filas de relleno del catálogo de referencia y la
columna de tracción de la fuente A, que el ruido de rodadura siempre tapa, van
en el conjunto de pruebas sin quedar acotadas por él.
`tests/data/cnossos/README.md` recoge la medida.

**Verificado como ecuaciones por tablas transcritas, no de extremo a extremo.**
Todo lo que cambió la modificación de 2021. El libro de pruebas es anterior, así
que la nueva regla de chirrido en curva, la función de transferencia de puente,
la directividad vertical vigente y las cinco tablas sustituidas están fijadas una
a una, por transcripción y por aserción en forma cerrada, pero su combinación no
se ha contrastado nunca con un resultado publicado independiente.

**Sin anclaje en ningún oráculo.** La elección de la regla de interpolación del
apartado 4; el reparto proporcional de la potencia acústica de tracción cuando
una componente real queda entre las dos alturas del modelo, para el que la
Directiva no da fórmula; y la segmentación de una línea en fuentes puntuales,
que el propio método declara fuera de alcance.

## Qué cubre esta guía

El apartado 2.3 del Anexo II de la Directiva 2002/49/CE en el texto
consolidado: los descriptores de vehículo y de vía de las Tablas [2.3.a] y
[2.3.b], la potencia de línea por flujo de tráfico (2.3.1, 2.3.2, 2.3.4), la
potencia acústica direccional (2.3.5), el ruido de rodadura (2.3.6 a 2.3.10),
el ruido de impacto (2.3.11, 2.3.12), el chirrido en curva, el ruido de
tracción, el ruido aerodinámico (2.3.13, 2.3.14), la directividad de la fuente
(2.3.15 a 2.3.17) y el ruido de puente (2.3.18), junto con toda la base de
datos del Apéndice G, a través de `railway_source_power` y las funciones de
componente que la rodean.

La fuente viaria (2.2 y Apéndice F), la fuente industrial (2.4 y Apéndice H),
la fuente de aeronaves (2.6 y 2.7) y el método de propagación CNOSSOS-EU del
apartado 2.5, que es un modelo distinto del de la ISO 9613-2 implementado en
esta biblioteca. Las clases de rugosidad de carril `N` (mal mantenida) y `B`
(en mal estado) no tienen espectro en el Apéndice G y ha de aportarlas el
Estado miembro. Las demás fuentes ferroviarias del 2.3.3, como depósitos,
estaciones y megafonía, se tratan por el método industrial.

## Véase también

- Referencia de la API: [`environment.sources.cnossos_rail`](/phonometry/es/reference/api/environment/cnossos-rail/).
- [Propagación del sonido en exteriores](/phonometry/es/environment/propagation/outdoor-propagation/):
  la cadena ISO 9613-2 que lleva una potencia de fuente hasta un receptor.
- [Niveles de ruido ambiental](/phonometry/es/environment/assessment/environmental-levels/): los
  indicadores $L_\mathrm{den}$ y $L_\mathrm{night}$ para los que se trazan los mapas
  resultantes.
