Spanish docs: UNE terminology, decimal commas, localized snippets and theory figures (#365)
* Normalize Spanish docs prose to UNE acoustic terminology
Sweep the Spanish pages for the non-UNE forms "presion sonora",
"potencia sonora" and "intensidad sonora" and normalize the prose to
the wording used by the official Spanish editions of the standards:
"presion acustica" (UNE-EN ISO 16283-2:2016, UNE-EN ISO 10052:2005,
UNE-EN ISO 3746:2011, UNE-ISO 226:2013), "potencia acustica"
(UNE-EN ISO 3746:2011, UNE-EN ISO 4871:2010, UNE-EN ISO 9614-1:2010),
"intensidad acustica" (UNE-EN 61043:1999, UNE-EN ISO 9614-1:2010) and
"nivel de presion acustica de impactos" (UNE-EN ISO 12354-2:2018,
UNE-EN ISO 717-2:2013). 92 replacements across 32 pages, prose only:
code snippets keep the labels they share with the generated figures.
Rename the intensity guide to "Intensidad acustica (p-p)" and the
structure-borne power guide to "Potencia acustica estructural de
equipos (EN 15657)", updating every cross-link text and the theory
anchor intensidad-sonora-iec-61043 accordingly. The API sidebar group
label becomes "Potencia acustica e intensidad" via api_taxonomy.py
with the generated sidebar regenerated.
* Use decimal commas in Spanish docs prose quantities
Sweep every Spanish page for decimal points leaking into prose numbers
and switch them to the comma the locale convention calls for: the
rotorcraft validation prose (fourteen tolerances such as 0,08 dB(A) and
0,5 s), the insulation-prediction worked example (53,6 dB / 53,8 dB),
the tone-audibility Annex E tone (137,3 Hz), the Mackenzie check value
(1550,744 m/s), the EPNL, loudness and absorption fiche descriptions
(98,3 EPNdB; 8,2 sonos and 70,4 fonios; 0,60 y 0,55), the junction
constants table and the third-octave band-edge table in the signal
analysis theory page. Code snippets, inline code, math, clause numbers
and quoted source text keep their points.
* Pass language="es" in Spanish figure-reproduction snippets
The <details> blocks under each localized figure in the Spanish guides
are meant to reproduce the _es variant shown on the page, but 82 of the
one-line result .plot() calls omitted the language="es" argument and
would render English axis labels instead. Add the argument across 33
guides, matching the pattern the intensity field-indicators snippet
already used. The three lab-insulation results whose plot() does not
take a language argument (lab airborne, lab impact and the
element-normalized intensity difference) are left as they were.
* Extend the UNE terminology sweep to sound absorption
Normalize "absorción sonora" to "absorción acústica" across the
Spanish pages (36 occurrences in 14 pages, including the EN 12354-6
guide title and the theory headings), the wording of UNE-EN ISO
3746:2011 and of the equivalent absorption area in UNE-EN ISO
10140-3:2011, UNE-EN ISO 12354-2:2018 and UNE-EN ISO 16283-2:2016, and
the same term the accredited report strings already use. Also restore
the accent in the theory index anchor to the renamed intensity heading,
since heading slugs keep accented characters.
* Theory pages: illustrate each section family with existing result figures
The seven theory pages carried no figures at all. Embed sixteen of the
existing generated figures (light and dark variants, Spanish variants on
the Spanish mirrors) where the concept matches the prose: weighting
curves, time integration and the p-p intensity estimator in the signal
analysis page; equal-loudness contours, the specific-loudness pattern
and the hearing-threshold panels in perception; NC/RC rating, the
Schroeder decay and the ISO 717-1 shifted reference in rooms and
buildings; the Lden profile, ISO 9613-1 absorption and the three sound
power routes in environment and transport; the scattering coefficient
and ISO 11654 rating in materials and surfaces; and the Wk weighting and
the resonator mobility triplet in vibration. Each embed reuses the alt
text of the guide that owns the figure and adds a one-line caption.
Also give the wave-simulation section hub the reading-order paragraph
its siblings already have, linking the closed-form pages the FDTD solver
cross-checks, in both languages.
* Address review findings from the Spanish locale sweeps
Second pass fixes flagged by review: five terminology occurrences the
line-based sweep missed because the noun and adjective were split by a
line wrap or emphasis markup (sound-power, rotorcraft-noise and two
section hubs); six Spanish pages that still embedded the English figure
variant although the _es variant exists (junction-transmission,
aircraft-noise airport contour, miso-coherence,
objective-intelligibility, psychoacoustic-annoyance twice); and 19 more
language="es" arguments on figure-reproduction plot calls the first
pass missed, chained-call receivers such as room.noise_criterion(spl)
.plot() and the axes-creating first call of the two-profile
atmospheric-refraction snippet among them. The lab-insulation plot
wrappers forward keyword arguments to the rating plot, so the three
calls excluded earlier now take the argument too. All Spanish python
fences re-checked to compile and EN/ES parity re-verified.
* Carry the UNE terminology into the generated-asset Spanish strings
Apply the same evidence-based decisions to every Spanish string source
that feeds generated assets: the translation tables of
generate_graphs.py and generate_diagrams.py, the _STRINGS tables of the
plot modules and the report i18n values. 35 strings change: "presión
acústica" (UNE-EN ISO 16283-2:2016, 10052:2005, 3746:2011),
"potencia acústica" (UNE-EN ISO 3746:2011, 4871:2010, 9614-1:2010),
"intensidad acústica" (UNE-EN 61043:1999, 9614-1:2010), "absorción
acústica" (UNE-EN ISO 3746:2011) and "nivel de presión acústica de
impactos" (UNE-EN ISO 12354-2:2018). Strings the UNE editions keep are
untouched: "emisión sonora", "exposición sonora", "campo sonoro",
"fuente sonora". Only Spanish values change; the English keys stay.
The two plot-i18n test assertions that pin the axis label follow, and
the eight Spanish doc fences that deliberately mirrored the old figure
labels now mirror the new ones.
* Regenerate the Spanish figure variants with the UNE terminology
make graphs after the string-source change: 48 files, all of them _es
or _es_dark variants (24 figure/diagram pairs), picking up "presión
acústica", "potencia acústica", "intensidad acústica", "absorción
acústica" and "nivel de presión acústica de impactos" in titles and
axis labels. The English variants are untouched. The committed example
fiches need no regeneration: every example in generate_reports.py
renders in English, so no changed Spanish report string reaches them.
* Align the intensity-fiche Spanish assertions with the UNE terminology
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Spanish docs: UNE terminology, decimal commas, localized snippets and theory figures (#365)
* Normalize Spanish docs prose to UNE acoustic terminology
Sweep the Spanish pages for the non-UNE forms "presion sonora",
"potencia sonora" and "intensidad sonora" and normalize the prose to
the wording used by the official Spanish editions of the standards:
"presion acustica" (UNE-EN ISO 16283-2:2016, UNE-EN ISO 10052:2005,
UNE-EN ISO 3746:2011, UNE-ISO 226:2013), "potencia acustica"
(UNE-EN ISO 3746:2011, UNE-EN ISO 4871:2010, UNE-EN ISO 9614-1:2010),
"intensidad acustica" (UNE-EN 61043:1999, UNE-EN ISO 9614-1:2010) and
"nivel de presion acustica de impactos" (UNE-EN ISO 12354-2:2018,
UNE-EN ISO 717-2:2013). 92 replacements across 32 pages, prose only:
code snippets keep the labels they share with the generated figures.
Rename the intensity guide to "Intensidad acustica (p-p)" and the
structure-borne power guide to "Potencia acustica estructural de
equipos (EN 15657)", updating every cross-link text and the theory
anchor intensidad-sonora-iec-61043 accordingly. The API sidebar group
label becomes "Potencia acustica e intensidad" via api_taxonomy.py
with the generated sidebar regenerated.
* Use decimal commas in Spanish docs prose quantities
Sweep every Spanish page for decimal points leaking into prose numbers
and switch them to the comma the locale convention calls for: the
rotorcraft validation prose (fourteen tolerances such as 0,08 dB(A) and
0,5 s), the insulation-prediction worked example (53,6 dB / 53,8 dB),
the tone-audibility Annex E tone (137,3 Hz), the Mackenzie check value
(1550,744 m/s), the EPNL, loudness and absorption fiche descriptions
(98,3 EPNdB; 8,2 sonos and 70,4 fonios; 0,60 y 0,55), the junction
constants table and the third-octave band-edge table in the signal
analysis theory page. Code snippets, inline code, math, clause numbers
and quoted source text keep their points.
* Pass language="es" in Spanish figure-reproduction snippets
The <details> blocks under each localized figure in the Spanish guides
are meant to reproduce the _es variant shown on the page, but 82 of the
one-line result .plot() calls omitted the language="es" argument and
would render English axis labels instead. Add the argument across 33
guides, matching the pattern the intensity field-indicators snippet
already used. The three lab-insulation results whose plot() does not
take a language argument (lab airborne, lab impact and the
element-normalized intensity difference) are left as they were.
* Extend the UNE terminology sweep to sound absorption
Normalize "absorción sonora" to "absorción acústica" across the
Spanish pages (36 occurrences in 14 pages, including the EN 12354-6
guide title and the theory headings), the wording of UNE-EN ISO
3746:2011 and of the equivalent absorption area in UNE-EN ISO
10140-3:2011, UNE-EN ISO 12354-2:2018 and UNE-EN ISO 16283-2:2016, and
the same term the accredited report strings already use. Also restore
the accent in the theory index anchor to the renamed intensity heading,
since heading slugs keep accented characters.
* Theory pages: illustrate each section family with existing result figures
The seven theory pages carried no figures at all. Embed sixteen of the
existing generated figures (light and dark variants, Spanish variants on
the Spanish mirrors) where the concept matches the prose: weighting
curves, time integration and the p-p intensity estimator in the signal
analysis page; equal-loudness contours, the specific-loudness pattern
and the hearing-threshold panels in perception; NC/RC rating, the
Schroeder decay and the ISO 717-1 shifted reference in rooms and
buildings; the Lden profile, ISO 9613-1 absorption and the three sound
power routes in environment and transport; the scattering coefficient
and ISO 11654 rating in materials and surfaces; and the Wk weighting and
the resonator mobility triplet in vibration. Each embed reuses the alt
text of the guide that owns the figure and adds a one-line caption.
Also give the wave-simulation section hub the reading-order paragraph
its siblings already have, linking the closed-form pages the FDTD solver
cross-checks, in both languages.
* Address review findings from the Spanish locale sweeps
Second pass fixes flagged by review: five terminology occurrences the
line-based sweep missed because the noun and adjective were split by a
line wrap or emphasis markup (sound-power, rotorcraft-noise and two
section hubs); six Spanish pages that still embedded the English figure
variant although the _es variant exists (junction-transmission,
aircraft-noise airport contour, miso-coherence,
objective-intelligibility, psychoacoustic-annoyance twice); and 19 more
language="es" arguments on figure-reproduction plot calls the first
pass missed, chained-call receivers such as room.noise_criterion(spl)
.plot() and the axes-creating first call of the two-profile
atmospheric-refraction snippet among them. The lab-insulation plot
wrappers forward keyword arguments to the rating plot, so the three
calls excluded earlier now take the argument too. All Spanish python
fences re-checked to compile and EN/ES parity re-verified.
* Carry the UNE terminology into the generated-asset Spanish strings
Apply the same evidence-based decisions to every Spanish string source
that feeds generated assets: the translation tables of
generate_graphs.py and generate_diagrams.py, the _STRINGS tables of the
plot modules and the report i18n values. 35 strings change: "presión
acústica" (UNE-EN ISO 16283-2:2016, 10052:2005, 3746:2011),
"potencia acústica" (UNE-EN ISO 3746:2011, 4871:2010, 9614-1:2010),
"intensidad acústica" (UNE-EN 61043:1999, 9614-1:2010), "absorción
acústica" (UNE-EN ISO 3746:2011) and "nivel de presión acústica de
impactos" (UNE-EN ISO 12354-2:2018). Strings the UNE editions keep are
untouched: "emisión sonora", "exposición sonora", "campo sonoro",
"fuente sonora". Only Spanish values change; the English keys stay.
The two plot-i18n test assertions that pin the axis label follow, and
the eight Spanish doc fences that deliberately mirrored the old figure
labels now mirror the new ones.
* Regenerate the Spanish figure variants with the UNE terminology
make graphs after the string-source change: 48 files, all of them _es
or _es_dark variants (24 figure/diagram pairs), picking up "presión
acústica", "potencia acústica", "intensidad acústica", "absorción
acústica" and "nivel de presión acústica de impactos" in titles and
axis labels. The English variants are untouched. The committed example
fiches need no regeneration: every example in generate_reports.py
renders in English, so no changed Spanish report string reaches them.
* Align the intensity-fiche Spanish assertions with the UNE terminology
Spanish docs: UNE terminology, decimal commas, localized snippets and theory figures (#365)
* Normalize Spanish docs prose to UNE acoustic terminology
Sweep the Spanish pages for the non-UNE forms "presion sonora",
"potencia sonora" and "intensidad sonora" and normalize the prose to
the wording used by the official Spanish editions of the standards:
"presion acustica" (UNE-EN ISO 16283-2:2016, UNE-EN ISO 10052:2005,
UNE-EN ISO 3746:2011, UNE-ISO 226:2013), "potencia acustica"
(UNE-EN ISO 3746:2011, UNE-EN ISO 4871:2010, UNE-EN ISO 9614-1:2010),
"intensidad acustica" (UNE-EN 61043:1999, UNE-EN ISO 9614-1:2010) and
"nivel de presion acustica de impactos" (UNE-EN ISO 12354-2:2018,
UNE-EN ISO 717-2:2013). 92 replacements across 32 pages, prose only:
code snippets keep the labels they share with the generated figures.
Rename the intensity guide to "Intensidad acustica (p-p)" and the
structure-borne power guide to "Potencia acustica estructural de
equipos (EN 15657)", updating every cross-link text and the theory
anchor intensidad-sonora-iec-61043 accordingly. The API sidebar group
label becomes "Potencia acustica e intensidad" via api_taxonomy.py
with the generated sidebar regenerated.
* Use decimal commas in Spanish docs prose quantities
Sweep every Spanish page for decimal points leaking into prose numbers
and switch them to the comma the locale convention calls for: the
rotorcraft validation prose (fourteen tolerances such as 0,08 dB(A) and
0,5 s), the insulation-prediction worked example (53,6 dB / 53,8 dB),
the tone-audibility Annex E tone (137,3 Hz), the Mackenzie check value
(1550,744 m/s), the EPNL, loudness and absorption fiche descriptions
(98,3 EPNdB; 8,2 sonos and 70,4 fonios; 0,60 y 0,55), the junction
constants table and the third-octave band-edge table in the signal
analysis theory page. Code snippets, inline code, math, clause numbers
and quoted source text keep their points.
* Pass language="es" in Spanish figure-reproduction snippets
The <details> blocks under each localized figure in the Spanish guides
are meant to reproduce the _es variant shown on the page, but 82 of the
one-line result .plot() calls omitted the language="es" argument and
would render English axis labels instead. Add the argument across 33
guides, matching the pattern the intensity field-indicators snippet
already used. The three lab-insulation results whose plot() does not
take a language argument (lab airborne, lab impact and the
element-normalized intensity difference) are left as they were.
* Extend the UNE terminology sweep to sound absorption
Normalize "absorción sonora" to "absorción acústica" across the
Spanish pages (36 occurrences in 14 pages, including the EN 12354-6
guide title and the theory headings), the wording of UNE-EN ISO
3746:2011 and of the equivalent absorption area in UNE-EN ISO
10140-3:2011, UNE-EN ISO 12354-2:2018 and UNE-EN ISO 16283-2:2016, and
the same term the accredited report strings already use. Also restore
the accent in the theory index anchor to the renamed intensity heading,
since heading slugs keep accented characters.
* Theory pages: illustrate each section family with existing result figures
The seven theory pages carried no figures at all. Embed sixteen of the
existing generated figures (light and dark variants, Spanish variants on
the Spanish mirrors) where the concept matches the prose: weighting
curves, time integration and the p-p intensity estimator in the signal
analysis page; equal-loudness contours, the specific-loudness pattern
and the hearing-threshold panels in perception; NC/RC rating, the
Schroeder decay and the ISO 717-1 shifted reference in rooms and
buildings; the Lden profile, ISO 9613-1 absorption and the three sound
power routes in environment and transport; the scattering coefficient
and ISO 11654 rating in materials and surfaces; and the Wk weighting and
the resonator mobility triplet in vibration. Each embed reuses the alt
text of the guide that owns the figure and adds a one-line caption.
Also give the wave-simulation section hub the reading-order paragraph
its siblings already have, linking the closed-form pages the FDTD solver
cross-checks, in both languages.
* Address review findings from the Spanish locale sweeps
Second pass fixes flagged by review: five terminology occurrences the
line-based sweep missed because the noun and adjective were split by a
line wrap or emphasis markup (sound-power, rotorcraft-noise and two
section hubs); six Spanish pages that still embedded the English figure
variant although the _es variant exists (junction-transmission,
aircraft-noise airport contour, miso-coherence,
objective-intelligibility, psychoacoustic-annoyance twice); and 19 more
language="es" arguments on figure-reproduction plot calls the first
pass missed, chained-call receivers such as room.noise_criterion(spl)
.plot() and the axes-creating first call of the two-profile
atmospheric-refraction snippet among them. The lab-insulation plot
wrappers forward keyword arguments to the rating plot, so the three
calls excluded earlier now take the argument too. All Spanish python
fences re-checked to compile and EN/ES parity re-verified.
* Carry the UNE terminology into the generated-asset Spanish strings
Apply the same evidence-based decisions to every Spanish string source
that feeds generated assets: the translation tables of
generate_graphs.py and generate_diagrams.py, the _STRINGS tables of the
plot modules and the report i18n values. 35 strings change: "presión
acústica" (UNE-EN ISO 16283-2:2016, 10052:2005, 3746:2011),
"potencia acústica" (UNE-EN ISO 3746:2011, 4871:2010, 9614-1:2010),
"intensidad acústica" (UNE-EN 61043:1999, 9614-1:2010), "absorción
acústica" (UNE-EN ISO 3746:2011) and "nivel de presión acústica de
impactos" (UNE-EN ISO 12354-2:2018). Strings the UNE editions keep are
untouched: "emisión sonora", "exposición sonora", "campo sonoro",
"fuente sonora". Only Spanish values change; the English keys stay.
The two plot-i18n test assertions that pin the axis label follow, and
the eight Spanish doc fences that deliberately mirrored the old figure
labels now mirror the new ones.
* Regenerate the Spanish figure variants with the UNE terminology
make graphs after the string-source change: 48 files, all of them _es
or _es_dark variants (24 figure/diagram pairs), picking up "presión
acústica", "potencia acústica", "intensidad acústica", "absorción
acústica" and "nivel de presión acústica de impactos" in titles and
axis labels. The English variants are untouched. The committed example
fiches need no regeneration: every example in generate_reports.py
renders in English, so no changed Spanish report string reaches them.
* Align the intensity-fiche Spanish assertions with the UNE terminology
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.
Structure-borne sound power and installed prediction reports via .report() (#327)
* Structure-borne sound power characterization and installed prediction reports via .report()
Add one-page PDF .report() fiches to the two structure-borne building
result types, closing the EN 15657 -> EN 12354-5 chain from source
characterization to installed prediction.
StructureBornePowerResult.report() renders an EN 15657:2018 reception-plate
structure-borne sound power characterization: the per-band spatial mean plate
velocity level Lv and the injected power level L_Ws (Formula 14), the L_Ws(f)
spectrum, and the boxed band-summed total L_Ws (dB re 1 pW) with the plate
mass per area m and area S. verbose=True adds the plate loss factor eta
column; the basis strip states Formula 14 and the conversion to the
plate-independent source quantities required before EN 12354-5.
InstalledSourceResult.report() renders an EN 12354-5:2009 installed
structure-borne sound prediction, clearly labelled a prediction and not a
measurement: the per-band installed power level L_Ws,inst, each transmission
path's normalised SPL L_n,s,ij and the combined total L_n,s, the per-path and
total L_n,s(f) spectra, and the boxed band-summed total L_n,s. verbose=True
adds one column per transmission path; the basis strip states Formulae 18a/17
and the prediction disclaimer.
Both fiches reuse the shared sound-power report engine (per-band table,
spectrum, boxed result and flow assembly), extended with a caller-supplied
verdict so the structure-borne quantity symbols are stated consistently, and
render in English and Spanish. Register one example per fiche, add structural
and number-presence tests, document the reports in the guides, and record the
additions in the changelog.
* Address review: per-path column [dB] units and Spanish accent
Add the [dB] unit to the installed-prediction table's per-path column headers
so they match the installed-power and total columns, and correct the accent in
the Spanish structure-borne power guide (acelerometro -> acelerometro with the
acute accent).
refactor: reorganize the package into twelve domain subpackages (3.2) (#162)
* refactor: private core to _internal, module-path shims, _plot skeleton (C1)
Foundation of the 3.2 package reorganization:
- _validation/_types/_warnings/_levels_math/utils move (git mv) into the
private phonometry/_internal/ package; ~90 import sites retargeted.
- New phonometry/_compat.py: dynamic sys.modules shims keep every moved
public module path importable for one deprecation cycle (silent import,
DeprecationWarning on attribute access); generalizes and absorbs the
former loudness.py PEP 562 shim (its 3.1 wording preserved).
- _plotting.py moves (git mv) to phonometry/_plot/common.py; a silent
explicit re-export shim keeps the old private path and the 84 lazy
.plot() call sites working until each domain retargets them.
- _warn_renamed gains a 'since' parameter (3.2 for the package moves).
- tests: new test_package_architecture.py (ast edge whitelist +
fresh-interpreter subpackage imports); test_deprecated_aliases gains the
frozen 85-path pre-move snapshot and the _MOVED shim behavior test;
pytest pythonpath=tests for the upcoming mirrored test tree.
- .git-blame-ignore-revs scaffold (hashes appended at the end of Phase 1).
* refactor: metrology subpackage (C2)
core, filter_design, frequencies, parametric_filters, levels, calibration,
compliance and uncertainty move (git mv) into phonometry/metrology/ with a
curated re-export __init__; the flat API and the old module paths keep
working (facade re-exports + _compat shims). Uncertainty renderers carve out
of _plot/common.py into _plot/metrology.py; the 14 metrology test files move
to tests/metrology/ and deep imports across tests/scripts point at the new
canonical paths.
* refactor: psychoacoustics subpackage (C3)
The thirteen psychoacoustics modules (Zwicker/ECMA/Moore-Glasberg loudness,
contours, sharpness, tonality, roughness, fluctuation strength, annoyance,
tonal audibility, private Zwicker tables) move into
phonometry/psychoacoustics/; renderers carve into _plot/psychoacoustics.py;
twelve test files move to tests/psychoacoustics/. The phonometry.loudness
alias now resolves to the relocated canonical module in a single hop.
* refactor: hearing and emission subpackages (C4+C5)
hearing/ gains threshold (renamed from hearing.py), noise-induced hearing
loss, occupational exposure, SII and STI; emission/ gains the ISO 3740
sound-power family, ISO 9614 intensity and ISO/TS 7849 vibration-based
power. Renderers carve into _plot/hearing.py and _plot/emission.py; the
eleven domain test files move under tests/hearing/ and tests/emission/.
* refactor: materials, room and building subpackages (C6-C8)
materials/ collects ISO 354/11654/12999-2 absorption, scattering-diffusion,
road absorption, impedance tube, airflow resistance and EN 29052-1 dynamic
stiffness; room/ the room-acoustics, impulse-response, open-plan, room-noise,
reverberation-prediction and EN 12354-6 modules; building/ the eleven-module
EN 12354 / ISO 717 / ISO 16283 insulation family with EN 15657 and
EN 12354-5 structure-borne sound. Renderers carve into the matching _plot
modules; twenty-six test files move under their domain directories.
* fix: complete the building plot TYPE_CHECKING imports (C8 follow-up)
* refactor: vibration and environmental subpackages (C9+C10)
vibration/ collects human vibration (ISO 8041-1/2631/5349), multiple-shock
(ISO 2631-5), mechanical mobility (ISO 7626-1) and transfer stiffness
(ISO 10846); environmental/ collects the renamed rating (Lden/Ldn) and
measurement (ISO 1996-2) modules plus outdoor propagation (ISO 9613-2),
air absorption (ISO 9613-1), wind-turbine noise (IEC 61400-11) and NT
ACOU 112 impulse prominence. Renderers carve into their _plot modules and
ten test files move under the domain directories.
* refactor: aircraft, underwater and electroacoustics subpackages (C11-C13)
aircraft/ collects EPNL, the renamed atmospheric absorption, ECAC Doc 29
airport contours and ECAC Doc 32 rotorcraft hemispheres; underwater/ the
renamed acoustics/propagation/sound_speed modules with ship noise, pile
driving, ambient noise, sonar equation, seabed reflection and the numerical
solvers; electroacoustics/ distortion and frequency response. Renderers
carve into their _plot modules; seventeen test files move under the domain
directories. All twelve domain subpackages are now in place.
* refactor: finalize the 3.2 package reorganization (C14)
- api-reference gains a Namespaces section (the twelve subpackages with
scope and the 'from phonometry import aircraft as air' idiom); README
quick-start notes the namespaces; CHANGELOG records the added namespaces,
the deprecated flat module paths and the pickle note.
- plot_excitation moves from _plot/common.py to _plot/room.py and the
facade imports it from there; _plot/common.py now holds only shared
helpers and infrastructure.
- hearing/ and environmental/ package __init__ re-export the full public
surface of their renamed modules (threshold, rating) so the pre-move
package-path imports stay silent, as promised by the migration contract.
- SonarCloud cpd exclusion follows core.py to metrology/; llms.txt
regenerated; .git-blame-ignore-revs lists the move commits and the local
blame config registers it.
Full suite 2647 passed; conformance 194/194; golden baseline byte-stable;
import time unchanged vs main (1.09 s vs 1.17 s).
* fix: re-export the measurement surface on phonometry.environmental
Subagent-review finding: the generated environmental/__init__.py missed the
ISO 1996-2 measurement module (its facade import block was momentarily
path-corrupted when the subpackage exports were collected), so
phonometry.environmental.assess_tonal_audibility and 15 sibling names
raised AttributeError while every other domain namespace was complete. Adds
the missing re-exports (including EnvironmentalMeasurementWarning on the
domain namespace) and a new architecture invariant test asserting that
every name the facade imports from a domain submodule is reachable on that
subpackage, so this class of gap cannot recur.
* test: forbid absolute self-imports in the architecture check
Review feedback: the ast edge extraction only saw relative imports, so an
absolute 'from phonometry.x import y' inside the package would bypass the
cross-package whitelist. Such imports now fail the architecture test
directly (the codebase has none; relative imports are the convention).
Building insulation: formula, fiche and citation fixes against the source standards (#357)
* Correct the ISO 15186-1 Formula (8) N-term and complete the fiche's Clause 8 content
The printed Formula (8) subtracts its 10 lg(N) term, which cannot be
derived: ISO 10140-2:2010 Formula (6) adds the multi-unit correction and
ISO 15186-2:2010 Formula (12) prints the same relation without an N term.
intensity_element_normalized_difference() now returns the derivable
per-unit value (+10 lg N), warns whenever n > 1 deviates from the print,
and the defect is registered in docs/ERRATA.md.
Clause 8 completeness of the intensity fiches: the method statement now
states the test-object and measurement-surface areas S / Sm carried by
the result (Clause 8 g), and report() accepts optional per-band FpI and
pressure-residual intensity index spectra annexed as table columns
(Clause 8 i). The 6.4.2 qualification wording is corrected to 'must not
exceed 10 dB' (the clause flags FpI > 10 dB), the band-set captions now
cite ISO 717-1:2020 Clause 5.3 (statement of results) instead of 4.4,
and the Table B.1 Kc oracle gains the three printed rows 3150/4000/5000
Hz (0,1 dB each) so all 21 rows are pinned.
* Label the road-traffic facade fiche R'tr,s instead of R'45
FacadeInsulationResult now carries the measurement method
(loudspeaker or road_traffic), and the ISO 16283-3 r_prime fiche
selects its labels from it: the road-traffic apparent index is the
distinct quantity R'tr,s (Clause 3.13, -3 dB all-angle correction),
so its report no longer prints the R'45 loudspeaker basis line
(Clause 3.12) over road-traffic numbers.
* Make the ISO 10848 fiche part selectable and register the Formula (20) misprint
The Dn,f / Ln,f quantities are defined in the ISO 10848-1:2006 frame
document (Formulas (4)/(5)); which part governs a measurement depends on
the construction under test, so hardcoding 'ISO 10848-2:2006' in the
basis line mislabelled Part 3 and Part 4 measurements. report() now
accepts part=2/3/4 (default 2) and names ISO 10848-2:2006,
ISO 10848-3:2006 or ISO 10848-4:2010 accordingly, in both languages.
ISO 10848-1:2006 Clause 8.1.1 Formula (20) prints the thin-plate
critical frequency with a spurious extra pi in the denominator (the 1,8
constant already carries 2 pi / sqrt(12)); the implementation was
already pi-free, and the defect is now registered in docs/ERRATA.md
with a misprint note in the critical_frequency docstring, corroborated
by ISO 12354-1:2017 and Hopkins Eq. 2.201.
* Normalize the K24 mass-ratio convention and correct the K24 errata entry
EN 12354-1:2000 prints its two K24 lines in two different mass-ratio
conventions without saying so: the E.5 line follows the annex's own
per-path definition M = lg(m'perp,i/m'i), while the Figure E.9 (E.7)
line is stated in the figure-axis variable lg(m2/m1). Read with the
declared per-path M, the E.9 print contradicts its own curve;
ISO 12354-1:2017 E.3.5 prints the same relation consistently in the
per-path convention (+14,1 M). Re-deriving both editions against the
figures shows the earlier errata entry misread this recast as a 2017
sign misprint; the entry is rewritten accordingly.
junction_vibration_reduction() now applies the documented per-path
mass_ratio = m'perp,i/m'i to every branch: the E.7 double-leaf branch
takes leaf-over-homogeneous ratios (validity m2/m1 > 3 reads
mass_ratio < 1/3) and evaluates 3,0 + 14,1 M + 5,7 M^2, numerically
identical to the 2000 figure. Also cites Kij,min as Formula (29)
(Clause 4.4.2) and documents the ISO 12354-1:2017 both-negative
lining-combination rule next to the 2000 form combine_linings()
implements.
* Broadcast a single-number source level across the EN 12354-5 path bands
installed_source_prediction() derived its band count from the source
levels alone, so a single-number characteristic power with per-band
path data either raised a spurious band-count error or produced a
one-element installed_power_level that crashed the fiche table with an
IndexError. The band count is now the widest per-band input, every
per-band input is validated against it (one value broadcasts), and the
result's installed_power_level is broadcast to the band axis; a fiche
regression test covers the scalar-source case.
Also corrects the coupling-term docstrings: D_C is not guaranteed
non-negative, since near a mounting resonance with comparable,
opposite-phase source and receiver mobilities the |Ys + Yi|^2 numerator
collapses (counterexample in the docstring).
* Use a prediction-aware footer disclaimer on the EN 12354 fiches
The shared footer printed 'The results relate only to the tested
specimen.' on every fiche, including prediction sheets that have no
tested specimen. footer_flow() now takes predicted=True (also exposed
through the shared sound-power renderer) and prints 'Predicted result:
the values relate only to the modelled configuration, not to a tested
specimen.' instead; the EN 12354-1/-2/-3 and EN 12354-5 prediction
fiches use it, in both languages.
Also corrects the dated designations on the prediction basis lines:
the 2000 editions are EN 12354-1/-2/-3:2000 (there was no ISO 12354 in
2000), so 'EN/ISO 12354-x:2000' is replaced by 'EN 12354-x:2000'.
* Declare the actual band set on the ISO 10052 basis line and align ES impact terms
The survey fiches accept both the octave and the one-third-octave band
sets, but their standard-basis lines hardcoded '(survey method, octave
bands)'; the line now follows the band set the reported curve actually
carries, in both languages (ISO 717-1:2020 Clause 5.3 / ISO 717-2:2020
Clause 4.4 require stating it). The remaining comments citing the
band-set statement as ISO 717-1 Clause 4.4 now cite 5.3 (717-2 keeps
4.4), and the ISO 10140 fiche docstring cites the test-report clause as
Clause 9 (Clause 6 is the test arrangement).
Spanish terminology of the field impact quantities is aligned with the
UNE editions: UNE-EN ISO 16283-2:2016 defines 'nivel de presión
acústica estandarizado/normalizado de ruido de impactos' (3.13/3.14),
now used by the ISO 16283-2 and ISO 10052 basis lines; the ISO 10140-3
and ISO 12354-2 strings already match their own UNE editions
(UNE-EN ISO 10140-3:2011 3.2, UNE-EN ISO 12354-2:2018 3.1.1/3.1.2) and
stay unchanged.
* Qualify a background-limited ISO 16251-1 result as a lower bound
When any band sits at the 1,3 dB limit of measurement (Formula (2), the
per-band values already reported as > delta-L), the fiche now prints
the boxed delta-Lw with a >= qualifier and a note stating it is a lower
bound, in both languages. A manually built result without CI,delta
prints the bare delta-Lw instead of fabricating a (+0) adaptation term.
The ISO 717-2:2020 Annex C.2 errata entry is extended with the second,
independent print defect: the example's 'Ln,sum = 75,2527 = 75 dB'
reproduces to all printed digits only as the energy sum of the wrong
column over the wrong range (the measured floor with covering, 16 bands
100-3150 Hz), while the A.2.1 sum of the covered reference floor over
100-2500 Hz rounds to 76 dB with either 800 Hz value, so CI,r = -2,
CI,delta = -9 and delta-Llin = 6 dB; the earlier claim that the 800 Hz
misprint alone shifted the CI chain is corrected.
* Regenerate the conformance report, API docs and affected fiche examples
The Kc Table B.1 conformance row now covers all 21 printed rows, the
building API pages pick up the revised docstrings, and the EN 12354
prediction and ISO 15186-1 example fiches are re-rendered with the
prediction footer, the corrected designations and the Clause 8 areas
statement (kept to one page). CHANGELOG entries under [Unreleased].
* Validate the frequency axis and the facade method on the building results
The installed structure-borne prediction now rejects a frequency axis whose
length differs from the resolved band count, so a result can no longer carry
an inconsistent per-band table. FacadeInsulationResult validates its method
on construction, closing the direct-construction path that would render an
unknown method as the loudspeaker quantity. The band-count note also names
the characteristic level and coupling term as width-setting inputs.