diff --git a/.github/images/diagram_iso2631_5.svg b/.github/images/diagram_iso2631_5.svg index a41a21776..019b991e8 100644 --- a/.github/images/diagram_iso2631_5.svg +++ b/.github/images/diagram_iso2631_5.svg @@ -1 +1 @@ -Multiple-shock spinal-response dose and injury risk (ISO 2631-5)Vertical seat acceleration az(t)band-limited per ISO 2631-1 (0.4 Hz to 100 Hz)Spinal response Az(t) (clause 5.2, Formula 1/2)seat-to-spine transfer function H(f): 1 zero, 6 polesAcceleration dose Dz = 1.07·(Σ Az,i^6)^(1/6) (Formula 3)Az,i = positive peaks; daily dose Dzd = Dz·(td/tm)^(1/6)Compressive stress Sd = mz·Dzd (Annex C, Formula C.1)mz = 0.029 (male) / 0.025 (female) MPa per m/s²Stress variable R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, cumulated over exposure years (C.3/C.4)Injury probability P(R) = 1 − exp(−(R/α)^β) (Formula C.5)Weibull risk of lumbar injury, by sex (Table C.1/C.2) \ No newline at end of file +Multiple-shock spinal-response dose and injury risk (ISO 2631-5)Vertical seat acceleration az(t)conditioned per 5.1.3: HP 0.01 Hz (2nd order) / LP 80 Hz (4th order)not the ISO 2631-1 0.4 Hz / 100 Hz filtersSpinal response Az(t) (clause 5.2, Formula 1/2)seat-to-spine transfer function H(f): 1 zero, 6 polesAcceleration dose Dz = 1.07·(Σ Az,i^6)^(1/6) (Formula 3)Az,i = positive peaks; daily dose Dzd = Dz·(td/tm)^(1/6)Compressive stress Sd = mz·Dzd (Annex C, Formula C.1)mz = 0.029 (male) / 0.025 (female) MPa per m/s²Stress variable R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, cumulated over exposure years (C.3/C.4)Injury probability P(R) = 1 − exp(−(R/α)^β) (Formula C.5)Weibull risk of lumbar injury, by sex (Table C.1/C.2) \ No newline at end of file diff --git a/.github/images/diagram_iso2631_5_dark.svg b/.github/images/diagram_iso2631_5_dark.svg index 00d4ef4d7..66c3dbf16 100644 --- a/.github/images/diagram_iso2631_5_dark.svg +++ b/.github/images/diagram_iso2631_5_dark.svg @@ -1 +1 @@ -Multiple-shock spinal-response dose and injury risk (ISO 2631-5)Vertical seat acceleration az(t)band-limited per ISO 2631-1 (0.4 Hz to 100 Hz)Spinal response Az(t) (clause 5.2, Formula 1/2)seat-to-spine transfer function H(f): 1 zero, 6 polesAcceleration dose Dz = 1.07·(Σ Az,i^6)^(1/6) (Formula 3)Az,i = positive peaks; daily dose Dzd = Dz·(td/tm)^(1/6)Compressive stress Sd = mz·Dzd (Annex C, Formula C.1)mz = 0.029 (male) / 0.025 (female) MPa per m/s²Stress variable R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, cumulated over exposure years (C.3/C.4)Injury probability P(R) = 1 − exp(−(R/α)^β) (Formula C.5)Weibull risk of lumbar injury, by sex (Table C.1/C.2) \ No newline at end of file +Multiple-shock spinal-response dose and injury risk (ISO 2631-5)Vertical seat acceleration az(t)conditioned per 5.1.3: HP 0.01 Hz (2nd order) / LP 80 Hz (4th order)not the ISO 2631-1 0.4 Hz / 100 Hz filtersSpinal response Az(t) (clause 5.2, Formula 1/2)seat-to-spine transfer function H(f): 1 zero, 6 polesAcceleration dose Dz = 1.07·(Σ Az,i^6)^(1/6) (Formula 3)Az,i = positive peaks; daily dose Dzd = Dz·(td/tm)^(1/6)Compressive stress Sd = mz·Dzd (Annex C, Formula C.1)mz = 0.029 (male) / 0.025 (female) MPa per m/s²Stress variable R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, cumulated over exposure years (C.3/C.4)Injury probability P(R) = 1 − exp(−(R/α)^β) (Formula C.5)Weibull risk of lumbar injury, by sex (Table C.1/C.2) \ No newline at end of file diff --git a/.github/images/diagram_iso2631_5_es.svg b/.github/images/diagram_iso2631_5_es.svg index c1f7cb28f..7b10f88d6 100644 --- a/.github/images/diagram_iso2631_5_es.svg +++ b/.github/images/diagram_iso2631_5_es.svg @@ -1 +1 @@ -Dosis espinal por choques múltiples y riesgo de lesión (ISO 2631-5)Aceleración vertical del asiento az(t)limitada en banda según ISO 2631-1 (0,4 Hz a 100 Hz)Respuesta de la columna Az(t) (cláusula 5.2, Fórmula 1/2)función de transferencia asiento-columna H(f): 1 cero, 6 polosDosis de aceleración Dz = 1.07·(Σ Az,i^6)^(1/6) (Fórmula 3)Az,i = picos positivos; dosis diaria Dzd = Dz·(td/tm)^(1/6)Tensión compresiva Sd = mz·Dzd (Anexo C, Fórmula C.1)mz = 0.029 (hombre) / 0.025 (mujer) MPa por m/s²Variable de tensión R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, acumulada sobre los años de exposición (C.3/C.4)Probabilidad de lesión P(R) = 1 − exp(−(R/α)^β) (Fórmula C.5)riesgo de lesión lumbar de Weibull, por sexo (Tabla C.1/C.2) \ No newline at end of file +Dosis espinal por choques múltiples y riesgo de lesión (ISO 2631-5)Aceleración vertical del asiento az(t)acondicionada según 5.1.3: PA 0,01 Hz (2.º orden) / PB 80 Hz (4.º orden)no los filtros de 0,4 Hz / 100 Hz de ISO 2631-1Respuesta de la columna Az(t) (cláusula 5.2, Fórmula 1/2)función de transferencia asiento-columna H(f): 1 cero, 6 polosDosis de aceleración Dz = 1.07·(Σ Az,i^6)^(1/6) (Fórmula 3)Az,i = picos positivos; dosis diaria Dzd = Dz·(td/tm)^(1/6)Tensión compresiva Sd = mz·Dzd (Anexo C, Fórmula C.1)mz = 0.029 (hombre) / 0.025 (mujer) MPa por m/s²Variable de tensión R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, acumulada sobre los años de exposición (C.3/C.4)Probabilidad de lesión P(R) = 1 − exp(−(R/α)^β) (Fórmula C.5)riesgo de lesión lumbar de Weibull, por sexo (Tabla C.1/C.2) \ No newline at end of file diff --git a/.github/images/diagram_iso2631_5_es_dark.svg b/.github/images/diagram_iso2631_5_es_dark.svg index eabdfc3f0..385803dbc 100644 --- a/.github/images/diagram_iso2631_5_es_dark.svg +++ b/.github/images/diagram_iso2631_5_es_dark.svg @@ -1 +1 @@ -Dosis espinal por choques múltiples y riesgo de lesión (ISO 2631-5)Aceleración vertical del asiento az(t)limitada en banda según ISO 2631-1 (0,4 Hz a 100 Hz)Respuesta de la columna Az(t) (cláusula 5.2, Fórmula 1/2)función de transferencia asiento-columna H(f): 1 cero, 6 polosDosis de aceleración Dz = 1.07·(Σ Az,i^6)^(1/6) (Fórmula 3)Az,i = picos positivos; dosis diaria Dzd = Dz·(td/tm)^(1/6)Tensión compresiva Sd = mz·Dzd (Anexo C, Fórmula C.1)mz = 0.029 (hombre) / 0.025 (mujer) MPa por m/s²Variable de tensión R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, acumulada sobre los años de exposición (C.3/C.4)Probabilidad de lesión P(R) = 1 − exp(−(R/α)^β) (Fórmula C.5)riesgo de lesión lumbar de Weibull, por sexo (Tabla C.1/C.2) \ No newline at end of file +Dosis espinal por choques múltiples y riesgo de lesión (ISO 2631-5)Aceleración vertical del asiento az(t)acondicionada según 5.1.3: PA 0,01 Hz (2.º orden) / PB 80 Hz (4.º orden)no los filtros de 0,4 Hz / 100 Hz de ISO 2631-1Respuesta de la columna Az(t) (cláusula 5.2, Fórmula 1/2)función de transferencia asiento-columna H(f): 1 cero, 6 polosDosis de aceleración Dz = 1.07·(Σ Az,i^6)^(1/6) (Fórmula 3)Az,i = picos positivos; dosis diaria Dzd = Dz·(td/tm)^(1/6)Tensión compresiva Sd = mz·Dzd (Anexo C, Fórmula C.1)mz = 0.029 (hombre) / 0.025 (mujer) MPa por m/s²Variable de tensión R = [Σ (Sd·N^(1/6) / (Su − Sstat))^6]^(1/6)Su = 6.75 − Sage·(b+i) MPa, acumulada sobre los años de exposición (C.3/C.4)Probabilidad de lesión P(R) = 1 − exp(−(R/α)^β) (Fórmula C.5)riesgo de lesión lumbar de Weibull, por sexo (Tabla C.1/C.2) \ No newline at end of file diff --git a/.github/images/diagram_open_plan.svg b/.github/images/diagram_open_plan.svg index 338d14f4a..931157a41 100644 --- a/.github/images/diagram_open_plan.svg +++ b/.github/images/diagram_open_plan.svg @@ -1 +1 @@ -Open-plan office spatial decay of speech (ISO 3382-3)source(r₀ = 1 m)2 m4 m8 m12 m16 mspatial-decay fit range (2 m to 16 m)D₂,Sspatial decay ratedB per doubling · Cl. 6.2Lp,A,S,4mspeech level at 4 mA-weighted · Cl. 3.3rDdistraction distancefitted STI = 0.50 · Cl. 3.6rPprivacy distancefitted STI = 0.20 · Cl. 3.7 \ No newline at end of file +Open-plan office spatial decay of speech (ISO 3382-3)source(r₀ = 1 m)2 m4 m8 m12 m16 mspatial-decay fit range (2 m to 16 m)what open_plan_metrics returnsD₂,Sspatial decay ratedB per doubling · Cl. 6.2Lp,A,S,4mspeech level at 4 mA-weighted · Cl. 3.3rDdistraction distancefitted STI = 0.50 · Cl. 3.6rPprivacy distancefitted STI = 0.20 · Cl. 3.7Clause 4 also requires the average A-weighted background noise Lp,A,B (Cl. 6.4) \ No newline at end of file diff --git a/.github/images/diagram_open_plan_dark.svg b/.github/images/diagram_open_plan_dark.svg index 3882e97df..75c6a1bc0 100644 --- a/.github/images/diagram_open_plan_dark.svg +++ b/.github/images/diagram_open_plan_dark.svg @@ -1 +1 @@ -Open-plan office spatial decay of speech (ISO 3382-3)source(r₀ = 1 m)2 m4 m8 m12 m16 mspatial-decay fit range (2 m to 16 m)D₂,Sspatial decay ratedB per doubling · Cl. 6.2Lp,A,S,4mspeech level at 4 mA-weighted · Cl. 3.3rDdistraction distancefitted STI = 0.50 · Cl. 3.6rPprivacy distancefitted STI = 0.20 · Cl. 3.7 \ No newline at end of file +Open-plan office spatial decay of speech (ISO 3382-3)source(r₀ = 1 m)2 m4 m8 m12 m16 mspatial-decay fit range (2 m to 16 m)what open_plan_metrics returnsD₂,Sspatial decay ratedB per doubling · Cl. 6.2Lp,A,S,4mspeech level at 4 mA-weighted · Cl. 3.3rDdistraction distancefitted STI = 0.50 · Cl. 3.6rPprivacy distancefitted STI = 0.20 · Cl. 3.7Clause 4 also requires the average A-weighted background noise Lp,A,B (Cl. 6.4) \ No newline at end of file diff --git a/.github/images/diagram_open_plan_es.svg b/.github/images/diagram_open_plan_es.svg index bb51449eb..fc55c2cd4 100644 --- a/.github/images/diagram_open_plan_es.svg +++ b/.github/images/diagram_open_plan_es.svg @@ -1 +1 @@ -Caída espacial del habla en oficina diáfana (ISO 3382-3)fuente(r₀ = 1 m)2 m4 m8 m12 m16 mrango de ajuste de caída espacial (2 m a 16 m)D₂,Stasa de caída espacialdB por duplicación · Cl. 6.2Lp,A,S,4mnivel de habla a 4 mponderado A · Cl. 3.3rDdistancia de distracciónSTI ajustado = 0,50 · Cl. 3.6rPdistancia de privacidadSTI ajustado = 0,20 · Cl. 3.7 \ No newline at end of file +Caída espacial del habla en oficina diáfana (ISO 3382-3)fuente(r₀ = 1 m)2 m4 m8 m12 m16 mrango de ajuste de caída espacial (2 m a 16 m)lo que devuelve open_plan_metricsD₂,Stasa de caída espacialdB por duplicación · Cl. 6.2Lp,A,S,4mnivel de habla a 4 mponderado A · Cl. 3.3rDdistancia de distracciónSTI ajustado = 0,50 · Cl. 3.6rPdistancia de privacidadSTI ajustado = 0,20 · Cl. 3.7La cláusula 4 exige además el ruido de fondo medio ponderado A Lp,A,B (cl. 6.4) \ No newline at end of file diff --git a/.github/images/diagram_open_plan_es_dark.svg b/.github/images/diagram_open_plan_es_dark.svg index a14fabc7d..08cf03ab2 100644 --- a/.github/images/diagram_open_plan_es_dark.svg +++ b/.github/images/diagram_open_plan_es_dark.svg @@ -1 +1 @@ -Caída espacial del habla en oficina diáfana (ISO 3382-3)fuente(r₀ = 1 m)2 m4 m8 m12 m16 mrango de ajuste de caída espacial (2 m a 16 m)D₂,Stasa de caída espacialdB por duplicación · Cl. 6.2Lp,A,S,4mnivel de habla a 4 mponderado A · Cl. 3.3rDdistancia de distracciónSTI ajustado = 0,50 · Cl. 3.6rPdistancia de privacidadSTI ajustado = 0,20 · Cl. 3.7 \ No newline at end of file +Caída espacial del habla en oficina diáfana (ISO 3382-3)fuente(r₀ = 1 m)2 m4 m8 m12 m16 mrango de ajuste de caída espacial (2 m a 16 m)lo que devuelve open_plan_metricsD₂,Stasa de caída espacialdB por duplicación · Cl. 6.2Lp,A,S,4mnivel de habla a 4 mponderado A · Cl. 3.3rDdistancia de distracciónSTI ajustado = 0,50 · Cl. 3.6rPdistancia de privacidadSTI ajustado = 0,20 · Cl. 3.7La cláusula 4 exige además el ruido de fondo medio ponderado A Lp,A,B (cl. 6.4) \ No newline at end of file diff --git a/.github/images/diagram_scattering_reverb.svg b/.github/images/diagram_scattering_reverb.svg index 524fc6fce..8b645009d 100644 --- a/.github/images/diagram_scattering_reverb.svg +++ b/.github/images/diagram_scattering_reverb.svg @@ -1 +1 @@ -Random-incidence scattering in a reverberation room (ISO 17497-1)Reverberation roomTurntable (test sample)rotating → α_specstationary → α_sRotating boom sourceMicrophoneStationary sample → α_s (Eq. 1) · rotating / averaged → α_spec (Eq. 4)s = (α_spec − α_s) / (1 − α_s) (Eq. 5)α from 55.3·(V/S)·(1/cT) − 4(V/S)m (Sabine, Table 2 rows T1–T4)Base-plate check: s_base ≤ Table 1 limit (Clause 6.2) \ No newline at end of file +Random-incidence scattering in a reverberation room (ISO 17497-1)Reverberation roomTurntable and base platethe only thing that movessample on the plate for T2 and T4≥ 1.0 mS1S2fixed sources (≥ 2)M1M2M3fixed microphones (≥ 3)T1 base plate, static · T2 sample, static → α_s (Eq. 1)T3 base plate, rotating · T4 sample, rotating → α_spec (Eq. 4)s = (α_spec − α_s) / (1 − α_s) (Eq. 5)α from 55.3·(V/S)·(1/cT) − 4(V/S)m · the base plate must pass the Table 1 ceiling \ No newline at end of file diff --git a/.github/images/diagram_scattering_reverb_dark.svg b/.github/images/diagram_scattering_reverb_dark.svg index eba75c71a..65c306176 100644 --- a/.github/images/diagram_scattering_reverb_dark.svg +++ b/.github/images/diagram_scattering_reverb_dark.svg @@ -1 +1 @@ -Random-incidence scattering in a reverberation room (ISO 17497-1)Reverberation roomTurntable (test sample)rotating → α_specstationary → α_sRotating boom sourceMicrophoneStationary sample → α_s (Eq. 1) · rotating / averaged → α_spec (Eq. 4)s = (α_spec − α_s) / (1 − α_s) (Eq. 5)α from 55.3·(V/S)·(1/cT) − 4(V/S)m (Sabine, Table 2 rows T1–T4)Base-plate check: s_base ≤ Table 1 limit (Clause 6.2) \ No newline at end of file +Random-incidence scattering in a reverberation room (ISO 17497-1)Reverberation roomTurntable and base platethe only thing that movessample on the plate for T2 and T4≥ 1.0 mS1S2fixed sources (≥ 2)M1M2M3fixed microphones (≥ 3)T1 base plate, static · T2 sample, static → α_s (Eq. 1)T3 base plate, rotating · T4 sample, rotating → α_spec (Eq. 4)s = (α_spec − α_s) / (1 − α_s) (Eq. 5)α from 55.3·(V/S)·(1/cT) − 4(V/S)m · the base plate must pass the Table 1 ceiling \ No newline at end of file diff --git a/.github/images/diagram_scattering_reverb_es.svg b/.github/images/diagram_scattering_reverb_es.svg index 963ea57e5..c23e9a7b6 100644 --- a/.github/images/diagram_scattering_reverb_es.svg +++ b/.github/images/diagram_scattering_reverb_es.svg @@ -1 +1 @@ -Dispersión a incidencia aleatoria en cámara reverberante (ISO 17497-1)Cámara reverberantePlataforma giratoria (probeta)girando → α_specestática → α_sFuente en brazo giratorioMicrófonoProbeta estática → α_s (Ec. 1) · girando / promediada → α_spec (Ec. 4)s = (α_spec − α_s) / (1 − α_s) (Ec. 5)α con 55,3·(V/S)·(1/cT) − 4(V/S)m (Sabine, filas T1–T4 de la Tabla 2)Placa base: s_base ≤ límite de la Tabla 1 (Cláusula 6.2) \ No newline at end of file +Dispersión a incidencia aleatoria en cámara reverberante (ISO 17497-1)Cámara reverberantePlataforma giratoria y placa baselo único que se mueveprobeta sobre la placa en T2 y T4≥ 1,0 mS1S2fuentes fijas (≥ 2)M1M2M3micrófonos fijos (≥ 3)T1 placa base, estática · T2 probeta, estática → α_s (Ec. 1)T3 placa base, girando · T4 probeta, girando → α_spec (Ec. 4)s = (α_spec − α_s) / (1 − α_s) (Ec. 5)α con 55,3·(V/S)·(1/cT) − 4(V/S)m · la placa base debe cumplir el límite de la Tabla 1 \ No newline at end of file diff --git a/.github/images/diagram_scattering_reverb_es_dark.svg b/.github/images/diagram_scattering_reverb_es_dark.svg index 361064a18..eef028912 100644 --- a/.github/images/diagram_scattering_reverb_es_dark.svg +++ b/.github/images/diagram_scattering_reverb_es_dark.svg @@ -1 +1 @@ -Dispersión a incidencia aleatoria en cámara reverberante (ISO 17497-1)Cámara reverberantePlataforma giratoria (probeta)girando → α_specestática → α_sFuente en brazo giratorioMicrófonoProbeta estática → α_s (Ec. 1) · girando / promediada → α_spec (Ec. 4)s = (α_spec − α_s) / (1 − α_s) (Ec. 5)α con 55,3·(V/S)·(1/cT) − 4(V/S)m (Sabine, filas T1–T4 de la Tabla 2)Placa base: s_base ≤ límite de la Tabla 1 (Cláusula 6.2) \ No newline at end of file +Dispersión a incidencia aleatoria en cámara reverberante (ISO 17497-1)Cámara reverberantePlataforma giratoria y placa baselo único que se mueveprobeta sobre la placa en T2 y T4≥ 1,0 mS1S2fuentes fijas (≥ 2)M1M2M3micrófonos fijos (≥ 3)T1 placa base, estática · T2 probeta, estática → α_s (Ec. 1)T3 placa base, girando · T4 probeta, girando → α_spec (Ec. 4)s = (α_spec − α_s) / (1 − α_s) (Ec. 5)α con 55,3·(V/S)·(1/cT) − 4(V/S)m · la placa base debe cumplir el límite de la Tabla 1 \ No newline at end of file diff --git a/.github/images/diagram_vibration_sound_power.svg b/.github/images/diagram_vibration_sound_power.svg index 006ee5ac3..d6a48ecb3 100644 --- a/.github/images/diagram_vibration_sound_power.svg +++ b/.github/images/diagram_vibration_sound_power.svg @@ -1 +1 @@ -Sound power from surface vibration (ISO/TS 7849)Vibrating measurement surface Sradiated airborne sound2.5 m1.6 mMachine under testInitial number of positions NS < 1 m² → 101 m² ≤ S ≤ 10 m² → 20S > 10 m² → 2 S / S₀one accelerometer per cell of area S/NSurvey sound powerLWA = LvA + 10 log10(S/S₀) + 10 log10 εε = 1 assumed → upper limit LWA,maxnormal surface velocity, A-weighted r.m.s. \ No newline at end of file +Sound power from surface vibration (ISO/TS 7849)Vibrating measurement surface Sradiated airborne sound2.5 m1.6 mMachine under testInitial number of positions NS < 1 m² → 51 m² ≤ S ≤ 10 m² → 10S > 10 m² → S / S₀one accelerometer per cell of area S/NSurvey sound powerLWA = LvA + 10 log10(S/S₀) + 10 log10 εε = 1 assumed → upper limit LWA,maxnormal surface velocity, A-weighted r.m.s. \ No newline at end of file diff --git a/.github/images/diagram_vibration_sound_power_dark.svg b/.github/images/diagram_vibration_sound_power_dark.svg index 46291dcc4..f05d7c2dd 100644 --- a/.github/images/diagram_vibration_sound_power_dark.svg +++ b/.github/images/diagram_vibration_sound_power_dark.svg @@ -1 +1 @@ -Sound power from surface vibration (ISO/TS 7849)Vibrating measurement surface Sradiated airborne sound2.5 m1.6 mMachine under testInitial number of positions NS < 1 m² → 101 m² ≤ S ≤ 10 m² → 20S > 10 m² → 2 S / S₀one accelerometer per cell of area S/NSurvey sound powerLWA = LvA + 10 log10(S/S₀) + 10 log10 εε = 1 assumed → upper limit LWA,maxnormal surface velocity, A-weighted r.m.s. \ No newline at end of file +Sound power from surface vibration (ISO/TS 7849)Vibrating measurement surface Sradiated airborne sound2.5 m1.6 mMachine under testInitial number of positions NS < 1 m² → 51 m² ≤ S ≤ 10 m² → 10S > 10 m² → S / S₀one accelerometer per cell of area S/NSurvey sound powerLWA = LvA + 10 log10(S/S₀) + 10 log10 εε = 1 assumed → upper limit LWA,maxnormal surface velocity, A-weighted r.m.s. \ No newline at end of file diff --git a/.github/images/diagram_vibration_sound_power_es.svg b/.github/images/diagram_vibration_sound_power_es.svg index 76f2e8d79..1b6079f2f 100644 --- a/.github/images/diagram_vibration_sound_power_es.svg +++ b/.github/images/diagram_vibration_sound_power_es.svg @@ -1 +1 @@ -Potencia acústica a partir de la vibración superficial (ISO/TS 7849)Superficie de medición vibrante Ssonido aéreo radiado2,5 m1,6 mMáquina en ensayoNúmero inicial de posiciones NS < 1 m² → 101 m² ≤ S ≤ 10 m² → 20S > 10 m² → 2 S / S₀un acelerómetro por celda de área S/NPotencia acústica de controlLWA = LvA + 10 log10(S/S₀) + 10 log10 εse asume ε = 1 → límite superior LWA,maxvelocidad normal eficaz, ponderada A \ No newline at end of file +Potencia acústica a partir de la vibración superficial (ISO/TS 7849)Superficie de medición vibrante Ssonido aéreo radiado2,5 m1,6 mMáquina en ensayoNúmero inicial de posiciones NS < 1 m² → 51 m² ≤ S ≤ 10 m² → 10S > 10 m² → S / S₀un acelerómetro por celda de área S/NPotencia acústica de controlLWA = LvA + 10 log10(S/S₀) + 10 log10 εse asume ε = 1 → límite superior LWA,maxvelocidad normal eficaz, ponderada A \ No newline at end of file diff --git a/.github/images/diagram_vibration_sound_power_es_dark.svg b/.github/images/diagram_vibration_sound_power_es_dark.svg index dd65090a2..01045f305 100644 --- a/.github/images/diagram_vibration_sound_power_es_dark.svg +++ b/.github/images/diagram_vibration_sound_power_es_dark.svg @@ -1 +1 @@ -Potencia acústica a partir de la vibración superficial (ISO/TS 7849)Superficie de medición vibrante Ssonido aéreo radiado2,5 m1,6 mMáquina en ensayoNúmero inicial de posiciones NS < 1 m² → 101 m² ≤ S ≤ 10 m² → 20S > 10 m² → 2 S / S₀un acelerómetro por celda de área S/NPotencia acústica de controlLWA = LvA + 10 log10(S/S₀) + 10 log10 εse asume ε = 1 → límite superior LWA,maxvelocidad normal eficaz, ponderada A \ No newline at end of file +Potencia acústica a partir de la vibración superficial (ISO/TS 7849)Superficie de medición vibrante Ssonido aéreo radiado2,5 m1,6 mMáquina en ensayoNúmero inicial de posiciones NS < 1 m² → 51 m² ≤ S ≤ 10 m² → 10S > 10 m² → S / S₀un acelerómetro por celda de área S/NPotencia acústica de controlLWA = LvA + 10 log10(S/S₀) + 10 log10 εse asume ε = 1 → límite superior LWA,maxvelocidad normal eficaz, ponderada A \ No newline at end of file diff --git a/.github/images/installed_structure_borne.svg b/.github/images/installed_structure_borne.svg index d62eb6736..fd23caefd 100644 --- a/.github/images/installed_structure_borne.svg +++ b/.github/images/installed_structure_borne.svg @@ -1,7 +1,7 @@ - + @@ -20,28 +20,28 @@ - - - + @@ -50,113 +50,113 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - 63 + 63 - + - + - 125 + 125 - + - + - 250 + 250 - + - + - 500 + 500 - + - + - 1000 + 1000 - + - + - 2000 + 2000 - + - + - 4000 + 4000 - Frequency [Hz] + Frequency [Hz] - + @@ -165,101 +165,116 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - −20 + 20 - + - + - 0 + 30 - + - + - 20 + 40 - + - + - 40 + 50 - + - + - 60 + 60 - + - + - 80 + 70 - + + + + + + + + + + + 80 + + + Level [dB] - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - + - - DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) - Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) - Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 + DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) + Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) + Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 - - EN 12354-5 Installed Structure-Borne Sound + + EN 12354-5 Installed Structure-Borne Sound - - - + - + - + - + c h @@ -490,18 +505,18 @@ L 550.793125 40.108125 - - + - + - + - + i n @@ -535,18 +550,18 @@ L 550.793125 53.610234 - - + - + - + - + p a @@ -564,18 +579,18 @@ L 550.793125 67.112344 - - + - + - + - + t o @@ -594,8 +609,8 @@ L 550.793125 81.152344 - - + + diff --git a/.github/images/installed_structure_borne_dark.svg b/.github/images/installed_structure_borne_dark.svg index a593270d6..158065b1f 100644 --- a/.github/images/installed_structure_borne_dark.svg +++ b/.github/images/installed_structure_borne_dark.svg @@ -1,7 +1,7 @@ - + @@ -20,28 +20,28 @@ - - - + @@ -50,113 +50,113 @@ L 0 3.5 " style="stroke: #ffffff; stroke-width: 0.8"/> - + - 63 + 63 - + - + - 125 + 125 - + - + - 250 + 250 - + - + - 500 + 500 - + - + - 1000 + 1000 - + - + - 2000 + 2000 - + - + - 4000 + 4000 - Frequency [Hz] + Frequency [Hz] - + @@ -165,101 +165,116 @@ L -3.5 0 " style="stroke: #ffffff; stroke-width: 0.8"/> - + - −20 + 20 - + - + - 0 + 30 - + - + - 20 + 40 - + - + - 40 + 50 - + - + - 60 + 60 - + - + - 80 + 70 - + + + + + + + + + + + 80 + + + Level [dB] - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - + - - DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) - Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) - Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 + DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) + Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) + Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 - - EN 12354-5 Installed Structure-Borne Sound + + EN 12354-5 Installed Structure-Borne Sound - - - + - + - + - + c h @@ -490,18 +505,18 @@ L 550.793125 40.108125 - - + - + - + - + i n @@ -535,18 +550,18 @@ L 550.793125 53.610234 - - + - + - + - + p a @@ -564,18 +579,18 @@ L 550.793125 67.112344 - - + - + - + - + t o @@ -594,8 +609,8 @@ L 550.793125 81.152344 - - + + diff --git a/.github/images/installed_structure_borne_es.svg b/.github/images/installed_structure_borne_es.svg index 21ccd26ba..abc80dfd4 100644 --- a/.github/images/installed_structure_borne_es.svg +++ b/.github/images/installed_structure_borne_es.svg @@ -1,7 +1,7 @@ - + @@ -20,28 +20,28 @@ - - - + @@ -50,113 +50,113 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - 63 + 63 - + - + - 125 + 125 - + - + - 250 + 250 - + - + - 500 + 500 - + - + - 1000 + 1000 - + - + - 2000 + 2000 - + - + - 4000 + 4000 - Frecuencia [Hz] + Frecuencia [Hz] - + @@ -165,101 +165,116 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - -20 + 20 - + - + - 0 + 30 - + - + - 20 + 40 - + - + - 40 + 50 - + - + - 60 + 60 - + - + - 80 + 70 - + + + + + + + + + + + 80 + + + Nivel [dB] - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - + - - DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) - Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) - Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 + DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) + Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) + Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 - - Ruido estructural instalado EN 12354-5 + + Ruido estructural instalado EN 12354-5 - - - + - + - + - + c a @@ -490,18 +505,18 @@ L 546.20125 40.468125 - - + - + - + - + i n @@ -535,18 +550,18 @@ L 546.20125 53.970234 - - + - + - + - + c a @@ -566,18 +581,18 @@ L 546.20125 67.472344 - - + - + - + - + t o @@ -596,8 +611,8 @@ L 546.20125 81.512344 - - + + diff --git a/.github/images/installed_structure_borne_es_dark.svg b/.github/images/installed_structure_borne_es_dark.svg index 83aeac7d8..3f8ac14f8 100644 --- a/.github/images/installed_structure_borne_es_dark.svg +++ b/.github/images/installed_structure_borne_es_dark.svg @@ -1,7 +1,7 @@ - + @@ -20,28 +20,28 @@ - - - + @@ -50,113 +50,113 @@ L 0 3.5 " style="stroke: #ffffff; stroke-width: 0.8"/> - + - 63 + 63 - + - + - 125 + 125 - + - + - 250 + 250 - + - + - 500 + 500 - + - + - 1000 + 1000 - + - + - 2000 + 2000 - + - + - 4000 + 4000 - Frecuencia [Hz] + Frecuencia [Hz] - + @@ -165,101 +165,116 @@ L -3.5 0 " style="stroke: #ffffff; stroke-width: 0.8"/> - + - -20 + 20 - + - + - 0 + 30 - + - + - 20 + 40 - + - + - 40 + 50 - + - + - 60 + 60 - + - + - 80 + 70 - + + + + + + + + + + + 80 + + + Nivel [dB] - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - + - - DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) - Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) - Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 + DC = 10 log10(|Ys+Yi|^2 / (|Ys| Re Yi)) + Ln,s,ij = LWs,inst - Dsa - Rij - 10 log10(Si/S0) - 10 log10(A0/4) + Ln,s = 10 log10(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2 - - Ruido estructural instalado EN 12354-5 + + Ruido estructural instalado EN 12354-5 - - - + - + - + - + c a @@ -490,18 +505,18 @@ L 546.20125 40.468125 - - + - + - + - + i n @@ -535,18 +550,18 @@ L 546.20125 53.970234 - - + - + - + - + c a @@ -566,18 +581,18 @@ L 546.20125 67.472344 - - + - + - + - + t o @@ -596,8 +611,8 @@ L 546.20125 81.512344 - - + + diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 403d29eca..ad1d186a6 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -307,6 +307,28 @@ jobs: - name: Run every snippet the guides print run: python scripts/check_doc_snippets.py + # The guides are hard-wrapped, so a sentence can wrap onto a "-" or a ">" and + # stop being a sentence: CommonMark ends the paragraph at the marker. One + # variant takes the site build down (unclosed inline maths, which MDX then + # evaluates as JavaScript); the other is silent and ships a quoted block in + # the middle of a paragraph. Needs no dependencies, so it runs on its own + # rather than waiting behind an install. + markdown-hazards: + name: Markdown renders the way it reads + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + - name: Set up Python 3.13 + uses: actions/setup-python@v7 + with: + python-version: "3.13" + - name: Check the hand-written markdown + run: python scripts/check_markdown_hazards.py + # The committed example .report() fiches (.github/reports) must match a fresh # `make reports` run. Same drift gate as the figures, one layer further down # the pipeline: the fiches are what the documentation links to as worked diff --git a/Makefile b/Makefile index 841b7eb37..ea1b76702 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,12 @@ snippets: snippets-static: $(PYTHON) scripts/check_doc_snippets.py --static +# Catch a paragraph that wraps onto a "-" or a ">", which CommonMark reads as a +# new block and which then either takes the site build down or publishes a +# quoted block in the middle of a sentence (see the markdown-wrapping job). +hazards: + $(PYTHON) scripts/check_markdown_hazards.py + # Regenerate the committed Starlight API reference (site/src/content/docs/ # reference/api + site/src/generated/api-sidebar.mjs) from the source # docstrings. CI fails if this drifts (see the api-docs job in python-app.yml). diff --git a/docs/CONFORMANCE.md b/docs/CONFORMANCE.md index 14e7ebd03..4e35695b4 100644 --- a/docs/CONFORMANCE.md +++ b/docs/CONFORMANCE.md @@ -69,7 +69,7 @@ Only **Butterworth** (the library default) and **Chebyshev-II** are class-compli | Standard | Quantity | Expected (norm) | Computed | Δ | Status | |:---|:---|:---|:---|:---|:---:| | IEC 61672-1:2013 (Leq) | Leq of a 1 Pa 1 kHz sine | 90.97 dB (+/-0.05 dB) | 90.969 dB | -0.001 dB | ✅ | -| IEC 61252:1995 (LEX,8h) | 8 h exposure to 90 dB(A) noise | 90 dB (+/-0.05 dB) | 90.008 dB | 0.008 dB | ✅ | +| IEC 61252:1993 (LEX,8h) | 8 h exposure to 90 dB(A) noise | 90 dB (+/-0.05 dB) | 90.008 dB | 0.008 dB | ✅ | | ISO 1996-1:2016 3.6.4 | Lden, constant 60 dB in day/evening/night | 66.3952 dB (+/-0 dB) | 66.3952 dB | 0 dB | ✅ | | ISO 1996-2:2007 Annex C.5 Example 1 | Tonal audibility ΔLta (Formula C.3), 4 kHz tone | 13.7 dB (+/-0.05 dB) | 13.66 dB | -0.044 dB | ✅ | | ISO 1996-2:2007 Annex C.5 Example 1 | Tonal adjustment Kt (Formulae C.4-C.6) | 6 dB (+/-0 dB) | 6 dB | 0 dB | ✅ | diff --git a/docs/ERRATA.md b/docs/ERRATA.md index 55162e872..b42d32d6d 100644 --- a/docs/ERRATA.md +++ b/docs/ERRATA.md @@ -628,6 +628,38 @@ which is the check that enforces the rule; see retained because the library cites the 2006 edition, whose print carries the defect; the 2017 edition stands as the confirmation. +## UNE-EN 15657:2018, Clause 7.1, Formula (14) (reference mass dimensionally inconsistent with the quantity it normalises) + +- **Location:** Clause 7.1, the sentence introducing Formula (14) (printed + p. 14) and Formula (14) itself (printed p. 15), the structural power level + injected into the reception plate. +- **The print:** the sentence reads "a partir del nivel de velocidad promediado + espacialmente de la placa $L_v$, de la **masa por unidad de superficie** $m$, + del área de la placa $S$ y del factor de pérdida $\eta$, utilizando + $f_0 = 1$ Hz, $m_0 = 1$ kg y $S_0 = 1$ m² como referencias", above + $L_{Ws} = \left(10\lg\left(\dfrac{2\pi f m \eta S}{f_0 \cdot m_0 \cdot S_0}\right)\right)\text{dB} + L_v - 60\ \text{dB}$. +- **The problem:** the same sentence defines $m$ as a mass per unit area, in + kg/m², and its reference $m_0$ as 1 kg. With $m$ in kg/m² and $S$ in m², the + group $2\pi f\,\eta\,m\,S / (f_0 m_0 S_0)$ is dimensionless only if $m_0$ is + 1 kg/m²; as printed it carries a leftover m⁻². The closing constant confirms + the intended reading: $10\lg(f_0 m_0 S_0 v_0^2 / P_0) = -60$ dB with + $v_0 = 10^{-9}$ m/s and $P_0 = 1$ pW closes in watts only when $f_0 m_0 S_0$ + has the units of an area density times an area times a frequency. The numeric + result is unaffected, because $10\lg(1) = 0$ whichever unit is attached, which + is why the slip survives a worked example. +- **Evidence:** dimensional analysis of Formula (14) against the definition of + $m$ in the sentence above it, and against the $-60$ dB constant it closes on; + the sentence and the formula were read as images, not from extracted text. + Verified on PDF page 14 (printed p. 14) and PDF page 15 (printed p. 15) of + UNE-EN 15657:2018. Only the Spanish-language adoption was read, so this entry + does not establish whether the English EN 15657:2018 print carries the same + reference. +- **Library behaviour:** no change required. `characteristic_reception_plate_power` + takes `mass_per_area` in kg/m² and reproduces the standard's own worked values, + so the intended reading is the implemented one; the guide and the docstring + keep the printed reference and name this entry beside it. +- **Status:** unreported. + ## ISO 12999-1:2020, Table 4 (missing 500 Hz row) - **Location:** Table 4 (in-situ uncertainties per band). diff --git a/docs/aircraft/index.md b/docs/aircraft/index.md index 1dbde3d28..e73013640 100644 --- a/docs/aircraft/index.md +++ b/docs/aircraft/index.md @@ -2,12 +2,14 @@ # Aircraft noise -Aircraft are noise sources important enough to have their own internationally -negotiated metrics, each fixed to the last decimal by a certification -framework. The four pages of this section implement those frameworks, and -they share a common anatomy: a rigorously standardised **source descriptor**, -plus standardised **propagation adjustments** that place the source at a -receiver. +Aircraft noise is computed under internationally negotiated methods of two +kinds. **Certification** fixes a single number per aircraft type to the last +decimal, at reference points a standard places around the runway. **Contour +methods** take that certified fleet and predict what an airport does to the +ground around it. The four pages of this section cover both, and they share a +common anatomy: a rigorously standardised **source descriptor** — a spectral +time history, a noise-power-distance table or a noise hemisphere — plus +standardised **propagation adjustments** that place the source at a receiver. [Aircraft noise: Effective Perceived Noise Level](aircraft-noise.md) covers fixed-wing certification. The **EPNL** of ICAO Annex 16 condenses a @@ -45,6 +47,25 @@ sound power level and tonal-audibility chain answer the same question for a source that is not an aircraft. That tonality test is in turn a cousin of the methods in [Psychoacoustics](../perception/psychoacoustics/index.md). +Start from the question. To check an aeroplane against a certification limit, +or to understand where the published numbers for a type come from, start with +the EPNL page. To predict what a movement does at a street address, use the +Doc 29 page, with the ANP page supplying the aircraft data. For helicopters the +hemisphere page replaces both. Read the fixed-wing pages in that order: the EPNL +page defines the certified metric, the Doc 29 page turns certified aeroplanes +into ground contours from tables written by hand, and the ANP page replaces +those hand-written tables with the published fleet data. The rotorcraft page +stands on its own — a different standard and a different source model — and can +be read first if helicopters are what you came for. + +The three metrics are not interchangeable. EPNL is a *certification* metric of +one aeroplane at one prescribed point; SEL and LASmax are *single-event* +assessment metrics at an arbitrary receiver; neither is the long-term index a +land-use study is finally judged on. And the boundary: this section does not +compute cumulative multi-event indices, does not synthesise NPD tables from +engine data, does not model hover, idle or taxi rotorcraft operations, and does +not touch sonic boom. + ## Pages in this section - [Aircraft noise: Effective Perceived Noise Level](aircraft-noise.md): diff --git a/docs/buildings/design/index.md b/docs/buildings/design/index.md index 4a063db74..73e302372 100644 --- a/docs/buildings/design/index.md +++ b/docs/buildings/design/index.md @@ -32,14 +32,42 @@ double wall, transmission through slits and apertures, plate radiation efficiency and point mobilities. It is the physics a catalogue value expresses in one number. -Two measurements feed the floor half of any design. +Two pages here carry the floor half of any design, one measuring and one +predicting. [Floor-Covering Impact Improvement (ISO 16251-1)](impact-improvement.md) -gives the weighted improvement $\Delta L_w$ of a soft covering on a small -heavyweight mock-up, the term EN 12354-2 subtracts from the bare-floor level, -and -[Dynamic stiffness of resilient materials (EN 29052-1)](../../materials/resilient/dynamic-stiffness.md) -gives the stiffness per unit area $s'$ of the resilient layer under a floating -floor, and with it the resonance frequency the whole improvement hangs on. +gives the weighted improvement $\Delta L_w$ of a covering that exists, on a +small heavyweight mock-up, and that is the term EN 12354-2 subtracts from the +bare-floor level. +[Predicting Resilient-Layer Performance](resilient-layers.md) +predicts it for a covering that does not yet exist, from the tapping machine's +own force spectrum, the cut-off frequency of a soft covering, the 30 lg and +40 lg floating-floor laws and the ISO 12354-1 Annex D rating of a wall lining. +Both start from the stiffness per unit area $s'$ of the resilient layer, +measured per EN 29052-1 in +[Dynamic stiffness of resilient materials](../../materials/resilient/dynamic-stiffness.md) +over in the materials section, which sets the resonance the whole improvement +hangs on. + +Building service equipment is a chain of its own, and the two pages only read +correctly in order. +[Structure-borne sound power of equipment (EN 15657)](structure-borne-power.md) +characterises a pump, fan or cistern by the power it injects into the +structure, measured on a reception plate of known dissipation and then made +plate-independent. +[Installed structure-borne sound (EN 12354-5)](installed-structure-borne.md) +takes that source description, loses part of it to the coupling term the source +and receiver mobilities set, and carries the rest to a room that may be several +junctions away. + +One bookkeeping note runs through the whole section: the family exists as +EN 12354:2000 and as ISO 12354:2017, and the two are not interchangeable in +every clause. The simplified models on +[Predicting Sound Insulation](insulation-prediction.md) +follow the 2000 text — including the tabulated flanking correction $K$ that the +2017 impact part replaced with explicit per-path formulae — while +[Detailed Per-Band Prediction](detailed-prediction.md) +follows the 2017 text. Check which edition your regulation calls up before +quoting a correction from either. ## Pages in this section diff --git a/docs/buildings/insulation/index.md b/docs/buildings/insulation/index.md index 3e4eec0d5..0b1071bec 100644 --- a/docs/buildings/insulation/index.md +++ b/docs/buildings/insulation/index.md @@ -8,8 +8,10 @@ characterised **in the laboratory**, where suppressed flanking isolates its direct transmission. That laboratory data feeds a **prediction** of how a whole building will perform, flanking paths included. The finished building is then **verified in the field**. At every stage the band spectrum is collapsed -to the **single number** regulations quote, and that collapse is one shared -engine rather than a step of any single method. +to the **single number** regulations quote, and for almost everything that +collapse is one shared reference-curve engine rather than a step of any single +method. The exception is the heavy-impact rating of ISO 717-2 Annex D, which +shifts no curve at all: it sums A-weighted band levels in energy. **Laboratory.** [Laboratory Insulation Measurement](insulation-lab.md) covers @@ -32,6 +34,12 @@ and the two material measurements a floor design consumes. [Field Insulation Measurement (ISO 16283)](insulation-field.md) covers the engineering-grade airborne and impact measurement in the building, its Clause 14 test report and the ISO 12999-1 uncertainty that qualifies it. +The same standard specifies two more impact sources, a rubber ball and a bang +machine, for the slow low-frequency thumps a tapping machine says nothing +about; +[Heavy and Soft Impact Sources (ISO 16283-2)](heavy-impact-sources.md) +covers their specification, the Fast-weighted standardization of the maximum +level and the Annex D rating. When the question does not deserve that effort, [Sound Insulation Survey Method (ISO 10052)](insulation-survey.md) trades accuracy for speed with octave bands and a reverberation index. diff --git a/docs/buildings/insulation/insulation-field.md b/docs/buildings/insulation/insulation-field.md index d434671c5..27974ebd7 100644 --- a/docs/buildings/insulation/insulation-field.md +++ b/docs/buildings/insulation/insulation-field.md @@ -428,7 +428,7 @@ Sabine absorption area $A = 0.16\ V/T$. ## Standards -ISO 16283-1:2014 and ISO 16283-2:2015, *Acoustics — Field measurement of +ISO 16283-1:2014 and ISO 16283-2:2020, *Acoustics — Field measurement of sound insulation in buildings and of building elements*: the airborne and impact level differences, their normalisations and the Clause 14 test report; ISO 12999-1:2020, which tabulates the standard uncertainties per measurement diff --git a/docs/buildings/rooms/reverberation-prediction.md b/docs/buildings/rooms/reverberation-prediction.md index 0bc425939..b9a7934bb 100644 --- a/docs/buildings/rooms/reverberation-prediction.md +++ b/docs/buildings/rooms/reverberation-prediction.md @@ -249,8 +249,23 @@ point, that stays diffuse while it decays. The common breakages: Scattering objects restore the mixing the models assume: a furnished room follows the statistical prediction distinctly better than the same room -bare, beyond what the furniture's own absorption area accounts for. In -practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and +bare, beyond what the furniture's own absorption area accounts for. The clip +below is that mechanism with the absorption taken out of it, so only the +mixing is left: an 800 Hz wavefront enters a 4 m rigid-walled hall filled +with rigid columns 10 to 17 cm across, a quarter to two fifths of the +42.9 cm wavelength. Every column diffracts the front and sheds a scattered +wavelet, the wavelets interfere, and within a few passes the specular front +has become energy spread over the whole hall with no preferred direction — +which is the assumption Sabine and Eyring both start from, arriving here as +a result rather than as a hypothesis. Nothing in the hall absorbs, so what +you are watching is *only* the redistribution; the decay at the end is the +energy draining out through the two open ends. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + +In practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and Arau-Puchades for axial cases) rather than a single value; where the models spread, the room is telling you its field is not diffuse. diff --git a/docs/devices/emission/sound-power-reverberation.md b/docs/devices/emission/sound-power-reverberation.md index 187a5245a..67cc7eaa6 100644 --- a/docs/devices/emission/sound-power-reverberation.md +++ b/docs/devices/emission/sound-power-reverberation.md @@ -47,6 +47,21 @@ terms by a reference sound source of known power $L_W(\text{RSS})$ measured in the same room, so the room need not be characterised: $L_W = L_W(\text{RSS}) + (L_p(\text{ST}) - L_p(\text{RSS}) + C_2)$. +The right-hand panel of the clip below is this method. The same source runs +in both rooms; in the anechoic room on the left the microphones see only what +the source sends their way, so the level falls with distance and the +free-field route has to integrate over a measurement surface, while in the +reverberation room on the right the reflected energy fills the space and the +level stops depending on where a microphone is. That is the whole reason +Eq. 20 can replace a surface integral with a handful of positions and a room +constant — and the reason the room, not the array, is what has to be +qualified. Both routes end on the same $L_W$, because sound power is a +property of the source and not of the room it is measured in. + +Animation: the same source in an anechoic room and in a reverberation room producing different microphone pressures, while the free-field and diffuse-field formulas converge to the same sound power level + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_power_two_rooms.webm) + ```python import numpy as np from phonometry import emission diff --git a/docs/devices/noise-control/room-to-room.md b/docs/devices/noise-control/room-to-room.md index 6e463084a..fb8328bde 100644 --- a/docs/devices/noise-control/room-to-room.md +++ b/docs/devices/noise-control/room-to-room.md @@ -337,6 +337,19 @@ and air leaks**. A ceiling void carried over the partition, a service penetration, a door undercut, or the wall simply not reaching the structural slab, and the equation's answer becomes an upper bound. +The clip below draws what the equation leaves out. The chain of section 3 +prices the direct path only, the **Dd** route through the partition; the +other three pulses leave the source room over the flanking walls, floor or +ceiling — **Ff** flank to flank, **Fd** flank to partition, **Df** partition +to flank — and re-radiate on the far side without ever passing through the +transmission loss the calculation used. Each path shrinks at every element +and junction it crosses, which is why no single one has to be large for the +sum of the three to dominate a good partition. + +Animation: energy pulses leaving the source room over the direct Dd path and the flanking Ff, Fd and Df paths, shrinking at each element and junction, every path label lighting up as its pulse re-radiates into the receiving room + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_flanking_paths.webm) + `DesignCriterion.flanking_penalty` is the explicit debit for that, in decibels off the predicted noise reduction. It is not a model, it is a place to record the diff --git a/docs/devices/noise-control/silencers.md b/docs/devices/noise-control/silencers.md index e8e5b1612..8f22c1d52 100644 --- a/docs/devices/noise-control/silencers.md +++ b/docs/devices/noise-control/silencers.md @@ -306,12 +306,21 @@ resistivity, is the same material theory as ## Cross-check against the FDTD solver -The four-pole expansion chamber is cross-checked against the independent 2D -[FDTD wave solver](../../simulation/fdtd-simulation.md): a plane-wave duct that widens into a -chamber and narrows back transmits far less at the four-pole TL peak -($kL = \pi/2$) than at the transparent trough ($kL = \pi$), and the measured -amplitude ratio reproduces the closed-form peak transmission loss to a fraction -of a decibel (test `tests/noise_control/test_fdtd_crosscheck.py`). +That cross-check is the clip embedded in section 1, and it is worth returning +to it now with the algebra in hand. The four-pole expansion chamber is checked +against the independent 2D +[FDTD wave solver](../../simulation/fdtd-simulation.md), which shares no formula and no +assumption with the transfer-matrix product beyond the wave equation itself: a +plane-wave duct that widens into the same 0.30 m, $m = 4$ chamber and narrows +back transmits far less at the four-pole TL peak ($kL = \pi/2$, here 286 Hz) +than at the transparent trough ($kL = \pi$, 572 Hz). The amplitude ratio +measured downstream in the field is the transmission loss annotated on the +clip, 6.5 dB at 286 Hz and 0.0 dB at 572 Hz, against the 6.55 dB the closed +form gives for $m = 4$ (test `tests/noise_control/test_fdtd_crosscheck.py`). +Agreement that close rules out an algebra error on either side. The two must +eventually part company above the duct's first cut-on frequency, where +higher-order modes propagate: the two-dimensional solver keeps working there +and the plane-wave algebra does not. ## See also diff --git a/docs/environment/index.md b/docs/environment/index.md index b502cd159..d8cf91027 100644 --- a/docs/environment/index.md +++ b/docs/environment/index.md @@ -3,11 +3,16 @@ # Environment and transport Environmental noise is a source-path-receiver problem stretched over hundreds -of metres of open air. This section covers both ends of it. The **outdoor -sound** pages handle the path and the assessment: ISO 9613 predicts, band by -band, how much level survives divergence, air absorption, the ground and any -barrier on the way to a receiver, and NT ACOU 112 quantifies when impulsive -character makes the received sound more annoying than its LAeq suggests. +of metres of open air. This section covers all three of them. The **propagation** +pages handle the path: ISO 9613 predicts, band by band, how much level survives +divergence, air absorption, the ground and any barrier on the way to a receiver, +and the wave-acoustic ground and refraction models say when that engineering +method stops being enough. + +The **assessment** pages handle what happens once the sound has arrived: the +ISO 1996 rating level and the day-evening-night indicators, their Spanish +application in RD 1367/2007, and the NT ACOU 112 adjustment that quantifies when +impulsive character makes a received sound more annoying than its LAeq suggests. The **source** pages handle the other end: what emits, described the way an environmental model wants it. CNOSSOS-EU gives road traffic and railways a @@ -16,11 +21,14 @@ by its apparent sound power and its tonal audibility. What unites them is the pattern: a carefully standardised source descriptor that the path model above then attenuates. -This section leans on the core toolkit more than any other: the rating levels -and Lden that environmental assessment ends in live in -[Integrated and Statistical Levels](../signals/levels/levels.md), and the -atmospheric absorption that every propagation model consumes is shared with -the room and materials pages. Start with +This section leans on the core toolkit, but only up to the period level. +[Integrated and Statistical Levels](../signals/levels/levels.md) supplies +the LAeq, percentile and event levels of each reference period; what turns those +period levels into Lden, Ldn and the rating level, with the tonal adjustment, +the residual-noise correction and the uncertainty budget on top, is +[Environmental Levels (ISO 1996-1/-2)](assessment/environmental-levels.md), +in this section. The atmospheric absorption that every propagation model +consumes is shared with the room and materials pages. Start with [Outdoor Sound Propagation](propagation/outdoor-propagation.md); it introduces the source-path-receiver bookkeeping the transport pages reuse. diff --git a/docs/environment/propagation/ground-barriers.md b/docs/environment/propagation/ground-barriers.md index 375e44a33..af8c50437 100644 --- a/docs/environment/propagation/ground-barriers.md +++ b/docs/environment/propagation/ground-barriers.md @@ -136,6 +136,28 @@ $$ which tends to 5 dB at the shadow boundary $N \to 0$ and approximates Maekawa's point-source curve within about 1.5 dB. +The clip below is that formula as a field. It is the +[2D FDTD solver](../../simulation/fdtd-simulation.md) run twice on one +12 × 7 m half-space over rigid ground with a thin rigid screen 2.5 m tall, +once at 100 Hz and once at 500 Hz, each with a barrier-free reference run over +the same ground so the annotated insertion loss is a true one. The geometry +fixes the path difference at 1.06 m for the receiver it marks, so the Fresnel +number is $N = 0.62$ at 100 Hz and $N = 3.1$ at 500 Hz — the same screen, a +factor of five apart in $N$ purely because $\lambda$ changed — and the field +shows what that buys: about 8 dB against about 17 dB. Two things are worth +watching for. The edge of the lit region running down from the top of the +screen is the shadow boundary, the $N \to 0$ locus where the formula bottoms +out at 5 dB; and inside the shadow the field is a cylindrical wave centred on +the top of the screen, which is what "the edge acts as a secondary source" +looks like. One caveat: the ground in the clip is perfectly rigid, so it shows +diffraction alone and none of the finite-impedance ground effect of section 1 +— the coherent four-path model below adds that, and its curve swings tens of +decibels where this one is smooth. + +Animation: a point source behind a thin 2.5 metre rigid barrier on reflecting ground, simulated at 100 Hz and 500 Hz side by side; the long wavelength diffracts over the edge and fills the shadow zone, the short wavelength is cast into a deep clean shadow + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_barrier.webm) + The thin-screen methods share the same three geometric quantities: the two diffracted segments over the edge and the straight path they replace. Drawn on the 4 m screen of the snippets, they differ by just 0.15 m. diff --git a/docs/materials/absorbers/absorption-measurement.md b/docs/materials/absorbers/absorption-measurement.md index 753a9685b..0294d1ae6 100644 --- a/docs/materials/absorbers/absorption-measurement.md +++ b/docs/materials/absorbers/absorption-measurement.md @@ -189,7 +189,24 @@ print(np.round(alpha, 3)) # [0.398 0.448 0.498] $T_1$ and $T_2$ are exactly the reverberation times [`room_parameters`](../../buildings/rooms/room-acoustics.md) returns, so an ISO 3382-2 decay measurement of the empty and treated room flows straight into -`absorption_coefficient`. A room volume below the 150 m³ minimum or a +`absorption_coefficient`. + +Each of those two numbers is read off a decay, and the clip below shows how +one is read: the squared impulse response is integrated backwards from the +tail, the Schroeder curve emerges, and the T20 and T30 regressions are fitted +to a straight portion of it. That is the operation behind $T_1$, and again +behind $T_2$ — the clip shows a *single* room, not the pair, so it answers +"where does one $T$ come from" and not "what does subtracting two of them +cost". The second question is the one that governs this measurement, and +section 4 puts a number on it: because $\alpha_s$ is a difference of two +reciprocal decay times, its uncertainty is worst exactly where the two decays +are most alike, at the low-frequency end. + +Animation: the tail energy of a squared impulse response filling from the end while the backward integral advances toward t = 0, the Schroeder decay curve emerging on a companion axis and ending with the T20 and T30 regression lines + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_schroeder.webm) + +A room volume below the 150 m³ minimum or a sample area outside 10–12 m² raises an advisory `AbsorptionWarning`; the result still returns. diff --git a/docs/materials/absorbers/porous-absorbers.md b/docs/materials/absorbers/porous-absorbers.md index e0541377d..e965a1f03 100644 --- a/docs/materials/absorbers/porous-absorbers.md +++ b/docs/materials/absorbers/porous-absorbers.md @@ -567,8 +567,8 @@ Helmholtz resonator: $m = (\rho_0/\varepsilon)\,[t + 2\delta a + end-correction factor $\delta$ per orifice end and the visco-thermal resistance $r = (\rho_0/\varepsilon)\sqrt{8\nu\omega}\,(1 + t/2a)$ (Cox & D'Antonio Eqs. 7.6/7.12). The default end correction is the -Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} -+ 0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a +Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} + +0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a shallow cavity the resonance is $f_0 = (c_0/2\pi)\sqrt{\varepsilon/(t'\,d)}$ (Eq. 7.4). diff --git a/docs/perception/psychoacoustics/index.md b/docs/perception/psychoacoustics/index.md index 849692f71..aeddaccb3 100644 --- a/docs/perception/psychoacoustics/index.md +++ b/docs/perception/psychoacoustics/index.md @@ -36,8 +36,11 @@ ISO 1996-2. [Psychoacoustic annoyance and fluctuation strength](psychoacoustic-annoyance.md) closes the chain with the Fastl & Zwicker model, which combines loudness, sharpness, roughness and the slow-modulation sensation of fluctuation strength -into a single annoyance value. Read it last: its four inputs all come from -the earlier pages. +into a single annoyance value. Read it last: three of its four inputs come from +the earlier pages, and it supplies the fourth, fluctuation strength, itself, in +both the Fastl & Zwicker closed form and the Osses 2016 signal model. The +ECMA-418-2 fluctuation strength on the Sound Quality page is a further, +normative model of the same sensation, under a different unit name. ## Pages in this section diff --git a/docs/reference/theory/environment-transport.md b/docs/reference/theory/environment-transport.md index 10710e90e..a5d292a8e 100644 --- a/docs/reference/theory/environment-transport.md +++ b/docs/reference/theory/environment-transport.md @@ -26,6 +26,10 @@ $$ The adjustments $K_i$ cover time-of-day penalties (ISO 1996-1 Table A.1: evening 5 dB, night 10 dB) as well as source-character adjustments (e.g. tonal penalties), which the ECMA-418-1 TNR/PR assessments can justify objectively. +Synthetic 24-hour urban LAeq profile with day, evening and night bands, the +5 and +10 dB weighted period levels and the resulting Lden + +*A 24-hour $L_{Aeq}$ profile split into day, evening and night, the +5/+10 dB penalties and the resulting $L_{den}$.* + See the [Environmental levels guide](../../environment/assessment/environmental-levels.md) for usage. ## Impulsive-sound prominence (NT ACOU 112) @@ -50,6 +54,15 @@ $$ $K_I$ is exactly the kind of source-character adjustment that enters the ISO 1996-1 composite rating level above. The anchors $P(1000\ \text{dB/s}, 30\ \text{dB}) = 9 + 2\log_{10} 30 = 11.95$ and $K_I(P{=}10) = 9.0$ dB are reproduced exactly. +A-weighted Fast level history of three hammer strikes over a 55 dB(A) background across six seconds: each strike rises from about 52 dB to 89 dB, the detected onset start and end points are marked with the least-squares onset line, the governing level difference of 36.8 dB is annotated, and the title reports a prominence of 11.34 with an adjustment of 11.42 dB, category highly impulsive + +*Both inputs of $P$ are geometry on this trace, which is why the method needs a +level history and not a level. The onset rate is the slope of the fitted line +through the rise, in dB/s, and the qualifying threshold of 10 dB/s is a +steepness on this axis; the level difference is the height of the same rise. +Three strikes are detected here and only the steepest-and-tallest one governs +the adjustment.* + See the [Impulse Prominence guide](../../environment/assessment/impulsive-sound.md) for usage. ## Outdoor propagation and occupational exposure (ISO 9613-1/2, ISO 9612) @@ -82,6 +95,10 @@ $f_m = 1000 \cdot 10^{k/10}$ (Note 5) used to compute that table. The same $\alpha$ is the only route to the ISO 354 power attenuation coefficient $m = \alpha/(10 \log_{10} e)$, exposed as `air_attenuation_m`. +ISO 9613-1 pure-tone atmospheric attenuation coefficient alpha in dB/km against frequency, on a linear decibel ordinate over a logarithmic frequency axis, for the reference 20 degrees Celsius and 50 percent relative humidity atmosphere, produced by the AtmosphericAttenuation result plot method + +*The ISO 9613-1 coefficient for the 20 °C, 50 % relative-humidity reference atmosphere: the $f^2$ rise spans two decades from 50 Hz to 10 kHz.* + ### Outdoor propagation, general method (ISO 9613-2) ISO 9613-2:1996 predicts the octave-band level at a receiver **downwind** of a @@ -125,6 +142,21 @@ average level subtracts the meteorological correction $C_{met}$ (Eq. (6), (21)/(22)). The method's stated accuracy is $\pm 1$ to $\pm 3$ dB for broadband noise up to 1000 m (Table 5). +ISO 9613-2 per-octave-band attenuation breakdown as a stacked bar of Adiv, Aatm, Agr and Abar with the total A overlaid, for a 200 m path over porous ground with a 4 m barrier + +*The four terms at their true relative sizes, band by band, for a 200 m path +over porous ground with a 4 m barrier. $A_{div}$ is 57 dB in every band because +it is pure geometry. $A_{atm}$ is nothing at 63 Hz and 18.7 dB at 8 kHz, so it +is the term that decides how far high frequencies travel and no other. $A_{gr}$ +is where the low bands live and is **negative** at 63 Hz (−4.6 dB: the ground +reflection adds energy rather than removing it). $A_{bar}$ is at its 20 dB cap +from 2 kHz up but falls to zero at 250 Hz, because the top-edge form subtracts +the ground effect the screened path gives away, $A_{bar} = D_z - A_{gr} \geq 0$, +and 250 Hz is exactly where $A_{gr}$ peaks. Which term is worth refining +depends entirely on the band and the geometry.* + +ISO 9613-2 source-barrier-receiver geometry: a point source at height hs, a barrier whose top edge splits the path into dss and dsr, and a receiver at height hr, with the blocked direct ray and the diffracted ray over the edge, the path difference z and the Dz formula + ### Occupational noise exposure and uncertainty (ISO 9612) ISO 9612:2009 is the engineering method (accuracy grade 2) for a worker's daily @@ -168,6 +200,10 @@ The sound power level $L_W = 10 \log_{10}(P/P_0)$ ($P_0 = 1$ pW) is an *emission* quantity: unlike a pressure level it does not depend on the receiver distance or the room. Three families of methods recover it. +The three sound power routes side by side: an enveloping pressure surface over a reflecting plane (ISO 3744/3746), a source in a reverberation room sampled by microphones (ISO 3741) and an intensity probe scanning a surface around the source (ISO 9614-2) + +*The three routes to $L_W$: enveloping pressure surface, reverberation room and intensity scan.* + ### Enveloping-surface pressure (ISO 3744/3746) Over a reflecting plane the free-field relation is simply diff --git a/docs/reference/theory/materials-surfaces.md b/docs/reference/theory/materials-surfaces.md index adc578e11..e8ac32f29 100644 --- a/docs/reference/theory/materials-surfaces.md +++ b/docs/reference/theory/materials-surfaces.md @@ -36,6 +36,10 @@ worked example, the oracle is a synthetic end-to-end chain ($V = 200$ m³, $S = 10$ m², $T = 8.0/6.0/7.5/5.0$ s → $s = 0.093$) plus the Formula A.5 hand value $u_s = 0.0297$. +The random-incidence scattering coefficient s of a diffusing surface over the 13 one-third-octave bands from 250 to 4000 Hz, rising smoothly from near zero at low frequency towards 0.84 at 4 kHz + +*A random-incidence scattering coefficient rising with frequency as the surface roughness becomes comparable with the wavelength.* + ### Directional diffusion coefficient (ISO 17497-2) ISO 17497-2:2012 measures, in the free field, how uniformly a surface spreads @@ -114,6 +118,10 @@ float-safe. The two Annex A worked examples are reproduced: $\alpha_p = (0.35, 0.70, 0.65, 0.60, 0.55)$ → $\alpha_w = 0.60$, class C; and raising 500 Hz to 1.00 keeps $\alpha_w = 0.60$ but adds the indicator, "0.60(M)". +ISO 11654 weighted sound absorption rating: the practical absorption spectrum plotted against the shifted reference curve over 250 Hz to 4000 Hz, with the unfavourable deviation at 250 Hz shaded and the weighted coefficient alpha_w read at 500 Hz + +*The ISO 11654 rating: practical absorption against the shifted reference, with the unfavourable deviation shaded and the weighted coefficient read at 500 Hz.* + See the [Sound Absorption Measurement and Rating guide](../../materials/absorbers/absorption-measurement.md) for usage. ### Airflow resistance (ISO 9053-1/2) @@ -186,6 +194,25 @@ $TL = 0\ \text{dB}$, hard-backed $|R| = 1$), synthetic round-trips that recover a known $r$, and two-load recovery of an asymmetric reciprocal specimen. +ISO 10534-2 two-microphone impedance tube: a loudspeaker radiating a plane wave down the tube, two microphones flush in the wall at spacing s and distance x1 from the specimen face, the test specimen against a rigid backing, and the incident and reflected waves + +ISO 10534-2 two-microphone tube result for a 50 mm porous absorber: the normal-incidence absorption coefficient rising from about 0.2 at 200 Hz towards 0.97 above 1 kHz, with the reflection-factor magnitude falling as its mirror image + +*What the ISO 10534-2 formula returns: $\alpha$ and $|r|$ for a 50 mm porous +absorber over the working band of a 100 mm tube. The two curves are the same +information — $\alpha = 1 - |r|^2$ — so the figure is really one measurement +drawn twice, and the rise with frequency is the layer thickness growing against +the wavelength.* + +ASTM E2611 four-microphone transmission-loss tube: a sound source, two microphones upstream and two downstream of the test specimen at spacings s1 and s2 and offsets l1 and l2, an adjustable termination for the two-load method, the upstream A and B and downstream C and D travelling waves, and the transfer matrix and transmission-loss relations + +ASTM E2611 transfer-matrix quantities of a 50 mm porous layer: the normal-incidence transmission loss rising from about 6.6 dB at 200 Hz to over 9 dB at 1.6 kHz on the left axis, and the hard-backed absorption coefficient rising from 0.19 to about 0.97 on the right axis + +*The same four-pole entries answering two different questions: how much sound +the free-standing layer lets through (the transmission loss above) and how much +the same layer absorbs once it is backed rigidly. A material can be a good +absorber and a poor barrier at once, which this pair makes plain.* + See the [Impedance Tube guide](../../materials/absorbers/impedance-tube.md) for usage. ## References diff --git a/docs/reference/theory/perception.md b/docs/reference/theory/perception.md index a4cad91b1..d3ea7b768 100644 --- a/docs/reference/theory/perception.md +++ b/docs/reference/theory/perception.md @@ -26,6 +26,10 @@ The three parameters come from Table 1 (p. 4), tabulated at the 29 preferred thi The standard specifies **no interpolation** between the tabulated frequencies. Formula (1) is specified for **20 phon to 90 phon** between 20 Hz and 4 kHz, and only up to **80 phon between 5 kHz and 12.5 kHz**; above 80 phon the contour therefore stops at 4 kHz. Values outside these limits from Formula (2) are extrapolations the standard labels as informative only. +ISO 226:2023 normal equal-loudness-level contours from 20 to 90 phon with the hearing threshold curve + +*The ISO 226:2023 contours from Formula (1), 20 to 90 phon, with the hearing threshold.* + See the [Loudness guide](../../perception/psychoacoustics/loudness.md) for usage. ## Tone prominence: TNR and PR (ECMA-418-1) @@ -46,6 +50,15 @@ $$ **PR** (clause 12) compares the level of the critical band centred on the tone, $L_M$, with the mean power of the two **contiguous** critical bands $L_L$, $L_U$ (edges from the fitted Formulae 21–22 with Tables 2–3): $\mathrm{PR} = 10\log_{10} P_M - 10\log_{10}\left[(P_L + P_U)/2\right]$ (Formula 23). For $f_t \le 171.4$ Hz the lower band is truncated at 20 Hz and its power rescaled to a **100 Hz bandwidth** (Formula 24). The criterion (Formulae 25–26) is 9.0 dB at $f_t \ge 1$ kHz, rising as $9.0 + 10.0\log_{10}(1000/f_t)$ below. Tones are assessed within the 89.1 Hz – 11.2 kHz range of interest (clauses 11.5 / 12.6). +Tone-to-noise ratio of a 250 Hz fan tone plotted against the ECMA-418-1 prominence criterion: the criterion falls from about 17 dB at 89 Hz to a flat 8 dB above 1 kHz, and the assessed tone sits at 15.1 dB, 2.1 dB above the 13.0 dB criterion at 250 Hz, so it is prominent + +*The TNR criterion drawn rather than evaluated, over the 89.1 Hz – 11.2 kHz +range of interest, with one assessed tone on it. Because the criterion is +$8.0 + 8.33\log_{10}(1000/f_t)$ below 1 kHz and flat above, the same +tone-to-noise ratio is judged against a different threshold at every frequency: +the example tone clears its 13.0 dB threshold at 250 Hz by 2.1 dB, while a +10 dB tone would be prominent anywhere above 1 kHz and not prominent here.* + See the [Prominent Discrete Tones guide](../../perception/psychoacoustics/tone-prominence.md) for usage. ## Zwicker loudness (ISO 532-1) @@ -79,6 +92,10 @@ $$ below 1 sone the reference program uses $L_N = 40 (N + 0.0005)^{0.35}$, floored at 3 phon. +Specific loudness patterns over the Bark scale for a 1 kHz narrowband sound and a broadband sound of equal band level + +*Specific loudness N′(z) over the Bark axis: energy spread over many critical bands sums to more sones than the same band level in a single band.* + See the [Loudness guide](../../perception/psychoacoustics/loudness.md) for usage. ## Advanced loudness models & sound quality @@ -145,6 +162,15 @@ $$ (Formulae 65–111). The single value $R$ is the 90th percentile of $R(l_{50})$ over time (Clause 7.1.10); the constant $c_R$ (Formula 104) calibrates the reference sound (a 1 kHz carrier 100 % amplitude-modulated at 70 Hz at 60 dB SPL) to 1 asper. +ECMA-418-2 slow vs fast modulation perception: fluctuation strength forms a band-pass over modulation frequency peaking near 4 to 6 Hz while roughness of the same 1 kHz amplitude-modulated tones peaks near 70 Hz + +*The modulation-rate weighting the formulae above apply, and the reason the +range "roughly 20–300 Hz, strongest near 70 Hz" is a band-pass and not a +threshold: the same 1 kHz carrier modulated slowly is heard as fluctuation +strength, peaking near 4–6 Hz, and modulated fast is heard as roughness, +peaking near 70 Hz. Between the two peaks the sensation changes name, not +degree.* + ### Sharpness (DIN 45692) Sharpness condenses the high-frequency emphasis of a sound into one number: the $g(z)$-weighted first moment of the ISO 532-1 stationary specific-loudness pattern (DIN 45692:2009, Equation 1): @@ -156,6 +182,14 @@ $$ evaluated on the same 240-bin, 0.1-Bark grid. The constant $k$ is not hard-coded but derived from the calibration requirement (clause 6): a critical-band-wide narrowband noise 920–1080 Hz at 60 dB SPL scores exactly 1 acum, and the derived $k = 0.108$ lands inside the normative window $0.105 \le k < 0.115$ (clause 5.2). The informative Annex B weightings are provided under the same 1-acum anchor: von Bismarck (knee at 15 Bark, $0.2\ e^{0.308(z-15)} + 0.8$) and Aures (loudness-dependent, $g(z) = 0.078\ (e^{0.171 z}/z)\ N/\ln(0.05 N + 1)$). The Table A.2 narrow-band targets are reproduced within the clause 6 tolerance (5 % or 0.05 acum): 0.38 acum at 250 Hz, 1.00 at 1 kHz, 1.78 at 2.5 kHz, 2.82 at 4 kHz. +DIN 45692 sharpness weighting g(z) against critical-band rate on a log axis, comparing the DIN, von Bismarck and Aures curves with the 15.8 and 15 Bark knees marked + +*The three $g(z)$ weightings of the formula above on one axis: DIN with its +15.8 Bark knee, von Bismarck with its 15 Bark knee, and the loudness-dependent +Aures curve, which is why the choice of weighting changes a sharpness value +only for sounds with energy above the knee (15 to 15.8 Bark, about 2.5 to +3 kHz) and leaves everything below it untouched.* + See the [Sound Quality Metrics guide](../../perception/psychoacoustics/sound-quality.md) for usage. ## Modulation transfer and STI (IEC 60268-16) @@ -190,6 +224,23 @@ $$ m_{dr} = \frac{2 \sqrt{\left( \sum_t I_k(t) \sin 2 \pi f_m t \right)^2 + \left( \sum_t I_k(t) \cos 2 \pi f_m t \right)^2}}{\sum_t I_k(t)}, \qquad m = \frac{m_{dr}}{0.55} $$ +Modulation transfer index per octave band from 125 Hz to 8 kHz for a hall with a 0.9 s reverberation time and a 15 dB speech-to-noise ratio: the seven bars sit close together between about 0.54 and 0.60, giving STI = 0.58 with the Annex F rating E + +*The seven $\mathrm{MTI}_k$ the weighted sum above consumes, for a hall with +$T = 0.9$ s and a 15 dB speech-to-noise ratio. Each bar is already the mean of +14 transmission indices, so this is two stages of averaging below the raw +$m(F)$; the bars sit within 0.06 of one another, which is the case in which +the $\beta_k$ redundancy terms subtract almost nothing and the STI is close to +the plain $\alpha$-weighted mean.* + +STI versus reverberation time with the IEC 60268-16 Annex F rating bands shaded + +*The end of the chain rather than its middle: what the Schroeder closed form +does to the STI as reverberation grows, against the Annex F rating bands. The +curve falls steeply through the range where a room is still usable and +flattens once the modulation has already been destroyed, which is why halving +a long reverberation time buys less intelligibility than halving a short one.* + See the [Speech Transmission Index guide](../../perception/speech/speech-transmission.md) for usage. ## Speech Intelligibility Index (ANSI S3.5) @@ -216,6 +267,10 @@ $$ and any fractile follows a two-sided Gaussian model (clause 4.4), $\Delta H_Q = \Delta H_{md} + z(Q)\ s$, using the upper spread $s_u$ for $z \ge 0$ (worse than median) and the lower spread $s_l$ otherwise, each a degree-5 polynomial in $Y - 18$ per sex and frequency (clause 4.3, Tables 2–5). At age 18 every deviation is zero by construction. The formulae are established to 80 years at and below 2 kHz and to 70 years above; beyond that the evaluation is an extrapolation. Anchors: at 60 years the medians evaluate to 7.85 dB (male, 1 kHz), 20.21 dB (male, 4 kHz) and 15.32 dB (female, 4 kHz), matching the Table 1 formula to $10^{-3}$. +Two panels. Left: the ISO 7029 median hearing-threshold deviation for men at ages 20, 40, 60 and 80 on an inverted audiogram axis, with the 10 to 90 percent fractile band around the 70-year curve; the loss deepens toward high frequencies and with age. Right: the ISO 389-7 free-field and diffuse-field reference threshold, coinciding below 1 kHz and diverging above, dipping to a minimum near 3 to 4 kHz + +*The ISO 7029 median age shift with its fractile band (left) and the ISO 389-7 free- and diffuse-field reference thresholds (right).* + See the [Hearing Threshold guide](../../perception/hearing/hearing-threshold.md) for usage. ## Noise-induced hearing loss (ISO 1999) @@ -234,6 +289,16 @@ $$ The Annex D worked examples (Tables D.1–D.4; e.g. 100 dB / 40 yr at 3 kHz: 29/38/60 dB at the 0.10/0.50/0.90 fractiles) are reproduced exactly at the standard's integer rounding, and the Formula 2 hand value at 4 kHz / 20 yr / 90 dB is $N_{50} = 12.94$ dB. +ISO 1999 noise-induced permanent threshold shift after 40 years at an 8 h-normalised 95 dB(A), on an inverted audiogram axis from 500 Hz to 6000 Hz: the median is near zero at 500 Hz and deepens to about 26 dB at 4000 Hz before recovering at 6000 Hz, and the 10 to 90 percent fractile band around it reaches nearly 37 dB for the most susceptible tenth + +*The model as an audiogram: 40 years at an 8 h-normalised 95 dB(A). The notch +at 4 kHz is what makes noise-induced loss recognisable in a clinic, and it is +here only because $L_0$ is lowest (75 dB) in that band. Mind the fractile +direction the paragraph above states: the edge of the shaded band showing the +**deeper** shift is the library's `fractile=0.90`, the most susceptible tenth — +which ISO 1999 and its Annex D column headings label $Q = 10\ \%$. At 4 kHz +this case runs 19.5 / 26.0 / 36.0 dB at `fractile` 0.10 / 0.50 / 0.90.* + See the [Noise-Induced Hearing Loss guide](../../perception/hearing/noise-induced-hearing-loss.md) for usage. ## References diff --git a/docs/reference/theory/rooms-buildings.md b/docs/reference/theory/rooms-buildings.md index ca564a7a7..0a73de235 100644 --- a/docs/reference/theory/rooms-buildings.md +++ b/docs/reference/theory/rooms-buildings.md @@ -8,6 +8,10 @@ This page collects the theory behind rooms and buildings: impulse-response measu ANSI/ASA S12.2-2019 rates steady background noise in rooms against families of octave-band curves (16 Hz – 8 kHz). The **NC rating** follows the two-step procedure of clause 5.2.2 on the Table 1 curves (NC-15 to NC-70): the speech interference level $\mathrm{SIL} = \tfrac14(L_{500}+L_{1000}+L_{2000}+L_{4000})$ (clause 3.2) selects the NC-(SIL) curve, and if no band exceeds it the spectrum is designated NC-(SIL); otherwise the tangency method (clause 5.2.3) applies: each measured band is interpolated against the tabulated curve values, the rating is the highest per-band index and the band that sets it is the governing band; the interpolation makes the rating continuous (an NC-42.5 is reported as such, not snapped to a curve). Spectra above NC-70 or below NC-15 fall outside the family and are flagged (>NC-70 with the band of maximum exceedance, or Two panels for the same ventilation-dominated room spectrum. Left: the measured octave-band levels over the NC curve family, with a red diamond marking the tangent point at 250 Hz that sets the NC-42.5 rating. Right: the same spectrum over the reference RC-35 curve, with the low-frequency bands rising through the shaded rumble tolerance (plus 5 dB below 500 Hz) so the noise is classified RC-35(R), and the hiss tolerance (plus 3 dB at and above 1000 Hz) shaded for comparison + +*The same spectrum rated both ways: NC tangency at the governing band (left) and the RC Mark II reference with the rumble excess (right).* + See the [Room Noise guide](../../buildings/rooms/room-noise.md) for usage. ## Room and building acoustics (ISO 18233, ISO 3382, ISO 16283, ISO 10140, EN 12354, ISO 12999, ISO 717, ISO 354) @@ -32,6 +36,10 @@ $$ i.e. a reversed cumulative sum in discrete time. Backward integration cancels the random fluctuation of a single squared IR: for a purely exponential energy decay $p^2(t) = e^{-a t}$ it gives $E(t) = e^{-a t}/a$, an exactly straight line $L(t) = -(10 a / \ln 10)\ t$. Background noise flattens $E(t)$, so integration is truncated at the crossing $t_1$ of the fitted decay line with the noise level and the missing tail is compensated by an exponential with the fitted rate; without that term the finite integral systematically **underestimates** $T$. +Squared impulse response with its Schroeder backward-integrated decay curve, and the EDT, T20 and T30 regression windows marked + +*A squared impulse response, its Schroeder backward integral and the EDT/T20/T30 regression windows of the next subsection.* + ### Regression windows and validity (ISO 3382-2, Clause 6, Annex B/C) Reverberation time is a least-squares fit $L = a + b t$ over a window, extrapolated to 60 dB via $T = -60/b$ (Annex C): **EDT** on 0 to −10 dB, **T20** on −5 to −25 dB, **T30** on −5 to −35 dB. A single-slope decay gives EDT = T20 = T30; a fast early / slow late double slope gives EDT < T30. Validity uses the dynamic-range rule of 5.3.3: the noise must sit at least 25 dB below the IR peak for EDT (evaluation span + 15 dB), tightened to 46 dB for T20 and 54 dB for T30 so the tail-compensation bias of a flagged-valid value stays within the 5 % JND. The **curvature** $C = 100\ (T_{30}/T_{20} - 1)$ % (Annex B) flags a non-straight decay above 10 %. @@ -46,6 +54,15 @@ $$ with $t_e = 50$ ms (C50, speech) or 80 ms (C80, music), and the **centre time** $T_s = \int_0^{\infty} t\ p^2\ dt / \int_0^{\infty} p^2\ dt$. For a pure exponential decay these have closed forms $C_{te} = 10 \log_{10}(e^{a t_e} - 1)$ and $T_s = 1/a$; at $T = 1$ s ($a = 13.8155$) they evaluate to C80 = 3.05 dB, C50 = −0.02 dB, D50 = 0.499 and Ts = 72.4 ms, the values the implementation reproduces. Table A.1 JNDs (EDT 5 %, C80 1 dB, D50 0.05, Ts 10 ms) bound how finely each is worth reporting. +ISO 3382 per-band parameters of a synthetic room impulse response: grouped EDT, T20 and T30 bars per octave band falling from about 1.4 s at 125 Hz to 0.7 s at 4 kHz, over a second panel where C50 and C80 rise with frequency + +*The closed forms above hold for a single exponential decay; a real room gives +one set of values per band. The upper panel is the decay itself (EDT, T20 and +T30 falling with frequency as air and surfaces absorb more), the lower panel +the early/late split of the same impulse response, and C50 and C80 rise with +frequency for the same reason the decay time falls — the later the energy, the +more of it the room has already removed.* + ### Open-plan spatial decay (ISO 3382-3, Clause 6) The spatial decay rate of A-weighted speech is the ordinary least-squares slope of $L_{p,A,S}$ against $\log_{10}(r/r_0)$ ($r_0 = 1$ m) over the 2–16 m positions, rescaled to a per-doubling figure, and the nominal level is read off the same line at 4 m: @@ -56,6 +73,16 @@ $$ The distraction distance rD and privacy distance rP are the distances where a **linear** (not logarithmic) regression of STI against distance crosses 0.50 and 0.20; a non-negative fitted slope (STI not falling with distance) makes them undefined, realising the standard's "can prove impossible to determine" note. +Open-plan spatial decay: A-weighted speech level and STI against source distance on a log axis, with the D2,S regression, the Lp,A,S,4m marker at 4 m and the rD and rP distance crossings + +*Two regressions on two different axes, which is what makes this clause hard to +hold in the head. The level line is fitted against $\log_{10}(r/r_0)$ and read +twice — as the slope $D_{2,S}$ per doubling, and at $r = 4$ m for +$L_{p,A,S,4\text{m}}$. The STI line is fitted against $r$ itself, **linearly**, +and read where it crosses 0.50 and 0.20 for the distraction and privacy +distances. If that second fit comes out flat or rising, the two distances do +not exist rather than being large.* + ### Image-source room impulse response (Kuttruff 4.1, Vorländer 11) A rectangular room reflects a point source in its walls; each reflection equals the free-field sound of a **mirror image** of the source. Mirroring a coordinate in a wall ($S_n = S - 2 d\,\mathbf{n}$, Vorländer Eq. 11.36) turns the source into a regular lattice of images, and the room impulse response is the sum of the direct sound and one delayed, attenuated impulse per image (Kuttruff Eqs. 4.4–4.5), @@ -86,6 +113,10 @@ Per one-third-octave band the level difference $D = L_1 - L_2$ (energy-averaged The single-number rating (ISO 717-1, Clause 4.4) shifts the Table 3 **reference curve** in 1 dB steps toward the measured curve until the sum of *unfavourable* deviations $\sum_i \max(0, \text{ref}_i + k - \text{meas}_i)$ is maximal but $\le$ 32.0 dB (16 thirds) or 10.0 dB (5 octaves); the rating $R_w$ is the shifted reference at 500 Hz. The **spectrum adaptation terms** are $C = X_{A1} - X_w$ and $C_{tr} = X_{A2} - X_w$ with $X_{Aj} = -10 \log_{10} \sum_i 10^{(L_{ij} - X_i)/10}$ (Table 4 spectra No. 1 pink noise, No. 2 urban traffic), each rounded to an integer. The ISO 717-1 Annex C worked example ($R_w = 30$, $C = -2$, $C_{tr} = -3$, unfavourable sum 31.8 dB) is reproduced exactly. +Measured one-third-octave sound reduction index with the shifted ISO 717-1 reference curve and the resulting weighted rating at 500 Hz + +*A measured R spectrum against the shifted ISO 717-1 reference: the rating is the shifted reference read at 500 Hz.* + ### Impact insulation and absorption (ISO 16283-2, ISO 717-2, ISO 354) Impact insulation swaps the airborne source for a standardized **tapping @@ -104,6 +135,16 @@ with the energetic sum $L_{n,\text{sum}} = 10 \log_{10} \sum_i 10^{L_i/10}$ over are reproduced exactly (thirds $L_{n,w} = 79$, $C_I = -11$; octaves $54$, $0$), via the same monotone shift search as ISO 717-1 run on the negated curves. +Measured one-third-octave normalized impact sound pressure level with the shifted ISO 717-2 reference curve and the resulting weighted rating read at 500 Hz + +*The mirror image of the airborne figure above, drawn so the flip is visible +rather than asserted. There the unfavourable deviations were counted where the +measurement fell **below** the reference; here they are counted where it rises +**above** it, because a louder receiving room is a worse floor. Everything else +is the same procedure: the reference curve shifted in 1 dB steps until the +unfavourable sum is as large as it can be without passing 32.0 dB, and the +rating read off the shifted reference at 500 Hz.* + Sound absorption (ISO 354) measures the equivalent absorption area from Sabine's relation applied to a reverberation room empty and with the specimen: $A = 55.3\ V/(c\ T) - 4 V m$ (the $4 V m$ term is the air absorption, $m$ the @@ -206,6 +247,15 @@ hard objects ($\psi \approx 0.072$) raises $A$ to 5.03 m² and drops $T$ to 0.9 s. The informative Annex D method for irregular spaces and unevenly distributed absorption is out of scope. +Two panels for a 60 cubic metre office with a bare versus acoustically-treated ceiling: the equivalent absorption area per octave band, much higher with the acoustic ceiling, and the reverberation time falling from about five seconds at low frequency for the bare room to under one second with the acoustic ceiling + +*What Formula 1 does band by band: the equivalent absorption area on the left +and the reverberation time it implies through Formula 5 on the right, for the +same room bare and treated. The Annex E case quoted above is the same +arithmetic on a smaller room — $A$ from 2.26 to 5.03 m² and $T$ from 2.1 to +0.9 s at 1 kHz — and the figure shows why the two move in opposite directions +and not proportionally.* + See the [Enclosed-Space Absorption guide](../../buildings/rooms/enclosed-space-absorption.md) for usage. ### Measurement uncertainty (ISO 12999-1) @@ -260,6 +310,19 @@ efficiency and point mobilities of the [vibration theory](vibration.md). The prediction is clean-room from Bies, Hansen & Howard (2017), Hopkins (2007) and Cremer, Heckl & Petersson (2005). +Four panels: the single-panel mass law with its coincidence dip, the double wall with the mass-spring-mass resonance and cavity gain, the plate radiation efficiency rising to unity above the critical frequency, and a composite wall whose 1 % open slit caps R at the open-area limit + +*The four behaviours of the paragraph above, one per panel. Top left, the mass +law rising 6 dB per octave with Sharp's coincidence dip cut into it at $f_c$. +Top right, the double wall: no better than the combined mass below $f_0$, then +the cavity term climbing until it saturates. Bottom left, the radiation +efficiency that decides how much of the plate's vibration becomes sound. Bottom +right, the ceiling a leak imposes: a 1 % open area holds the composite at +$10\log_{10}(S/S_a) = 20$ dB however good the wall is, which is the panel worth +showing a client.* + +To-scale cross-section of a 2 mm slit through a 100 mm wall: the hatched wall drawn in section with the narrow horizontal air gap at mid-height, an incident-sound arrow pointing at the gap from the left, the 100 mm wall depth and 2 mm slit width dimensioned, and circular transmitted wavefronts sketched spreading from the slit exit on the right + See the [Predicting Panel Sound Insulation](../../buildings/design/panel-sound-insulation.md) guide for usage. diff --git a/docs/reference/theory/signal-analysis.md b/docs/reference/theory/signal-analysis.md index a699a7e6b..0f0dffa03 100644 --- a/docs/reference/theory/signal-analysis.md +++ b/docs/reference/theory/signal-analysis.md @@ -100,6 +100,18 @@ for f, pxx in zip(freq_bins[in_band], psd[in_band]): print(f, pxx) ``` +One-third-octave spectrum analysis of a six-tone signal with the raw PSD in the background + +*The two objects on one axis, for a six-tone signal at 20, 100, 500, 2000, +4000 and 15 000 Hz. The grey trace is a Welch PSD ($f_s$ = 48 kHz, +`nperseg = 8192`, so a fixed 5.86 Hz bin everywhere); the markers are the +standardized third-octave levels of the same signal. The bin width never +changes and the band width does: 4.60 Hz at the 20 Hz band, narrower than one +bin, against 230.77 Hz at 1 kHz and 3657 Hz at 16 kHz. That is why the top +bands each swallow hundreds of bins while the bottom ones sit inside a single +one, and why the two answers cannot be converted into each other. (The PSD +trace is offset vertically for legibility, so read its shape, not its level.)* + This keeps the two concepts separate: phonometry gives standardized fractional-octave levels, while Welch gives narrowband FFT bins. With `fs=100000` and `nperseg=2**15`, the Welch bin spacing is about 3.05 Hz. @@ -202,6 +214,10 @@ transform. Because the bilinear transform compresses frequencies near Nyquist, the default `high_accuracy` mode designs and runs the filter at an internally oversampled rate (≥ 144 kHz); see [Frequency Weighting](../../signals/levels/weighting.md). +A, C and Z frequency weighting curves of IEC 61672-1 with a zoom showing the positive region of the A curve (+1.27 dB at 2.5 kHz) + +*The three IEC 61672-1 weighting curves realized by the library, with the small positive region of the A curve magnified. The special B, D and AU curves are charted in [Special Weightings](../../signals/levels/special-weightings.md).* + ## Time Integration Implemented as a first-order IIR exponential integrator: @@ -221,6 +237,10 @@ start from the first input energy, or pass a scalar/array with the previous mean-square output state. See [Why phonometry](../../start/why-phonometry.md) for the IEC 61672-1 tone-burst verification of this implementation. +Fast, Slow and Impulse time weighting responses to a noise burst + +*The exponential integrator at the three standard time constants: Fast follows a burst, Slow smooths it and Impulse holds its peak.* + ## G-weighting (ISO 7196) The G curve extends frequency weighting into the infrasound range. ISO 7196:1995 Table 1 (p. 2) defines it by four zeros at the origin and four complex-conjugate pole pairs, given as coordinates in Hz (multiplied by $2\pi$ to obtain rad/s): @@ -238,6 +258,13 @@ $$ The four zeros against eight poles shape the characteristic response: a rise of approximately **+12 dB/octave between 1 Hz and 20 Hz**, with roll-offs of approximately **24 dB/octave** below 1 Hz and above 20 Hz. Infrasound needs its own curve because near the hearing threshold the perceived loudness of very-low-frequency tones grows much more steeply with sound pressure level than at mid frequencies (a small dB increase above threshold produces a large loudness jump), so the A curve (anchored at 1 kHz) grossly misrepresents infrasonic annoyance. +G-weighting frequency response from 0.1 Hz to 1 kHz with the ISO 7196 Table 2 nominal values overlaid + +*The shape those four zeros and four pole pairs make, against the ISO 7196 +Table 2 nominal values: 0 dB at the 10 Hz anchor, the +12 dB/octave climb +through the infrasound decade below it, and the two 24 dB/octave roll-offs +that fence the curve off below 1 Hz and above 20 Hz.* + Since G acts on 0.25 Hz – 315 Hz, far below the Nyquist frequency at audio rates, the frequency warping of the plain bilinear transform (applied without prewarping) is negligible there: about 0.014 % at 315 Hz for $f_s = 48$ kHz, under 0.01 dB on the response. The internal oversampling used for the A/C designs (whose action extends to 16 kHz) is therefore not applied. See the [Special Weightings guide](../../signals/levels/special-weightings.md) for usage. @@ -250,6 +277,14 @@ $$ \mathrm{SEL} = L_{eq,T} + 10 \log_{10}\left(\frac{T}{T_0}\right), \qquad T_0 = 1\ \text{s} $$ +A vehicle pass-by level history with its Leq over the whole event and the equal-energy one-second SEL block + +*What the formula does to an event: the pass-by is replaced by a one-second +block of the same total energy, which is why SEL exceeds the event's $L_{eq}$ +whenever the event lasts longer than a second, and why two events of the same +SEL are interchangeable in a dose even when one is loud and short and the +other quiet and long.* + **Sound exposure** $E$ (IEC 61252, 3.1) is the time integral of the squared A-weighted sound pressure, expressed in pascal-squared hours: $$ @@ -300,6 +335,10 @@ The **pressure-intensity index** $\delta_{pI} = L_p - L_I$ measures how reactive See the [Sound Intensity guide](../../devices/emission/intensity.md) for usage. +Third-octave pressure and intensity levels for a plane progressive wave versus a standing wave + +*The p-p estimator in the two limiting fields: the gap between $L_p$ and $L_I$ is the pressure-intensity index that flags reactive fields.* + ## Measurement uncertainty (ISO/IEC Guide 98-3: GUM and Supplement 1) Domain budgets like ISO 12999-1 and ISO 9612 Annex C are instances of the @@ -336,6 +375,17 @@ inputs; the output is nearly trapezoidal, not Gaussian, so the interval is narrower than $\pm 1.96\,u$), and the GUM Annex H.1 end-gauge example gives $k = t_{0.99}(\nu_{\mathrm{eff}} = 16) = 2.92$ and $U_{99} = 93$ nm. +Two panels for the A-weighted level example. Left: the GUM uncertainty budget, a horizontal bar chart of each input's contribution to the combined uncertainty with a dashed line at uc of 0.407 dB. Right: the Monte Carlo output histogram overlaid with the GUM Gaussian and the shaded 95 percent coverage interval; the title reads Y equals 74.00 dB, U equals 0.86 dB, k equals 2.11 + +*The two routes on one problem — an A-weighted level, not the Supplement 1 +four-term example quoted above. Left is the law of propagation as a budget: +one bar per input, so the term worth reducing is visible. Right is the +Supplement 1 route: the Monte Carlo output distribution with the GUM Gaussian +drawn over it and the 95 % coverage interval shaded. Here the two agree, which +is what clause 8 calls validation; where the model is non-linear or the output +visibly non-Gaussian the histogram departs from the curve and the interval is +read off the fractiles instead.* + See the [GUM Uncertainty guide](../../signals/metrology/gum-uncertainty.md) for usage. ## References diff --git a/docs/reference/theory/vibration.md b/docs/reference/theory/vibration.md index 1d8eacc47..22260b5d7 100644 --- a/docs/reference/theory/vibration.md +++ b/docs/reference/theory/vibration.md @@ -38,6 +38,10 @@ reproduced (E.2.1: 7.4 m/s² for 2.5 h → $A(8) = 4.1$ m/s²; E.3 forestry, three tools → 3.6 m/s²), as are the ISO 5349-1 Table C.1 exposure-duration rows. +The whole-body vertical weighting Wk in decibels over 0.4 to 100 Hz: a plateau near -6 dB below 2 Hz, a small +0.5 dB peak near 6 Hz and a roll-off to about -21 dB at 100 Hz + +*The Wk whole-body weighting realized from the ISO 8041-1 cascade.* + ### Multiple shocks (ISO 2631-5) Repeated shocks damage the lumbar spine through peak compression rather than @@ -64,6 +68,15 @@ over 20 years) is reproduced: $D_{zd} = 55.97$ m/s², $R = 1.22$, $\Pi = 0.37$. The Annex A finite-element spinal model (distributed by ISO as separate software) is out of scope. +Left: the seat-to-spine transmissibility rising to about 1.6 near a 5 Hz resonance then rolling off to near zero by 80 Hz. Right: the Weibull probability of lumbar injury versus the stress variable R for male and female, with the 10, 50 and 90 percent risk levels and the Annex C male example at R = 1.22, about 37 percent + +*The two objects of the model. Left, the clause 5.2 seat-to-spine +transmissibility: unity at DC, peaking at $|H| \approx 1.54$ near 5 Hz and +rolling off above it, which is why $W_k$ had to be replaced for shocks. Right, +the Table C.1 Weibull law $\Pi(R)$ with the Annex C worked example marked at +$R = 1.22$, $\Pi = 0.37$ — the risk rises steeply over a narrow band of $R$, so +a dose that doubles does not double the probability.* + See the [Human Vibration guide](../../vibration/human/human-vibration.md) and the [Multiple-Shock Vibration guide](../../vibration/human/multiple-shock-vibration.md) for usage. @@ -93,6 +106,25 @@ from Cremer, Heckl & Petersson (2005) and Hopkins (2007). See the [Predicting Panel Sound Insulation guide](../../buildings/design/panel-sound-insulation.md) for usage. +Normalized receptance, mobility and accelerance magnitudes of a single-degree-of-freedom resonator on a log-log frequency axis, all peaking at the resonance + +*Not one of the closed forms above: this is a **finite** one-degree-of-freedom +resonator, receptance, mobility and accelerance being the same resonance seen +through the three kinematic quantities. It is here as the contrast — the +infinite-structure results are frequency-independent or smoothly falling, +while anything finite resonates.* + +Driving-point mobility magnitude of a single-degree-of-freedom resonator on log-log axes, climbing along the stiffness line below resonance, falling along the mass line above it, and peaking at one over the damping coefficient at the resonance + +*The same point read as a diagnosis: below resonance the magnitude climbs the +**stiffness line** $\omega/k$, above it it falls along the **mass line** +$1/(\omega m)$, and the peak height is set by the damping alone. A real +structure has many such resonances, and the infinite-structure closed forms +above are the average the measured mobility oscillates about, not the value it +takes at a given frequency — which is why they are used with octave or +third-octave inputs and are least trustworthy in the lowest bands of a small +or lightly damped element.* + ## References - Griffin, M. J. (1996). *Handbook of human vibration*. Academic Press. diff --git a/docs/signals/filters/index.md b/docs/signals/filters/index.md index e9e970252..ab42a65ba 100644 --- a/docs/signals/filters/index.md +++ b/docs/signals/filters/index.md @@ -5,10 +5,13 @@ Acoustic analysis rarely wants a raw FFT: standards, ratings and human hearing all work in **fractional octave bands**, frequency intervals whose width grows proportionally with frequency. phonometry implements them as banks of -recursive filters whose **-3 dB points sit exactly on the ANSI S1.11 band -edges**, so band levels are comparable whichever filter architecture computes -them, and whose designs are verified against the class tolerances of -**IEC 61260-1:2014**. +recursive filters whose designs are verified against the class tolerances of +**IEC 61260-1:2014**. The default Butterworth bank, and the Chebyshev II and +Bessel alternatives, put their **-3 dB points exactly on the ANSI S1.11 band +edges**, so their band levels are directly comparable; the two equiripple +architectures (Chebyshev I, Elliptic) place their ripple edge there instead and +consequently read a few tenths of a decibel high in every band, which is why a +campaign should fix one architecture and keep it. The foundation page is [Filter Banks](filter-banks.md). It covers the band mathematics, how a signal is decomposed into 1/1, 1/3 or diff --git a/docs/signals/index.md b/docs/signals/index.md index c2cf31bed..ff592f017 100644 --- a/docs/signals/index.md +++ b/docs/signals/index.md @@ -21,8 +21,7 @@ confidence intervals), **correlation and time-delay estimation** and the **Hilbert envelope**, all stated with the Bendat & Piersol error analysis. And two transversal concerns complete the core. **Calibration** decides what the digital samples mean physically: results can be referenced to a measured -calibrator tone or a known sensitivity (dB SPL), or stay in digital full -scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo +calibrator tone (dB SPL), or stay in digital full scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo supplement) qualifies any result computed from uncertain inputs, which is what makes a number defensible in a report. @@ -128,8 +127,8 @@ and carrying its statistical quality. What the numbers mean and how much to trust them. - [Calibration and dBFS](metrology/calibration.md): physical SPL - calibration from a calibrator tone (IEC 60942) or a known sensitivity, and - the digital dBFS mode. + calibration from a calibrator tone (IEC 60942), the stability check it applies + to that recording, and the digital dBFS mode. - [Measurement uncertainty (GUM and Monte Carlo)](metrology/gum-uncertainty.md): the law of propagation of uncertainty and the Monte Carlo method of ISO/IEC Guide 98-3, with expanded uncertainty and coverage intervals. diff --git a/docs/signals/levels/index.md b/docs/signals/levels/index.md index 639fb1f8f..85f4ec1b4 100644 --- a/docs/signals/levels/index.md +++ b/docs/signals/levels/index.md @@ -6,9 +6,11 @@ A sound level meter does three things to a calibrated signal, in order: it **weights it in frequency** to mimic the ear's sensitivity, it **smooths it in time** with a standardised ballistic, and it **integrates it into a level**. The pages of this section implement that chain stage by stage for the -displayed level: the A/C/Z curves and the Fast/Slow/Impulse ballistics -follow **IEC 61672-1:2013** closely enough that the weightings are -verified against the standard's own tolerance tables in CI. +displayed level: the A/C/Z curves and the Fast and Slow ballistics of +**IEC 61672-1:2013**, verified in CI against the standard's own tolerance +tables (Table 3 for the weightings, Table 4 for the tone-burst responses), plus +the legacy Impulse ballistics that IEC 61672-1 inherited from IEC 60651 and then +dropped from its requirements, kept here for older national procedures. [Frequency Weighting (A, C, Z)](weighting.md) covers the first stage. The A-curve tracks hearing sensitivity at moderate levels and @@ -20,10 +22,11 @@ conventional weightings are blind, the historical B and D curves serve legacy data, and AU rejects ultrasound from an audible-sound reading per IEC 61012. [Time Weighting](time-weighting.md) covers the second stage: -the exponential Fast (125 ms), Slow (1 s) and Impulse ballistics that decide -how quickly a displayed level follows the sound. phonometry implements the -exact time constants, verified against the toneburst responses of the -standard. +the exponential Fast (125 ms) and Slow (1 s) ballistics that decide how quickly +a displayed level follows the sound, and the legacy asymmetric Impulse +ballistics (35 ms rise, 1.5 s decay) that came from IEC 60651 and is no longer +required by IEC 61672-1. phonometry implements the exact time constants, +verified against the tone-burst responses of the standard. [Integrated and Statistical Levels](levels.md) is the payoff: the equivalent continuous level Leq and its A-weighted LAeq, the percentile @@ -52,8 +55,9 @@ noise phases, and the limit tables an activity is judged against. - [Special Weightings (G, B, D, AU)](special-weightings.md): the ISO 7196 infrasound G-weighting, the historical B and D curves and AU per IEC 61012. -- [Time Weighting](time-weighting.md): Fast, Slow and - Impulse exponential ballistics. +- [Time Weighting](time-weighting.md): the Fast and Slow + exponential ballistics of IEC 61672-1, and the legacy Impulse ballistics it + dropped. - [Integrated and Statistical Levels](levels.md): Leq and LAeq, percentile levels, LCpeak/SEL, noise dose and octave spectrograms. diff --git a/docs/signals/sound-level-meter.md b/docs/signals/sound-level-meter.md index e226c8e0d..cd96b9c2c 100644 --- a/docs/signals/sound-level-meter.md +++ b/docs/signals/sound-level-meter.md @@ -79,14 +79,23 @@ laf_t = 10 * np.log10(np.maximum(envelope, 1e-12) / (2e-5) ** 2) # laf_t peaks near 80 dB during the event and settles near 55 dB between. ``` -You rarely write this chain yourself: every level function of the next step -applies the frequency weighting internally, and the percentile levels rebuild -this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) integrate the -squared weighted signal directly, with no ballistics, exactly as a meter -does. The chain is shown here because it *is* the meter's display. +Animation: a tone burst driving the RC exponential detector, the capacitor charging and draining, while the Fast, Slow and Impulse meter needles follow their own ballistics + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_time_weighting.webm) + +The needle in the clip is that `time_weighting` call: a first-order low-pass +charging and draining on the squared signal. The three needles differ in one +number, the time constant, which is why Fast catches an event that Slow +smooths away. You rarely write this chain yourself: every level function of +the next step applies the frequency weighting internally, and the percentile +levels rebuild this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) +integrate the squared weighted signal directly, with no ballistics at all — +which is why they show no needle movement to follow. The chain is shown here +because it *is* the meter's display. Deep guides: [Frequency Weighting (A, C, Z)](levels/weighting.md) -and [Time Weighting](levels/time-weighting.md). +and [Time Weighting](levels/time-weighting.md), which takes this same clip +apart against the IEC 61672-1 tone-burst table. ## 4. Integrate: the numbers a meter reports diff --git a/docs/simulation/elastic-waves.md b/docs/simulation/elastic-waves.md index 0f61e1479..e7644df82 100644 --- a/docs/simulation/elastic-waves.md +++ b/docs/simulation/elastic-waves.md @@ -148,13 +148,21 @@ plt.show() -That flexural wave is worth watching in motion: the -[bending-wave transmission guide](../vibration/structural/junction-transmission.md) embeds an -animation of this solver launching a 4 kHz bending packet along a 10 mm -steel plate into an L-junction, where the corner splits it into the -reflected and transmitted waves the closed form prices at -$\tau_{12}(0°) = 0.5$, plus the fast in-plane precursor the pinned-junction -model deliberately leaves out. +That flexural wave is worth watching in motion. The clip below is this same +solver launching a 4 kHz bending packet along a 10 mm steel plate: on the +control panel the plate runs straight and the packet simply leaves, and on +the junction panel a perpendicular plate of the same thickness turns the +corner into a scatterer. The packet splits there into the reflected and +transmitted bending waves the closed form prices at $\tau_{12}(0°) = 0.5$, +plus the fast in-plane precursor that races ahead down the receiving plate — +the mode conversion the pinned-junction model deliberately leaves out, and +the reason this page needs an elastic solver rather than a flexural one. The +[bending-wave transmission guide](../vibration/structural/junction-transmission.md) takes +the same run apart against the EN 12354 vibration reduction index. + +Animation: a 4 kHz bending-wave packet running along a 10 mm steel plate, passing straight through on the control panel and splitting at an L-junction into a reflected wave, a transmitted wave descending the perpendicular plate and a faster in-plane precursor + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_plate_junction.webm) ## 4. Fluid-solid coupling at normal incidence @@ -302,13 +310,28 @@ dip within 0.1 % of the 295 kHz resonance. The same suite stress-tests the extreme contrast of an air-steel contact (impedance ratio ~$10^5$:1): stable over 10 000 steps with the reflected amplitude conserved to 0.5 %. -At oblique incidence the plate physics gets richer, and the -[panel sound insulation guide](../buildings/design/panel-sound-insulation.md) embeds the -animation: this solver driving the same 10 mm steel plate, lying in air, -with a sustained 45° plane wave below and above its coincidence frequency, -where the trace-matched bending wave re-radiates a growing beam and holds -the transmitted level at the point where the mass law demands 12 dB more -blocking. +At oblique incidence the plate physics gets richer, and the clip below is +this solver driving the same 10 mm steel plate, now lying in air, with a +sustained 45° plane wave arriving on it. The two panels differ in **one +number only** — the drive frequency, $f_c/2 = 603$ Hz on the left and +$2 f_c = 2413$ Hz on the right, either side of the 1206 Hz coincidence +frequency the library computes from the same $m''$ and $B'$ used above. +Everything else, the plate, the angle, the mesh and the colour scale, is +held fixed. Below $f_c$ the plate reflects almost everything and the +transmitted level lands on the oblique mass law; above it the acoustic trace +wavelength matches the free bending wavelength, the plate re-radiates a 45° +beam that grows along the lit span, and the transmitted level holds at the +low-frequency figure where the mass law demanded 12 dB more blocking. The +air below the plate is drawn on both panels with the display gain measured +off the settled field of the two runs together (×150, that is +44 dB) and +printed on the canvas: read the *annotations* for levels, not the +brightness. The +[panel sound insulation guide](../buildings/design/panel-sound-insulation.md) takes the +same run apart against the plateau method and the mass law. + +Animation: two elastic FDTD panels of the same 10 mm steel plate in air under a 45-degree plane wave, at 603 Hz where the plate blocks almost everything and at 2413 Hz where a transmitted beam grows below it + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_coincidence.webm) ## Quick answers diff --git a/docs/simulation/fdtd-simulation.md b/docs/simulation/fdtd-simulation.md index 1f12ba46d..63df442b0 100644 --- a/docs/simulation/fdtd-simulation.md +++ b/docs/simulation/fdtd-simulation.md @@ -22,6 +22,27 @@ animations of this documentation, promoted to a public API with sources, pressure probes, rasterised obstacles, per-side boundary conditions and a frozen result object. +Here is one of those animations, and it is a fair advertisement for what the +rest of this page builds. Nothing in it is drawn: the colonnade is a boolean +`obstacle_mask` of rasterised circles and the wavefront is a single one-way +plane-wave packet with a Gaussian envelope one wavelength wide, launched at +$x = 0.30$ m into a 4 m × 1 m rigid-walled hall whose two ends absorb through +sponges hidden outside the frame. The carrier is 800 Hz, so the wavelength is +42.9 cm and the 10 to 17 cm columns are roughly a quarter to two fifths of it +— the regime in which a rigid cylinder both casts a readable shadow and +re-radiates strongly, which is why the coda that fills the hall is structured +rather than noise. That coda is deterministic multiple scattering: it is what +a diffuse field looks like *before* any statistical assumption is made about +it. The mesh is the worked example of the rule +[section 4](#4-numerical-dispersion-and-accuracy) derives: the tightest gap in +this layout is 6.6 cm between a column and a wall, so +$\Delta x = \min(\text{smallest aperture}/4,\ \lambda/8)$ allows up to 1.6 cm, +and the clip runs at 2.5 mm because a banner needs the definition. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + Pipeline from the domain definition (sound-speed and density maps with the grid spacing dx) and the geometry (obstacle mask and per-side boundary conditions), through the sources injected at grid cells, the staggered-grid leapfrog update of velocity and pressure, and the Courant stability condition, to the frozen FDTDResult with probe histories, field snapshots and a plot method ## 1. The scheme: a wave equation on a grid diff --git a/docs/simulation/index.md b/docs/simulation/index.md index 83d550181..0dfbfd494 100644 --- a/docs/simulation/index.md +++ b/docs/simulation/index.md @@ -35,6 +35,32 @@ ground), the simulation is the fallback that still gives a quantitative answer; when a closed form exists, prefer it, and use the solver to verify the assumptions it rests on. +Those cross-checks are not only arguments: fifteen of the animations in this +documentation are output from these two solvers, and they are filed on the +guides whose physics they settle rather than here. Room modes growing on and +off resonance appear in [room acoustics](../buildings/rooms/room-acoustics.md) +and [reverberation prediction](../buildings/rooms/reverberation-prediction.md), +which also carries the hall of columns that turns one wavefront into a mixed +field; barrier diffraction at two wavelengths in +[outdoor propagation](../environment/propagation/outdoor-propagation.md) +and [ground effect and barriers](../environment/propagation/ground-barriers.md); +downwind and upwind refraction in +[atmospheric refraction](../environment/propagation/atmospheric-refraction.md); +the ground-effect lobe pattern in outdoor propagation and in +[airport noise](../aircraft/airport-noise.md); the standing-wave and +transmission tubes in [the impedance tube](../materials/absorbers/impedance-tube.md); +the QRD and metadiffuser panels in +[diffusers](../materials/diffusers/diffusers.md) and +[metadiffusers](../materials/diffusers/metadiffusers.md); the slit +absorber in [metamaterial absorbers](../materials/absorbers/metamaterial-absorbers.md); +the expansion chamber in [silencers](../devices/noise-control/silencers.md); +the wall aperture in [panel sound insulation](../buildings/design/panel-sound-insulation.md); +and the SOFAR duct in [underwater propagation](../underwater/underwater-propagation.md). +The elastic solver adds two: the bending packet entering an L-junction, on +[junction transmission](../vibration/structural/junction-transmission.md), +and the coincidence plate, on panel sound insulation. Both also appear on the +elastic page below, where the solver that produced them is explained. + ## Pages in this section - [2D FDTD wave simulation](fdtd-simulation.md): the diff --git a/docs/start/index.md b/docs/start/index.md index 91a00c488..b2e27835b 100644 --- a/docs/start/index.md +++ b/docs/start/index.md @@ -2,14 +2,34 @@ # Start -The three pages that open the documentation, before the guides themselves. +Four short pages, meant to be read once before anything else. Each answers one +question, and they are in the order the questions arrive. +**Can I install it and get a number out?** [Getting Started](getting-started.md) installs the library and -walks a first measurement end to end, from a WAV file to a calibrated -one-third-octave spectrum. [Why phonometry](why-phonometry.md) -sets out what the library is for and how it is validated against the standards -it implements. [About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how -to cite it and under what licence. +runs a first one-third-octave analysis, on a synthetic signal and then on a WAV +file, and states what a recording must satisfy before those numbers mean +anything physical. It stops short of a calibrated measurement on purpose: +[Calibration and dBFS](../signals/metrology/calibration.md) is the next +step, the one that turns band levels into pascals, and +[Build a sound level meter](../signals/sound-level-meter.md) runs the +whole chain end to end. +**Where is the thing I came for?** [All guides](https://jmrplens.github.io/phonometry/start/guides/) is the map: every guide in the library, grouped by the topic it belongs to, with a line on each. + +**Should I trust the number?** +[Why phonometry](why-phonometry.md) sets out what the library +is for and how it is validated against the standards it implements, with the +tone-burst check worked through against the acceptance limits. + +**Who is answerable for it, and how do I cite it?** +[About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how to cite it and +under what licence. + +The assumed starting point is Python 3.13 or newer with working NumPy and +SciPy, and enough acoustics to know what a one-third-octave band and a sound +pressure level are. Any symbol the guides use without introducing is in the +[glossary](https://jmrplens.github.io/phonometry/reference/glossary/), with its unit, its defining clause +and the guide that computes it. diff --git a/llms-full.txt b/llms-full.txt index 8117427f7..46491d33e 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -133,11 +133,11 @@ If you are an AI assistant setting this up for a user: install from PyPI (no sys - [Sound Insulation by Intensity (ISO 15186)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-intensity/) - [Laboratory Flanking Transmission (ISO 10848)](https://jmrplens.github.io/phonometry/buildings/insulation/flanking-lab/) - [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) +- [Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) - [Sound Insulation Survey Method (ISO 10052)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-survey/) - [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/) - [Façade Sound Insulation](https://jmrplens.github.io/phonometry/buildings/insulation/facade-insulation/) - [Spanish Building Code (CTE DB-HR)](https://jmrplens.github.io/phonometry/buildings/insulation/spanish-building-code/) -- [Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) ### Insulation design @@ -1252,12 +1252,14 @@ Source: https://jmrplens.github.io/phonometry/aircraft/ # Aircraft noise -Aircraft are noise sources important enough to have their own internationally -negotiated metrics, each fixed to the last decimal by a certification -framework. The four pages of this section implement those frameworks, and -they share a common anatomy: a rigorously standardised **source descriptor**, -plus standardised **propagation adjustments** that place the source at a -receiver. +Aircraft noise is computed under internationally negotiated methods of two +kinds. **Certification** fixes a single number per aircraft type to the last +decimal, at reference points a standard places around the runway. **Contour +methods** take that certified fleet and predict what an airport does to the +ground around it. The four pages of this section cover both, and they share a +common anatomy: a rigorously standardised **source descriptor** — a spectral +time history, a noise-power-distance table or a noise hemisphere — plus +standardised **propagation adjustments** that place the source at a receiver. [Aircraft noise: Effective Perceived Noise Level](https://jmrplens.github.io/phonometry/aircraft/aircraft-noise/) covers fixed-wing certification. The **EPNL** of ICAO Annex 16 condenses a @@ -1295,6 +1297,25 @@ sound power level and tonal-audibility chain answer the same question for a source that is not an aircraft. That tonality test is in turn a cousin of the methods in [Psychoacoustics](https://jmrplens.github.io/phonometry/perception/psychoacoustics/). +Start from the question. To check an aeroplane against a certification limit, +or to understand where the published numbers for a type come from, start with +the EPNL page. To predict what a movement does at a street address, use the +Doc 29 page, with the ANP page supplying the aircraft data. For helicopters the +hemisphere page replaces both. Read the fixed-wing pages in that order: the EPNL +page defines the certified metric, the Doc 29 page turns certified aeroplanes +into ground contours from tables written by hand, and the ANP page replaces +those hand-written tables with the published fleet data. The rotorcraft page +stands on its own — a different standard and a different source model — and can +be read first if helicopters are what you came for. + +The three metrics are not interchangeable. EPNL is a *certification* metric of +one aeroplane at one prescribed point; SEL and LASmax are *single-event* +assessment metrics at an arbitrary receiver; neither is the long-term index a +land-use study is finally judged on. And the boundary: this section does not +compute cumulative multi-event indices, does not synthesise NPD tables from +engine data, does not model hover, idle or taxi rotorcraft operations, and does +not touch sonic boom. + ## Pages in this section - [Aircraft noise: Effective Perceived Noise Level](https://jmrplens.github.io/phonometry/aircraft/aircraft-noise/): @@ -2452,14 +2473,42 @@ double wall, transmission through slits and apertures, plate radiation efficiency and point mobilities. It is the physics a catalogue value expresses in one number. -Two measurements feed the floor half of any design. +Two pages here carry the floor half of any design, one measuring and one +predicting. [Floor-Covering Impact Improvement (ISO 16251-1)](https://jmrplens.github.io/phonometry/buildings/design/impact-improvement/) -gives the weighted improvement $\Delta L_w$ of a soft covering on a small -heavyweight mock-up, the term EN 12354-2 subtracts from the bare-floor level, -and -[Dynamic stiffness of resilient materials (EN 29052-1)](https://jmrplens.github.io/phonometry/materials/resilient/dynamic-stiffness/) -gives the stiffness per unit area $s'$ of the resilient layer under a floating -floor, and with it the resonance frequency the whole improvement hangs on. +gives the weighted improvement $\Delta L_w$ of a covering that exists, on a +small heavyweight mock-up, and that is the term EN 12354-2 subtracts from the +bare-floor level. +[Predicting Resilient-Layer Performance](https://jmrplens.github.io/phonometry/buildings/design/resilient-layers/) +predicts it for a covering that does not yet exist, from the tapping machine's +own force spectrum, the cut-off frequency of a soft covering, the 30 lg and +40 lg floating-floor laws and the ISO 12354-1 Annex D rating of a wall lining. +Both start from the stiffness per unit area $s'$ of the resilient layer, +measured per EN 29052-1 in +[Dynamic stiffness of resilient materials](https://jmrplens.github.io/phonometry/materials/resilient/dynamic-stiffness/) +over in the materials section, which sets the resonance the whole improvement +hangs on. + +Building service equipment is a chain of its own, and the two pages only read +correctly in order. +[Structure-borne sound power of equipment (EN 15657)](https://jmrplens.github.io/phonometry/buildings/design/structure-borne-power/) +characterises a pump, fan or cistern by the power it injects into the +structure, measured on a reception plate of known dissipation and then made +plate-independent. +[Installed structure-borne sound (EN 12354-5)](https://jmrplens.github.io/phonometry/buildings/design/installed-structure-borne/) +takes that source description, loses part of it to the coupling term the source +and receiver mobilities set, and carries the rest to a room that may be several +junctions away. + +One bookkeeping note runs through the whole section: the family exists as +EN 12354:2000 and as ISO 12354:2017, and the two are not interchangeable in +every clause. The simplified models on +[Predicting Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/insulation-prediction/) +follow the 2000 text — including the tabulated flanking correction $K$ that the +2017 impact part replaced with explicit per-path formulae — while +[Detailed Per-Band Prediction](https://jmrplens.github.io/phonometry/buildings/design/detailed-prediction/) +follows the 2017 text. Check which edition your regulation calls up before +quoting a correction from either. ## Pages in this section @@ -6006,8 +6055,10 @@ characterised **in the laboratory**, where suppressed flanking isolates its direct transmission. That laboratory data feeds a **prediction** of how a whole building will perform, flanking paths included. The finished building is then **verified in the field**. At every stage the band spectrum is collapsed -to the **single number** regulations quote, and that collapse is one shared -engine rather than a step of any single method. +to the **single number** regulations quote, and for almost everything that +collapse is one shared reference-curve engine rather than a step of any single +method. The exception is the heavy-impact rating of ISO 717-2 Annex D, which +shifts no curve at all: it sums A-weighted band levels in energy. **Laboratory.** [Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/) covers @@ -6030,6 +6081,12 @@ and the two material measurements a floor design consumes. [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) covers the engineering-grade airborne and impact measurement in the building, its Clause 14 test report and the ISO 12999-1 uncertainty that qualifies it. +The same standard specifies two more impact sources, a rubber ball and a bang +machine, for the slow low-frequency thumps a tapping machine says nothing +about; +[Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) +covers their specification, the Fast-weighted standardization of the maximum +level and the Annex D rating. When the question does not deserve that effort, [Sound Insulation Survey Method (ISO 10052)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-survey/) trades accuracy for speed with octave bands and a reverberation index. @@ -6516,7 +6573,7 @@ Sabine absorption area $A = 0.16\ V/T$. ## Standards -ISO 16283-1:2014 and ISO 16283-2:2015, *Acoustics — Field measurement of +ISO 16283-1:2014 and ISO 16283-2:2020, *Acoustics — Field measurement of sound insulation in buildings and of building elements*: the airborne and impact level differences, their normalisations and the Clause 14 test report; ISO 12999-1:2020, which tabulates the standard uncertainties per measurement @@ -9140,8 +9197,23 @@ point, that stays diffuse while it decays. The common breakages: Scattering objects restore the mixing the models assume: a furnished room follows the statistical prediction distinctly better than the same room -bare, beyond what the furniture's own absorption area accounts for. In -practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and +bare, beyond what the furniture's own absorption area accounts for. The clip +below is that mechanism with the absorption taken out of it, so only the +mixing is left: an 800 Hz wavefront enters a 4 m rigid-walled hall filled +with rigid columns 10 to 17 cm across, a quarter to two fifths of the +42.9 cm wavelength. Every column diffracts the front and sheds a scattered +wavelet, the wavelets interfere, and within a few passes the specular front +has become energy spread over the whole hall with no preferred direction — +which is the assumption Sabine and Eyring both start from, arriving here as +a result rather than as a hypothesis. Nothing in the hall absorbs, so what +you are watching is *only* the redistribution; the decay at the end is the +energy draining out through the two open ends. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + +In practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and Arau-Puchades for axial cases) rather than a single value; where the models spread, the room is telling you its field is not diffuse. @@ -14273,6 +14345,21 @@ terms by a reference sound source of known power $L_W(\text{RSS})$ measured in the same room, so the room need not be characterised: $L_W = L_W(\text{RSS}) + (L_p(\text{ST}) - L_p(\text{RSS}) + C_2)$. +The right-hand panel of the clip below is this method. The same source runs +in both rooms; in the anechoic room on the left the microphones see only what +the source sends their way, so the level falls with distance and the +free-field route has to integrate over a measurement surface, while in the +reverberation room on the right the reflected energy fills the space and the +level stops depending on where a microphone is. That is the whole reason +Eq. 20 can replace a surface integral with a handful of positions and a room +constant — and the reason the room, not the array, is what has to be +qualified. Both routes end on the same $L_W$, because sound power is a +property of the source and not of the room it is measured in. + +Animation: the same source in an anechoic room and in a reverberation room producing different microphone pressures, while the free-field and diffuse-field formulas converge to the same sound power level + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_power_two_rooms.webm) + ```python import numpy as np from phonometry import emission @@ -16487,6 +16574,19 @@ and air leaks**. A ceiling void carried over the partition, a service penetration, a door undercut, or the wall simply not reaching the structural slab, and the equation's answer becomes an upper bound. +The clip below draws what the equation leaves out. The chain of section 3 +prices the direct path only, the **Dd** route through the partition; the +other three pulses leave the source room over the flanking walls, floor or +ceiling — **Ff** flank to flank, **Fd** flank to partition, **Df** partition +to flank — and re-radiate on the far side without ever passing through the +transmission loss the calculation used. Each path shrinks at every element +and junction it crosses, which is why no single one has to be large for the +sum of the three to dominate a good partition. + +Animation: energy pulses leaving the source room over the direct Dd path and the flanking Ff, Fd and Df paths, shrinking at each element and junction, every path label lighting up as its pulse re-radiates into the receiving room + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_flanking_paths.webm) + `DesignCriterion.flanking_penalty` is the explicit debit for that, in decibels off the predicted noise reduction. It is not a model, it is a place to record the @@ -16853,12 +16953,21 @@ resistivity, is the same material theory as ## Cross-check against the FDTD solver -The four-pole expansion chamber is cross-checked against the independent 2D -[FDTD wave solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/): a plane-wave duct that widens into a -chamber and narrows back transmits far less at the four-pole TL peak -($kL = \pi/2$) than at the transparent trough ($kL = \pi$), and the measured -amplitude ratio reproduces the closed-form peak transmission loss to a fraction -of a decibel (test `tests/noise_control/test_fdtd_crosscheck.py`). +That cross-check is the clip embedded in section 1, and it is worth returning +to it now with the algebra in hand. The four-pole expansion chamber is checked +against the independent 2D +[FDTD wave solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/), which shares no formula and no +assumption with the transfer-matrix product beyond the wave equation itself: a +plane-wave duct that widens into the same 0.30 m, $m = 4$ chamber and narrows +back transmits far less at the four-pole TL peak ($kL = \pi/2$, here 286 Hz) +than at the transparent trough ($kL = \pi$, 572 Hz). The amplitude ratio +measured downstream in the field is the transmission loss annotated on the +clip, 6.5 dB at 286 Hz and 0.0 dB at 572 Hz, against the 6.55 dB the closed +form gives for $m = 4$ (test `tests/noise_control/test_fdtd_crosscheck.py`). +Agreement that close rules out an algebra error on either side. The two must +eventually part company above the duct's first cut-on frequency, where +higher-order modes propagate: the two-dimensional solver keeps working there +and the plane-wave algebra does not. ## See also @@ -17803,11 +17912,16 @@ Source: https://jmrplens.github.io/phonometry/environment/ # Environment and transport Environmental noise is a source-path-receiver problem stretched over hundreds -of metres of open air. This section covers both ends of it. The **outdoor -sound** pages handle the path and the assessment: ISO 9613 predicts, band by -band, how much level survives divergence, air absorption, the ground and any -barrier on the way to a receiver, and NT ACOU 112 quantifies when impulsive -character makes the received sound more annoying than its LAeq suggests. +of metres of open air. This section covers all three of them. The **propagation** +pages handle the path: ISO 9613 predicts, band by band, how much level survives +divergence, air absorption, the ground and any barrier on the way to a receiver, +and the wave-acoustic ground and refraction models say when that engineering +method stops being enough. + +The **assessment** pages handle what happens once the sound has arrived: the +ISO 1996 rating level and the day-evening-night indicators, their Spanish +application in RD 1367/2007, and the NT ACOU 112 adjustment that quantifies when +impulsive character makes a received sound more annoying than its LAeq suggests. The **source** pages handle the other end: what emits, described the way an environmental model wants it. CNOSSOS-EU gives road traffic and railways a @@ -17816,11 +17930,14 @@ by its apparent sound power and its tonal audibility. What unites them is the pattern: a carefully standardised source descriptor that the path model above then attenuates. -This section leans on the core toolkit more than any other: the rating levels -and Lden that environmental assessment ends in live in -[Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/), and the -atmospheric absorption that every propagation model consumes is shared with -the room and materials pages. Start with +This section leans on the core toolkit, but only up to the period level. +[Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/) supplies +the LAeq, percentile and event levels of each reference period; what turns those +period levels into Lden, Ldn and the rating level, with the tonal adjustment, +the residual-noise correction and the uncertainty budget on top, is +[Environmental Levels (ISO 1996-1/-2)](https://jmrplens.github.io/phonometry/environment/assessment/environmental-levels/), +in this section. The atmospheric absorption that every propagation model +consumes is shared with the room and materials pages. Start with [Outdoor Sound Propagation](https://jmrplens.github.io/phonometry/environment/propagation/outdoor-propagation/); it introduces the source-path-receiver bookkeeping the transport pages reuse. @@ -18364,6 +18481,28 @@ $$ which tends to 5 dB at the shadow boundary $N \to 0$ and approximates Maekawa's point-source curve within about 1.5 dB. +The clip below is that formula as a field. It is the +[2D FDTD solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/) run twice on one +12 × 7 m half-space over rigid ground with a thin rigid screen 2.5 m tall, +once at 100 Hz and once at 500 Hz, each with a barrier-free reference run over +the same ground so the annotated insertion loss is a true one. The geometry +fixes the path difference at 1.06 m for the receiver it marks, so the Fresnel +number is $N = 0.62$ at 100 Hz and $N = 3.1$ at 500 Hz — the same screen, a +factor of five apart in $N$ purely because $\lambda$ changed — and the field +shows what that buys: about 8 dB against about 17 dB. Two things are worth +watching for. The edge of the lit region running down from the top of the +screen is the shadow boundary, the $N \to 0$ locus where the formula bottoms +out at 5 dB; and inside the shadow the field is a cylindrical wave centred on +the top of the screen, which is what "the edge acts as a secondary source" +looks like. One caveat: the ground in the clip is perfectly rigid, so it shows +diffraction alone and none of the finite-impedance ground effect of section 1 +— the coherent four-path model below adds that, and its curve swings tens of +decibels where this one is smooth. + +Animation: a point source behind a thin 2.5 metre rigid barrier on reflecting ground, simulated at 100 Hz and 500 Hz side by side; the long wavelength diffracts over the edge and fills the shadow zone, the short wavelength is cast into a deep clean shadow + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_barrier.webm) + The thin-screen methods share the same three geometric quantities: the two diffracted segments over the edge and the straight path they replace. Drawn on the 4 m screen of the snippets, they differ by just 0.15 m. @@ -20458,7 +20597,24 @@ print(np.round(alpha, 3)) # [0.398 0.448 0.498] $T_1$ and $T_2$ are exactly the reverberation times [`room_parameters`](https://jmrplens.github.io/phonometry/buildings/rooms/room-acoustics/) returns, so an ISO 3382-2 decay measurement of the empty and treated room flows straight into -`absorption_coefficient`. A room volume below the 150 m³ minimum or a +`absorption_coefficient`. + +Each of those two numbers is read off a decay, and the clip below shows how +one is read: the squared impulse response is integrated backwards from the +tail, the Schroeder curve emerges, and the T20 and T30 regressions are fitted +to a straight portion of it. That is the operation behind $T_1$, and again +behind $T_2$ — the clip shows a *single* room, not the pair, so it answers +"where does one $T$ come from" and not "what does subtracting two of them +cost". The second question is the one that governs this measurement, and +section 4 puts a number on it: because $\alpha_s$ is a difference of two +reciprocal decay times, its uncertainty is worst exactly where the two decays +are most alike, at the low-frequency end. + +Animation: the tail energy of a squared impulse response filling from the end while the backward integral advances toward t = 0, the Schroeder decay curve emerging on a companion axis and ending with the T20 and T30 regression lines + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_schroeder.webm) + +A room volume below the 150 m³ minimum or a sample area outside 10–12 m² raises an advisory `AbsorptionWarning`; the result still returns. @@ -22739,8 +22895,8 @@ Helmholtz resonator: $m = (\rho_0/\varepsilon)\,[t + 2\delta a + end-correction factor $\delta$ per orifice end and the visco-thermal resistance $r = (\rho_0/\varepsilon)\sqrt{8\nu\omega}\,(1 + t/2a)$ (Cox & D'Antonio Eqs. 7.6/7.12). The default end correction is the -Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} -+ 0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a +Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} + +0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a shallow cavity the resonance is $f_0 = (c_0/2\pi)\sqrt{\varepsilon/(t'\,d)}$ (Eq. 7.4). @@ -26021,8 +26177,11 @@ ISO 1996-2. [Psychoacoustic annoyance and fluctuation strength](https://jmrplens.github.io/phonometry/perception/psychoacoustics/psychoacoustic-annoyance/) closes the chain with the Fastl & Zwicker model, which combines loudness, sharpness, roughness and the slow-modulation sensation of fluctuation strength -into a single annoyance value. Read it last: its four inputs all come from -the earlier pages. +into a single annoyance value. Read it last: three of its four inputs come from +the earlier pages, and it supplies the fourth, fluctuation strength, itself, in +both the Fastl & Zwicker closed form and the Osses 2016 signal model. The +ECMA-418-2 fluctuation strength on the Sound Quality page is a further, +normative model of the same sensation, under a different unit name. ## Pages in this section @@ -31453,6 +31612,10 @@ $$ The adjustments $K_i$ cover time-of-day penalties (ISO 1996-1 Table A.1: evening 5 dB, night 10 dB) as well as source-character adjustments (e.g. tonal penalties), which the ECMA-418-1 TNR/PR assessments can justify objectively. +Synthetic 24-hour urban LAeq profile with day, evening and night bands, the +5 and +10 dB weighted period levels and the resulting Lden + +*A 24-hour $L_{Aeq}$ profile split into day, evening and night, the +5/+10 dB penalties and the resulting $L_{den}$.* + See the [Environmental levels guide](https://jmrplens.github.io/phonometry/environment/assessment/environmental-levels/) for usage. ## Impulsive-sound prominence (NT ACOU 112) @@ -31477,6 +31640,15 @@ $$ $K_I$ is exactly the kind of source-character adjustment that enters the ISO 1996-1 composite rating level above. The anchors $P(1000\ \text{dB/s}, 30\ \text{dB}) = 9 + 2\log_{10} 30 = 11.95$ and $K_I(P{=}10) = 9.0$ dB are reproduced exactly. +A-weighted Fast level history of three hammer strikes over a 55 dB(A) background across six seconds: each strike rises from about 52 dB to 89 dB, the detected onset start and end points are marked with the least-squares onset line, the governing level difference of 36.8 dB is annotated, and the title reports a prominence of 11.34 with an adjustment of 11.42 dB, category highly impulsive + +*Both inputs of $P$ are geometry on this trace, which is why the method needs a +level history and not a level. The onset rate is the slope of the fitted line +through the rise, in dB/s, and the qualifying threshold of 10 dB/s is a +steepness on this axis; the level difference is the height of the same rise. +Three strikes are detected here and only the steepest-and-tallest one governs +the adjustment.* + See the [Impulse Prominence guide](https://jmrplens.github.io/phonometry/environment/assessment/impulsive-sound/) for usage. ## Outdoor propagation and occupational exposure (ISO 9613-1/2, ISO 9612) @@ -31509,6 +31681,10 @@ $f_m = 1000 \cdot 10^{k/10}$ (Note 5) used to compute that table. The same $\alpha$ is the only route to the ISO 354 power attenuation coefficient $m = \alpha/(10 \log_{10} e)$, exposed as `air_attenuation_m`. +ISO 9613-1 pure-tone atmospheric attenuation coefficient alpha in dB/km against frequency, on a linear decibel ordinate over a logarithmic frequency axis, for the reference 20 degrees Celsius and 50 percent relative humidity atmosphere, produced by the AtmosphericAttenuation result plot method + +*The ISO 9613-1 coefficient for the 20 °C, 50 % relative-humidity reference atmosphere: the $f^2$ rise spans two decades from 50 Hz to 10 kHz.* + ### Outdoor propagation, general method (ISO 9613-2) ISO 9613-2:1996 predicts the octave-band level at a receiver **downwind** of a @@ -31552,6 +31728,21 @@ average level subtracts the meteorological correction $C_{met}$ (Eq. (6), (21)/(22)). The method's stated accuracy is $\pm 1$ to $\pm 3$ dB for broadband noise up to 1000 m (Table 5). +ISO 9613-2 per-octave-band attenuation breakdown as a stacked bar of Adiv, Aatm, Agr and Abar with the total A overlaid, for a 200 m path over porous ground with a 4 m barrier + +*The four terms at their true relative sizes, band by band, for a 200 m path +over porous ground with a 4 m barrier. $A_{div}$ is 57 dB in every band because +it is pure geometry. $A_{atm}$ is nothing at 63 Hz and 18.7 dB at 8 kHz, so it +is the term that decides how far high frequencies travel and no other. $A_{gr}$ +is where the low bands live and is **negative** at 63 Hz (−4.6 dB: the ground +reflection adds energy rather than removing it). $A_{bar}$ is at its 20 dB cap +from 2 kHz up but falls to zero at 250 Hz, because the top-edge form subtracts +the ground effect the screened path gives away, $A_{bar} = D_z - A_{gr} \geq 0$, +and 250 Hz is exactly where $A_{gr}$ peaks. Which term is worth refining +depends entirely on the band and the geometry.* + +ISO 9613-2 source-barrier-receiver geometry: a point source at height hs, a barrier whose top edge splits the path into dss and dsr, and a receiver at height hr, with the blocked direct ray and the diffracted ray over the edge, the path difference z and the Dz formula + ### Occupational noise exposure and uncertainty (ISO 9612) ISO 9612:2009 is the engineering method (accuracy grade 2) for a worker's daily @@ -31595,6 +31786,10 @@ The sound power level $L_W = 10 \log_{10}(P/P_0)$ ($P_0 = 1$ pW) is an *emission* quantity: unlike a pressure level it does not depend on the receiver distance or the room. Three families of methods recover it. +The three sound power routes side by side: an enveloping pressure surface over a reflecting plane (ISO 3744/3746), a source in a reverberation room sampled by microphones (ISO 3741) and an intensity probe scanning a surface around the source (ISO 9614-2) + +*The three routes to $L_W$: enveloping pressure surface, reverberation room and intensity scan.* + ### Enveloping-surface pressure (ISO 3744/3746) Over a reflecting plane the free-field relation is simply @@ -31876,6 +32071,10 @@ worked example, the oracle is a synthetic end-to-end chain ($V = 200$ m³, $S = 10$ m², $T = 8.0/6.0/7.5/5.0$ s → $s = 0.093$) plus the Formula A.5 hand value $u_s = 0.0297$. +The random-incidence scattering coefficient s of a diffusing surface over the 13 one-third-octave bands from 250 to 4000 Hz, rising smoothly from near zero at low frequency towards 0.84 at 4 kHz + +*A random-incidence scattering coefficient rising with frequency as the surface roughness becomes comparable with the wavelength.* + ### Directional diffusion coefficient (ISO 17497-2) ISO 17497-2:2012 measures, in the free field, how uniformly a surface spreads @@ -31954,6 +32153,10 @@ float-safe. The two Annex A worked examples are reproduced: $\alpha_p = (0.35, 0.70, 0.65, 0.60, 0.55)$ → $\alpha_w = 0.60$, class C; and raising 500 Hz to 1.00 keeps $\alpha_w = 0.60$ but adds the indicator, "0.60(M)". +ISO 11654 weighted sound absorption rating: the practical absorption spectrum plotted against the shifted reference curve over 250 Hz to 4000 Hz, with the unfavourable deviation at 250 Hz shaded and the weighted coefficient alpha_w read at 500 Hz + +*The ISO 11654 rating: practical absorption against the shifted reference, with the unfavourable deviation shaded and the weighted coefficient read at 500 Hz.* + See the [Sound Absorption Measurement and Rating guide](https://jmrplens.github.io/phonometry/materials/absorbers/absorption-measurement/) for usage. ### Airflow resistance (ISO 9053-1/2) @@ -32026,6 +32229,25 @@ $TL = 0\ \text{dB}$, hard-backed $|R| = 1$), synthetic round-trips that recover a known $r$, and two-load recovery of an asymmetric reciprocal specimen. +ISO 10534-2 two-microphone impedance tube: a loudspeaker radiating a plane wave down the tube, two microphones flush in the wall at spacing s and distance x1 from the specimen face, the test specimen against a rigid backing, and the incident and reflected waves + +ISO 10534-2 two-microphone tube result for a 50 mm porous absorber: the normal-incidence absorption coefficient rising from about 0.2 at 200 Hz towards 0.97 above 1 kHz, with the reflection-factor magnitude falling as its mirror image + +*What the ISO 10534-2 formula returns: $\alpha$ and $|r|$ for a 50 mm porous +absorber over the working band of a 100 mm tube. The two curves are the same +information — $\alpha = 1 - |r|^2$ — so the figure is really one measurement +drawn twice, and the rise with frequency is the layer thickness growing against +the wavelength.* + +ASTM E2611 four-microphone transmission-loss tube: a sound source, two microphones upstream and two downstream of the test specimen at spacings s1 and s2 and offsets l1 and l2, an adjustable termination for the two-load method, the upstream A and B and downstream C and D travelling waves, and the transfer matrix and transmission-loss relations + +ASTM E2611 transfer-matrix quantities of a 50 mm porous layer: the normal-incidence transmission loss rising from about 6.6 dB at 200 Hz to over 9 dB at 1.6 kHz on the left axis, and the hard-backed absorption coefficient rising from 0.19 to about 0.97 on the right axis + +*The same four-pole entries answering two different questions: how much sound +the free-standing layer lets through (the transmission loss above) and how much +the same layer absorbs once it is backed rigidly. A material can be a good +absorber and a poor barrier at once, which this pair makes plain.* + See the [Impedance Tube guide](https://jmrplens.github.io/phonometry/materials/absorbers/impedance-tube/) for usage. ## References @@ -32108,6 +32330,10 @@ The three parameters come from Table 1 (p. 4), tabulated at the 29 preferred thi The standard specifies **no interpolation** between the tabulated frequencies. Formula (1) is specified for **20 phon to 90 phon** between 20 Hz and 4 kHz, and only up to **80 phon between 5 kHz and 12.5 kHz**; above 80 phon the contour therefore stops at 4 kHz. Values outside these limits from Formula (2) are extrapolations the standard labels as informative only. +ISO 226:2023 normal equal-loudness-level contours from 20 to 90 phon with the hearing threshold curve + +*The ISO 226:2023 contours from Formula (1), 20 to 90 phon, with the hearing threshold.* + See the [Loudness guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/loudness/) for usage. ## Tone prominence: TNR and PR (ECMA-418-1) @@ -32128,6 +32354,15 @@ $$ **PR** (clause 12) compares the level of the critical band centred on the tone, $L_M$, with the mean power of the two **contiguous** critical bands $L_L$, $L_U$ (edges from the fitted Formulae 21–22 with Tables 2–3): $\mathrm{PR} = 10\log_{10} P_M - 10\log_{10}\left[(P_L + P_U)/2\right]$ (Formula 23). For $f_t \le 171.4$ Hz the lower band is truncated at 20 Hz and its power rescaled to a **100 Hz bandwidth** (Formula 24). The criterion (Formulae 25–26) is 9.0 dB at $f_t \ge 1$ kHz, rising as $9.0 + 10.0\log_{10}(1000/f_t)$ below. Tones are assessed within the 89.1 Hz – 11.2 kHz range of interest (clauses 11.5 / 12.6). +Tone-to-noise ratio of a 250 Hz fan tone plotted against the ECMA-418-1 prominence criterion: the criterion falls from about 17 dB at 89 Hz to a flat 8 dB above 1 kHz, and the assessed tone sits at 15.1 dB, 2.1 dB above the 13.0 dB criterion at 250 Hz, so it is prominent + +*The TNR criterion drawn rather than evaluated, over the 89.1 Hz – 11.2 kHz +range of interest, with one assessed tone on it. Because the criterion is +$8.0 + 8.33\log_{10}(1000/f_t)$ below 1 kHz and flat above, the same +tone-to-noise ratio is judged against a different threshold at every frequency: +the example tone clears its 13.0 dB threshold at 250 Hz by 2.1 dB, while a +10 dB tone would be prominent anywhere above 1 kHz and not prominent here.* + See the [Prominent Discrete Tones guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/tone-prominence/) for usage. ## Zwicker loudness (ISO 532-1) @@ -32161,6 +32396,10 @@ $$ below 1 sone the reference program uses $L_N = 40 (N + 0.0005)^{0.35}$, floored at 3 phon. +Specific loudness patterns over the Bark scale for a 1 kHz narrowband sound and a broadband sound of equal band level + +*Specific loudness N′(z) over the Bark axis: energy spread over many critical bands sums to more sones than the same band level in a single band.* + See the [Loudness guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/loudness/) for usage. ## Advanced loudness models & sound quality @@ -32227,6 +32466,15 @@ $$ (Formulae 65–111). The single value $R$ is the 90th percentile of $R(l_{50})$ over time (Clause 7.1.10); the constant $c_R$ (Formula 104) calibrates the reference sound (a 1 kHz carrier 100 % amplitude-modulated at 70 Hz at 60 dB SPL) to 1 asper. +ECMA-418-2 slow vs fast modulation perception: fluctuation strength forms a band-pass over modulation frequency peaking near 4 to 6 Hz while roughness of the same 1 kHz amplitude-modulated tones peaks near 70 Hz + +*The modulation-rate weighting the formulae above apply, and the reason the +range "roughly 20–300 Hz, strongest near 70 Hz" is a band-pass and not a +threshold: the same 1 kHz carrier modulated slowly is heard as fluctuation +strength, peaking near 4–6 Hz, and modulated fast is heard as roughness, +peaking near 70 Hz. Between the two peaks the sensation changes name, not +degree.* + ### Sharpness (DIN 45692) Sharpness condenses the high-frequency emphasis of a sound into one number: the $g(z)$-weighted first moment of the ISO 532-1 stationary specific-loudness pattern (DIN 45692:2009, Equation 1): @@ -32238,6 +32486,14 @@ $$ evaluated on the same 240-bin, 0.1-Bark grid. The constant $k$ is not hard-coded but derived from the calibration requirement (clause 6): a critical-band-wide narrowband noise 920–1080 Hz at 60 dB SPL scores exactly 1 acum, and the derived $k = 0.108$ lands inside the normative window $0.105 \le k < 0.115$ (clause 5.2). The informative Annex B weightings are provided under the same 1-acum anchor: von Bismarck (knee at 15 Bark, $0.2\ e^{0.308(z-15)} + 0.8$) and Aures (loudness-dependent, $g(z) = 0.078\ (e^{0.171 z}/z)\ N/\ln(0.05 N + 1)$). The Table A.2 narrow-band targets are reproduced within the clause 6 tolerance (5 % or 0.05 acum): 0.38 acum at 250 Hz, 1.00 at 1 kHz, 1.78 at 2.5 kHz, 2.82 at 4 kHz. +DIN 45692 sharpness weighting g(z) against critical-band rate on a log axis, comparing the DIN, von Bismarck and Aures curves with the 15.8 and 15 Bark knees marked + +*The three $g(z)$ weightings of the formula above on one axis: DIN with its +15.8 Bark knee, von Bismarck with its 15 Bark knee, and the loudness-dependent +Aures curve, which is why the choice of weighting changes a sharpness value +only for sounds with energy above the knee (15 to 15.8 Bark, about 2.5 to +3 kHz) and leaves everything below it untouched.* + See the [Sound Quality Metrics guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/sound-quality/) for usage. ## Modulation transfer and STI (IEC 60268-16) @@ -32272,6 +32528,23 @@ $$ m_{dr} = \frac{2 \sqrt{\left( \sum_t I_k(t) \sin 2 \pi f_m t \right)^2 + \left( \sum_t I_k(t) \cos 2 \pi f_m t \right)^2}}{\sum_t I_k(t)}, \qquad m = \frac{m_{dr}}{0.55} $$ +Modulation transfer index per octave band from 125 Hz to 8 kHz for a hall with a 0.9 s reverberation time and a 15 dB speech-to-noise ratio: the seven bars sit close together between about 0.54 and 0.60, giving STI = 0.58 with the Annex F rating E + +*The seven $\mathrm{MTI}_k$ the weighted sum above consumes, for a hall with +$T = 0.9$ s and a 15 dB speech-to-noise ratio. Each bar is already the mean of +14 transmission indices, so this is two stages of averaging below the raw +$m(F)$; the bars sit within 0.06 of one another, which is the case in which +the $\beta_k$ redundancy terms subtract almost nothing and the STI is close to +the plain $\alpha$-weighted mean.* + +STI versus reverberation time with the IEC 60268-16 Annex F rating bands shaded + +*The end of the chain rather than its middle: what the Schroeder closed form +does to the STI as reverberation grows, against the Annex F rating bands. The +curve falls steeply through the range where a room is still usable and +flattens once the modulation has already been destroyed, which is why halving +a long reverberation time buys less intelligibility than halving a short one.* + See the [Speech Transmission Index guide](https://jmrplens.github.io/phonometry/perception/speech/speech-transmission/) for usage. ## Speech Intelligibility Index (ANSI S3.5) @@ -32298,6 +32571,10 @@ $$ and any fractile follows a two-sided Gaussian model (clause 4.4), $\Delta H_Q = \Delta H_{md} + z(Q)\ s$, using the upper spread $s_u$ for $z \ge 0$ (worse than median) and the lower spread $s_l$ otherwise, each a degree-5 polynomial in $Y - 18$ per sex and frequency (clause 4.3, Tables 2–5). At age 18 every deviation is zero by construction. The formulae are established to 80 years at and below 2 kHz and to 70 years above; beyond that the evaluation is an extrapolation. Anchors: at 60 years the medians evaluate to 7.85 dB (male, 1 kHz), 20.21 dB (male, 4 kHz) and 15.32 dB (female, 4 kHz), matching the Table 1 formula to $10^{-3}$. +Two panels. Left: the ISO 7029 median hearing-threshold deviation for men at ages 20, 40, 60 and 80 on an inverted audiogram axis, with the 10 to 90 percent fractile band around the 70-year curve; the loss deepens toward high frequencies and with age. Right: the ISO 389-7 free-field and diffuse-field reference threshold, coinciding below 1 kHz and diverging above, dipping to a minimum near 3 to 4 kHz + +*The ISO 7029 median age shift with its fractile band (left) and the ISO 389-7 free- and diffuse-field reference thresholds (right).* + See the [Hearing Threshold guide](https://jmrplens.github.io/phonometry/perception/hearing/hearing-threshold/) for usage. ## Noise-induced hearing loss (ISO 1999) @@ -32316,6 +32593,16 @@ $$ The Annex D worked examples (Tables D.1–D.4; e.g. 100 dB / 40 yr at 3 kHz: 29/38/60 dB at the 0.10/0.50/0.90 fractiles) are reproduced exactly at the standard's integer rounding, and the Formula 2 hand value at 4 kHz / 20 yr / 90 dB is $N_{50} = 12.94$ dB. +ISO 1999 noise-induced permanent threshold shift after 40 years at an 8 h-normalised 95 dB(A), on an inverted audiogram axis from 500 Hz to 6000 Hz: the median is near zero at 500 Hz and deepens to about 26 dB at 4000 Hz before recovering at 6000 Hz, and the 10 to 90 percent fractile band around it reaches nearly 37 dB for the most susceptible tenth + +*The model as an audiogram: 40 years at an 8 h-normalised 95 dB(A). The notch +at 4 kHz is what makes noise-induced loss recognisable in a clinic, and it is +here only because $L_0$ is lowest (75 dB) in that band. Mind the fractile +direction the paragraph above states: the edge of the shaded band showing the +**deeper** shift is the library's `fractile=0.90`, the most susceptible tenth — +which ISO 1999 and its Annex D column headings label $Q = 10\ \%$. At 4 kHz +this case runs 19.5 / 26.0 / 36.0 dB at `fractile` 0.10 / 0.50 / 0.90.* + See the [Noise-Induced Hearing Loss guide](https://jmrplens.github.io/phonometry/perception/hearing/noise-induced-hearing-loss/) for usage. ## References @@ -32388,6 +32675,10 @@ This page collects the theory behind rooms and buildings: impulse-response measu ANSI/ASA S12.2-2019 rates steady background noise in rooms against families of octave-band curves (16 Hz – 8 kHz). The **NC rating** follows the two-step procedure of clause 5.2.2 on the Table 1 curves (NC-15 to NC-70): the speech interference level $\mathrm{SIL} = \tfrac14(L_{500}+L_{1000}+L_{2000}+L_{4000})$ (clause 3.2) selects the NC-(SIL) curve, and if no band exceeds it the spectrum is designated NC-(SIL); otherwise the tangency method (clause 5.2.3) applies: each measured band is interpolated against the tabulated curve values, the rating is the highest per-band index and the band that sets it is the governing band; the interpolation makes the rating continuous (an NC-42.5 is reported as such, not snapped to a curve). Spectra above NC-70 or below NC-15 fall outside the family and are flagged (>NC-70 with the band of maximum exceedance, or Two panels for the same ventilation-dominated room spectrum. Left: the measured octave-band levels over the NC curve family, with a red diamond marking the tangent point at 250 Hz that sets the NC-42.5 rating. Right: the same spectrum over the reference RC-35 curve, with the low-frequency bands rising through the shaded rumble tolerance (plus 5 dB below 500 Hz) so the noise is classified RC-35(R), and the hiss tolerance (plus 3 dB at and above 1000 Hz) shaded for comparison + +*The same spectrum rated both ways: NC tangency at the governing band (left) and the RC Mark II reference with the rumble excess (right).* + See the [Room Noise guide](https://jmrplens.github.io/phonometry/buildings/rooms/room-noise/) for usage. ## Room and building acoustics (ISO 18233, ISO 3382, ISO 16283, ISO 10140, EN 12354, ISO 12999, ISO 717, ISO 354) @@ -32412,6 +32703,10 @@ $$ i.e. a reversed cumulative sum in discrete time. Backward integration cancels the random fluctuation of a single squared IR: for a purely exponential energy decay $p^2(t) = e^{-a t}$ it gives $E(t) = e^{-a t}/a$, an exactly straight line $L(t) = -(10 a / \ln 10)\ t$. Background noise flattens $E(t)$, so integration is truncated at the crossing $t_1$ of the fitted decay line with the noise level and the missing tail is compensated by an exponential with the fitted rate; without that term the finite integral systematically **underestimates** $T$. +Squared impulse response with its Schroeder backward-integrated decay curve, and the EDT, T20 and T30 regression windows marked + +*A squared impulse response, its Schroeder backward integral and the EDT/T20/T30 regression windows of the next subsection.* + ### Regression windows and validity (ISO 3382-2, Clause 6, Annex B/C) Reverberation time is a least-squares fit $L = a + b t$ over a window, extrapolated to 60 dB via $T = -60/b$ (Annex C): **EDT** on 0 to −10 dB, **T20** on −5 to −25 dB, **T30** on −5 to −35 dB. A single-slope decay gives EDT = T20 = T30; a fast early / slow late double slope gives EDT < T30. Validity uses the dynamic-range rule of 5.3.3: the noise must sit at least 25 dB below the IR peak for EDT (evaluation span + 15 dB), tightened to 46 dB for T20 and 54 dB for T30 so the tail-compensation bias of a flagged-valid value stays within the 5 % JND. The **curvature** $C = 100\ (T_{30}/T_{20} - 1)$ % (Annex B) flags a non-straight decay above 10 %. @@ -32426,6 +32721,15 @@ $$ with $t_e = 50$ ms (C50, speech) or 80 ms (C80, music), and the **centre time** $T_s = \int_0^{\infty} t\ p^2\ dt / \int_0^{\infty} p^2\ dt$. For a pure exponential decay these have closed forms $C_{te} = 10 \log_{10}(e^{a t_e} - 1)$ and $T_s = 1/a$; at $T = 1$ s ($a = 13.8155$) they evaluate to C80 = 3.05 dB, C50 = −0.02 dB, D50 = 0.499 and Ts = 72.4 ms, the values the implementation reproduces. Table A.1 JNDs (EDT 5 %, C80 1 dB, D50 0.05, Ts 10 ms) bound how finely each is worth reporting. +ISO 3382 per-band parameters of a synthetic room impulse response: grouped EDT, T20 and T30 bars per octave band falling from about 1.4 s at 125 Hz to 0.7 s at 4 kHz, over a second panel where C50 and C80 rise with frequency + +*The closed forms above hold for a single exponential decay; a real room gives +one set of values per band. The upper panel is the decay itself (EDT, T20 and +T30 falling with frequency as air and surfaces absorb more), the lower panel +the early/late split of the same impulse response, and C50 and C80 rise with +frequency for the same reason the decay time falls — the later the energy, the +more of it the room has already removed.* + ### Open-plan spatial decay (ISO 3382-3, Clause 6) The spatial decay rate of A-weighted speech is the ordinary least-squares slope of $L_{p,A,S}$ against $\log_{10}(r/r_0)$ ($r_0 = 1$ m) over the 2–16 m positions, rescaled to a per-doubling figure, and the nominal level is read off the same line at 4 m: @@ -32436,6 +32740,16 @@ $$ The distraction distance rD and privacy distance rP are the distances where a **linear** (not logarithmic) regression of STI against distance crosses 0.50 and 0.20; a non-negative fitted slope (STI not falling with distance) makes them undefined, realising the standard's "can prove impossible to determine" note. +Open-plan spatial decay: A-weighted speech level and STI against source distance on a log axis, with the D2,S regression, the Lp,A,S,4m marker at 4 m and the rD and rP distance crossings + +*Two regressions on two different axes, which is what makes this clause hard to +hold in the head. The level line is fitted against $\log_{10}(r/r_0)$ and read +twice — as the slope $D_{2,S}$ per doubling, and at $r = 4$ m for +$L_{p,A,S,4\text{m}}$. The STI line is fitted against $r$ itself, **linearly**, +and read where it crosses 0.50 and 0.20 for the distraction and privacy +distances. If that second fit comes out flat or rising, the two distances do +not exist rather than being large.* + ### Image-source room impulse response (Kuttruff 4.1, Vorländer 11) A rectangular room reflects a point source in its walls; each reflection equals the free-field sound of a **mirror image** of the source. Mirroring a coordinate in a wall ($S_n = S - 2 d\,\mathbf{n}$, Vorländer Eq. 11.36) turns the source into a regular lattice of images, and the room impulse response is the sum of the direct sound and one delayed, attenuated impulse per image (Kuttruff Eqs. 4.4–4.5), @@ -32466,6 +32780,10 @@ Per one-third-octave band the level difference $D = L_1 - L_2$ (energy-averaged The single-number rating (ISO 717-1, Clause 4.4) shifts the Table 3 **reference curve** in 1 dB steps toward the measured curve until the sum of *unfavourable* deviations $\sum_i \max(0, \text{ref}_i + k - \text{meas}_i)$ is maximal but $\le$ 32.0 dB (16 thirds) or 10.0 dB (5 octaves); the rating $R_w$ is the shifted reference at 500 Hz. The **spectrum adaptation terms** are $C = X_{A1} - X_w$ and $C_{tr} = X_{A2} - X_w$ with $X_{Aj} = -10 \log_{10} \sum_i 10^{(L_{ij} - X_i)/10}$ (Table 4 spectra No. 1 pink noise, No. 2 urban traffic), each rounded to an integer. The ISO 717-1 Annex C worked example ($R_w = 30$, $C = -2$, $C_{tr} = -3$, unfavourable sum 31.8 dB) is reproduced exactly. +Measured one-third-octave sound reduction index with the shifted ISO 717-1 reference curve and the resulting weighted rating at 500 Hz + +*A measured R spectrum against the shifted ISO 717-1 reference: the rating is the shifted reference read at 500 Hz.* + ### Impact insulation and absorption (ISO 16283-2, ISO 717-2, ISO 354) Impact insulation swaps the airborne source for a standardized **tapping @@ -32484,6 +32802,16 @@ with the energetic sum $L_{n,\text{sum}} = 10 \log_{10} \sum_i 10^{L_i/10}$ over are reproduced exactly (thirds $L_{n,w} = 79$, $C_I = -11$; octaves $54$, $0$), via the same monotone shift search as ISO 717-1 run on the negated curves. +Measured one-third-octave normalized impact sound pressure level with the shifted ISO 717-2 reference curve and the resulting weighted rating read at 500 Hz + +*The mirror image of the airborne figure above, drawn so the flip is visible +rather than asserted. There the unfavourable deviations were counted where the +measurement fell **below** the reference; here they are counted where it rises +**above** it, because a louder receiving room is a worse floor. Everything else +is the same procedure: the reference curve shifted in 1 dB steps until the +unfavourable sum is as large as it can be without passing 32.0 dB, and the +rating read off the shifted reference at 500 Hz.* + Sound absorption (ISO 354) measures the equivalent absorption area from Sabine's relation applied to a reverberation room empty and with the specimen: $A = 55.3\ V/(c\ T) - 4 V m$ (the $4 V m$ term is the air absorption, $m$ the @@ -32586,6 +32914,15 @@ hard objects ($\psi \approx 0.072$) raises $A$ to 5.03 m² and drops $T$ to 0.9 s. The informative Annex D method for irregular spaces and unevenly distributed absorption is out of scope. +Two panels for a 60 cubic metre office with a bare versus acoustically-treated ceiling: the equivalent absorption area per octave band, much higher with the acoustic ceiling, and the reverberation time falling from about five seconds at low frequency for the bare room to under one second with the acoustic ceiling + +*What Formula 1 does band by band: the equivalent absorption area on the left +and the reverberation time it implies through Formula 5 on the right, for the +same room bare and treated. The Annex E case quoted above is the same +arithmetic on a smaller room — $A$ from 2.26 to 5.03 m² and $T$ from 2.1 to +0.9 s at 1 kHz — and the figure shows why the two move in opposite directions +and not proportionally.* + See the [Enclosed-Space Absorption guide](https://jmrplens.github.io/phonometry/buildings/rooms/enclosed-space-absorption/) for usage. ### Measurement uncertainty (ISO 12999-1) @@ -32640,6 +32977,19 @@ efficiency and point mobilities of the [vibration theory](https://jmrplens.github.io/phonometry/reference/theory/vibration/). The prediction is clean-room from Bies, Hansen & Howard (2017), Hopkins (2007) and Cremer, Heckl & Petersson (2005). +Four panels: the single-panel mass law with its coincidence dip, the double wall with the mass-spring-mass resonance and cavity gain, the plate radiation efficiency rising to unity above the critical frequency, and a composite wall whose 1 % open slit caps R at the open-area limit + +*The four behaviours of the paragraph above, one per panel. Top left, the mass +law rising 6 dB per octave with Sharp's coincidence dip cut into it at $f_c$. +Top right, the double wall: no better than the combined mass below $f_0$, then +the cavity term climbing until it saturates. Bottom left, the radiation +efficiency that decides how much of the plate's vibration becomes sound. Bottom +right, the ceiling a leak imposes: a 1 % open area holds the composite at +$10\log_{10}(S/S_a) = 20$ dB however good the wall is, which is the panel worth +showing a client.* + +To-scale cross-section of a 2 mm slit through a 100 mm wall: the hatched wall drawn in section with the narrow horizontal air gap at mid-height, an incident-sound arrow pointing at the gap from the left, the 100 mm wall depth and 2 mm slit width dimensioned, and circular transmitted wavefronts sketched spreading from the slit exit on the right + See the [Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) guide for usage. @@ -32860,6 +33210,18 @@ for f, pxx in zip(freq_bins[in_band], psd[in_band]): print(f, pxx) ``` +One-third-octave spectrum analysis of a six-tone signal with the raw PSD in the background + +*The two objects on one axis, for a six-tone signal at 20, 100, 500, 2000, +4000 and 15 000 Hz. The grey trace is a Welch PSD ($f_s$ = 48 kHz, +`nperseg = 8192`, so a fixed 5.86 Hz bin everywhere); the markers are the +standardized third-octave levels of the same signal. The bin width never +changes and the band width does: 4.60 Hz at the 20 Hz band, narrower than one +bin, against 230.77 Hz at 1 kHz and 3657 Hz at 16 kHz. That is why the top +bands each swallow hundreds of bins while the bottom ones sit inside a single +one, and why the two answers cannot be converted into each other. (The PSD +trace is offset vertically for legibility, so read its shape, not its level.)* + This keeps the two concepts separate: phonometry gives standardized fractional-octave levels, while Welch gives narrowband FFT bins. With `fs=100000` and `nperseg=2**15`, the Welch bin spacing is about 3.05 Hz. @@ -32962,6 +33324,10 @@ transform. Because the bilinear transform compresses frequencies near Nyquist, the default `high_accuracy` mode designs and runs the filter at an internally oversampled rate (≥ 144 kHz); see [Frequency Weighting](https://jmrplens.github.io/phonometry/signals/levels/weighting/). +A, C and Z frequency weighting curves of IEC 61672-1 with a zoom showing the positive region of the A curve (+1.27 dB at 2.5 kHz) + +*The three IEC 61672-1 weighting curves realized by the library, with the small positive region of the A curve magnified. The special B, D and AU curves are charted in [Special Weightings](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/).* + ## Time Integration Implemented as a first-order IIR exponential integrator: @@ -32981,6 +33347,10 @@ start from the first input energy, or pass a scalar/array with the previous mean-square output state. See [Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) for the IEC 61672-1 tone-burst verification of this implementation. +Fast, Slow and Impulse time weighting responses to a noise burst + +*The exponential integrator at the three standard time constants: Fast follows a burst, Slow smooths it and Impulse holds its peak.* + ## G-weighting (ISO 7196) The G curve extends frequency weighting into the infrasound range. ISO 7196:1995 Table 1 (p. 2) defines it by four zeros at the origin and four complex-conjugate pole pairs, given as coordinates in Hz (multiplied by $2\pi$ to obtain rad/s): @@ -32998,6 +33368,13 @@ $$ The four zeros against eight poles shape the characteristic response: a rise of approximately **+12 dB/octave between 1 Hz and 20 Hz**, with roll-offs of approximately **24 dB/octave** below 1 Hz and above 20 Hz. Infrasound needs its own curve because near the hearing threshold the perceived loudness of very-low-frequency tones grows much more steeply with sound pressure level than at mid frequencies (a small dB increase above threshold produces a large loudness jump), so the A curve (anchored at 1 kHz) grossly misrepresents infrasonic annoyance. +G-weighting frequency response from 0.1 Hz to 1 kHz with the ISO 7196 Table 2 nominal values overlaid + +*The shape those four zeros and four pole pairs make, against the ISO 7196 +Table 2 nominal values: 0 dB at the 10 Hz anchor, the +12 dB/octave climb +through the infrasound decade below it, and the two 24 dB/octave roll-offs +that fence the curve off below 1 Hz and above 20 Hz.* + Since G acts on 0.25 Hz – 315 Hz, far below the Nyquist frequency at audio rates, the frequency warping of the plain bilinear transform (applied without prewarping) is negligible there: about 0.014 % at 315 Hz for $f_s = 48$ kHz, under 0.01 dB on the response. The internal oversampling used for the A/C designs (whose action extends to 16 kHz) is therefore not applied. See the [Special Weightings guide](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/) for usage. @@ -33010,6 +33387,14 @@ $$ \mathrm{SEL} = L_{eq,T} + 10 \log_{10}\left(\frac{T}{T_0}\right), \qquad T_0 = 1\ \text{s} $$ +A vehicle pass-by level history with its Leq over the whole event and the equal-energy one-second SEL block + +*What the formula does to an event: the pass-by is replaced by a one-second +block of the same total energy, which is why SEL exceeds the event's $L_{eq}$ +whenever the event lasts longer than a second, and why two events of the same +SEL are interchangeable in a dose even when one is loud and short and the +other quiet and long.* + **Sound exposure** $E$ (IEC 61252, 3.1) is the time integral of the squared A-weighted sound pressure, expressed in pascal-squared hours: $$ @@ -33060,6 +33445,10 @@ The **pressure-intensity index** $\delta_{pI} = L_p - L_I$ measures how reactive See the [Sound Intensity guide](https://jmrplens.github.io/phonometry/devices/emission/intensity/) for usage. +Third-octave pressure and intensity levels for a plane progressive wave versus a standing wave + +*The p-p estimator in the two limiting fields: the gap between $L_p$ and $L_I$ is the pressure-intensity index that flags reactive fields.* + ## Measurement uncertainty (ISO/IEC Guide 98-3: GUM and Supplement 1) Domain budgets like ISO 12999-1 and ISO 9612 Annex C are instances of the @@ -33096,6 +33485,17 @@ inputs; the output is nearly trapezoidal, not Gaussian, so the interval is narrower than $\pm 1.96\,u$), and the GUM Annex H.1 end-gauge example gives $k = t_{0.99}(\nu_{\mathrm{eff}} = 16) = 2.92$ and $U_{99} = 93$ nm. +Two panels for the A-weighted level example. Left: the GUM uncertainty budget, a horizontal bar chart of each input's contribution to the combined uncertainty with a dashed line at uc of 0.407 dB. Right: the Monte Carlo output histogram overlaid with the GUM Gaussian and the shaded 95 percent coverage interval; the title reads Y equals 74.00 dB, U equals 0.86 dB, k equals 2.11 + +*The two routes on one problem — an A-weighted level, not the Supplement 1 +four-term example quoted above. Left is the law of propagation as a budget: +one bar per input, so the term worth reducing is visible. Right is the +Supplement 1 route: the Monte Carlo output distribution with the GUM Gaussian +drawn over it and the 95 % coverage interval shaded. Here the two agree, which +is what clause 8 calls validation; where the model is non-linear or the output +visibly non-Gaussian the histogram departs from the curve and the interval is +read off the fractiles instead.* + See the [GUM Uncertainty guide](https://jmrplens.github.io/phonometry/signals/metrology/gum-uncertainty/) for usage. ## References @@ -33200,6 +33600,10 @@ reproduced (E.2.1: 7.4 m/s² for 2.5 h → $A(8) = 4.1$ m/s²; E.3 forestry, three tools → 3.6 m/s²), as are the ISO 5349-1 Table C.1 exposure-duration rows. +The whole-body vertical weighting Wk in decibels over 0.4 to 100 Hz: a plateau near -6 dB below 2 Hz, a small +0.5 dB peak near 6 Hz and a roll-off to about -21 dB at 100 Hz + +*The Wk whole-body weighting realized from the ISO 8041-1 cascade.* + ### Multiple shocks (ISO 2631-5) Repeated shocks damage the lumbar spine through peak compression rather than @@ -33226,6 +33630,15 @@ over 20 years) is reproduced: $D_{zd} = 55.97$ m/s², $R = 1.22$, $\Pi = 0.37$. The Annex A finite-element spinal model (distributed by ISO as separate software) is out of scope. +Left: the seat-to-spine transmissibility rising to about 1.6 near a 5 Hz resonance then rolling off to near zero by 80 Hz. Right: the Weibull probability of lumbar injury versus the stress variable R for male and female, with the 10, 50 and 90 percent risk levels and the Annex C male example at R = 1.22, about 37 percent + +*The two objects of the model. Left, the clause 5.2 seat-to-spine +transmissibility: unity at DC, peaking at $|H| \approx 1.54$ near 5 Hz and +rolling off above it, which is why $W_k$ had to be replaced for shocks. Right, +the Table C.1 Weibull law $\Pi(R)$ with the Annex C worked example marked at +$R = 1.22$, $\Pi = 0.37$ — the risk rises steeply over a narrow band of $R$, so +a dose that doubles does not double the probability.* + See the [Human Vibration guide](https://jmrplens.github.io/phonometry/vibration/human/human-vibration/) and the [Multiple-Shock Vibration guide](https://jmrplens.github.io/phonometry/vibration/human/multiple-shock-vibration/) for usage. @@ -33255,6 +33668,25 @@ from Cremer, Heckl & Petersson (2005) and Hopkins (2007). See the [Predicting Panel Sound Insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) for usage. +Normalized receptance, mobility and accelerance magnitudes of a single-degree-of-freedom resonator on a log-log frequency axis, all peaking at the resonance + +*Not one of the closed forms above: this is a **finite** one-degree-of-freedom +resonator, receptance, mobility and accelerance being the same resonance seen +through the three kinematic quantities. It is here as the contrast — the +infinite-structure results are frequency-independent or smoothly falling, +while anything finite resonates.* + +Driving-point mobility magnitude of a single-degree-of-freedom resonator on log-log axes, climbing along the stiffness line below resonance, falling along the mass line above it, and peaking at one over the damping coefficient at the resonance + +*The same point read as a diagnosis: below resonance the magnitude climbs the +**stiffness line** $\omega/k$, above it it falls along the **mass line** +$1/(\omega m)$, and the peak height is set by the damping alone. A real +structure has many such resonances, and the infinite-structure closed forms +above are the average the measured mobility oscillates about, not the value it +takes at a given frequency — which is why they are used with octave or +third-octave inputs and are least trustworthy in the lowest bands of a small +or lightly damped element.* + ## References - Griffin, M. J. (1996). *Handbook of human vibration*. Academic Press. @@ -34636,10 +35068,13 @@ Source: https://jmrplens.github.io/phonometry/signals/filters/ Acoustic analysis rarely wants a raw FFT: standards, ratings and human hearing all work in **fractional octave bands**, frequency intervals whose width grows proportionally with frequency. phonometry implements them as banks of -recursive filters whose **-3 dB points sit exactly on the ANSI S1.11 band -edges**, so band levels are comparable whichever filter architecture computes -them, and whose designs are verified against the class tolerances of -**IEC 61260-1:2014**. +recursive filters whose designs are verified against the class tolerances of +**IEC 61260-1:2014**. The default Butterworth bank, and the Chebyshev II and +Bessel alternatives, put their **-3 dB points exactly on the ANSI S1.11 band +edges**, so their band levels are directly comparable; the two equiripple +architectures (Chebyshev I, Elliptic) place their ripple edge there instead and +consequently read a few tenths of a decibel high in every band, which is why a +campaign should fix one architecture and keep it. The foundation page is [Filter Banks](https://jmrplens.github.io/phonometry/signals/filters/filter-banks/). It covers the band mathematics, how a signal is decomposed into 1/1, 1/3 or @@ -34928,8 +35363,7 @@ confidence intervals), **correlation and time-delay estimation** and the **Hilbert envelope**, all stated with the Bendat & Piersol error analysis. And two transversal concerns complete the core. **Calibration** decides what the digital samples mean physically: results can be referenced to a measured -calibrator tone or a known sensitivity (dB SPL), or stay in digital full -scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo +calibrator tone (dB SPL), or stay in digital full scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo supplement) qualifies any result computed from uncertain inputs, which is what makes a number defensible in a report. @@ -35035,8 +35469,8 @@ and carrying its statistical quality. What the numbers mean and how much to trust them. - [Calibration and dBFS](https://jmrplens.github.io/phonometry/signals/metrology/calibration/): physical SPL - calibration from a calibrator tone (IEC 60942) or a known sensitivity, and - the digital dBFS mode. + calibration from a calibrator tone (IEC 60942), the stability check it applies + to that recording, and the digital dBFS mode. - [Measurement uncertainty (GUM and Monte Carlo)](https://jmrplens.github.io/phonometry/signals/metrology/gum-uncertainty/): the law of propagation of uncertainty and the Monte Carlo method of ISO/IEC Guide 98-3, with expanded uncertainty and coverage intervals. @@ -35056,9 +35490,11 @@ A sound level meter does three things to a calibrated signal, in order: it **weights it in frequency** to mimic the ear's sensitivity, it **smooths it in time** with a standardised ballistic, and it **integrates it into a level**. The pages of this section implement that chain stage by stage for the -displayed level: the A/C/Z curves and the Fast/Slow/Impulse ballistics -follow **IEC 61672-1:2013** closely enough that the weightings are -verified against the standard's own tolerance tables in CI. +displayed level: the A/C/Z curves and the Fast and Slow ballistics of +**IEC 61672-1:2013**, verified in CI against the standard's own tolerance +tables (Table 3 for the weightings, Table 4 for the tone-burst responses), plus +the legacy Impulse ballistics that IEC 61672-1 inherited from IEC 60651 and then +dropped from its requirements, kept here for older national procedures. [Frequency Weighting (A, C, Z)](https://jmrplens.github.io/phonometry/signals/levels/weighting/) covers the first stage. The A-curve tracks hearing sensitivity at moderate levels and @@ -35070,10 +35506,11 @@ conventional weightings are blind, the historical B and D curves serve legacy data, and AU rejects ultrasound from an audible-sound reading per IEC 61012. [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/) covers the second stage: -the exponential Fast (125 ms), Slow (1 s) and Impulse ballistics that decide -how quickly a displayed level follows the sound. phonometry implements the -exact time constants, verified against the toneburst responses of the -standard. +the exponential Fast (125 ms) and Slow (1 s) ballistics that decide how quickly +a displayed level follows the sound, and the legacy asymmetric Impulse +ballistics (35 ms rise, 1.5 s decay) that came from IEC 60651 and is no longer +required by IEC 61672-1. phonometry implements the exact time constants, +verified against the tone-burst responses of the standard. [Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/) is the payoff: the equivalent continuous level Leq and its A-weighted LAeq, the percentile @@ -35102,8 +35539,9 @@ noise phases, and the limit tables an activity is judged against. - [Special Weightings (G, B, D, AU)](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/): the ISO 7196 infrasound G-weighting, the historical B and D curves and AU per IEC 61012. -- [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/): Fast, Slow and - Impulse exponential ballistics. +- [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/): the Fast and Slow + exponential ballistics of IEC 61672-1, and the legacy Impulse ballistics it + dropped. - [Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/): Leq and LAeq, percentile levels, LCpeak/SEL, noise dose and octave spectrograms. @@ -37708,14 +38146,23 @@ laf_t = 10 * np.log10(np.maximum(envelope, 1e-12) / (2e-5) ** 2) # laf_t peaks near 80 dB during the event and settles near 55 dB between. ``` -You rarely write this chain yourself: every level function of the next step -applies the frequency weighting internally, and the percentile levels rebuild -this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) integrate the -squared weighted signal directly, with no ballistics, exactly as a meter -does. The chain is shown here because it *is* the meter's display. +Animation: a tone burst driving the RC exponential detector, the capacitor charging and draining, while the Fast, Slow and Impulse meter needles follow their own ballistics + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_time_weighting.webm) + +The needle in the clip is that `time_weighting` call: a first-order low-pass +charging and draining on the squared signal. The three needles differ in one +number, the time constant, which is why Fast catches an event that Slow +smooths away. You rarely write this chain yourself: every level function of +the next step applies the frequency weighting internally, and the percentile +levels rebuild this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) +integrate the squared weighted signal directly, with no ballistics at all — +which is why they show no needle movement to follow. The chain is shown here +because it *is* the meter's display. Deep guides: [Frequency Weighting (A, C, Z)](https://jmrplens.github.io/phonometry/signals/levels/weighting/) -and [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/). +and [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/), which takes this same clip +apart against the IEC 61672-1 tone-burst table. ## 4. Integrate: the numbers a meter reports @@ -40894,13 +41341,21 @@ plt.show() -That flexural wave is worth watching in motion: the -[bending-wave transmission guide](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/) embeds an -animation of this solver launching a 4 kHz bending packet along a 10 mm -steel plate into an L-junction, where the corner splits it into the -reflected and transmitted waves the closed form prices at -$\tau_{12}(0°) = 0.5$, plus the fast in-plane precursor the pinned-junction -model deliberately leaves out. +That flexural wave is worth watching in motion. The clip below is this same +solver launching a 4 kHz bending packet along a 10 mm steel plate: on the +control panel the plate runs straight and the packet simply leaves, and on +the junction panel a perpendicular plate of the same thickness turns the +corner into a scatterer. The packet splits there into the reflected and +transmitted bending waves the closed form prices at $\tau_{12}(0°) = 0.5$, +plus the fast in-plane precursor that races ahead down the receiving plate — +the mode conversion the pinned-junction model deliberately leaves out, and +the reason this page needs an elastic solver rather than a flexural one. The +[bending-wave transmission guide](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/) takes +the same run apart against the EN 12354 vibration reduction index. + +Animation: a 4 kHz bending-wave packet running along a 10 mm steel plate, passing straight through on the control panel and splitting at an L-junction into a reflected wave, a transmitted wave descending the perpendicular plate and a faster in-plane precursor + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_plate_junction.webm) ## 4. Fluid-solid coupling at normal incidence @@ -41048,13 +41503,28 @@ dip within 0.1 % of the 295 kHz resonance. The same suite stress-tests the extreme contrast of an air-steel contact (impedance ratio ~$10^5$:1): stable over 10 000 steps with the reflected amplitude conserved to 0.5 %. -At oblique incidence the plate physics gets richer, and the -[panel sound insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) embeds the -animation: this solver driving the same 10 mm steel plate, lying in air, -with a sustained 45° plane wave below and above its coincidence frequency, -where the trace-matched bending wave re-radiates a growing beam and holds -the transmitted level at the point where the mass law demands 12 dB more -blocking. +At oblique incidence the plate physics gets richer, and the clip below is +this solver driving the same 10 mm steel plate, now lying in air, with a +sustained 45° plane wave arriving on it. The two panels differ in **one +number only** — the drive frequency, $f_c/2 = 603$ Hz on the left and +$2 f_c = 2413$ Hz on the right, either side of the 1206 Hz coincidence +frequency the library computes from the same $m''$ and $B'$ used above. +Everything else, the plate, the angle, the mesh and the colour scale, is +held fixed. Below $f_c$ the plate reflects almost everything and the +transmitted level lands on the oblique mass law; above it the acoustic trace +wavelength matches the free bending wavelength, the plate re-radiates a 45° +beam that grows along the lit span, and the transmitted level holds at the +low-frequency figure where the mass law demanded 12 dB more blocking. The +air below the plate is drawn on both panels with the display gain measured +off the settled field of the two runs together (×150, that is +44 dB) and +printed on the canvas: read the *annotations* for levels, not the +brightness. The +[panel sound insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) takes the +same run apart against the plateau method and the mass law. + +Animation: two elastic FDTD panels of the same 10 mm steel plate in air under a 45-degree plane wave, at 603 Hz where the plate blocks almost everything and at 2413 Hz where a transmitted beam grows below it + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_coincidence.webm) ## Quick answers @@ -41187,6 +41657,27 @@ animations of this documentation, promoted to a public API with sources, pressure probes, rasterised obstacles, per-side boundary conditions and a frozen result object. +Here is one of those animations, and it is a fair advertisement for what the +rest of this page builds. Nothing in it is drawn: the colonnade is a boolean +`obstacle_mask` of rasterised circles and the wavefront is a single one-way +plane-wave packet with a Gaussian envelope one wavelength wide, launched at +$x = 0.30$ m into a 4 m × 1 m rigid-walled hall whose two ends absorb through +sponges hidden outside the frame. The carrier is 800 Hz, so the wavelength is +42.9 cm and the 10 to 17 cm columns are roughly a quarter to two fifths of it +— the regime in which a rigid cylinder both casts a readable shadow and +re-radiates strongly, which is why the coda that fills the hall is structured +rather than noise. That coda is deterministic multiple scattering: it is what +a diffuse field looks like *before* any statistical assumption is made about +it. The mesh is the worked example of the rule +[section 4](#4-numerical-dispersion-and-accuracy) derives: the tightest gap in +this layout is 6.6 cm between a column and a wall, so +$\Delta x = \min(\text{smallest aperture}/4,\ \lambda/8)$ allows up to 1.6 cm, +and the clip runs at 2.5 mm because a banner needs the definition. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + Pipeline from the domain definition (sound-speed and density maps with the grid spacing dx) and the geometry (obstacle mask and per-side boundary conditions), through the sources injected at grid cells, the staggered-grid leapfrog update of velocity and pressure, and the Courant stability condition, to the frozen FDTDResult with probe histories, field snapshots and a plot method ## 1. The scheme: a wave equation on a grid @@ -41793,6 +42284,32 @@ ground), the simulation is the fallback that still gives a quantitative answer; when a closed form exists, prefer it, and use the solver to verify the assumptions it rests on. +Those cross-checks are not only arguments: fifteen of the animations in this +documentation are output from these two solvers, and they are filed on the +guides whose physics they settle rather than here. Room modes growing on and +off resonance appear in [room acoustics](https://jmrplens.github.io/phonometry/buildings/rooms/room-acoustics/) +and [reverberation prediction](https://jmrplens.github.io/phonometry/buildings/rooms/reverberation-prediction/), +which also carries the hall of columns that turns one wavefront into a mixed +field; barrier diffraction at two wavelengths in +[outdoor propagation](https://jmrplens.github.io/phonometry/environment/propagation/outdoor-propagation/) +and [ground effect and barriers](https://jmrplens.github.io/phonometry/environment/propagation/ground-barriers/); +downwind and upwind refraction in +[atmospheric refraction](https://jmrplens.github.io/phonometry/environment/propagation/atmospheric-refraction/); +the ground-effect lobe pattern in outdoor propagation and in +[airport noise](https://jmrplens.github.io/phonometry/aircraft/airport-noise/); the standing-wave and +transmission tubes in [the impedance tube](https://jmrplens.github.io/phonometry/materials/absorbers/impedance-tube/); +the QRD and metadiffuser panels in +[diffusers](https://jmrplens.github.io/phonometry/materials/diffusers/diffusers/) and +[metadiffusers](https://jmrplens.github.io/phonometry/materials/diffusers/metadiffusers/); the slit +absorber in [metamaterial absorbers](https://jmrplens.github.io/phonometry/materials/absorbers/metamaterial-absorbers/); +the expansion chamber in [silencers](https://jmrplens.github.io/phonometry/devices/noise-control/silencers/); +the wall aperture in [panel sound insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/); +and the SOFAR duct in [underwater propagation](https://jmrplens.github.io/phonometry/underwater/underwater-propagation/). +The elastic solver adds two: the bending packet entering an L-junction, on +[junction transmission](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/), +and the coincidence plate, on panel sound insulation. Both also appear on the +elastic page below, where the solver that produced them is explained. + ## Pages in this section - [2D FDTD wave simulation](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/): the @@ -41976,18 +42493,38 @@ Source: https://jmrplens.github.io/phonometry/start/ # Start -The three pages that open the documentation, before the guides themselves. +Four short pages, meant to be read once before anything else. Each answers one +question, and they are in the order the questions arrive. +**Can I install it and get a number out?** [Getting Started](https://jmrplens.github.io/phonometry/start/getting-started/) installs the library and -walks a first measurement end to end, from a WAV file to a calibrated -one-third-octave spectrum. [Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) -sets out what the library is for and how it is validated against the standards -it implements. [About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how -to cite it and under what licence. - +runs a first one-third-octave analysis, on a synthetic signal and then on a WAV +file, and states what a recording must satisfy before those numbers mean +anything physical. It stops short of a calibrated measurement on purpose: +[Calibration and dBFS](https://jmrplens.github.io/phonometry/signals/metrology/calibration/) is the next +step, the one that turns band levels into pascals, and +[Build a sound level meter](https://jmrplens.github.io/phonometry/signals/sound-level-meter/) runs the +whole chain end to end. + +**Where is the thing I came for?** [All guides](https://jmrplens.github.io/phonometry/start/guides/) is the map: every guide in the library, grouped by the topic it belongs to, with a line on each. +**Should I trust the number?** +[Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) sets out what the library +is for and how it is validated against the standards it implements, with the +tone-burst check worked through against the acceptance limits. + +**Who is answerable for it, and how do I cite it?** +[About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how to cite it and +under what licence. + +The assumed starting point is Python 3.13 or newer with working NumPy and +SciPy, and enough acoustics to know what a one-third-octave band and a sound +pressure level are. Any symbol the guides use without introducing is in the +[glossary](https://jmrplens.github.io/phonometry/reference/glossary/), with its unit, its defining clause +and the guide that computes it. + --- diff --git a/llms.txt b/llms.txt index 492d8a77e..d88493f21 100644 --- a/llms.txt +++ b/llms.txt @@ -133,11 +133,11 @@ If you are an AI assistant setting this up for a user: install from PyPI (no sys - [Sound Insulation by Intensity (ISO 15186)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-intensity/) - [Laboratory Flanking Transmission (ISO 10848)](https://jmrplens.github.io/phonometry/buildings/insulation/flanking-lab/) - [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) +- [Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) - [Sound Insulation Survey Method (ISO 10052)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-survey/) - [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/) - [Façade Sound Insulation](https://jmrplens.github.io/phonometry/buildings/insulation/facade-insulation/) - [Spanish Building Code (CTE DB-HR)](https://jmrplens.github.io/phonometry/buildings/insulation/spanish-building-code/) -- [Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) ### Insulation design diff --git a/scripts/check_doc_snippets.py b/scripts/check_doc_snippets.py index 01cd67109..4bde201fd 100644 --- a/scripts/check_doc_snippets.py +++ b/scripts/check_doc_snippets.py @@ -74,7 +74,6 @@ "detailed-prediction": "excerpt: starts from the paths of the prose", "electroacoustics": "excerpt: starts from the captured signal of the prose", "flanking-lab": "excerpt: starts from the measured levels of the prose", - "impedance-tube": "excerpt: starts from the measured spectrum of the prose", "impulsive-sound": "excerpt: starts from the recording of the prose", "intensity": "excerpt: starts from the band levels of the prose", "machine-diagnostics": "excerpt: starts from the record of the prose", @@ -92,11 +91,6 @@ "time-frequency": "excerpt: starts from the record of the prose", "time-weighting": "excerpt: starts from the block stream of the prose", "underwater-acoustics": "excerpt: starts from the hydrophone record", - # Known defect, not an excerpt: the constant the fiche needs is defined in - # multiple_shock_vibration but is not re-exported by the vibration - # namespace the page imports, so the snippet cannot run as printed. - "multiple-shock-vibration": "teaches vibration.RISK_THRESHOLDS_MALE, which " - "the package does not export", } #: Timeout per page, generous enough for the FDTD and ECMA pages. diff --git a/scripts/check_markdown_hazards.py b/scripts/check_markdown_hazards.py new file mode 100644 index 000000000..bf36cd9f4 --- /dev/null +++ b/scripts/check_markdown_hazards.py @@ -0,0 +1,158 @@ +# Copyright (c) 2026. Jose Manuel Requena Plens +"""Gate for markdown that does not render the way it reads. + +The guides are hard-wrapped, so a sentence long enough to wrap can put a +``-``, a ``>`` or a digit-and-dot at the start of a line. CommonMark does not +read that as the middle of a sentence: it reads it as a list item, a block +quote or an ordered list, and it ends the paragraph there. The author sees a +paragraph; the reader gets two blocks, or worse. + +Three checks. The first two are the same defect seen twice, and they are not +equally visible; the third is a different one with the same shape, a source +that looks right and renders wrong. + +1. **Unclosed inline maths.** An inline ``$...$`` that wraps onto a block + marker never closes: the marker ends the paragraph first. The maths is then + published as literal text, and in MDX the subscript braces become a + JavaScript expression, so the page does not render at all. This is what + ``$L_{n,ij,w} = ... - \\Delta R_{j,w}`` followed by ``- K_{ij} ...`` did: + the site build failed with ``ReferenceError: n is not defined``, ``n`` being + the first subscript. A list marker is only reported when it interrupts an + open ``$``, because a list that legitimately follows its introducing line + without a blank line is ordinary in this corpus (3830 of them) and is not a + defect. + +2. **A wrapped comparison operator.** ``>`` at the start of a line, where the + line before it is ordinary paragraph text, is a greater-than sign that + wrapped, not a quotation: it turned the tail of a sentence into a quoted + block. This one is silent. Nothing renders wrong, nothing fails to build, + and it ships. Three were found this way, two of them the same sentence in + two languages. A deliberate block quote in this corpus is preceded by a + blank line, which is why the rule can be this simple. + +3. **A same-page link to an accented heading.** Markdown percent-encodes + non-ASCII in a URL, so ``[La medición](#la-medición-...)`` ships as + ``href="#la-medici%C3%B3n-..."`` while the heading keeps its id unencoded. + A browser resolves it; the accessibility audit compares the raw attribute + against the ids and reports a dangling anchor, and it only samples 66 URLs, + so five of the six the corpus had went unreported. The fix the corpus + already used in two places is an ASCII ```` above the heading. + +Display maths (``$$``) is exempt: it is a block of its own and the delimiters +are on their own lines. + +Usage:: + + python scripts/check_markdown_hazards.py + +Exit status 0 when every page is clean, 1 otherwise, with the file, the line +and the offending text. +""" + +from __future__ import annotations + +import pathlib +import re +import sys + +_ROOT = pathlib.Path(__file__).resolve().parent.parent + +#: Trees of hand-written markdown. The API reference is generated from the +#: docstrings and the plans folder is local scratch, so neither is checked. +_ROOTS = ( + _ROOT / "site" / "src" / "content" / "docs", + _ROOT / "docs", +) +_SKIP = ("reference/api/", "superpowers/") + +#: A line that opens a new CommonMark block rather than continuing a paragraph. +_BLOCK = re.compile(r"^\s{0,3}(?:[-*+]\s|>|#{1,6}\s|\d{1,9}[.)]\s|\||```)") + +#: ``>`` opening a line with content after it: a wrapped comparison operator, +#: unless the paragraph deliberately starts a quotation, which is always +#: preceded by a blank line. +_QUOTE = re.compile(r"^>\s*\S") + +#: Text that continues a paragraph rather than starting a block of its own. +_PROSE = re.compile(r"^\s{0,3}[^\s\-*+>#|<:0-9]") + +#: A same-page link whose target carries a character markdown will +#: percent-encode on the way out. +_ANCHOR = re.compile(r"\]\(#([^)]+)\)") + + +def _unescaped_dollars(line: str) -> int: + """Inline ``$`` delimiters on a line, ignoring ``\\$`` and ``$$``.""" + return len(re.findall(r"(? list[str]: + lines = path.read_text(encoding="utf-8").splitlines() + rel = path.relative_to(_ROOT).as_posix() + problems: list[str] = [] + fenced = False + open_math = False + + for number, line in enumerate(lines, start=1): + if line.lstrip().startswith("```"): + fenced = not fenced + open_math = False + continue + if fenced: + continue + + if open_math and _BLOCK.match(line): + problems.append( + f"{rel}:{number}: inline maths opened on line {number - 1} is cut off by a " + f"block marker; rewrap so the line does not start with " + f"{line.lstrip()[:2]!r}" + ) + open_math = False + + for anchor in _ANCHOR.finditer(line): + target = anchor.group(1) + if not target.isascii(): + problems.append( + f"{rel}:{number}: the same-page link " + f"'#{target}' will be percent-encoded in the href, and the accessibility " + f"audit compares the raw attribute against the ids, so it reads as a " + f"dangling anchor. Put above the heading " + f"and link to that, as the pages that already hit this do." + ) + + if number > 1 and _QUOTE.match(line) and _PROSE.match(lines[number - 2]): + problems.append( + f"{rel}:{number}: {line.strip()[:40]!r} continues the sentence above but " + f"starts a block quote; rewrap so '>' does not start the line" + ) + + if not line.strip() or _BLOCK.match(line): + open_math = False + if _unescaped_dollars(line) % 2 == 1: + open_math = not open_math + + return problems + + +def main() -> int: + problems: list[str] = [] + checked = 0 + for root in _ROOTS: + for path in sorted(root.rglob("*.md*")): + if any(part in path.as_posix() for part in _SKIP): + continue + checked += 1 + problems.extend(_check(path)) + + if problems: + print("::error::markdown that does not render the way it reads", file=sys.stderr) + for problem in problems: + print(f" - {problem}", file=sys.stderr) + return 1 + + print(f"Markdown renders the way it reads: {checked} pages.") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/conformance/domains/levels.py b/scripts/conformance/domains/levels.py index c697b69d2..79a3ca189 100644 --- a/scripts/conformance/domains/levels.py +++ b/scripts/conformance/domains/levels.py @@ -47,7 +47,7 @@ def _chk_leq_sine() -> Outcome: @register( "Levels & dosimetry", - "IEC 61252:1995 (LEX,8h)", + "IEC 61252:1993 (LEX,8h)", "8 h exposure to 90 dB(A) noise", ) def _chk_lex_8h() -> Outcome: diff --git a/scripts/diagrams/buildings.py b/scripts/diagrams/buildings.py index 98d5bc56f..0ad7cc2ca 100644 --- a/scripts/diagrams/buildings.py +++ b/scripts/diagrams/buildings.py @@ -515,12 +515,15 @@ def _d_open_plan(s: SVG, th: Theme) -> None: ] cw, cgap = 190.0, 14.0 cx = (900 - (len(chips) * cw + (len(chips) - 1) * cgap)) / 2 + s.text(450, 306, "what open_plan_metrics returns", 14, th.muted, "middle") for sym, name, note, color in chips: s.rect(cx, 320, cw, 118, th.panel, color, rx=10, sw=2) s.text(cx + cw / 2, 356, sym, 22, th.fg, "middle", bold=True) s.text(cx + cw / 2, 384, name, 15, color, "middle", bold=True) s.text(cx + cw / 2, 412, note, 12, th.muted, "middle") cx += cw + cgap + s.text(450, 464, "Clause 4 also requires the average A-weighted background " + "noise Lp,A,B (Cl. 6.4)", 13, th.muted, "middle") def _d_iso12999(s: SVG, th: Theme) -> None: diff --git a/scripts/diagrams/devices.py b/scripts/diagrams/devices.py index 2d5d44d4a..a14494254 100644 --- a/scripts/diagrams/devices.py +++ b/scripts/diagrams/devices.py @@ -401,16 +401,16 @@ def _d_vibration_sound_power(s: SVG, th: Theme) -> None: fy = gy - ht dxo, dyo = dp * 0.72, dp * 0.55 - # Measurement grid: 5 x 4 cells on the top face (the Table 1 initial - # count for a 1-10 m2 surface), a dot per cell centre. + # Measurement grid: 5 x 2 cells on the top face (the Table 1 initial + # count N = 10 for a 1-10 m2 surface), a dot per cell centre. for i in range(1, 5): gx = fx0 + i * (2 * hw) / 5 s.line(gx, fy, gx + dxo, fy - dyo, th.muted, 1.0) - for f_row in (0.25, 0.5, 0.75): + for f_row in (0.5,): s.line(fx0 + dxo * f_row, fy - dyo * f_row, fx1 + dxo * f_row, fy - dyo * f_row, th.muted, 1.0) pts = [] - for r_ in (0.125, 0.375, 0.625, 0.875): + for r_ in (0.25, 0.75): for i in range(5): u = (i + 0.5) / 5 pts.append((fx0 + u * 2 * hw + r_ * dxo, fy - r_ * dyo)) @@ -418,8 +418,8 @@ def _d_vibration_sound_power(s: SVG, th: Theme) -> None: s.circle(px_, py_, 4, th.secondary) s.circle(px_, py_, 1.5, th.bg) # One accelerometer drawn explicitly, with its vibratory motion. - _accel(s, pts[15][0], pts[15][1] - 4) - _motion_arrows(s, pts[15][0], pts[15][1] - 46, 16, th.secondary) + _accel(s, pts[5][0], pts[5][1] - 4) + _motion_arrows(s, pts[5][0], pts[5][1] - 46, 16, th.secondary) s.text(250, 150, "Vibrating measurement surface S", 19, th.fg, bold=True) s.line(310, 160, 340, 228, th.muted, 1.0) @@ -442,9 +442,9 @@ def _d_vibration_sound_power(s: SVG, th: Theme) -> None: lx = 575.0 s.text(lx, 110, "Initial number of positions N", 19, th.fg, bold=True, anchor="start") - for y, txt in ((140, "S < 1 m² → 10"), - (166, "1 m² ≤ S ≤ 10 m² → 20"), - (192, "S > 10 m² → 2 S / S₀")): + for y, txt in ((140, "S < 1 m² → 5"), + (166, "1 m² ≤ S ≤ 10 m² → 10"), + (192, "S > 10 m² → S / S₀")): s.text(lx, y, txt, 16, th.fg, anchor="start", mono=True) s.text(lx, 220, "one accelerometer per cell of area S/N", 15, th.muted, anchor="start") diff --git a/scripts/diagrams/i18n.py b/scripts/diagrams/i18n.py index f063b735d..bdec3ba95 100644 --- a/scripts/diagrams/i18n.py +++ b/scripts/diagrams/i18n.py @@ -134,8 +134,11 @@ "nivel ajustado por impulsos sobre el tiempo de referencia (Nota 1)", "Vertical seat acceleration az(t)": "Aceleración vertical del asiento az(t)", - "band-limited per ISO 2631-1 (0.4 Hz to 100 Hz)": - "limitada en banda según ISO 2631-1 (0,4 Hz a 100 Hz)", + "conditioned per 5.1.3: HP 0.01 Hz (2nd order) / LP 80 Hz (4th order)": + "acondicionada según 5.1.3: PA 0,01 Hz (2.º orden) / PB 80 Hz " + "(4.º orden)", + "not the ISO 2631-1 0.4 Hz / 100 Hz filters": + "no los filtros de 0,4 Hz / 100 Hz de ISO 2631-1", "Spinal response Az(t) (clause 5.2, Formula 1/2)": "Respuesta de la columna Az(t) (cláusula 5.2, Fórmula 1/2)", "seat-to-spine transfer function H(f): 1 zero, 6 poles": @@ -416,18 +419,23 @@ "Random-incidence scattering in a reverberation room (ISO 17497-1)": "Dispersión a incidencia aleatoria en cámara reverberante (ISO 17497-1)", "Reverberation room": "Cámara reverberante", - "Turntable (test sample)": "Plataforma giratoria (probeta)", - "Rotating boom source": "Fuente en brazo giratorio", - "stationary → α_s": "estática → α_s", - "rotating → α_spec": "girando → α_spec", - "Stationary sample → α_s (Eq. 1) · rotating / averaged → α_spec (Eq. 4)": - "Probeta estática → α_s (Ec. 1) · girando / promediada → α_spec (Ec. 4)", + "Turntable and base plate": "Plataforma giratoria y placa base", + "sample on the plate for T2 and T4": + "probeta sobre la placa en T2 y T4", + "the only thing that moves": "lo único que se mueve", + # "≥ 1.0 m" (the turntable wall clearance) is already in the table above. + "fixed sources (≥ 2)": "fuentes fijas (≥ 2)", + "fixed microphones (≥ 3)": "micrófonos fijos (≥ 3)", + "T1 base plate, static · T2 sample, static → α_s (Eq. 1)": + "T1 placa base, estática · T2 probeta, estática → α_s (Ec. 1)", + "T3 base plate, rotating · T4 sample, rotating → α_spec (Eq. 4)": + "T3 placa base, girando · T4 probeta, girando → α_spec (Ec. 4)", "s = (α_spec − α_s) / (1 − α_s) (Eq. 5)": "s = (α_spec − α_s) / (1 − α_s) (Ec. 5)", - "α from 55.3·(V/S)·(1/cT) − 4(V/S)m (Sabine, Table 2 rows T1–T4)": - "α con 55,3·(V/S)·(1/cT) − 4(V/S)m (Sabine, filas T1–T4 de la Tabla 2)", - "Base-plate check: s_base ≤ Table 1 limit (Clause 6.2)": - "Placa base: s_base ≤ límite de la Tabla 1 (Cláusula 6.2)", + "α from 55.3·(V/S)·(1/cT) − 4(V/S)m · the base plate must pass the " + "Table 1 ceiling": + "α con 55,3·(V/S)·(1/cT) − 4(V/S)m · la placa base debe cumplir el " + "límite de la Tabla 1", # d16 - ISO 17497-2 free-field diffusion goniometer "Free-field diffusion goniometer (ISO 17497-2)": "Goniómetro de difusión en campo libre (ISO 17497-2)", @@ -535,6 +543,11 @@ "Flujo de formas de array en una operación por canal", "Open-plan office spatial decay of speech (ISO 3382-3)": "Caída espacial del habla en oficina diáfana (ISO 3382-3)", + "what open_plan_metrics returns": "lo que devuelve open_plan_metrics", + "Clause 4 also requires the average A-weighted background " + "noise Lp,A,B (Cl. 6.4)": + "La cláusula 4 exige además el ruido de fondo medio ponderado A " + "Lp,A,B (cl. 6.4)", "Measurement uncertainty from tables to expanded U (ISO 12999-1)": "Incertidumbre de medición: de las tablas a la U expandida (ISO 12999-1)", "Single-number sound-absorption rating (ISO 11654)": diff --git a/scripts/diagrams/materials.py b/scripts/diagrams/materials.py index aa908cac6..6cb4f96e1 100644 --- a/scripts/diagrams/materials.py +++ b/scripts/diagrams/materials.py @@ -223,37 +223,44 @@ def _d_scattering_reverb(s: SVG, th: Theme) -> None: s.ellipse(tx, tyc - 12, 82, 15, th.bg, th.secondary, 2.2) # test sample for hx in range(int(tx) - 60, int(tx) + 60, 12): # sample hatch s.line(hx, tyc - 10, hx + 10, tyc - 18, th.secondary, 1.0) - s.text(tx, gy + 22, "Turntable (test sample)", 17, th.fg, bold=True) + s.text(tx, gy + 22, "Turntable and base plate", 17, th.fg, bold=True) _rot_arrow(s, tx, tyc, 150, 205, 340, th.accent, 2.2, ry=26) - s.text(445, tyc + 6, "rotating → α_spec", 15, th.accent, anchor="start") - s.text(tx, tyc - 42, "stationary → α_s", 15, th.muted) - - # --- Rotating boom loudspeaker source (upper right) ------------------- - pvx, pvy = 560.0, 100.0 - spx, spy = 668.0, 202.0 - s.circle(pvx, pvy, 5, th.fg) - s.line(pvx, pvy, spx, spy, th.fg, 3) - s.rect(spx - 26, spy - 26, 40, 52, th.panel, th.primary, rx=6, sw=2) - s.circle(spx - 6, spy, 11, th.primary) - s.circle(spx - 6, spy, 4, th.bg) - _rot_arrow(s, pvx, pvy, 118, -18, 46, th.accent, 2.0) - s.text(spx + 8, spy + 46, "Rotating boom source", 18, th.fg, bold=True) - - # --- Microphone on a stand in the room -------------------------------- - s.mic(468.0, 246.0, gy, 1.0) - s.text(468.0, 234.0, "Microphone", 18, th.fg, bold=True) + s.text(tx, tyc - 70, "the only thing that moves", 15, th.accent) + s.text(tx, tyc - 46, "sample on the plate for T2 and T4", 15, th.muted) + # Wall clearance of the turntable rim. + s.line(78, 386, tx - 150, 386, th.muted, 1.4) + s.line(78, 380, 78, 392, th.muted, 1.4) + s.line(tx - 150, 380, tx - 150, 392, th.muted, 1.4) + s.text(106, 376, "≥ 1.0 m", 14, th.muted) + + # --- Two fixed loudspeaker positions (right) -------------------------- + for sx, sy, lab in ((648.0, 262.0, "S1"), (752.0, 296.0, "S2")): + s.rect(sx - 20, sy - 26, 40, 52, th.panel, th.primary, rx=6, sw=2) + s.circle(sx, sy, 11, th.primary) + s.circle(sx, sy, 4, th.bg) + s.line(sx, sy + 26, sx, gy, th.fg, 2.2) + s.line(sx - 14, gy, sx + 14, gy, th.fg, 2.2) + s.text(sx, sy - 34, lab, 17, th.fg, bold=True) + s.text(700, 196, "fixed sources (≥ 2)", 16, th.muted) + + # --- Three fixed microphone positions --------------------------------- + for mx, my, lab in ((452.0, 262.0, "M1"), (520.0, 286.0, "M2"), + (586.0, 310.0, "M3")): + s.mic(mx, my, gy, 1.0) + s.text(mx, my - 12, lab, 16, th.fg, bold=True) + s.text(470, 226, "fixed microphones (≥ 3)", 16, th.muted) # --- Governing relations ---------------------------------------------- for y, txt, col, bold in ( - (448, ("Stationary sample → α_s (Eq. 1) · " - "rotating / averaged → α_spec (Eq. 4)"), th.fg, True), - (478, "s = (α_spec − α_s) / (1 − α_s) (Eq. 5)", th.accent, True), - (508, ("α from 55.3·(V/S)·(1/cT) − 4(V/S)m " - "(Sabine, Table 2 rows T1–T4)"), th.muted, False), - (534, "Base-plate check: s_base ≤ Table 1 limit (Clause 6.2)", - th.muted, False), + (448, ("T1 base plate, static · T2 sample, static → α_s (Eq. 1)"), + th.fg, True), + (474, ("T3 base plate, rotating · T4 sample, rotating → " + "α_spec (Eq. 4)"), th.fg, True), + (502, "s = (α_spec − α_s) / (1 − α_s) (Eq. 5)", th.accent, True), + (528, ("α from 55.3·(V/S)·(1/cT) − 4(V/S)m · the base plate must " + "pass the Table 1 ceiling"), th.muted, False), ): - s.text(450, y, txt, 19 if bold else 18, col, bold=bold) + s.text(450, y, txt, 19 if bold else 17, col, bold=bold) # --------------------------------------------------------------------------- diff --git a/scripts/diagrams/vibration.py b/scripts/diagrams/vibration.py index ccd284350..9932efdfd 100644 --- a/scripts/diagrams/vibration.py +++ b/scripts/diagrams/vibration.py @@ -85,9 +85,12 @@ def _d_multiple_shock(s: SVG, th: Theme) -> None: s.rect(x0, 48, bw, bh, th.panel, th.fg, rx=10, sw=2) s.text(cx, 72, "Vertical seat acceleration az(t)", 19, th.fg, "middle", bold=True) - s.text(cx, 92, "band-limited per ISO 2631-1 (0.4 Hz to 100 Hz)", 13, - th.muted, "middle") + s.text(cx, 92, + "conditioned per 5.1.3: HP 0.01 Hz (2nd order) / LP 80 Hz " + "(4th order)", 13, th.muted, "middle") s.arrow(cx, 106, cx, 136, th.fg, 1.8) + s.text(cx - 26, 128, "not the ISO 2631-1 0.4 Hz / 100 Hz filters", 12, + th.secondary, "end") def _step(y: float, l1: str, l2: str, color: str) -> None: s.rect(x0, y, bw, bh, th.panel, color, rx=10, sw=2) diff --git a/scripts/figures/building_design.py b/scripts/figures/building_design.py index fcca755de..a5ce9d5f9 100644 --- a/scripts/figures/building_design.py +++ b/scripts/figures/building_design.py @@ -459,11 +459,14 @@ def generate_installed_structure_borne(output_dir: str) -> None: yi = (3.0e-5 + 1.0e-5j) * np.ones_like(bands) dc = np.array([float(coupling_term(a, b)) for a, b in zip(ys, yi)]) lws_inst = installed_structure_borne_power_level(lws_c, dc) + # Dsa is negative and falls with frequency (Annex F.2, Formula F.3); the + # standard's own Annex I columns run from about -14 dB at 63 Hz to -45 dB + # at 2 kHz. It enters Formula (18a) with a minus sign. paths = [ - {"adjustment_term": 6.0, + {"adjustment_term": np.array([-14., -17., -20., -25., -30., -35., -40.]), "flanking_reduction_index": np.array([44., 47., 50., 53., 56., 59., 62.]), "element_area": 12.0}, - {"adjustment_term": 7.0, + {"adjustment_term": np.array([-16., -19., -23., -28., -33., -38., -43.]), "flanking_reduction_index": np.array([46., 49., 52., 55., 58., 61., 64.]), "element_area": 9.0}, ] diff --git a/site/public/llms/llms-aircraft.txt b/site/public/llms/llms-aircraft.txt index fc40e0121..94e459ec0 100644 --- a/site/public/llms/llms-aircraft.txt +++ b/site/public/llms/llms-aircraft.txt @@ -9,12 +9,14 @@ Source: https://jmrplens.github.io/phonometry/aircraft/ # Aircraft noise -Aircraft are noise sources important enough to have their own internationally -negotiated metrics, each fixed to the last decimal by a certification -framework. The four pages of this section implement those frameworks, and -they share a common anatomy: a rigorously standardised **source descriptor**, -plus standardised **propagation adjustments** that place the source at a -receiver. +Aircraft noise is computed under internationally negotiated methods of two +kinds. **Certification** fixes a single number per aircraft type to the last +decimal, at reference points a standard places around the runway. **Contour +methods** take that certified fleet and predict what an airport does to the +ground around it. The four pages of this section cover both, and they share a +common anatomy: a rigorously standardised **source descriptor** — a spectral +time history, a noise-power-distance table or a noise hemisphere — plus +standardised **propagation adjustments** that place the source at a receiver. [Aircraft noise: Effective Perceived Noise Level](https://jmrplens.github.io/phonometry/aircraft/aircraft-noise/) covers fixed-wing certification. The **EPNL** of ICAO Annex 16 condenses a @@ -52,6 +54,25 @@ sound power level and tonal-audibility chain answer the same question for a source that is not an aircraft. That tonality test is in turn a cousin of the methods in [Psychoacoustics](https://jmrplens.github.io/phonometry/perception/psychoacoustics/). +Start from the question. To check an aeroplane against a certification limit, +or to understand where the published numbers for a type come from, start with +the EPNL page. To predict what a movement does at a street address, use the +Doc 29 page, with the ANP page supplying the aircraft data. For helicopters the +hemisphere page replaces both. Read the fixed-wing pages in that order: the EPNL +page defines the certified metric, the Doc 29 page turns certified aeroplanes +into ground contours from tables written by hand, and the ANP page replaces +those hand-written tables with the published fleet data. The rotorcraft page +stands on its own — a different standard and a different source model — and can +be read first if helicopters are what you came for. + +The three metrics are not interchangeable. EPNL is a *certification* metric of +one aeroplane at one prescribed point; SEL and LASmax are *single-event* +assessment metrics at an arbitrary receiver; neither is the long-term index a +land-use study is finally judged on. And the boundary: this section does not +compute cumulative multi-event indices, does not synthesise NPD tables from +engine data, does not model hover, idle or taxi rotorcraft operations, and does +not touch sonic boom. + ## Pages in this section - [Aircraft noise: Effective Perceived Noise Level](https://jmrplens.github.io/phonometry/aircraft/aircraft-noise/): diff --git a/site/public/llms/llms-buildings-design.txt b/site/public/llms/llms-buildings-design.txt index 594a89c5f..011707079 100644 --- a/site/public/llms/llms-buildings-design.txt +++ b/site/public/llms/llms-buildings-design.txt @@ -39,14 +39,42 @@ double wall, transmission through slits and apertures, plate radiation efficiency and point mobilities. It is the physics a catalogue value expresses in one number. -Two measurements feed the floor half of any design. +Two pages here carry the floor half of any design, one measuring and one +predicting. [Floor-Covering Impact Improvement (ISO 16251-1)](https://jmrplens.github.io/phonometry/buildings/design/impact-improvement/) -gives the weighted improvement $\Delta L_w$ of a soft covering on a small -heavyweight mock-up, the term EN 12354-2 subtracts from the bare-floor level, -and -[Dynamic stiffness of resilient materials (EN 29052-1)](https://jmrplens.github.io/phonometry/materials/resilient/dynamic-stiffness/) -gives the stiffness per unit area $s'$ of the resilient layer under a floating -floor, and with it the resonance frequency the whole improvement hangs on. +gives the weighted improvement $\Delta L_w$ of a covering that exists, on a +small heavyweight mock-up, and that is the term EN 12354-2 subtracts from the +bare-floor level. +[Predicting Resilient-Layer Performance](https://jmrplens.github.io/phonometry/buildings/design/resilient-layers/) +predicts it for a covering that does not yet exist, from the tapping machine's +own force spectrum, the cut-off frequency of a soft covering, the 30 lg and +40 lg floating-floor laws and the ISO 12354-1 Annex D rating of a wall lining. +Both start from the stiffness per unit area $s'$ of the resilient layer, +measured per EN 29052-1 in +[Dynamic stiffness of resilient materials](https://jmrplens.github.io/phonometry/materials/resilient/dynamic-stiffness/) +over in the materials section, which sets the resonance the whole improvement +hangs on. + +Building service equipment is a chain of its own, and the two pages only read +correctly in order. +[Structure-borne sound power of equipment (EN 15657)](https://jmrplens.github.io/phonometry/buildings/design/structure-borne-power/) +characterises a pump, fan or cistern by the power it injects into the +structure, measured on a reception plate of known dissipation and then made +plate-independent. +[Installed structure-borne sound (EN 12354-5)](https://jmrplens.github.io/phonometry/buildings/design/installed-structure-borne/) +takes that source description, loses part of it to the coupling term the source +and receiver mobilities set, and carries the rest to a room that may be several +junctions away. + +One bookkeeping note runs through the whole section: the family exists as +EN 12354:2000 and as ISO 12354:2017, and the two are not interchangeable in +every clause. The simplified models on +[Predicting Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/insulation-prediction/) +follow the 2000 text — including the tabulated flanking correction $K$ that the +2017 impact part replaced with explicit per-path formulae — while +[Detailed Per-Band Prediction](https://jmrplens.github.io/phonometry/buildings/design/detailed-prediction/) +follows the 2017 text. Check which edition your regulation calls up before +quoting a correction from either. ## Pages in this section diff --git a/site/public/llms/llms-buildings-insulation.txt b/site/public/llms/llms-buildings-insulation.txt index 9e3defaa5..0dbb1482b 100644 --- a/site/public/llms/llms-buildings-insulation.txt +++ b/site/public/llms/llms-buildings-insulation.txt @@ -15,8 +15,10 @@ characterised **in the laboratory**, where suppressed flanking isolates its direct transmission. That laboratory data feeds a **prediction** of how a whole building will perform, flanking paths included. The finished building is then **verified in the field**. At every stage the band spectrum is collapsed -to the **single number** regulations quote, and that collapse is one shared -engine rather than a step of any single method. +to the **single number** regulations quote, and for almost everything that +collapse is one shared reference-curve engine rather than a step of any single +method. The exception is the heavy-impact rating of ISO 717-2 Annex D, which +shifts no curve at all: it sums A-weighted band levels in energy. **Laboratory.** [Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/) covers @@ -39,6 +41,12 @@ and the two material measurements a floor design consumes. [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) covers the engineering-grade airborne and impact measurement in the building, its Clause 14 test report and the ISO 12999-1 uncertainty that qualifies it. +The same standard specifies two more impact sources, a rubber ball and a bang +machine, for the slow low-frequency thumps a tapping machine says nothing +about; +[Heavy and Soft Impact Sources (ISO 16283-2)](https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/) +covers their specification, the Fast-weighted standardization of the maximum +level and the Annex D rating. When the question does not deserve that effort, [Sound Insulation Survey Method (ISO 10052)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-survey/) trades accuracy for speed with octave bands and a reverberation index. @@ -1574,7 +1582,7 @@ Sabine absorption area $A = 0.16\ V/T$. ## Standards -ISO 16283-1:2014 and ISO 16283-2:2015, *Acoustics — Field measurement of +ISO 16283-1:2014 and ISO 16283-2:2020, *Acoustics — Field measurement of sound insulation in buildings and of building elements*: the airborne and impact level differences, their normalisations and the Clause 14 test report; ISO 12999-1:2020, which tabulates the standard uncertainties per measurement @@ -1611,6 +1619,278 @@ ISO 16283 family (ISO 16283-3:2016) has its own page. --- + +Source: https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/ + +# Heavy and Soft Impact Sources (ISO 16283-2) + +The ISO tapping machine is a *light* impact source. Its five 500 g hammers fall +40 mm and produce a hard, quasi-stationary excitation whose energy sits well +above 100 Hz, which is exactly where a bare concrete slab already performs +well. The impacts people actually complain about, a child jumping off a chair +or an adult walking barefoot on a timber floor, are slow, soft and +low-frequency, and the tapping machine says almost nothing about them. The +**standard heavy impact sources** were introduced to close that gap: a hollow +silicone **rubber ball** dropped from 1 m, and the **bang machine**, a car tyre +dropped from 85 cm. This guide covers their normative specification, the +laboratory verification of a source against it, the standardization of the +maximum level in the receiving room, and the A-weighted single number. The +tapping-machine chain lives in +[Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) and +[Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/). + +Two panels: the octave-band impact force exposure levels of the rubber ball and the bang machine with their printed tolerance bands from 31.5 Hz to 500 Hz, and the ISO 717-2 Annex D rating of a field measurement showing the measured octave levels, their A-weighted contributions and the resulting single number + +*Left: the two source specifications are pure spectra of force, not geometry. +Right: the rating adds the A-weighted band contributions in energy, so the +63 Hz band decides almost everything.* + +## Both sources are specified by the energy of their force pulse + +A heavy source is not defined by its shape but by the **impact force exposure +level** it delivers into a rigid floor (ISO 16283-2:2020 Formula (A.1) = +JIS A 1418-2:2019 Formula (1)): + +$$ +L_{FE} = 10\log_{10}\!\left[\frac{1}{T_\text{ref}} +\int_{t_1}^{t_2}\frac{F^2(t)}{F_0^2}\,\mathrm{d}t\right]\ \text{dB re 1 N}, +$$ + +with $F_0 = 1$ N, $T_\text{ref} = 1$ s and $t_2 - t_1$ the duration of the +impact. Both characteristics require a **single-peak** waveform of +$20 \pm 2$ ms (JIS A 1418-2:2019 A.2 b)). The octave-band values are printed +identically in ISO 16283-2:2020 Table A.1, ISO 10140-5:2010 Table F.1 and +JIS A 1418-2:2019 Table A.2 for the ball; the bang machine appears only in +JIS A 1418-2:2019 Table A.1. + +| Octave (Hz) | Rubber ball $L_{FE}$ (dB re 1 N) | Bang machine $L_{FE}$ (dB re 1 N) | +|---|---|---| +| 31.5 | 39.0 ± 1.0 | 47.0 ± 1.0 | +| 63 | 31.0 ± 1.5 | 40.0 ± 1.5 | +| 125 | 23.0 ± 1.5 | 22.0 ± 1.5 | +| 250 | 17.0 ± 2.0 | 11.5 ± 2.0 | +| 500 | 12.5 ± 2.0 | 5.5 ± 2.0 | + +The bang machine puts 8 dB more energy into the two lowest octaves and 7 dB +less into the top one, which is why the two sources are not interchangeable and +why a floor can pass one and fail the other. + +```python +from phonometry import ( + check_heavy_impact_source, + heavy_impact_source_limits, + heavy_impact_source_specification, + impact_force_exposure_level, +) + +spec = heavy_impact_source_specification("rubber_ball") +print(spec.drop_height, spec.effective_mass) # 1.0 m, 2.5 kg +print(spec.contact_time, spec.contact_time_tolerance) # 0.02 s +/- 0.002 s + +freqs, lower, upper = heavy_impact_source_limits("bang_machine") +print(list(zip(freqs, lower, upper))[0]) # (31.5, 46.0, 48.0) + +# A calibration run: five measured octave-band LFE against the printed table. +check = check_heavy_impact_source([39.4, 30.2, 23.6, 18.5, 12.9]) +print(check.passed, list(check.within_tolerance)) +check.plot() # measured LFE over the tolerance band (needs matplotlib) +``` + +`impact_force_exposure_level` evaluates Formula (A.1) directly from a sampled +force record, which is what the JIS A 1418-2 Annex C calibration procedure +measures with a force plate. The specification is stated **per octave band**, +and Annex C puts the filter between the transducer and the analyser, so the +record is band-filtered first and the formula is applied once per band: an +unfiltered pulse returns the broadband level, which is several decibels above +any single band value and must not be compared with the table above. + +```python +import numpy as np +from phonometry import OctaveFilterBank, impact_force_exposure_level + +fs = 48_000 +t = np.arange(0.0, 0.020, 1.0 / fs) # the 20 ms contact time +force = 1500.0 * np.sin(np.pi * t / 0.020) # a single-peak half-sine pulse + +# Broadband, i.e. the whole pulse energy: 10 lg(Fp^2 t / 2) = 43.5 dB. +# Not a band value, and not comparable with the table above. +print(round(impact_force_exposure_level(force, fs), 2)) + +# The five octave-band values the specification is actually written in. +bank = OctaveFilterBank(fs, fraction=1, limits=[31.5, 500.0]) +_, freqs, bands = bank.filter(force, sigbands=True, calculate_level=False) +lfe = [impact_force_exposure_level(b, fs) for b in bands] +print([round(v, 1) for v in lfe]) # [-1.4, 14.0, 22.1, 20.2, 17.1] + +# Those five go to the conformance check; this synthetic half-sine is not a +# rubber ball, so it does not conform: +# check_heavy_impact_source(lfe).passed -> False +``` + +The construction examples the two standards give are informative, not +normative: a hollow silicone ball of 180 mm outer diameter with a 30 mm wall, +effective mass $(2.5 \pm 0.1)$ kg and coefficient of restitution +$0.8 \pm 0.1$, dropped from $(100 \pm 1)$ cm measured from the bottom of the +ball; and a car tyre inflated to $(2.4 \pm 0.2)\times 10^5$ Pa with an +effective mass of $(7.3 \pm 0.2)$ kg, dropped from 85 cm. + +## The receiving room: a maximum level cannot be corrected like an average + +The rated quantity is a **maximum** of a Fast time-weighted level, not an +energy average, so the usual $10\log_{10}(T/T_0)$ standardization is wrong: a Fast +detector never integrates more than about 1.7 s of decay, so the correction has +to saturate. ISO 16283-2:2020 (definition 3.16, Formulae (4), (5) and (6)) +therefore uses + +$$ +L'_{i,F\max,V,T} = L_{i,F\max} + 10\log_{10}\frac{V}{V_0} +- 10\log_{10}\frac{g(C)}{g(C_0)},\qquad +C = \frac{T}{1{,}7275},\quad C_0 = \frac{T_0}{1{,}7275}, +$$ + +with $T_0 = 0{,}5$ s, $V_0 = 50\ \text{m}^3$ for dwellings and, writing +Formula (4) compactly, + +$$ +g(C) = \frac{C^{1/(1-C)} - C^{-1/(1-1/C)}}{1 - 1/C}. +$$ + +$g$ is the peak of the Fast-weighted response to an exponentially decaying +burst. It has a removable singularity at $C = 1$ (i.e. $T = 1{,}7275$ s) where +its value is $1/e$. When $T = T_0$ the bracket collapses to 1 and the whole +correction reduces to the volume term, as it must. + +```python +from phonometry import ( + fast_reverberation_correction, + heavy_impact_octave_levels, + standardized_maximum_impact_level, +) + +freqs = [63.0, 125.0, 250.0, 500.0] +li_fmax = [65.3, 64.5, 58.0, 55.8] # energy-averaged over ball positions +t = [1.43, 3.70, 3.10, 2.38] # receiving-room reverberation time + +res = standardized_maximum_impact_level(li_fmax, 41.4, t, frequency=freqs) +print(res.volume_term) # 10 lg(41.4/50) = -0.8 dB +print(fast_reverberation_correction([0.5])) # exactly 0 dB at T = T0 +res.plot() # measured and standardized spectra (needs matplotlib) + +# One-third-octave measurements combine into octaves with Formula (20): +print(heavy_impact_octave_levels([60.0] * 6)) # +10 lg 3 dB per octave +``` + +## The single number is an A-weighted sum, not a shifted curve + +ISO 717-2:2020 Annex D is normative and does not use a reference curve at all. +The rating is an energy sum of A-weighted band levels (Formula (D.1)): + +$$ +X_{iA,F\max} = 10\log_{10}\!\left(\sum_j 10^{(X_{i,F\max,j} + A_j)/10}\right), +$$ + +over the one-third-octave bands 50 Hz to 630 Hz **or** the octave bands 63 Hz +to 500 Hz, with the Table D.3 corrections $A_j$, rounded half-up to an integer. +A one-third-octave measurement is rated in one-third octaves; the standard +warns explicitly against summing thirds into octaves first, because the two +routes do not give the same answer. The same formula rates all four quantities +of Tables D.1 and D.2: $L_{iA,F\max}$, $L_{iA,F\max,V,T}$, $L'_{iA,F\max}$ and +$L'_{iA,F\max,V,T}$. + +The worked example of Table D.4 is reproduced exactly, including the +deliberately unrounded intermediate the standard prints: + +```python +from phonometry import a_weighted_maximum_impact_level + +# ISO 717-2:2020 Table D.4: a field measurement in octave bands. +res = a_weighted_maximum_impact_level([65.3, 64.5, 58.0, 55.8]) +print(list(res.corrected)) # 39.1, 48.3, 49.3, 52.6 dB +print(res.unrounded) # 55.350667... dB +print(res.rating) # 55 dB +res.plot() # band levels, A-weighted contributions, rating +``` + +Because the A-weighting is 23 dB steeper at 63 Hz than at 500 Hz, a heavy +source's rating is dominated by whichever band survives that slope. For the +Table D.4 spectrum the four A-weighted contributions are 39.1, 48.3, 49.3 and +52.6 dB, so the 500 Hz band carries the most weight even though 63 Hz is the +loudest band by 10 dB. + +## What this guide covers + +**Covered.** The impact force exposure level of ISO 16283-2:2020 +Formula (A.1) from a sampled force record, via +`building.impact_force_exposure_level`; the printed octave-band specifications +of ISO 16283-2:2020 Table A.1 / ISO 10140-5:2010 Table F.1 (rubber ball) and +JIS A 1418-2:2019 Tables A.1 and A.2 (both characteristics) with their +tolerances, via `building.heavy_impact_source_specification`, +`building.heavy_impact_source_limits` and +`building.check_heavy_impact_source`; the standardized maximum impact sound +pressure level of Formulae (4), (5) and (6) and the octave synthesis of +Formula (20), via `building.standardized_maximum_impact_level`, +`building.fast_reverberation_correction` and +`building.heavy_impact_octave_levels`; and the normative A-weighted rating of +ISO 717-2:2020 Annex D with the Table D.3 corrections, via +`building.a_weighted_maximum_impact_level`. + +**Not covered.** The field measurement procedure itself (the four or more +drop positions of ISO 10140-3 Annex A, the microphone positions and the +low-frequency corner procedure) is not automated: the functions consume levels +that were already energy-averaged over positions. There is no prediction model +that takes a floor construction to a heavy-impact level; Hopkins states +plainly that the complexity of the input force and the use of a +time-weighted maximum leave no simple counterpart to the tapping-machine +prediction. No accredited worked example exists anywhere that carries a real +floor from measured $L_{i,F\max}$ through to $L'_{iA,F\max,V,T}$, so the +standardization chain is anchored on its own $T = T_0$ identity and on a +published 25-band reproduction of Formula (4). + +## References + +- ISO 16283-2:2020, *Acoustics — Field measurement of sound insulation in + buildings and of building elements — Part 2: Impact sound insulation*. + Definition 3.16 and Formulae (4), (5), (6), (9), (15) and (20); Annex A.2 + (rubber ball) with Table A.1 and Formula (A.1). +- ISO 10140-5:2010, *Acoustics — Laboratory measurement of sound insulation of + building elements — Part 5: Requirements for test facilities and equipment*. + Annex F (normative): F.1 the modified tapping machine, F.2 the rubber ball + with Table F.1. +- ISO 10140-3:2010, Annex A (informative), *Measurement using heavy and soft + impact sources*. +- JIS A 1418-2:2019, *Acoustics — Measurement of floor impact sound insulation + of buildings — Part 2: Method using standard heavy impact sources*. + Annex A (normative) with Tables A.1 and A.2, Annex B (informative) + construction examples, Annex C (informative) force calibration. +- ISO 717-2:2020, *Acoustics — Rating of sound insulation in buildings and of + building elements — Part 2: Impact sound insulation*. Annex D (normative), + Formula (D.1), Tables D.1 to D.4. +- Hopkins, C. (2007). *Sound Insulation*. Butterworth-Heinemann, Section 3.6.4. + +## Standards + +| Standard | Scope in this guide | +|---|---| +| ISO 16283-2:2020 | Field measurement with the rubber ball: the source spectrum (Annex A) and the standardized maximum level (Formulae (4) to (6), (20)) | +| ISO 10140-5:2010 | Laboratory requirements: Annex F, the heavy and soft impact sources | +| ISO 10140-3:2010 | Laboratory measurement with heavy and soft sources (Annex A) | +| JIS A 1418-2:2019 | Both impact force characteristics with their tolerances and construction examples | +| ISO 717-2:2020 | Annex D, the A-weighted maximum impact sound pressure level | + +## See also + +- [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/): the + tapping-machine chain of the same standard. +- [Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/): the ISO 10140 + laboratory suite the heavy sources extend. +- [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/): the reference-curve + engine that rates the tapping-machine quantities. +- [Floor-Covering Impact Improvement (ISO 16251-1)](https://jmrplens.github.io/phonometry/buildings/design/impact-improvement/): + the improvement a soft covering gives against the light source. + +--- + + Source: https://jmrplens.github.io/phonometry/buildings/insulation/insulation-survey/ @@ -3077,415 +3357,143 @@ $L'_{nT,w}$ must not exceed 65 dB in a protected room against a room of another use unit, nor 60 dB against a services or activity room; that same 60 dB limit applies to the habitable room. -**Reverberation and absorption (clause 2.2).** The reverberation time must not -exceed 0.7 s in an empty classroom or conference hall under 350 m³, 0.5 s with -the fixed seating installed, or 0.9 s in empty restaurants and dining rooms. In -common areas sharing doors with protected rooms, the equivalent sound -absorption area must be at least 0.2 m² per cubic metre of volume. - -```python -from phonometry import building - -facade = building.db_hr_facade_requirement(65.0, "residential", "bedrooms") -facade.limit # 32 dBA (Table 2.1) - -airborne = building.db_hr_airborne_requirement("protected", "other_unit") -[(r.quantity, r.limit) for r in airborne] # [("DnT,A", 50.0)] - -building.db_hr_impact_requirement("protected", "other_unit").limit # 65 dB -building.db_hr_party_wall_requirement().limit # 40 dBA per leaf -building.db_hr_party_wall_requirement("DnT,A").limit # 50 dBA both together -building.db_hr_reverberation_requirement("classroom").limit # 0.7 s - -check = building.assess_db_hr([(33.0, facade), (51.44, airborne[0])]) -check.complies # True -``` - -`check_db_hr_requirement()` rounds the achieved value the way DB-HR asks before -comparing it (to an integer for the dB quantities, to one decimal for the -reverberation time) and returns the margin; `assess_db_hr()` does the same over -a list of value-requirement pairs. - -## Windows and composite facades - -The tests that determine the sound reduction index of a window are run on -specimens of about 1.8 m², and a larger window insulates less. The *Catálogo de -Elementos Constructivos* of the building code corrects the catalogue value of -$R_A$ and $R_{A,tr}$ by total window area: 0 dB up to 2.7 m², $-1$ dB between -2.7 and 3.6 m², $-2$ dB between 3.6 and 4.6 m² and $-3$ dB above 4.6 m². A 4 m² -sliding window with 4-6-4 glazing, catalogued at $R_A = 26$ dBA, ends up at -24 dBA (Ejemplo 7.4). - -A real facade is not a homogeneous element: it has a blind part and one or more -openings. The sound reduction index of the whole follows from the -area-weighted sum of the transmittances, which is what -`composite_transmission_loss()` does in -[Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/). With the 8 m² -facade of Ejemplo 7.5, a blind part of 40 dBA and a 2 m² window of 26 dBA, the -whole comes out at 31.5 dBA: - -```python -from phonometry import building -from phonometry.building.prediction.aperture_transmission import composite_transmission_loss - -building.window_size_correction(4.0) # -2 dB: 26 dBA catalogued -> 24 dBA - -composite_transmission_loss([6.0, 2.0], [40.0, 26.0]) # 31.53 dBA -composite_transmission_loss([6.0, 2.0], [50.0, 26.0]) # 31.97 dBA: +10 dBA on the blind part -composite_transmission_loss([6.0, 2.0], [40.0, 31.0]) # 35.63 dBA: +5 dBA on the window -``` - -Those last three lines hold the most useful rule of thumb in facade design: -improving the blind part by 10 dBA raises the overall insulation by 0.4 dBA, -practically nothing, whereas improving the window by 5 dBA raises it by -4.1 dBA, almost the full increment. The weak element is where the effort pays. - -## Plots - -`DbHrGlobalIndexResult.plot()` draws the band insulation together with the -transmitted level weighted by the normalised spectrum, as in the figure above: -it shows at a glance which bands dominate the energy sum, and therefore where -the element has to be improved. `DbHrAssessment.plot()` draws the achieved -values against their limits, one per checked requirement. - -## What this guide covers - -**Covered.** The DB-HR Annex A global index (Formulae A.5 to A.7) over the -eighteen bands from 100 Hz to 5 kHz with the four normalised spectra of Tables -A.2 to A.5, the rounding of clause 3.1.3.1 point 4, the requirements of clause -2 (Table 2.1 for facades, 2.1.1 airborne and party walls, 2.1.2 impact and 2.2 -reverberation and absorption) and the window-size correction of the *Catálogo -de Elementos Constructivos*. - -**Not covered.** The design options of clause 3 (the simplified option with its -solution tables, and the general option, which is the EN 12354 prediction) are -not implemented here: the calculation route of the general option lives in -[Predicting Sound Insulation (EN 12354)](https://jmrplens.github.io/phonometry/buildings/design/insulation-prediction/). The -execution conditions of clause 5 and the maintenance conditions of clause 6 -are out of scope as well. - -## Quick answers - -### How does the DB-HR index RA differ from the Rw of ISO 717-1? - -The $R_w$ of ISO 717-1 comes from shifting a reference curve over sixteen -one-third-octave bands (100 Hz to 3150 Hz). The $R_A$ of DB-HR comes from -weighting the band sound reduction index with a normalised pink-noise spectrum -and summing energetically over **eighteen** bands (100 Hz to 5 kHz). DB-HR -accepts the equivalence $R_A \approx R_w + C$, but that $C$ is the -enlarged-range term $C_{100-5000}$, not the core-range one. - -## See also - -- [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/): the reference-curve - route with $R_w$, $C$, $C_{tr}$ and the enlarged-range terms that DB-HR - calls simply $C$ and $C_{tr}$. -- [Spanish Noise Regulation (RD 1367/2007)](https://jmrplens.github.io/phonometry/environment/assessment/spanish-noise-regulation/): where - the site's day noise index $L_d$ that Table 2.1 is entered with comes from. -- [Façade Sound Insulation](https://jmrplens.github.io/phonometry/buildings/insulation/facade-insulation/): the ISO 16283-3 measurement - of $D_{2m,nT}$ and its EN 12354-3 prediction, which feed the $D_{2m,nT,Atr}$ index of - this page. -- [Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/): the - composite-facade calculation and transmission through openings and slits. -- [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/): the band - spectra of $R'$, $D_{nT}$ and $L'_{nT}$ that these global quantities summarise. -- API reference: [`building.regulation.spain`](https://jmrplens.github.io/phonometry/reference/api/building/spain/). - -## References - -- Avilés López, R., & Perera Martín, R. (2017). *Manual de acústica ambiental - y arquitectónica*. Paraninfo. ISBN 978-84-283-3814-1. - Ejemplo 7.2 and Ejercicio 7.1 (pp. 394-395) are the numeric oracles of the - global index on this page, and Ejemplos 7.4 and 7.5 (pp. 408-410) the - window-size correction and the composite-facade calculation. -- Ministerio de la Presidencia (Spain). (2007). *Real Decreto 1367/2007, - developing Ley 37/2003 del Ruido on acoustic zoning, quality objectives and - acoustic emissions* (BOE-A-2007-18397). - [BOE consolidated text](https://www.boe.es/buscar/act.php?id=BOE-A-2007-18397). - The source of the day noise index $L_d$ that Table 2.1 of DB-HR is read - against. - -## Standards - -CTE Documento Básico HR *Protección frente al ruido*, the noise part of the -Spanish building code: -[codigotecnico.org](https://www.codigotecnico.org/pdf/Documentos/HR/DBHR.pdf). -The Annex A global index (Formulae A.5 to A.7) over the eighteen bands 100 Hz -to 5 kHz with the normalised spectra of Tables A.2 to A.5, the rounding rule of -clause 3.1.3.1 point 4, and the requirements of clause 2: Table 2.1 for -facades, 2.1.1 for airborne insulation and party walls, 2.1.2 for impact sound -and 2.2 for reverberation and absorption. - ---- - - - -Source: https://jmrplens.github.io/phonometry/buildings/insulation/heavy-impact-sources/ - -# Heavy and Soft Impact Sources (ISO 16283-2) - -The ISO tapping machine is a *light* impact source. Its five 500 g hammers fall -40 mm and produce a hard, quasi-stationary excitation whose energy sits well -above 100 Hz, which is exactly where a bare concrete slab already performs -well. The impacts people actually complain about, a child jumping off a chair -or an adult walking barefoot on a timber floor, are slow, soft and -low-frequency, and the tapping machine says almost nothing about them. The -**standard heavy impact sources** were introduced to close that gap: a hollow -silicone **rubber ball** dropped from 1 m, and the **bang machine**, a car tyre -dropped from 85 cm. This guide covers their normative specification, the -laboratory verification of a source against it, the standardization of the -maximum level in the receiving room, and the A-weighted single number. The -tapping-machine chain lives in -[Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/) and -[Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/). - -Two panels: the octave-band impact force exposure levels of the rubber ball and the bang machine with their printed tolerance bands from 31.5 Hz to 500 Hz, and the ISO 717-2 Annex D rating of a field measurement showing the measured octave levels, their A-weighted contributions and the resulting single number - -*Left: the two source specifications are pure spectra of force, not geometry. -Right: the rating adds the A-weighted band contributions in energy, so the -63 Hz band decides almost everything.* - -## Both sources are specified by the energy of their force pulse - -A heavy source is not defined by its shape but by the **impact force exposure -level** it delivers into a rigid floor (ISO 16283-2:2020 Formula (A.1) = -JIS A 1418-2:2019 Formula (1)): - -$$ -L_{FE} = 10\log_{10}\!\left[\frac{1}{T_\text{ref}} -\int_{t_1}^{t_2}\frac{F^2(t)}{F_0^2}\,\mathrm{d}t\right]\ \text{dB re 1 N}, -$$ - -with $F_0 = 1$ N, $T_\text{ref} = 1$ s and $t_2 - t_1$ the duration of the -impact. Both characteristics require a **single-peak** waveform of -$20 \pm 2$ ms (JIS A 1418-2:2019 A.2 b)). The octave-band values are printed -identically in ISO 16283-2:2020 Table A.1, ISO 10140-5:2010 Table F.1 and -JIS A 1418-2:2019 Table A.2 for the ball; the bang machine appears only in -JIS A 1418-2:2019 Table A.1. - -| Octave (Hz) | Rubber ball $L_{FE}$ (dB re 1 N) | Bang machine $L_{FE}$ (dB re 1 N) | -|---|---|---| -| 31.5 | 39.0 ± 1.0 | 47.0 ± 1.0 | -| 63 | 31.0 ± 1.5 | 40.0 ± 1.5 | -| 125 | 23.0 ± 1.5 | 22.0 ± 1.5 | -| 250 | 17.0 ± 2.0 | 11.5 ± 2.0 | -| 500 | 12.5 ± 2.0 | 5.5 ± 2.0 | - -The bang machine puts 8 dB more energy into the two lowest octaves and 7 dB -less into the top one, which is why the two sources are not interchangeable and -why a floor can pass one and fail the other. - -```python -from phonometry import ( - check_heavy_impact_source, - heavy_impact_source_limits, - heavy_impact_source_specification, - impact_force_exposure_level, -) - -spec = heavy_impact_source_specification("rubber_ball") -print(spec.drop_height, spec.effective_mass) # 1.0 m, 2.5 kg -print(spec.contact_time, spec.contact_time_tolerance) # 0.02 s +/- 0.002 s - -freqs, lower, upper = heavy_impact_source_limits("bang_machine") -print(list(zip(freqs, lower, upper))[0]) # (31.5, 46.0, 48.0) - -# A calibration run: five measured octave-band LFE against the printed table. -check = check_heavy_impact_source([39.4, 30.2, 23.6, 18.5, 12.9]) -print(check.passed, list(check.within_tolerance)) -check.plot() # measured LFE over the tolerance band (needs matplotlib) -``` - -`impact_force_exposure_level` evaluates Formula (A.1) directly from a sampled -force record, which is what the JIS A 1418-2 Annex C calibration procedure -measures with a force plate. The specification is stated **per octave band**, -and Annex C puts the filter between the transducer and the analyser, so the -record is band-filtered first and the formula is applied once per band: an -unfiltered pulse returns the broadband level, which is several decibels above -any single band value and must not be compared with the table above. +**Reverberation and absorption (clause 2.2).** The reverberation time must not +exceed 0.7 s in an empty classroom or conference hall under 350 m³, 0.5 s with +the fixed seating installed, or 0.9 s in empty restaurants and dining rooms. In +common areas sharing doors with protected rooms, the equivalent sound +absorption area must be at least 0.2 m² per cubic metre of volume. ```python -import numpy as np -from phonometry import OctaveFilterBank, impact_force_exposure_level +from phonometry import building -fs = 48_000 -t = np.arange(0.0, 0.020, 1.0 / fs) # the 20 ms contact time -force = 1500.0 * np.sin(np.pi * t / 0.020) # a single-peak half-sine pulse +facade = building.db_hr_facade_requirement(65.0, "residential", "bedrooms") +facade.limit # 32 dBA (Table 2.1) -# Broadband, i.e. the whole pulse energy: 10 lg(Fp^2 t / 2) = 43.5 dB. -# Not a band value, and not comparable with the table above. -print(round(impact_force_exposure_level(force, fs), 2)) +airborne = building.db_hr_airborne_requirement("protected", "other_unit") +[(r.quantity, r.limit) for r in airborne] # [("DnT,A", 50.0)] -# The five octave-band values the specification is actually written in. -bank = OctaveFilterBank(fs, fraction=1, limits=[31.5, 500.0]) -_, freqs, bands = bank.filter(force, sigbands=True, calculate_level=False) -lfe = [impact_force_exposure_level(b, fs) for b in bands] -print([round(v, 1) for v in lfe]) # [-1.4, 14.0, 22.1, 20.2, 17.1] +building.db_hr_impact_requirement("protected", "other_unit").limit # 65 dB +building.db_hr_party_wall_requirement().limit # 40 dBA per leaf +building.db_hr_party_wall_requirement("DnT,A").limit # 50 dBA both together +building.db_hr_reverberation_requirement("classroom").limit # 0.7 s -# Those five go to the conformance check; this synthetic half-sine is not a -# rubber ball, so it does not conform: -# check_heavy_impact_source(lfe).passed -> False +check = building.assess_db_hr([(33.0, facade), (51.44, airborne[0])]) +check.complies # True ``` -The construction examples the two standards give are informative, not -normative: a hollow silicone ball of 180 mm outer diameter with a 30 mm wall, -effective mass $(2.5 \pm 0.1)$ kg and coefficient of restitution -$0.8 \pm 0.1$, dropped from $(100 \pm 1)$ cm measured from the bottom of the -ball; and a car tyre inflated to $(2.4 \pm 0.2)\times 10^5$ Pa with an -effective mass of $(7.3 \pm 0.2)$ kg, dropped from 85 cm. - -## The receiving room: a maximum level cannot be corrected like an average - -The rated quantity is a **maximum** of a Fast time-weighted level, not an -energy average, so the usual $10\log_{10}(T/T_0)$ standardization is wrong: a Fast -detector never integrates more than about 1.7 s of decay, so the correction has -to saturate. ISO 16283-2:2020 (definition 3.16, Formulae (4), (5) and (6)) -therefore uses - -$$ -L'_{i,F\max,V,T} = L_{i,F\max} + 10\log_{10}\frac{V}{V_0} -- 10\log_{10}\frac{g(C)}{g(C_0)},\qquad -C = \frac{T}{1{,}7275},\quad C_0 = \frac{T_0}{1{,}7275}, -$$ +`check_db_hr_requirement()` rounds the achieved value the way DB-HR asks before +comparing it (to an integer for the dB quantities, to one decimal for the +reverberation time) and returns the margin; `assess_db_hr()` does the same over +a list of value-requirement pairs. -with $T_0 = 0{,}5$ s, $V_0 = 50\ \text{m}^3$ for dwellings and, writing -Formula (4) compactly, +## Windows and composite facades -$$ -g(C) = \frac{C^{1/(1-C)} - C^{-1/(1-1/C)}}{1 - 1/C}. -$$ +The tests that determine the sound reduction index of a window are run on +specimens of about 1.8 m², and a larger window insulates less. The *Catálogo de +Elementos Constructivos* of the building code corrects the catalogue value of +$R_A$ and $R_{A,tr}$ by total window area: 0 dB up to 2.7 m², $-1$ dB between +2.7 and 3.6 m², $-2$ dB between 3.6 and 4.6 m² and $-3$ dB above 4.6 m². A 4 m² +sliding window with 4-6-4 glazing, catalogued at $R_A = 26$ dBA, ends up at +24 dBA (Ejemplo 7.4). -$g$ is the peak of the Fast-weighted response to an exponentially decaying -burst. It has a removable singularity at $C = 1$ (i.e. $T = 1{,}7275$ s) where -its value is $1/e$. When $T = T_0$ the bracket collapses to 1 and the whole -correction reduces to the volume term, as it must. +A real facade is not a homogeneous element: it has a blind part and one or more +openings. The sound reduction index of the whole follows from the +area-weighted sum of the transmittances, which is what +`composite_transmission_loss()` does in +[Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/). With the 8 m² +facade of Ejemplo 7.5, a blind part of 40 dBA and a 2 m² window of 26 dBA, the +whole comes out at 31.5 dBA: ```python -from phonometry import ( - fast_reverberation_correction, - heavy_impact_octave_levels, - standardized_maximum_impact_level, -) - -freqs = [63.0, 125.0, 250.0, 500.0] -li_fmax = [65.3, 64.5, 58.0, 55.8] # energy-averaged over ball positions -t = [1.43, 3.70, 3.10, 2.38] # receiving-room reverberation time +from phonometry import building +from phonometry.building.prediction.aperture_transmission import composite_transmission_loss -res = standardized_maximum_impact_level(li_fmax, 41.4, t, frequency=freqs) -print(res.volume_term) # 10 lg(41.4/50) = -0.8 dB -print(fast_reverberation_correction([0.5])) # exactly 0 dB at T = T0 -res.plot() # measured and standardized spectra (needs matplotlib) +building.window_size_correction(4.0) # -2 dB: 26 dBA catalogued -> 24 dBA -# One-third-octave measurements combine into octaves with Formula (20): -print(heavy_impact_octave_levels([60.0] * 6)) # +10 lg 3 dB per octave +composite_transmission_loss([6.0, 2.0], [40.0, 26.0]) # 31.53 dBA +composite_transmission_loss([6.0, 2.0], [50.0, 26.0]) # 31.97 dBA: +10 dBA on the blind part +composite_transmission_loss([6.0, 2.0], [40.0, 31.0]) # 35.63 dBA: +5 dBA on the window ``` -## The single number is an A-weighted sum, not a shifted curve +Those last three lines hold the most useful rule of thumb in facade design: +improving the blind part by 10 dBA raises the overall insulation by 0.4 dBA, +practically nothing, whereas improving the window by 5 dBA raises it by +4.1 dBA, almost the full increment. The weak element is where the effort pays. -ISO 717-2:2020 Annex D is normative and does not use a reference curve at all. -The rating is an energy sum of A-weighted band levels (Formula (D.1)): +## Plots -$$ -X_{iA,F\max} = 10\log_{10}\!\left(\sum_j 10^{(X_{i,F\max,j} + A_j)/10}\right), -$$ +`DbHrGlobalIndexResult.plot()` draws the band insulation together with the +transmitted level weighted by the normalised spectrum, as in the figure above: +it shows at a glance which bands dominate the energy sum, and therefore where +the element has to be improved. `DbHrAssessment.plot()` draws the achieved +values against their limits, one per checked requirement. -over the one-third-octave bands 50 Hz to 630 Hz **or** the octave bands 63 Hz -to 500 Hz, with the Table D.3 corrections $A_j$, rounded half-up to an integer. -A one-third-octave measurement is rated in one-third octaves; the standard -warns explicitly against summing thirds into octaves first, because the two -routes do not give the same answer. The same formula rates all four quantities -of Tables D.1 and D.2: $L_{iA,F\max}$, $L_{iA,F\max,V,T}$, $L'_{iA,F\max}$ and -$L'_{iA,F\max,V,T}$. +## What this guide covers -The worked example of Table D.4 is reproduced exactly, including the -deliberately unrounded intermediate the standard prints: +**Covered.** The DB-HR Annex A global index (Formulae A.5 to A.7) over the +eighteen bands from 100 Hz to 5 kHz with the four normalised spectra of Tables +A.2 to A.5, the rounding of clause 3.1.3.1 point 4, the requirements of clause +2 (Table 2.1 for facades, 2.1.1 airborne and party walls, 2.1.2 impact and 2.2 +reverberation and absorption) and the window-size correction of the *Catálogo +de Elementos Constructivos*. -```python -from phonometry import a_weighted_maximum_impact_level +**Not covered.** The design options of clause 3 (the simplified option with its +solution tables, and the general option, which is the EN 12354 prediction) are +not implemented here: the calculation route of the general option lives in +[Predicting Sound Insulation (EN 12354)](https://jmrplens.github.io/phonometry/buildings/design/insulation-prediction/). The +execution conditions of clause 5 and the maintenance conditions of clause 6 +are out of scope as well. -# ISO 717-2:2020 Table D.4: a field measurement in octave bands. -res = a_weighted_maximum_impact_level([65.3, 64.5, 58.0, 55.8]) -print(list(res.corrected)) # 39.1, 48.3, 49.3, 52.6 dB -print(res.unrounded) # 55.350667... dB -print(res.rating) # 55 dB -res.plot() # band levels, A-weighted contributions, rating -``` +## Quick answers -Because the A-weighting is 23 dB steeper at 63 Hz than at 500 Hz, a heavy -source's rating is dominated by whichever band survives that slope. For the -Table D.4 spectrum the four A-weighted contributions are 39.1, 48.3, 49.3 and -52.6 dB, so the 500 Hz band carries the most weight even though 63 Hz is the -loudest band by 10 dB. +### How does the DB-HR index RA differ from the Rw of ISO 717-1? -## What this guide covers +The $R_w$ of ISO 717-1 comes from shifting a reference curve over sixteen +one-third-octave bands (100 Hz to 3150 Hz). The $R_A$ of DB-HR comes from +weighting the band sound reduction index with a normalised pink-noise spectrum +and summing energetically over **eighteen** bands (100 Hz to 5 kHz). DB-HR +accepts the equivalence $R_A \approx R_w + C$, but that $C$ is the +enlarged-range term $C_{100-5000}$, not the core-range one. -**Covered.** The impact force exposure level of ISO 16283-2:2020 -Formula (A.1) from a sampled force record, via -`building.impact_force_exposure_level`; the printed octave-band specifications -of ISO 16283-2:2020 Table A.1 / ISO 10140-5:2010 Table F.1 (rubber ball) and -JIS A 1418-2:2019 Tables A.1 and A.2 (both characteristics) with their -tolerances, via `building.heavy_impact_source_specification`, -`building.heavy_impact_source_limits` and -`building.check_heavy_impact_source`; the standardized maximum impact sound -pressure level of Formulae (4), (5) and (6) and the octave synthesis of -Formula (20), via `building.standardized_maximum_impact_level`, -`building.fast_reverberation_correction` and -`building.heavy_impact_octave_levels`; and the normative A-weighted rating of -ISO 717-2:2020 Annex D with the Table D.3 corrections, via -`building.a_weighted_maximum_impact_level`. +## See also -**Not covered.** The field measurement procedure itself (the four or more -drop positions of ISO 10140-3 Annex A, the microphone positions and the -low-frequency corner procedure) is not automated: the functions consume levels -that were already energy-averaged over positions. There is no prediction model -that takes a floor construction to a heavy-impact level; Hopkins states -plainly that the complexity of the input force and the use of a -time-weighted maximum leave no simple counterpart to the tapping-machine -prediction. No accredited worked example exists anywhere that carries a real -floor from measured $L_{i,F\max}$ through to $L'_{iA,F\max,V,T}$, so the -standardization chain is anchored on its own $T = T_0$ identity and on a -published 25-band reproduction of Formula (4). +- [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/): the reference-curve + route with $R_w$, $C$, $C_{tr}$ and the enlarged-range terms that DB-HR + calls simply $C$ and $C_{tr}$. +- [Spanish Noise Regulation (RD 1367/2007)](https://jmrplens.github.io/phonometry/environment/assessment/spanish-noise-regulation/): where + the site's day noise index $L_d$ that Table 2.1 is entered with comes from. +- [Façade Sound Insulation](https://jmrplens.github.io/phonometry/buildings/insulation/facade-insulation/): the ISO 16283-3 measurement + of $D_{2m,nT}$ and its EN 12354-3 prediction, which feed the $D_{2m,nT,Atr}$ index of + this page. +- [Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/): the + composite-facade calculation and transmission through openings and slits. +- [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/): the band + spectra of $R'$, $D_{nT}$ and $L'_{nT}$ that these global quantities summarise. +- API reference: [`building.regulation.spain`](https://jmrplens.github.io/phonometry/reference/api/building/spain/). ## References -- ISO 16283-2:2020, *Acoustics — Field measurement of sound insulation in - buildings and of building elements — Part 2: Impact sound insulation*. - Definition 3.16 and Formulae (4), (5), (6), (9), (15) and (20); Annex A.2 - (rubber ball) with Table A.1 and Formula (A.1). -- ISO 10140-5:2010, *Acoustics — Laboratory measurement of sound insulation of - building elements — Part 5: Requirements for test facilities and equipment*. - Annex F (normative): F.1 the modified tapping machine, F.2 the rubber ball - with Table F.1. -- ISO 10140-3:2010, Annex A (informative), *Measurement using heavy and soft - impact sources*. -- JIS A 1418-2:2019, *Acoustics — Measurement of floor impact sound insulation - of buildings — Part 2: Method using standard heavy impact sources*. - Annex A (normative) with Tables A.1 and A.2, Annex B (informative) - construction examples, Annex C (informative) force calibration. -- ISO 717-2:2020, *Acoustics — Rating of sound insulation in buildings and of - building elements — Part 2: Impact sound insulation*. Annex D (normative), - Formula (D.1), Tables D.1 to D.4. -- Hopkins, C. (2007). *Sound Insulation*. Butterworth-Heinemann, Section 3.6.4. +- Avilés López, R., & Perera Martín, R. (2017). *Manual de acústica ambiental + y arquitectónica*. Paraninfo. ISBN 978-84-283-3814-1. + Ejemplo 7.2 and Ejercicio 7.1 (pp. 394-395) are the numeric oracles of the + global index on this page, and Ejemplos 7.4 and 7.5 (pp. 408-410) the + window-size correction and the composite-facade calculation. +- Ministerio de la Presidencia (Spain). (2007). *Real Decreto 1367/2007, + developing Ley 37/2003 del Ruido on acoustic zoning, quality objectives and + acoustic emissions* (BOE-A-2007-18397). + [BOE consolidated text](https://www.boe.es/buscar/act.php?id=BOE-A-2007-18397). + The source of the day noise index $L_d$ that Table 2.1 of DB-HR is read + against. ## Standards -| Standard | Scope in this guide | -|---|---| -| ISO 16283-2:2020 | Field measurement with the rubber ball: the source spectrum (Annex A) and the standardized maximum level (Formulae (4) to (6), (20)) | -| ISO 10140-5:2010 | Laboratory requirements: Annex F, the heavy and soft impact sources | -| ISO 10140-3:2010 | Laboratory measurement with heavy and soft sources (Annex A) | -| JIS A 1418-2:2019 | Both impact force characteristics with their tolerances and construction examples | -| ISO 717-2:2020 | Annex D, the A-weighted maximum impact sound pressure level | - -## See also - -- [Field Insulation Measurement (ISO 16283)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-field/): the - tapping-machine chain of the same standard. -- [Laboratory Insulation Measurement](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-lab/): the ISO 10140 - laboratory suite the heavy sources extend. -- [Insulation Ratings (ISO 717)](https://jmrplens.github.io/phonometry/buildings/insulation/insulation-ratings/): the reference-curve - engine that rates the tapping-machine quantities. -- [Floor-Covering Impact Improvement (ISO 16251-1)](https://jmrplens.github.io/phonometry/buildings/design/impact-improvement/): - the improvement a soft covering gives against the light source. +CTE Documento Básico HR *Protección frente al ruido*, the noise part of the +Spanish building code: +[codigotecnico.org](https://www.codigotecnico.org/pdf/Documentos/HR/DBHR.pdf). +The Annex A global index (Formulae A.5 to A.7) over the eighteen bands 100 Hz +to 5 kHz with the normalised spectra of Tables A.2 to A.5, the rounding rule of +clause 3.1.3.1 point 4, and the requirements of clause 2: Table 2.1 for +facades, 2.1.1 for airborne insulation and party walls, 2.1.2 for impact sound +and 2.2 for reverberation and absorption. --- diff --git a/site/public/llms/llms-buildings-rooms.txt b/site/public/llms/llms-buildings-rooms.txt index f6ca45cc2..d4b8990b7 100644 --- a/site/public/llms/llms-buildings-rooms.txt +++ b/site/public/llms/llms-buildings-rooms.txt @@ -1874,8 +1874,23 @@ point, that stays diffuse while it decays. The common breakages: Scattering objects restore the mixing the models assume: a furnished room follows the statistical prediction distinctly better than the same room -bare, beyond what the furniture's own absorption area accounts for. In -practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and +bare, beyond what the furniture's own absorption area accounts for. The clip +below is that mechanism with the absorption taken out of it, so only the +mixing is left: an 800 Hz wavefront enters a 4 m rigid-walled hall filled +with rigid columns 10 to 17 cm across, a quarter to two fifths of the +42.9 cm wavelength. Every column diffracts the front and sheds a scattered +wavelet, the wavelets interfere, and within a few passes the specular front +has become energy spread over the whole hall with no preferred direction — +which is the assumption Sabine and Eyring both start from, arriving here as +a result rather than as a hypothesis. Nothing in the hall absorbs, so what +you are watching is *only* the redistribution; the decay at the end is the +energy draining out through the two open ends. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + +In practice, quote a *band* of predictions (Sabine and Eyring, or Fitzroy and Arau-Puchades for axial cases) rather than a single value; where the models spread, the room is telling you its field is not diffuse. diff --git a/site/public/llms/llms-devices-emission.txt b/site/public/llms/llms-devices-emission.txt index c8c67b8e1..e5b5bfac0 100644 --- a/site/public/llms/llms-devices-emission.txt +++ b/site/public/llms/llms-devices-emission.txt @@ -917,6 +917,21 @@ terms by a reference sound source of known power $L_W(\text{RSS})$ measured in the same room, so the room need not be characterised: $L_W = L_W(\text{RSS}) + (L_p(\text{ST}) - L_p(\text{RSS}) + C_2)$. +The right-hand panel of the clip below is this method. The same source runs +in both rooms; in the anechoic room on the left the microphones see only what +the source sends their way, so the level falls with distance and the +free-field route has to integrate over a measurement surface, while in the +reverberation room on the right the reflected energy fills the space and the +level stops depending on where a microphone is. That is the whole reason +Eq. 20 can replace a surface integral with a handful of positions and a room +constant — and the reason the room, not the array, is what has to be +qualified. Both routes end on the same $L_W$, because sound power is a +property of the source and not of the room it is measured in. + +Animation: the same source in an anechoic room and in a reverberation room producing different microphone pressures, while the free-field and diffuse-field formulas converge to the same sound power level + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_power_two_rooms.webm) + ```python import numpy as np from phonometry import emission diff --git a/site/public/llms/llms-devices-noise-control.txt b/site/public/llms/llms-devices-noise-control.txt index fcbeb21ec..a798e061f 100644 --- a/site/public/llms/llms-devices-noise-control.txt +++ b/site/public/llms/llms-devices-noise-control.txt @@ -349,12 +349,21 @@ resistivity, is the same material theory as ## Cross-check against the FDTD solver -The four-pole expansion chamber is cross-checked against the independent 2D -[FDTD wave solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/): a plane-wave duct that widens into a -chamber and narrows back transmits far less at the four-pole TL peak -($kL = \pi/2$) than at the transparent trough ($kL = \pi$), and the measured -amplitude ratio reproduces the closed-form peak transmission loss to a fraction -of a decibel (test `tests/noise_control/test_fdtd_crosscheck.py`). +That cross-check is the clip embedded in section 1, and it is worth returning +to it now with the algebra in hand. The four-pole expansion chamber is checked +against the independent 2D +[FDTD wave solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/), which shares no formula and no +assumption with the transfer-matrix product beyond the wave equation itself: a +plane-wave duct that widens into the same 0.30 m, $m = 4$ chamber and narrows +back transmits far less at the four-pole TL peak ($kL = \pi/2$, here 286 Hz) +than at the transparent trough ($kL = \pi$, 572 Hz). The amplitude ratio +measured downstream in the field is the transmission loss annotated on the +clip, 6.5 dB at 286 Hz and 0.0 dB at 572 Hz, against the 6.55 dB the closed +form gives for $m = 4$ (test `tests/noise_control/test_fdtd_crosscheck.py`). +Agreement that close rules out an algebra error on either side. The two must +eventually part company above the duct's first cut-on frequency, where +higher-order modes propagate: the two-dimensional solver keeps working there +and the plane-wave algebra does not. ## See also @@ -1683,6 +1692,19 @@ and air leaks**. A ceiling void carried over the partition, a service penetration, a door undercut, or the wall simply not reaching the structural slab, and the equation's answer becomes an upper bound. +The clip below draws what the equation leaves out. The chain of section 3 +prices the direct path only, the **Dd** route through the partition; the +other three pulses leave the source room over the flanking walls, floor or +ceiling — **Ff** flank to flank, **Fd** flank to partition, **Df** partition +to flank — and re-radiate on the far side without ever passing through the +transmission loss the calculation used. Each path shrinks at every element +and junction it crosses, which is why no single one has to be large for the +sum of the three to dominate a good partition. + +Animation: energy pulses leaving the source room over the direct Dd path and the flanking Ff, Fd and Df paths, shrinking at each element and junction, every path label lighting up as its pulse re-radiates into the receiving room + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_flanking_paths.webm) + `DesignCriterion.flanking_penalty` is the explicit debit for that, in decibels off the predicted noise reduction. It is not a model, it is a place to record the diff --git a/site/public/llms/llms-environment-propagation.txt b/site/public/llms/llms-environment-propagation.txt index ac2db4993..6db5f99ed 100644 --- a/site/public/llms/llms-environment-propagation.txt +++ b/site/public/llms/llms-environment-propagation.txt @@ -896,6 +896,28 @@ $$ which tends to 5 dB at the shadow boundary $N \to 0$ and approximates Maekawa's point-source curve within about 1.5 dB. +The clip below is that formula as a field. It is the +[2D FDTD solver](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/) run twice on one +12 × 7 m half-space over rigid ground with a thin rigid screen 2.5 m tall, +once at 100 Hz and once at 500 Hz, each with a barrier-free reference run over +the same ground so the annotated insertion loss is a true one. The geometry +fixes the path difference at 1.06 m for the receiver it marks, so the Fresnel +number is $N = 0.62$ at 100 Hz and $N = 3.1$ at 500 Hz — the same screen, a +factor of five apart in $N$ purely because $\lambda$ changed — and the field +shows what that buys: about 8 dB against about 17 dB. Two things are worth +watching for. The edge of the lit region running down from the top of the +screen is the shadow boundary, the $N \to 0$ locus where the formula bottoms +out at 5 dB; and inside the shadow the field is a cylindrical wave centred on +the top of the screen, which is what "the edge acts as a secondary source" +looks like. One caveat: the ground in the clip is perfectly rigid, so it shows +diffraction alone and none of the finite-impedance ground effect of section 1 +— the coherent four-path model below adds that, and its curve swings tens of +decibels where this one is smooth. + +Animation: a point source behind a thin 2.5 metre rigid barrier on reflecting ground, simulated at 100 Hz and 500 Hz side by side; the long wavelength diffracts over the edge and fills the shadow zone, the short wavelength is cast into a deep clean shadow + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_barrier.webm) + The thin-screen methods share the same three geometric quantities: the two diffracted segments over the edge and the straight path they replace. Drawn on the 4 m screen of the snippets, they differ by just 0.15 m. diff --git a/site/public/llms/llms-environment.txt b/site/public/llms/llms-environment.txt index 03eec9482..10e636273 100644 --- a/site/public/llms/llms-environment.txt +++ b/site/public/llms/llms-environment.txt @@ -10,11 +10,16 @@ Source: https://jmrplens.github.io/phonometry/environment/ # Environment and transport Environmental noise is a source-path-receiver problem stretched over hundreds -of metres of open air. This section covers both ends of it. The **outdoor -sound** pages handle the path and the assessment: ISO 9613 predicts, band by -band, how much level survives divergence, air absorption, the ground and any -barrier on the way to a receiver, and NT ACOU 112 quantifies when impulsive -character makes the received sound more annoying than its LAeq suggests. +of metres of open air. This section covers all three of them. The **propagation** +pages handle the path: ISO 9613 predicts, band by band, how much level survives +divergence, air absorption, the ground and any barrier on the way to a receiver, +and the wave-acoustic ground and refraction models say when that engineering +method stops being enough. + +The **assessment** pages handle what happens once the sound has arrived: the +ISO 1996 rating level and the day-evening-night indicators, their Spanish +application in RD 1367/2007, and the NT ACOU 112 adjustment that quantifies when +impulsive character makes a received sound more annoying than its LAeq suggests. The **source** pages handle the other end: what emits, described the way an environmental model wants it. CNOSSOS-EU gives road traffic and railways a @@ -23,11 +28,14 @@ by its apparent sound power and its tonal audibility. What unites them is the pattern: a carefully standardised source descriptor that the path model above then attenuates. -This section leans on the core toolkit more than any other: the rating levels -and Lden that environmental assessment ends in live in -[Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/), and the -atmospheric absorption that every propagation model consumes is shared with -the room and materials pages. Start with +This section leans on the core toolkit, but only up to the period level. +[Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/) supplies +the LAeq, percentile and event levels of each reference period; what turns those +period levels into Lden, Ldn and the rating level, with the tonal adjustment, +the residual-noise correction and the uncertainty budget on top, is +[Environmental Levels (ISO 1996-1/-2)](https://jmrplens.github.io/phonometry/environment/assessment/environmental-levels/), +in this section. The atmospheric absorption that every propagation model +consumes is shared with the room and materials pages. Start with [Outdoor Sound Propagation](https://jmrplens.github.io/phonometry/environment/propagation/outdoor-propagation/); it introduces the source-path-receiver bookkeeping the transport pages reuse. diff --git a/site/public/llms/llms-materials-absorbers.txt b/site/public/llms/llms-materials-absorbers.txt index d8b63fc4a..759bf83cd 100644 --- a/site/public/llms/llms-materials-absorbers.txt +++ b/site/public/llms/llms-materials-absorbers.txt @@ -261,7 +261,24 @@ print(np.round(alpha, 3)) # [0.398 0.448 0.498] $T_1$ and $T_2$ are exactly the reverberation times [`room_parameters`](https://jmrplens.github.io/phonometry/buildings/rooms/room-acoustics/) returns, so an ISO 3382-2 decay measurement of the empty and treated room flows straight into -`absorption_coefficient`. A room volume below the 150 m³ minimum or a +`absorption_coefficient`. + +Each of those two numbers is read off a decay, and the clip below shows how +one is read: the squared impulse response is integrated backwards from the +tail, the Schroeder curve emerges, and the T20 and T30 regressions are fitted +to a straight portion of it. That is the operation behind $T_1$, and again +behind $T_2$ — the clip shows a *single* room, not the pair, so it answers +"where does one $T$ come from" and not "what does subtracting two of them +cost". The second question is the one that governs this measurement, and +section 4 puts a number on it: because $\alpha_s$ is a difference of two +reciprocal decay times, its uncertainty is worst exactly where the two decays +are most alike, at the low-frequency end. + +Animation: the tail energy of a squared impulse response filling from the end while the backward integral advances toward t = 0, the Schroeder decay curve emerging on a companion axis and ending with the T20 and T30 regression lines + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_schroeder.webm) + +A room volume below the 150 m³ minimum or a sample area outside 10–12 m² raises an advisory `AbsorptionWarning`; the result still returns. @@ -2111,8 +2128,8 @@ Helmholtz resonator: $m = (\rho_0/\varepsilon)\,[t + 2\delta a + end-correction factor $\delta$ per orifice end and the visco-thermal resistance $r = (\rho_0/\varepsilon)\sqrt{8\nu\omega}\,(1 + t/2a)$ (Cox & D'Antonio Eqs. 7.6/7.12). The default end correction is the -Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} -+ 0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a +Fok-function interaction fit $\delta = 0.85\,(1 - 1.47\sqrt{\varepsilon} + +0.47\varepsilon^{3/2})$ (Table 7.1), valid for any open area. For a shallow cavity the resonance is $f_0 = (c_0/2\pi)\sqrt{\varepsilon/(t'\,d)}$ (Eq. 7.4). diff --git a/site/public/llms/llms-perception-psychoacoustics.txt b/site/public/llms/llms-perception-psychoacoustics.txt index 6435f32dd..d1fae5d96 100644 --- a/site/public/llms/llms-perception-psychoacoustics.txt +++ b/site/public/llms/llms-perception-psychoacoustics.txt @@ -43,8 +43,11 @@ ISO 1996-2. [Psychoacoustic annoyance and fluctuation strength](https://jmrplens.github.io/phonometry/perception/psychoacoustics/psychoacoustic-annoyance/) closes the chain with the Fastl & Zwicker model, which combines loudness, sharpness, roughness and the slow-modulation sensation of fluctuation strength -into a single annoyance value. Read it last: its four inputs all come from -the earlier pages. +into a single annoyance value. Read it last: three of its four inputs come from +the earlier pages, and it supplies the fourth, fluctuation strength, itself, in +both the Fastl & Zwicker closed form and the Osses 2016 signal model. The +ECMA-418-2 fluctuation strength on the Sound Quality page is a further, +normative model of the same sensation, under a different unit name. ## Pages in this section diff --git a/site/public/llms/llms-signals-filters.txt b/site/public/llms/llms-signals-filters.txt index 07d02ef86..198ae131d 100644 --- a/site/public/llms/llms-signals-filters.txt +++ b/site/public/llms/llms-signals-filters.txt @@ -12,10 +12,13 @@ Source: https://jmrplens.github.io/phonometry/signals/filters/ Acoustic analysis rarely wants a raw FFT: standards, ratings and human hearing all work in **fractional octave bands**, frequency intervals whose width grows proportionally with frequency. phonometry implements them as banks of -recursive filters whose **-3 dB points sit exactly on the ANSI S1.11 band -edges**, so band levels are comparable whichever filter architecture computes -them, and whose designs are verified against the class tolerances of -**IEC 61260-1:2014**. +recursive filters whose designs are verified against the class tolerances of +**IEC 61260-1:2014**. The default Butterworth bank, and the Chebyshev II and +Bessel alternatives, put their **-3 dB points exactly on the ANSI S1.11 band +edges**, so their band levels are directly comparable; the two equiripple +architectures (Chebyshev I, Elliptic) place their ripple edge there instead and +consequently read a few tenths of a decibel high in every band, which is why a +campaign should fix one architecture and keep it. The foundation page is [Filter Banks](https://jmrplens.github.io/phonometry/signals/filters/filter-banks/). It covers the band mathematics, how a signal is decomposed into 1/1, 1/3 or diff --git a/site/public/llms/llms-signals-levels.txt b/site/public/llms/llms-signals-levels.txt index 4f1f2b51c..32c742fac 100644 --- a/site/public/llms/llms-signals-levels.txt +++ b/site/public/llms/llms-signals-levels.txt @@ -13,9 +13,11 @@ A sound level meter does three things to a calibrated signal, in order: it **weights it in frequency** to mimic the ear's sensitivity, it **smooths it in time** with a standardised ballistic, and it **integrates it into a level**. The pages of this section implement that chain stage by stage for the -displayed level: the A/C/Z curves and the Fast/Slow/Impulse ballistics -follow **IEC 61672-1:2013** closely enough that the weightings are -verified against the standard's own tolerance tables in CI. +displayed level: the A/C/Z curves and the Fast and Slow ballistics of +**IEC 61672-1:2013**, verified in CI against the standard's own tolerance +tables (Table 3 for the weightings, Table 4 for the tone-burst responses), plus +the legacy Impulse ballistics that IEC 61672-1 inherited from IEC 60651 and then +dropped from its requirements, kept here for older national procedures. [Frequency Weighting (A, C, Z)](https://jmrplens.github.io/phonometry/signals/levels/weighting/) covers the first stage. The A-curve tracks hearing sensitivity at moderate levels and @@ -27,10 +29,11 @@ conventional weightings are blind, the historical B and D curves serve legacy data, and AU rejects ultrasound from an audible-sound reading per IEC 61012. [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/) covers the second stage: -the exponential Fast (125 ms), Slow (1 s) and Impulse ballistics that decide -how quickly a displayed level follows the sound. phonometry implements the -exact time constants, verified against the toneburst responses of the -standard. +the exponential Fast (125 ms) and Slow (1 s) ballistics that decide how quickly +a displayed level follows the sound, and the legacy asymmetric Impulse +ballistics (35 ms rise, 1.5 s decay) that came from IEC 60651 and is no longer +required by IEC 61672-1. phonometry implements the exact time constants, +verified against the tone-burst responses of the standard. [Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/) is the payoff: the equivalent continuous level Leq and its A-weighted LAeq, the percentile @@ -59,8 +62,9 @@ noise phases, and the limit tables an activity is judged against. - [Special Weightings (G, B, D, AU)](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/): the ISO 7196 infrasound G-weighting, the historical B and D curves and AU per IEC 61012. -- [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/): Fast, Slow and - Impulse exponential ballistics. +- [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/): the Fast and Slow + exponential ballistics of IEC 61672-1, and the legacy Impulse ballistics it + dropped. - [Integrated and Statistical Levels](https://jmrplens.github.io/phonometry/signals/levels/levels/): Leq and LAeq, percentile levels, LCpeak/SEL, noise dose and octave spectrograms. diff --git a/site/public/llms/llms-signals.txt b/site/public/llms/llms-signals.txt index 4bcad6b7c..bd06680d0 100644 --- a/site/public/llms/llms-signals.txt +++ b/site/public/llms/llms-signals.txt @@ -28,8 +28,7 @@ confidence intervals), **correlation and time-delay estimation** and the **Hilbert envelope**, all stated with the Bendat & Piersol error analysis. And two transversal concerns complete the core. **Calibration** decides what the digital samples mean physically: results can be referenced to a measured -calibrator tone or a known sensitivity (dB SPL), or stay in digital full -scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo +calibrator tone (dB SPL), or stay in digital full scale (dBFS). **Measurement uncertainty** (the GUM and its Monte Carlo supplement) qualifies any result computed from uncertain inputs, which is what makes a number defensible in a report. @@ -135,8 +134,8 @@ and carrying its statistical quality. What the numbers mean and how much to trust them. - [Calibration and dBFS](https://jmrplens.github.io/phonometry/signals/metrology/calibration/): physical SPL - calibration from a calibrator tone (IEC 60942) or a known sensitivity, and - the digital dBFS mode. + calibration from a calibrator tone (IEC 60942), the stability check it applies + to that recording, and the digital dBFS mode. - [Measurement uncertainty (GUM and Monte Carlo)](https://jmrplens.github.io/phonometry/signals/metrology/gum-uncertainty/): the law of propagation of uncertainty and the Monte Carlo method of ISO/IEC Guide 98-3, with expanded uncertainty and coverage intervals. @@ -229,14 +228,23 @@ laf_t = 10 * np.log10(np.maximum(envelope, 1e-12) / (2e-5) ** 2) # laf_t peaks near 80 dB during the event and settles near 55 dB between. ``` -You rarely write this chain yourself: every level function of the next step -applies the frequency weighting internally, and the percentile levels rebuild -this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) integrate the -squared weighted signal directly, with no ballistics, exactly as a meter -does. The chain is shown here because it *is* the meter's display. +Animation: a tone burst driving the RC exponential detector, the capacitor charging and draining, while the Fast, Slow and Impulse meter needles follow their own ballistics + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_time_weighting.webm) + +The needle in the clip is that `time_weighting` call: a first-order low-pass +charging and draining on the squared signal. The three needles differ in one +number, the time constant, which is why Fast catches an event that Slow +smooths away. You rarely write this chain yourself: every level function of +the next step applies the frequency weighting internally, and the percentile +levels rebuild this Fast envelope for you. The energy metrics ($L_{eq}$, SEL) +integrate the squared weighted signal directly, with no ballistics at all — +which is why they show no needle movement to follow. The chain is shown here +because it *is* the meter's display. Deep guides: [Frequency Weighting (A, C, Z)](https://jmrplens.github.io/phonometry/signals/levels/weighting/) -and [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/). +and [Time Weighting](https://jmrplens.github.io/phonometry/signals/levels/time-weighting/), which takes this same clip +apart against the IEC 61672-1 tone-burst table. ## 4. Integrate: the numbers a meter reports diff --git a/site/public/llms/llms-simulation.txt b/site/public/llms/llms-simulation.txt index 00f15d0e3..ac39b98b5 100644 --- a/site/public/llms/llms-simulation.txt +++ b/site/public/llms/llms-simulation.txt @@ -42,6 +42,32 @@ ground), the simulation is the fallback that still gives a quantitative answer; when a closed form exists, prefer it, and use the solver to verify the assumptions it rests on. +Those cross-checks are not only arguments: fifteen of the animations in this +documentation are output from these two solvers, and they are filed on the +guides whose physics they settle rather than here. Room modes growing on and +off resonance appear in [room acoustics](https://jmrplens.github.io/phonometry/buildings/rooms/room-acoustics/) +and [reverberation prediction](https://jmrplens.github.io/phonometry/buildings/rooms/reverberation-prediction/), +which also carries the hall of columns that turns one wavefront into a mixed +field; barrier diffraction at two wavelengths in +[outdoor propagation](https://jmrplens.github.io/phonometry/environment/propagation/outdoor-propagation/) +and [ground effect and barriers](https://jmrplens.github.io/phonometry/environment/propagation/ground-barriers/); +downwind and upwind refraction in +[atmospheric refraction](https://jmrplens.github.io/phonometry/environment/propagation/atmospheric-refraction/); +the ground-effect lobe pattern in outdoor propagation and in +[airport noise](https://jmrplens.github.io/phonometry/aircraft/airport-noise/); the standing-wave and +transmission tubes in [the impedance tube](https://jmrplens.github.io/phonometry/materials/absorbers/impedance-tube/); +the QRD and metadiffuser panels in +[diffusers](https://jmrplens.github.io/phonometry/materials/diffusers/diffusers/) and +[metadiffusers](https://jmrplens.github.io/phonometry/materials/diffusers/metadiffusers/); the slit +absorber in [metamaterial absorbers](https://jmrplens.github.io/phonometry/materials/absorbers/metamaterial-absorbers/); +the expansion chamber in [silencers](https://jmrplens.github.io/phonometry/devices/noise-control/silencers/); +the wall aperture in [panel sound insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/); +and the SOFAR duct in [underwater propagation](https://jmrplens.github.io/phonometry/underwater/underwater-propagation/). +The elastic solver adds two: the bending packet entering an L-junction, on +[junction transmission](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/), +and the coincidence plate, on panel sound insulation. Both also appear on the +elastic page below, where the solver that produced them is explained. + ## Pages in this section - [2D FDTD wave simulation](https://jmrplens.github.io/phonometry/simulation/fdtd-simulation/): the @@ -209,13 +235,21 @@ plt.show() -That flexural wave is worth watching in motion: the -[bending-wave transmission guide](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/) embeds an -animation of this solver launching a 4 kHz bending packet along a 10 mm -steel plate into an L-junction, where the corner splits it into the -reflected and transmitted waves the closed form prices at -$\tau_{12}(0°) = 0.5$, plus the fast in-plane precursor the pinned-junction -model deliberately leaves out. +That flexural wave is worth watching in motion. The clip below is this same +solver launching a 4 kHz bending packet along a 10 mm steel plate: on the +control panel the plate runs straight and the packet simply leaves, and on +the junction panel a perpendicular plate of the same thickness turns the +corner into a scatterer. The packet splits there into the reflected and +transmitted bending waves the closed form prices at $\tau_{12}(0°) = 0.5$, +plus the fast in-plane precursor that races ahead down the receiving plate — +the mode conversion the pinned-junction model deliberately leaves out, and +the reason this page needs an elastic solver rather than a flexural one. The +[bending-wave transmission guide](https://jmrplens.github.io/phonometry/vibration/structural/junction-transmission/) takes +the same run apart against the EN 12354 vibration reduction index. + +Animation: a 4 kHz bending-wave packet running along a 10 mm steel plate, passing straight through on the control panel and splitting at an L-junction into a reflected wave, a transmitted wave descending the perpendicular plate and a faster in-plane precursor + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_plate_junction.webm) ## 4. Fluid-solid coupling at normal incidence @@ -363,13 +397,28 @@ dip within 0.1 % of the 295 kHz resonance. The same suite stress-tests the extreme contrast of an air-steel contact (impedance ratio ~$10^5$:1): stable over 10 000 steps with the reflected amplitude conserved to 0.5 %. -At oblique incidence the plate physics gets richer, and the -[panel sound insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) embeds the -animation: this solver driving the same 10 mm steel plate, lying in air, -with a sustained 45° plane wave below and above its coincidence frequency, -where the trace-matched bending wave re-radiates a growing beam and holds -the transmitted level at the point where the mass law demands 12 dB more -blocking. +At oblique incidence the plate physics gets richer, and the clip below is +this solver driving the same 10 mm steel plate, now lying in air, with a +sustained 45° plane wave arriving on it. The two panels differ in **one +number only** — the drive frequency, $f_c/2 = 603$ Hz on the left and +$2 f_c = 2413$ Hz on the right, either side of the 1206 Hz coincidence +frequency the library computes from the same $m''$ and $B'$ used above. +Everything else, the plate, the angle, the mesh and the colour scale, is +held fixed. Below $f_c$ the plate reflects almost everything and the +transmitted level lands on the oblique mass law; above it the acoustic trace +wavelength matches the free bending wavelength, the plate re-radiates a 45° +beam that grows along the lit span, and the transmitted level holds at the +low-frequency figure where the mass law demanded 12 dB more blocking. The +air below the plate is drawn on both panels with the display gain measured +off the settled field of the two runs together (×150, that is +44 dB) and +printed on the canvas: read the *annotations* for levels, not the +brightness. The +[panel sound insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) takes the +same run apart against the plateau method and the mass law. + +Animation: two elastic FDTD panels of the same 10 mm steel plate in air under a 45-degree plane wave, at 603 Hz where the plate blocks almost everything and at 2413 Hz where a transmitted beam grows below it + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_elastic_coincidence.webm) ## Quick answers @@ -502,6 +551,27 @@ animations of this documentation, promoted to a public API with sources, pressure probes, rasterised obstacles, per-side boundary conditions and a frozen result object. +Here is one of those animations, and it is a fair advertisement for what the +rest of this page builds. Nothing in it is drawn: the colonnade is a boolean +`obstacle_mask` of rasterised circles and the wavefront is a single one-way +plane-wave packet with a Gaussian envelope one wavelength wide, launched at +$x = 0.30$ m into a 4 m × 1 m rigid-walled hall whose two ends absorb through +sponges hidden outside the frame. The carrier is 800 Hz, so the wavelength is +42.9 cm and the 10 to 17 cm columns are roughly a quarter to two fifths of it +— the regime in which a rigid cylinder both casts a readable shadow and +re-radiates strongly, which is why the coda that fills the hall is structured +rather than noise. That coda is deterministic multiple scattering: it is what +a diffuse field looks like *before* any statistical assumption is made about +it. The mesh is the worked example of the rule +[section 4](#4-numerical-dispersion-and-accuracy) derives: the tightest gap in +this layout is 6.6 cm between a column and a wall, so +$\Delta x = \min(\text{smallest aperture}/4,\ \lambda/8)$ allows up to 1.6 cm, +and the clip runs at 2.5 mm because a banner needs the definition. + +Animation: an 800 Hz plane wavefront sweeping a 4 metre rigid-walled hall filled with a staggered colonnade of rigid columns, every column shedding a scattered wavelet until the interference of the wavelets fills the hall with structured energy that then drains through the absorbing ends + +[Watch the high-resolution video (WebM)](https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/anim_fdtd_pillar_hall.webm) + Pipeline from the domain definition (sound-speed and density maps with the grid spacing dx) and the geometry (obstacle mask and per-side boundary conditions), through the sources injected at grid cells, the staggered-grid leapfrog update of velocity and pressure, and the Courant stability condition, to the frozen FDTDResult with probe histories, field snapshots and a plot method ## 1. The scheme: a wave equation on a grid diff --git a/site/public/llms/llms-start.txt b/site/public/llms/llms-start.txt index 0ff985aba..fc16cb89e 100644 --- a/site/public/llms/llms-start.txt +++ b/site/public/llms/llms-start.txt @@ -9,18 +9,38 @@ Source: https://jmrplens.github.io/phonometry/start/ # Start -The three pages that open the documentation, before the guides themselves. +Four short pages, meant to be read once before anything else. Each answers one +question, and they are in the order the questions arrive. +**Can I install it and get a number out?** [Getting Started](https://jmrplens.github.io/phonometry/start/getting-started/) installs the library and -walks a first measurement end to end, from a WAV file to a calibrated -one-third-octave spectrum. [Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) -sets out what the library is for and how it is validated against the standards -it implements. [About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how -to cite it and under what licence. - +runs a first one-third-octave analysis, on a synthetic signal and then on a WAV +file, and states what a recording must satisfy before those numbers mean +anything physical. It stops short of a calibrated measurement on purpose: +[Calibration and dBFS](https://jmrplens.github.io/phonometry/signals/metrology/calibration/) is the next +step, the one that turns band levels into pascals, and +[Build a sound level meter](https://jmrplens.github.io/phonometry/signals/sound-level-meter/) runs the +whole chain end to end. + +**Where is the thing I came for?** [All guides](https://jmrplens.github.io/phonometry/start/guides/) is the map: every guide in the library, grouped by the topic it belongs to, with a line on each. +**Should I trust the number?** +[Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) sets out what the library +is for and how it is validated against the standards it implements, with the +tone-burst check worked through against the acceptance limits. + +**Who is answerable for it, and how do I cite it?** +[About](https://jmrplens.github.io/phonometry/start/about/) states who maintains it, how to cite it and +under what licence. + +The assumed starting point is Python 3.13 or newer with working NumPy and +SciPy, and enough acoustics to know what a one-third-octave band and a sound +pressure level are. Any symbol the guides use without introducing is in the +[glossary](https://jmrplens.github.io/phonometry/reference/glossary/), with its unit, its defining clause +and the guide that computes it. + --- @@ -494,6 +514,10 @@ $$ The adjustments $K_i$ cover time-of-day penalties (ISO 1996-1 Table A.1: evening 5 dB, night 10 dB) as well as source-character adjustments (e.g. tonal penalties), which the ECMA-418-1 TNR/PR assessments can justify objectively. +Synthetic 24-hour urban LAeq profile with day, evening and night bands, the +5 and +10 dB weighted period levels and the resulting Lden + +*A 24-hour $L_{Aeq}$ profile split into day, evening and night, the +5/+10 dB penalties and the resulting $L_{den}$.* + See the [Environmental levels guide](https://jmrplens.github.io/phonometry/environment/assessment/environmental-levels/) for usage. ## Impulsive-sound prominence (NT ACOU 112) @@ -518,6 +542,15 @@ $$ $K_I$ is exactly the kind of source-character adjustment that enters the ISO 1996-1 composite rating level above. The anchors $P(1000\ \text{dB/s}, 30\ \text{dB}) = 9 + 2\log_{10} 30 = 11.95$ and $K_I(P{=}10) = 9.0$ dB are reproduced exactly. +A-weighted Fast level history of three hammer strikes over a 55 dB(A) background across six seconds: each strike rises from about 52 dB to 89 dB, the detected onset start and end points are marked with the least-squares onset line, the governing level difference of 36.8 dB is annotated, and the title reports a prominence of 11.34 with an adjustment of 11.42 dB, category highly impulsive + +*Both inputs of $P$ are geometry on this trace, which is why the method needs a +level history and not a level. The onset rate is the slope of the fitted line +through the rise, in dB/s, and the qualifying threshold of 10 dB/s is a +steepness on this axis; the level difference is the height of the same rise. +Three strikes are detected here and only the steepest-and-tallest one governs +the adjustment.* + See the [Impulse Prominence guide](https://jmrplens.github.io/phonometry/environment/assessment/impulsive-sound/) for usage. ## Outdoor propagation and occupational exposure (ISO 9613-1/2, ISO 9612) @@ -550,6 +583,10 @@ $f_m = 1000 \cdot 10^{k/10}$ (Note 5) used to compute that table. The same $\alpha$ is the only route to the ISO 354 power attenuation coefficient $m = \alpha/(10 \log_{10} e)$, exposed as `air_attenuation_m`. +ISO 9613-1 pure-tone atmospheric attenuation coefficient alpha in dB/km against frequency, on a linear decibel ordinate over a logarithmic frequency axis, for the reference 20 degrees Celsius and 50 percent relative humidity atmosphere, produced by the AtmosphericAttenuation result plot method + +*The ISO 9613-1 coefficient for the 20 °C, 50 % relative-humidity reference atmosphere: the $f^2$ rise spans two decades from 50 Hz to 10 kHz.* + ### Outdoor propagation, general method (ISO 9613-2) ISO 9613-2:1996 predicts the octave-band level at a receiver **downwind** of a @@ -593,6 +630,21 @@ average level subtracts the meteorological correction $C_{met}$ (Eq. (6), (21)/(22)). The method's stated accuracy is $\pm 1$ to $\pm 3$ dB for broadband noise up to 1000 m (Table 5). +ISO 9613-2 per-octave-band attenuation breakdown as a stacked bar of Adiv, Aatm, Agr and Abar with the total A overlaid, for a 200 m path over porous ground with a 4 m barrier + +*The four terms at their true relative sizes, band by band, for a 200 m path +over porous ground with a 4 m barrier. $A_{div}$ is 57 dB in every band because +it is pure geometry. $A_{atm}$ is nothing at 63 Hz and 18.7 dB at 8 kHz, so it +is the term that decides how far high frequencies travel and no other. $A_{gr}$ +is where the low bands live and is **negative** at 63 Hz (−4.6 dB: the ground +reflection adds energy rather than removing it). $A_{bar}$ is at its 20 dB cap +from 2 kHz up but falls to zero at 250 Hz, because the top-edge form subtracts +the ground effect the screened path gives away, $A_{bar} = D_z - A_{gr} \geq 0$, +and 250 Hz is exactly where $A_{gr}$ peaks. Which term is worth refining +depends entirely on the band and the geometry.* + +ISO 9613-2 source-barrier-receiver geometry: a point source at height hs, a barrier whose top edge splits the path into dss and dsr, and a receiver at height hr, with the blocked direct ray and the diffracted ray over the edge, the path difference z and the Dz formula + ### Occupational noise exposure and uncertainty (ISO 9612) ISO 9612:2009 is the engineering method (accuracy grade 2) for a worker's daily @@ -636,6 +688,10 @@ The sound power level $L_W = 10 \log_{10}(P/P_0)$ ($P_0 = 1$ pW) is an *emission* quantity: unlike a pressure level it does not depend on the receiver distance or the room. Three families of methods recover it. +The three sound power routes side by side: an enveloping pressure surface over a reflecting plane (ISO 3744/3746), a source in a reverberation room sampled by microphones (ISO 3741) and an intensity probe scanning a surface around the source (ISO 9614-2) + +*The three routes to $L_W$: enveloping pressure surface, reverberation room and intensity scan.* + ### Enveloping-surface pressure (ISO 3744/3746) Over a reflecting plane the free-field relation is simply @@ -861,6 +917,10 @@ worked example, the oracle is a synthetic end-to-end chain ($V = 200$ m³, $S = 10$ m², $T = 8.0/6.0/7.5/5.0$ s → $s = 0.093$) plus the Formula A.5 hand value $u_s = 0.0297$. +The random-incidence scattering coefficient s of a diffusing surface over the 13 one-third-octave bands from 250 to 4000 Hz, rising smoothly from near zero at low frequency towards 0.84 at 4 kHz + +*A random-incidence scattering coefficient rising with frequency as the surface roughness becomes comparable with the wavelength.* + ### Directional diffusion coefficient (ISO 17497-2) ISO 17497-2:2012 measures, in the free field, how uniformly a surface spreads @@ -939,6 +999,10 @@ float-safe. The two Annex A worked examples are reproduced: $\alpha_p = (0.35, 0.70, 0.65, 0.60, 0.55)$ → $\alpha_w = 0.60$, class C; and raising 500 Hz to 1.00 keeps $\alpha_w = 0.60$ but adds the indicator, "0.60(M)". +ISO 11654 weighted sound absorption rating: the practical absorption spectrum plotted against the shifted reference curve over 250 Hz to 4000 Hz, with the unfavourable deviation at 250 Hz shaded and the weighted coefficient alpha_w read at 500 Hz + +*The ISO 11654 rating: practical absorption against the shifted reference, with the unfavourable deviation shaded and the weighted coefficient read at 500 Hz.* + See the [Sound Absorption Measurement and Rating guide](https://jmrplens.github.io/phonometry/materials/absorbers/absorption-measurement/) for usage. ### Airflow resistance (ISO 9053-1/2) @@ -1011,6 +1075,25 @@ $TL = 0\ \text{dB}$, hard-backed $|R| = 1$), synthetic round-trips that recover a known $r$, and two-load recovery of an asymmetric reciprocal specimen. +ISO 10534-2 two-microphone impedance tube: a loudspeaker radiating a plane wave down the tube, two microphones flush in the wall at spacing s and distance x1 from the specimen face, the test specimen against a rigid backing, and the incident and reflected waves + +ISO 10534-2 two-microphone tube result for a 50 mm porous absorber: the normal-incidence absorption coefficient rising from about 0.2 at 200 Hz towards 0.97 above 1 kHz, with the reflection-factor magnitude falling as its mirror image + +*What the ISO 10534-2 formula returns: $\alpha$ and $|r|$ for a 50 mm porous +absorber over the working band of a 100 mm tube. The two curves are the same +information — $\alpha = 1 - |r|^2$ — so the figure is really one measurement +drawn twice, and the rise with frequency is the layer thickness growing against +the wavelength.* + +ASTM E2611 four-microphone transmission-loss tube: a sound source, two microphones upstream and two downstream of the test specimen at spacings s1 and s2 and offsets l1 and l2, an adjustable termination for the two-load method, the upstream A and B and downstream C and D travelling waves, and the transfer matrix and transmission-loss relations + +ASTM E2611 transfer-matrix quantities of a 50 mm porous layer: the normal-incidence transmission loss rising from about 6.6 dB at 200 Hz to over 9 dB at 1.6 kHz on the left axis, and the hard-backed absorption coefficient rising from 0.19 to about 0.97 on the right axis + +*The same four-pole entries answering two different questions: how much sound +the free-standing layer lets through (the transmission loss above) and how much +the same layer absorbs once it is backed rigidly. A material can be a good +absorber and a poor barrier at once, which this pair makes plain.* + See the [Impedance Tube guide](https://jmrplens.github.io/phonometry/materials/absorbers/impedance-tube/) for usage. ## References @@ -1093,6 +1176,10 @@ The three parameters come from Table 1 (p. 4), tabulated at the 29 preferred thi The standard specifies **no interpolation** between the tabulated frequencies. Formula (1) is specified for **20 phon to 90 phon** between 20 Hz and 4 kHz, and only up to **80 phon between 5 kHz and 12.5 kHz**; above 80 phon the contour therefore stops at 4 kHz. Values outside these limits from Formula (2) are extrapolations the standard labels as informative only. +ISO 226:2023 normal equal-loudness-level contours from 20 to 90 phon with the hearing threshold curve + +*The ISO 226:2023 contours from Formula (1), 20 to 90 phon, with the hearing threshold.* + See the [Loudness guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/loudness/) for usage. ## Tone prominence: TNR and PR (ECMA-418-1) @@ -1113,6 +1200,15 @@ $$ **PR** (clause 12) compares the level of the critical band centred on the tone, $L_M$, with the mean power of the two **contiguous** critical bands $L_L$, $L_U$ (edges from the fitted Formulae 21–22 with Tables 2–3): $\mathrm{PR} = 10\log_{10} P_M - 10\log_{10}\left[(P_L + P_U)/2\right]$ (Formula 23). For $f_t \le 171.4$ Hz the lower band is truncated at 20 Hz and its power rescaled to a **100 Hz bandwidth** (Formula 24). The criterion (Formulae 25–26) is 9.0 dB at $f_t \ge 1$ kHz, rising as $9.0 + 10.0\log_{10}(1000/f_t)$ below. Tones are assessed within the 89.1 Hz – 11.2 kHz range of interest (clauses 11.5 / 12.6). +Tone-to-noise ratio of a 250 Hz fan tone plotted against the ECMA-418-1 prominence criterion: the criterion falls from about 17 dB at 89 Hz to a flat 8 dB above 1 kHz, and the assessed tone sits at 15.1 dB, 2.1 dB above the 13.0 dB criterion at 250 Hz, so it is prominent + +*The TNR criterion drawn rather than evaluated, over the 89.1 Hz – 11.2 kHz +range of interest, with one assessed tone on it. Because the criterion is +$8.0 + 8.33\log_{10}(1000/f_t)$ below 1 kHz and flat above, the same +tone-to-noise ratio is judged against a different threshold at every frequency: +the example tone clears its 13.0 dB threshold at 250 Hz by 2.1 dB, while a +10 dB tone would be prominent anywhere above 1 kHz and not prominent here.* + See the [Prominent Discrete Tones guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/tone-prominence/) for usage. ## Zwicker loudness (ISO 532-1) @@ -1146,6 +1242,10 @@ $$ below 1 sone the reference program uses $L_N = 40 (N + 0.0005)^{0.35}$, floored at 3 phon. +Specific loudness patterns over the Bark scale for a 1 kHz narrowband sound and a broadband sound of equal band level + +*Specific loudness N′(z) over the Bark axis: energy spread over many critical bands sums to more sones than the same band level in a single band.* + See the [Loudness guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/loudness/) for usage. ## Advanced loudness models & sound quality @@ -1212,6 +1312,15 @@ $$ (Formulae 65–111). The single value $R$ is the 90th percentile of $R(l_{50})$ over time (Clause 7.1.10); the constant $c_R$ (Formula 104) calibrates the reference sound (a 1 kHz carrier 100 % amplitude-modulated at 70 Hz at 60 dB SPL) to 1 asper. +ECMA-418-2 slow vs fast modulation perception: fluctuation strength forms a band-pass over modulation frequency peaking near 4 to 6 Hz while roughness of the same 1 kHz amplitude-modulated tones peaks near 70 Hz + +*The modulation-rate weighting the formulae above apply, and the reason the +range "roughly 20–300 Hz, strongest near 70 Hz" is a band-pass and not a +threshold: the same 1 kHz carrier modulated slowly is heard as fluctuation +strength, peaking near 4–6 Hz, and modulated fast is heard as roughness, +peaking near 70 Hz. Between the two peaks the sensation changes name, not +degree.* + ### Sharpness (DIN 45692) Sharpness condenses the high-frequency emphasis of a sound into one number: the $g(z)$-weighted first moment of the ISO 532-1 stationary specific-loudness pattern (DIN 45692:2009, Equation 1): @@ -1223,6 +1332,14 @@ $$ evaluated on the same 240-bin, 0.1-Bark grid. The constant $k$ is not hard-coded but derived from the calibration requirement (clause 6): a critical-band-wide narrowband noise 920–1080 Hz at 60 dB SPL scores exactly 1 acum, and the derived $k = 0.108$ lands inside the normative window $0.105 \le k < 0.115$ (clause 5.2). The informative Annex B weightings are provided under the same 1-acum anchor: von Bismarck (knee at 15 Bark, $0.2\ e^{0.308(z-15)} + 0.8$) and Aures (loudness-dependent, $g(z) = 0.078\ (e^{0.171 z}/z)\ N/\ln(0.05 N + 1)$). The Table A.2 narrow-band targets are reproduced within the clause 6 tolerance (5 % or 0.05 acum): 0.38 acum at 250 Hz, 1.00 at 1 kHz, 1.78 at 2.5 kHz, 2.82 at 4 kHz. +DIN 45692 sharpness weighting g(z) against critical-band rate on a log axis, comparing the DIN, von Bismarck and Aures curves with the 15.8 and 15 Bark knees marked + +*The three $g(z)$ weightings of the formula above on one axis: DIN with its +15.8 Bark knee, von Bismarck with its 15 Bark knee, and the loudness-dependent +Aures curve, which is why the choice of weighting changes a sharpness value +only for sounds with energy above the knee (15 to 15.8 Bark, about 2.5 to +3 kHz) and leaves everything below it untouched.* + See the [Sound Quality Metrics guide](https://jmrplens.github.io/phonometry/perception/psychoacoustics/sound-quality/) for usage. ## Modulation transfer and STI (IEC 60268-16) @@ -1257,6 +1374,23 @@ $$ m_{dr} = \frac{2 \sqrt{\left( \sum_t I_k(t) \sin 2 \pi f_m t \right)^2 + \left( \sum_t I_k(t) \cos 2 \pi f_m t \right)^2}}{\sum_t I_k(t)}, \qquad m = \frac{m_{dr}}{0.55} $$ +Modulation transfer index per octave band from 125 Hz to 8 kHz for a hall with a 0.9 s reverberation time and a 15 dB speech-to-noise ratio: the seven bars sit close together between about 0.54 and 0.60, giving STI = 0.58 with the Annex F rating E + +*The seven $\mathrm{MTI}_k$ the weighted sum above consumes, for a hall with +$T = 0.9$ s and a 15 dB speech-to-noise ratio. Each bar is already the mean of +14 transmission indices, so this is two stages of averaging below the raw +$m(F)$; the bars sit within 0.06 of one another, which is the case in which +the $\beta_k$ redundancy terms subtract almost nothing and the STI is close to +the plain $\alpha$-weighted mean.* + +STI versus reverberation time with the IEC 60268-16 Annex F rating bands shaded + +*The end of the chain rather than its middle: what the Schroeder closed form +does to the STI as reverberation grows, against the Annex F rating bands. The +curve falls steeply through the range where a room is still usable and +flattens once the modulation has already been destroyed, which is why halving +a long reverberation time buys less intelligibility than halving a short one.* + See the [Speech Transmission Index guide](https://jmrplens.github.io/phonometry/perception/speech/speech-transmission/) for usage. ## Speech Intelligibility Index (ANSI S3.5) @@ -1283,6 +1417,10 @@ $$ and any fractile follows a two-sided Gaussian model (clause 4.4), $\Delta H_Q = \Delta H_{md} + z(Q)\ s$, using the upper spread $s_u$ for $z \ge 0$ (worse than median) and the lower spread $s_l$ otherwise, each a degree-5 polynomial in $Y - 18$ per sex and frequency (clause 4.3, Tables 2–5). At age 18 every deviation is zero by construction. The formulae are established to 80 years at and below 2 kHz and to 70 years above; beyond that the evaluation is an extrapolation. Anchors: at 60 years the medians evaluate to 7.85 dB (male, 1 kHz), 20.21 dB (male, 4 kHz) and 15.32 dB (female, 4 kHz), matching the Table 1 formula to $10^{-3}$. +Two panels. Left: the ISO 7029 median hearing-threshold deviation for men at ages 20, 40, 60 and 80 on an inverted audiogram axis, with the 10 to 90 percent fractile band around the 70-year curve; the loss deepens toward high frequencies and with age. Right: the ISO 389-7 free-field and diffuse-field reference threshold, coinciding below 1 kHz and diverging above, dipping to a minimum near 3 to 4 kHz + +*The ISO 7029 median age shift with its fractile band (left) and the ISO 389-7 free- and diffuse-field reference thresholds (right).* + See the [Hearing Threshold guide](https://jmrplens.github.io/phonometry/perception/hearing/hearing-threshold/) for usage. ## Noise-induced hearing loss (ISO 1999) @@ -1301,6 +1439,16 @@ $$ The Annex D worked examples (Tables D.1–D.4; e.g. 100 dB / 40 yr at 3 kHz: 29/38/60 dB at the 0.10/0.50/0.90 fractiles) are reproduced exactly at the standard's integer rounding, and the Formula 2 hand value at 4 kHz / 20 yr / 90 dB is $N_{50} = 12.94$ dB. +ISO 1999 noise-induced permanent threshold shift after 40 years at an 8 h-normalised 95 dB(A), on an inverted audiogram axis from 500 Hz to 6000 Hz: the median is near zero at 500 Hz and deepens to about 26 dB at 4000 Hz before recovering at 6000 Hz, and the 10 to 90 percent fractile band around it reaches nearly 37 dB for the most susceptible tenth + +*The model as an audiogram: 40 years at an 8 h-normalised 95 dB(A). The notch +at 4 kHz is what makes noise-induced loss recognisable in a clinic, and it is +here only because $L_0$ is lowest (75 dB) in that band. Mind the fractile +direction the paragraph above states: the edge of the shaded band showing the +**deeper** shift is the library's `fractile=0.90`, the most susceptible tenth — +which ISO 1999 and its Annex D column headings label $Q = 10\ \%$. At 4 kHz +this case runs 19.5 / 26.0 / 36.0 dB at `fractile` 0.10 / 0.50 / 0.90.* + See the [Noise-Induced Hearing Loss guide](https://jmrplens.github.io/phonometry/perception/hearing/noise-induced-hearing-loss/) for usage. ## References @@ -1373,6 +1521,10 @@ This page collects the theory behind rooms and buildings: impulse-response measu ANSI/ASA S12.2-2019 rates steady background noise in rooms against families of octave-band curves (16 Hz – 8 kHz). The **NC rating** follows the two-step procedure of clause 5.2.2 on the Table 1 curves (NC-15 to NC-70): the speech interference level $\mathrm{SIL} = \tfrac14(L_{500}+L_{1000}+L_{2000}+L_{4000})$ (clause 3.2) selects the NC-(SIL) curve, and if no band exceeds it the spectrum is designated NC-(SIL); otherwise the tangency method (clause 5.2.3) applies: each measured band is interpolated against the tabulated curve values, the rating is the highest per-band index and the band that sets it is the governing band; the interpolation makes the rating continuous (an NC-42.5 is reported as such, not snapped to a curve). Spectra above NC-70 or below NC-15 fall outside the family and are flagged (>NC-70 with the band of maximum exceedance, or Two panels for the same ventilation-dominated room spectrum. Left: the measured octave-band levels over the NC curve family, with a red diamond marking the tangent point at 250 Hz that sets the NC-42.5 rating. Right: the same spectrum over the reference RC-35 curve, with the low-frequency bands rising through the shaded rumble tolerance (plus 5 dB below 500 Hz) so the noise is classified RC-35(R), and the hiss tolerance (plus 3 dB at and above 1000 Hz) shaded for comparison + +*The same spectrum rated both ways: NC tangency at the governing band (left) and the RC Mark II reference with the rumble excess (right).* + See the [Room Noise guide](https://jmrplens.github.io/phonometry/buildings/rooms/room-noise/) for usage. ## Room and building acoustics (ISO 18233, ISO 3382, ISO 16283, ISO 10140, EN 12354, ISO 12999, ISO 717, ISO 354) @@ -1397,6 +1549,10 @@ $$ i.e. a reversed cumulative sum in discrete time. Backward integration cancels the random fluctuation of a single squared IR: for a purely exponential energy decay $p^2(t) = e^{-a t}$ it gives $E(t) = e^{-a t}/a$, an exactly straight line $L(t) = -(10 a / \ln 10)\ t$. Background noise flattens $E(t)$, so integration is truncated at the crossing $t_1$ of the fitted decay line with the noise level and the missing tail is compensated by an exponential with the fitted rate; without that term the finite integral systematically **underestimates** $T$. +Squared impulse response with its Schroeder backward-integrated decay curve, and the EDT, T20 and T30 regression windows marked + +*A squared impulse response, its Schroeder backward integral and the EDT/T20/T30 regression windows of the next subsection.* + ### Regression windows and validity (ISO 3382-2, Clause 6, Annex B/C) Reverberation time is a least-squares fit $L = a + b t$ over a window, extrapolated to 60 dB via $T = -60/b$ (Annex C): **EDT** on 0 to −10 dB, **T20** on −5 to −25 dB, **T30** on −5 to −35 dB. A single-slope decay gives EDT = T20 = T30; a fast early / slow late double slope gives EDT < T30. Validity uses the dynamic-range rule of 5.3.3: the noise must sit at least 25 dB below the IR peak for EDT (evaluation span + 15 dB), tightened to 46 dB for T20 and 54 dB for T30 so the tail-compensation bias of a flagged-valid value stays within the 5 % JND. The **curvature** $C = 100\ (T_{30}/T_{20} - 1)$ % (Annex B) flags a non-straight decay above 10 %. @@ -1411,6 +1567,15 @@ $$ with $t_e = 50$ ms (C50, speech) or 80 ms (C80, music), and the **centre time** $T_s = \int_0^{\infty} t\ p^2\ dt / \int_0^{\infty} p^2\ dt$. For a pure exponential decay these have closed forms $C_{te} = 10 \log_{10}(e^{a t_e} - 1)$ and $T_s = 1/a$; at $T = 1$ s ($a = 13.8155$) they evaluate to C80 = 3.05 dB, C50 = −0.02 dB, D50 = 0.499 and Ts = 72.4 ms, the values the implementation reproduces. Table A.1 JNDs (EDT 5 %, C80 1 dB, D50 0.05, Ts 10 ms) bound how finely each is worth reporting. +ISO 3382 per-band parameters of a synthetic room impulse response: grouped EDT, T20 and T30 bars per octave band falling from about 1.4 s at 125 Hz to 0.7 s at 4 kHz, over a second panel where C50 and C80 rise with frequency + +*The closed forms above hold for a single exponential decay; a real room gives +one set of values per band. The upper panel is the decay itself (EDT, T20 and +T30 falling with frequency as air and surfaces absorb more), the lower panel +the early/late split of the same impulse response, and C50 and C80 rise with +frequency for the same reason the decay time falls — the later the energy, the +more of it the room has already removed.* + ### Open-plan spatial decay (ISO 3382-3, Clause 6) The spatial decay rate of A-weighted speech is the ordinary least-squares slope of $L_{p,A,S}$ against $\log_{10}(r/r_0)$ ($r_0 = 1$ m) over the 2–16 m positions, rescaled to a per-doubling figure, and the nominal level is read off the same line at 4 m: @@ -1421,6 +1586,16 @@ $$ The distraction distance rD and privacy distance rP are the distances where a **linear** (not logarithmic) regression of STI against distance crosses 0.50 and 0.20; a non-negative fitted slope (STI not falling with distance) makes them undefined, realising the standard's "can prove impossible to determine" note. +Open-plan spatial decay: A-weighted speech level and STI against source distance on a log axis, with the D2,S regression, the Lp,A,S,4m marker at 4 m and the rD and rP distance crossings + +*Two regressions on two different axes, which is what makes this clause hard to +hold in the head. The level line is fitted against $\log_{10}(r/r_0)$ and read +twice — as the slope $D_{2,S}$ per doubling, and at $r = 4$ m for +$L_{p,A,S,4\text{m}}$. The STI line is fitted against $r$ itself, **linearly**, +and read where it crosses 0.50 and 0.20 for the distraction and privacy +distances. If that second fit comes out flat or rising, the two distances do +not exist rather than being large.* + ### Image-source room impulse response (Kuttruff 4.1, Vorländer 11) A rectangular room reflects a point source in its walls; each reflection equals the free-field sound of a **mirror image** of the source. Mirroring a coordinate in a wall ($S_n = S - 2 d\,\mathbf{n}$, Vorländer Eq. 11.36) turns the source into a regular lattice of images, and the room impulse response is the sum of the direct sound and one delayed, attenuated impulse per image (Kuttruff Eqs. 4.4–4.5), @@ -1451,6 +1626,10 @@ Per one-third-octave band the level difference $D = L_1 - L_2$ (energy-averaged The single-number rating (ISO 717-1, Clause 4.4) shifts the Table 3 **reference curve** in 1 dB steps toward the measured curve until the sum of *unfavourable* deviations $\sum_i \max(0, \text{ref}_i + k - \text{meas}_i)$ is maximal but $\le$ 32.0 dB (16 thirds) or 10.0 dB (5 octaves); the rating $R_w$ is the shifted reference at 500 Hz. The **spectrum adaptation terms** are $C = X_{A1} - X_w$ and $C_{tr} = X_{A2} - X_w$ with $X_{Aj} = -10 \log_{10} \sum_i 10^{(L_{ij} - X_i)/10}$ (Table 4 spectra No. 1 pink noise, No. 2 urban traffic), each rounded to an integer. The ISO 717-1 Annex C worked example ($R_w = 30$, $C = -2$, $C_{tr} = -3$, unfavourable sum 31.8 dB) is reproduced exactly. +Measured one-third-octave sound reduction index with the shifted ISO 717-1 reference curve and the resulting weighted rating at 500 Hz + +*A measured R spectrum against the shifted ISO 717-1 reference: the rating is the shifted reference read at 500 Hz.* + ### Impact insulation and absorption (ISO 16283-2, ISO 717-2, ISO 354) Impact insulation swaps the airborne source for a standardized **tapping @@ -1469,6 +1648,16 @@ with the energetic sum $L_{n,\text{sum}} = 10 \log_{10} \sum_i 10^{L_i/10}$ over are reproduced exactly (thirds $L_{n,w} = 79$, $C_I = -11$; octaves $54$, $0$), via the same monotone shift search as ISO 717-1 run on the negated curves. +Measured one-third-octave normalized impact sound pressure level with the shifted ISO 717-2 reference curve and the resulting weighted rating read at 500 Hz + +*The mirror image of the airborne figure above, drawn so the flip is visible +rather than asserted. There the unfavourable deviations were counted where the +measurement fell **below** the reference; here they are counted where it rises +**above** it, because a louder receiving room is a worse floor. Everything else +is the same procedure: the reference curve shifted in 1 dB steps until the +unfavourable sum is as large as it can be without passing 32.0 dB, and the +rating read off the shifted reference at 500 Hz.* + Sound absorption (ISO 354) measures the equivalent absorption area from Sabine's relation applied to a reverberation room empty and with the specimen: $A = 55.3\ V/(c\ T) - 4 V m$ (the $4 V m$ term is the air absorption, $m$ the @@ -1571,6 +1760,15 @@ hard objects ($\psi \approx 0.072$) raises $A$ to 5.03 m² and drops $T$ to 0.9 s. The informative Annex D method for irregular spaces and unevenly distributed absorption is out of scope. +Two panels for a 60 cubic metre office with a bare versus acoustically-treated ceiling: the equivalent absorption area per octave band, much higher with the acoustic ceiling, and the reverberation time falling from about five seconds at low frequency for the bare room to under one second with the acoustic ceiling + +*What Formula 1 does band by band: the equivalent absorption area on the left +and the reverberation time it implies through Formula 5 on the right, for the +same room bare and treated. The Annex E case quoted above is the same +arithmetic on a smaller room — $A$ from 2.26 to 5.03 m² and $T$ from 2.1 to +0.9 s at 1 kHz — and the figure shows why the two move in opposite directions +and not proportionally.* + See the [Enclosed-Space Absorption guide](https://jmrplens.github.io/phonometry/buildings/rooms/enclosed-space-absorption/) for usage. ### Measurement uncertainty (ISO 12999-1) @@ -1625,6 +1823,19 @@ efficiency and point mobilities of the [vibration theory](https://jmrplens.github.io/phonometry/reference/theory/vibration/). The prediction is clean-room from Bies, Hansen & Howard (2017), Hopkins (2007) and Cremer, Heckl & Petersson (2005). +Four panels: the single-panel mass law with its coincidence dip, the double wall with the mass-spring-mass resonance and cavity gain, the plate radiation efficiency rising to unity above the critical frequency, and a composite wall whose 1 % open slit caps R at the open-area limit + +*The four behaviours of the paragraph above, one per panel. Top left, the mass +law rising 6 dB per octave with Sharp's coincidence dip cut into it at $f_c$. +Top right, the double wall: no better than the combined mass below $f_0$, then +the cavity term climbing until it saturates. Bottom left, the radiation +efficiency that decides how much of the plate's vibration becomes sound. Bottom +right, the ceiling a leak imposes: a 1 % open area holds the composite at +$10\log_{10}(S/S_a) = 20$ dB however good the wall is, which is the panel worth +showing a client.* + +To-scale cross-section of a 2 mm slit through a 100 mm wall: the hatched wall drawn in section with the narrow horizontal air gap at mid-height, an incident-sound arrow pointing at the gap from the left, the 100 mm wall depth and 2 mm slit width dimensioned, and circular transmitted wavefronts sketched spreading from the slit exit on the right + See the [Predicting Panel Sound Insulation](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) guide for usage. @@ -1845,6 +2056,18 @@ for f, pxx in zip(freq_bins[in_band], psd[in_band]): print(f, pxx) ``` +One-third-octave spectrum analysis of a six-tone signal with the raw PSD in the background + +*The two objects on one axis, for a six-tone signal at 20, 100, 500, 2000, +4000 and 15 000 Hz. The grey trace is a Welch PSD ($f_s$ = 48 kHz, +`nperseg = 8192`, so a fixed 5.86 Hz bin everywhere); the markers are the +standardized third-octave levels of the same signal. The bin width never +changes and the band width does: 4.60 Hz at the 20 Hz band, narrower than one +bin, against 230.77 Hz at 1 kHz and 3657 Hz at 16 kHz. That is why the top +bands each swallow hundreds of bins while the bottom ones sit inside a single +one, and why the two answers cannot be converted into each other. (The PSD +trace is offset vertically for legibility, so read its shape, not its level.)* + This keeps the two concepts separate: phonometry gives standardized fractional-octave levels, while Welch gives narrowband FFT bins. With `fs=100000` and `nperseg=2**15`, the Welch bin spacing is about 3.05 Hz. @@ -1947,6 +2170,10 @@ transform. Because the bilinear transform compresses frequencies near Nyquist, the default `high_accuracy` mode designs and runs the filter at an internally oversampled rate (≥ 144 kHz); see [Frequency Weighting](https://jmrplens.github.io/phonometry/signals/levels/weighting/). +A, C and Z frequency weighting curves of IEC 61672-1 with a zoom showing the positive region of the A curve (+1.27 dB at 2.5 kHz) + +*The three IEC 61672-1 weighting curves realized by the library, with the small positive region of the A curve magnified. The special B, D and AU curves are charted in [Special Weightings](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/).* + ## Time Integration Implemented as a first-order IIR exponential integrator: @@ -1966,6 +2193,10 @@ start from the first input energy, or pass a scalar/array with the previous mean-square output state. See [Why phonometry](https://jmrplens.github.io/phonometry/start/why-phonometry/) for the IEC 61672-1 tone-burst verification of this implementation. +Fast, Slow and Impulse time weighting responses to a noise burst + +*The exponential integrator at the three standard time constants: Fast follows a burst, Slow smooths it and Impulse holds its peak.* + ## G-weighting (ISO 7196) The G curve extends frequency weighting into the infrasound range. ISO 7196:1995 Table 1 (p. 2) defines it by four zeros at the origin and four complex-conjugate pole pairs, given as coordinates in Hz (multiplied by $2\pi$ to obtain rad/s): @@ -1983,6 +2214,13 @@ $$ The four zeros against eight poles shape the characteristic response: a rise of approximately **+12 dB/octave between 1 Hz and 20 Hz**, with roll-offs of approximately **24 dB/octave** below 1 Hz and above 20 Hz. Infrasound needs its own curve because near the hearing threshold the perceived loudness of very-low-frequency tones grows much more steeply with sound pressure level than at mid frequencies (a small dB increase above threshold produces a large loudness jump), so the A curve (anchored at 1 kHz) grossly misrepresents infrasonic annoyance. +G-weighting frequency response from 0.1 Hz to 1 kHz with the ISO 7196 Table 2 nominal values overlaid + +*The shape those four zeros and four pole pairs make, against the ISO 7196 +Table 2 nominal values: 0 dB at the 10 Hz anchor, the +12 dB/octave climb +through the infrasound decade below it, and the two 24 dB/octave roll-offs +that fence the curve off below 1 Hz and above 20 Hz.* + Since G acts on 0.25 Hz – 315 Hz, far below the Nyquist frequency at audio rates, the frequency warping of the plain bilinear transform (applied without prewarping) is negligible there: about 0.014 % at 315 Hz for $f_s = 48$ kHz, under 0.01 dB on the response. The internal oversampling used for the A/C designs (whose action extends to 16 kHz) is therefore not applied. See the [Special Weightings guide](https://jmrplens.github.io/phonometry/signals/levels/special-weightings/) for usage. @@ -1995,6 +2233,14 @@ $$ \mathrm{SEL} = L_{eq,T} + 10 \log_{10}\left(\frac{T}{T_0}\right), \qquad T_0 = 1\ \text{s} $$ +A vehicle pass-by level history with its Leq over the whole event and the equal-energy one-second SEL block + +*What the formula does to an event: the pass-by is replaced by a one-second +block of the same total energy, which is why SEL exceeds the event's $L_{eq}$ +whenever the event lasts longer than a second, and why two events of the same +SEL are interchangeable in a dose even when one is loud and short and the +other quiet and long.* + **Sound exposure** $E$ (IEC 61252, 3.1) is the time integral of the squared A-weighted sound pressure, expressed in pascal-squared hours: $$ @@ -2045,6 +2291,10 @@ The **pressure-intensity index** $\delta_{pI} = L_p - L_I$ measures how reactive See the [Sound Intensity guide](https://jmrplens.github.io/phonometry/devices/emission/intensity/) for usage. +Third-octave pressure and intensity levels for a plane progressive wave versus a standing wave + +*The p-p estimator in the two limiting fields: the gap between $L_p$ and $L_I$ is the pressure-intensity index that flags reactive fields.* + ## Measurement uncertainty (ISO/IEC Guide 98-3: GUM and Supplement 1) Domain budgets like ISO 12999-1 and ISO 9612 Annex C are instances of the @@ -2081,6 +2331,17 @@ inputs; the output is nearly trapezoidal, not Gaussian, so the interval is narrower than $\pm 1.96\,u$), and the GUM Annex H.1 end-gauge example gives $k = t_{0.99}(\nu_{\mathrm{eff}} = 16) = 2.92$ and $U_{99} = 93$ nm. +Two panels for the A-weighted level example. Left: the GUM uncertainty budget, a horizontal bar chart of each input's contribution to the combined uncertainty with a dashed line at uc of 0.407 dB. Right: the Monte Carlo output histogram overlaid with the GUM Gaussian and the shaded 95 percent coverage interval; the title reads Y equals 74.00 dB, U equals 0.86 dB, k equals 2.11 + +*The two routes on one problem — an A-weighted level, not the Supplement 1 +four-term example quoted above. Left is the law of propagation as a budget: +one bar per input, so the term worth reducing is visible. Right is the +Supplement 1 route: the Monte Carlo output distribution with the GUM Gaussian +drawn over it and the 95 % coverage interval shaded. Here the two agree, which +is what clause 8 calls validation; where the model is non-linear or the output +visibly non-Gaussian the histogram departs from the curve and the interval is +read off the fractiles instead.* + See the [GUM Uncertainty guide](https://jmrplens.github.io/phonometry/signals/metrology/gum-uncertainty/) for usage. ## References @@ -2185,6 +2446,10 @@ reproduced (E.2.1: 7.4 m/s² for 2.5 h → $A(8) = 4.1$ m/s²; E.3 forestry, three tools → 3.6 m/s²), as are the ISO 5349-1 Table C.1 exposure-duration rows. +The whole-body vertical weighting Wk in decibels over 0.4 to 100 Hz: a plateau near -6 dB below 2 Hz, a small +0.5 dB peak near 6 Hz and a roll-off to about -21 dB at 100 Hz + +*The Wk whole-body weighting realized from the ISO 8041-1 cascade.* + ### Multiple shocks (ISO 2631-5) Repeated shocks damage the lumbar spine through peak compression rather than @@ -2211,6 +2476,15 @@ over 20 years) is reproduced: $D_{zd} = 55.97$ m/s², $R = 1.22$, $\Pi = 0.37$. The Annex A finite-element spinal model (distributed by ISO as separate software) is out of scope. +Left: the seat-to-spine transmissibility rising to about 1.6 near a 5 Hz resonance then rolling off to near zero by 80 Hz. Right: the Weibull probability of lumbar injury versus the stress variable R for male and female, with the 10, 50 and 90 percent risk levels and the Annex C male example at R = 1.22, about 37 percent + +*The two objects of the model. Left, the clause 5.2 seat-to-spine +transmissibility: unity at DC, peaking at $|H| \approx 1.54$ near 5 Hz and +rolling off above it, which is why $W_k$ had to be replaced for shocks. Right, +the Table C.1 Weibull law $\Pi(R)$ with the Annex C worked example marked at +$R = 1.22$, $\Pi = 0.37$ — the risk rises steeply over a narrow band of $R$, so +a dose that doubles does not double the probability.* + See the [Human Vibration guide](https://jmrplens.github.io/phonometry/vibration/human/human-vibration/) and the [Multiple-Shock Vibration guide](https://jmrplens.github.io/phonometry/vibration/human/multiple-shock-vibration/) for usage. @@ -2240,6 +2514,25 @@ from Cremer, Heckl & Petersson (2005) and Hopkins (2007). See the [Predicting Panel Sound Insulation guide](https://jmrplens.github.io/phonometry/buildings/design/panel-sound-insulation/) for usage. +Normalized receptance, mobility and accelerance magnitudes of a single-degree-of-freedom resonator on a log-log frequency axis, all peaking at the resonance + +*Not one of the closed forms above: this is a **finite** one-degree-of-freedom +resonator, receptance, mobility and accelerance being the same resonance seen +through the three kinematic quantities. It is here as the contrast — the +infinite-structure results are frequency-independent or smoothly falling, +while anything finite resonates.* + +Driving-point mobility magnitude of a single-degree-of-freedom resonator on log-log axes, climbing along the stiffness line below resonance, falling along the mass line above it, and peaking at one over the damping coefficient at the resonance + +*The same point read as a diagnosis: below resonance the magnitude climbs the +**stiffness line** $\omega/k$, above it it falls along the **mass line** +$1/(\omega m)$, and the peak height is set by the damping alone. A real +structure has many such resonances, and the infinite-structure closed forms +above are the average the measured mobility oscillates about, not the value it +takes at a given frequency — which is why they are used with octave or +third-octave inputs and are least trustworthy in the lowest bands of a small +or lightly damped element.* + ## References - Griffin, M. J. (1996). *Handbook of human vibration*. Academic Press. diff --git a/site/src/components/home/Home.astro b/site/src/components/home/Home.astro index 60d39906f..180836102 100644 --- a/site/src/components/home/Home.astro +++ b/site/src/components/home/Home.astro @@ -28,6 +28,7 @@ const topicIdOf = (href) => { import { Code } from '@astrojs/starlight/components'; import ThemeImage from '../ThemeImage.astro'; import ReportPreview from '../ReportPreview.astro'; +import Video from '../Video.astro'; import type { HomeContent } from '../../data/home'; interface Props { @@ -89,6 +90,21 @@ const spectrum = lang === 'es'

{content.proof.title}

{content.proof.lead}

+ { + content.proof.banner && ( +