Skip to content

Say how the devices and environment measurements are made - #513

Merged
jmrplens merged 2 commits into
mainfrom
docs/devices-and-environment-practice
Aug 9, 2026
Merged

Say how the devices and environment measurements are made#513
jmrplens merged 2 commits into
mainfrom
docs/devices-and-environment-practice

Conversation

@jmrplens

@jmrplens jmrplens commented Aug 8, 2026

Copy link
Copy Markdown
Owner

The same contract as #512, for the pages that measure a machine, a transducer, a silencer and a landscape: how the number was obtained, and what it means. 215 findings closed across twenty-five English guides, with their Spanish twins.

Acquisition, from the clause

The instrumentation and geometry the six sound-power determination routes actually require (ISO 3741/3744/3745/9614/7849), the IEC 60268-3 operating point and the loudspeaker drive, the silencer substitution series of ISO 7235, the duct-path installation, and the provenance of every CNOSSOS input.

Numbers and claims that were wrong

  • The pages spoke of five determination routes throughout; there are six.
  • A non-determinable intensity band is P <= 0, not P < 0.
  • The ISO 3744 average is written with primes, over uncorrected levels, against the ISO 3745 average that folds K1i inside; the two had been conflated.
  • IEC 60268-3 standardises four two-tone tests, not three, and the 4:1 modulation-distortion ratio is an amplitude ratio, 12 dB and 24 dB below rated output, not a frequency ratio.
  • directivity_index is clause 8.4, not 8.6, and an Attenborough DOI resolved to the wrong edition.
  • The absorption area and the room constant were said to coincide "for a dead room". They differ by 10 lg[1/(1-alpha)], which is zero as alpha tends to zero: that is a live room, and the page's own 0.5 dB at alpha = 0.1 and 3.0 dB at 0.5 say so two lines below. Corrected in both editions.

About forty new plates and figures

Among them: the IEC 61043 residual-intensity check with the ISO 9614-2 probe reversal and its verdict strip; the ISO 3744 parallelepiped in top and side view with the partial-area split; the ISO 3745 forty-position hemisphere coloured at the twenty-position escalation; the duct path drawn as a place, with the sheet codes of Long's Table 14.9 and the occupant at 1.83 m; a silencer whose insertion loss goes 22.6 dB negative near 180 Hz through the real radiation impedance of its open end; and the inter-sample excursion of the page's own tone at fs/4 against the closed-form under-read.

Terminology

This is the first translation written after the glossary was settled, so the terms were applied rather than decided, and the checker reports no warnings. The four rows that are deliberately open were respected: the solver is named by its method, the coincidence dip and the display gain are recast, and detrending keeps its feminine article.

Where a Spanish heading carries an accent, a link to it uses the ASCII <span id> the corpus adopted in #508, because the percent-encoded slug reads as a dangling anchor to the accessibility audit.

Checks

The full CI set locally, twenty five steps, including the figure regeneration that #512 added after finding that the staleness check had been comparing the committed files with themselves.

Review in cubic

Summary by CodeRabbit

  • Documentation
    • Expanded guidance for HVAC noise, machine enclosures, duct paths, room-to-room transmission, and reactive silencers.
    • Added detailed measurement, modeling, validation, limitations, and report-generation guidance across sound-power, electroacoustics, environmental-noise, and propagation topics.
    • Added and updated illustrative diagrams, figures, worked examples, and Spanish translations.
    • Clarified standards coverage, compliance criteria, assumptions, and unsupported procedures.
    • Updated bibliography references and related links.

B12, B13, B14 and B17: 215 findings closed, 22 open. Message to be rewritten
before the PR.
Twenty-five Spanish pages brought level with the English of this branch: the
acquisition sections, forty new plates and plots with their Spanish variants,
and the corrected numbers.

The terminology was settled before this ran, so it was applied rather than
decided: apartado, hoja de características, desviación típica, incertidumbre
expandida, método de control for the survey method, and the four terms that are
recast rather than named. The checker reports no warnings.

One error is corrected in both editions rather than mirrored. The English said
the absorption area and the room constant "coincide for a dead room", where
they differ by 10 lg[1/(1-alpha)]: that is zero when alpha tends to zero, which
is a live room, and it grows with absorption. The page's own numbers, 0.5 dB at
alpha = 0.1 and 3.0 dB at 0.5, say so two lines further down. The translation
carried it over deliberately to keep parity and flagged it, which is how it was
found.
@bito-code-review

Copy link
Copy Markdown

You've reached the fair usage limit for the Bito Code Review Agent trial. Upgrade to a paid plan or contact support@bito.in for assistance. Learn more

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, we are unable to review this pull request

The GitHub API does not allow us to fetch diffs exceeding 300 files, and this pull request has 321

@bito-code-review

Copy link
Copy Markdown

You've reached the fair usage limit for the Bito Code Review Agent trial. Upgrade to a paid plan or contact support@bito.in for assistance. Learn more

@github-actions github-actions Bot added documentation Improvements or additions to documentation figures Generated plots, diagrams and animations site Documentation website i18n English and Spanish translations labels Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request substantially expands acoustics documentation, diagrams, figure generators, registries, generated reference text, and Spanish translations. It covers noise control, electroacoustics, sound-power methods, environmental propagation, source models, assessment workflows, and measurement standards.

Changes

Documentation and visualization expansion

Layer / File(s) Summary
Noise-control models and reports
docs/devices/noise-control/*, site/src/content/docs/*/devices/noise-control/*, site/public/llms/*noise-control*
Documents HVAC flow noise, duct paths, enclosures, room-to-room transmission, reactive silencers, report APIs, plane-wave limits, composite transmission loss, and ISO measurement distinctions.
Electroacoustic measurement guides
site/src/content/docs/*/devices/broadcast/*, site/src/content/docs/*/devices/electroacoustics/*
Expands guidance for programme loudness, distortion, loudspeakers, microphones, swept-sine analysis, measurement conditions, validation, reporting, and scope limits.
Sound-power and intensity methods
site/src/content/docs/*/devices/emission/*
Documents six sound-power routes, pressure and reverberation methods, intensity scanning, precision qualification, vibration-based power, ISO 4871 verification, and measurement constraints.
Environmental acoustics
site/src/content/docs/*/environment/*, scripts/figures/environment.py, scripts/diagrams/environment.py
Adds guidance and generated visuals for propagation, barriers, atmospheric refraction, CNOSSOS road and rail sources, wind-turbine noise, environmental assessment, impulse prominence, and Spanish regulation.
Registries, translations, and references
scripts/diagrams/i18n.py, scripts/diagrams/registry.py, scripts/figures/registry.py, site/src/content/docs/*/reference/bibliography.md
Registers new diagrams and figure generators, adds Spanish diagram strings, updates bibliography metadata, and exposes the expanded generated documentation.
Generated documentation mirrors
llms-full.txt
Mirrors the expanded HVAC, enclosure, and reactive-silencer documentation, including report examples and measurement distinctions.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

  • jmrplens/phonometry#232: Introduced the HVAC, enclosure, and reactive-silencer APIs documented here.
  • jmrplens/phonometry#89: Introduced environmental propagation and barrier functionality expanded by these guides and diagrams.
  • jmrplens/phonometry#331: Added the report APIs and reporting patterns documented for HVAC, enclosure, and reactive-silencer results.

Suggested labels: area: noise control, area: environmental, area: emission

Poem

A rabbit reviews each chart in the sun,
Where ducts hum softly and spectra run.
Barriers bend shadows, reports bloom bright,
Spanish labels make diagrams light.
Six power paths hop into view—
“Good documentation!” the rabbit says, “thump-thump, well done too!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: documenting how device and environmental measurements are performed.
Description check ✅ Passed The description explains the scope, corrections, figures, terminology, and local validation, and it aligns with the repository template.
Docstring Coverage ✅ Passed Docstring coverage is 85.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/devices-and-environment-practice

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added area: emission Sound power and source emission area: environmental area: noise control Silencers, barriers and noise control treatments labels Aug 8, 2026
@codecov

codecov Bot commented Aug 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.05%. Comparing base (fedf548) to head (065701e).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #513   +/-   ##
=======================================
  Coverage   97.05%   97.05%           
=======================================
  Files         295      295           
  Lines       39146    39146           
=======================================
  Hits        37992    37992           
  Misses       1154     1154           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 49

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
site/src/content/docs/devices/emission/sound-power-intensity.mdx (1)

629-631: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Stale "five determination routes" in six "See also" lists. This PR raised the documented route count from five to six in the body text and coverage sections of every emission guide, but the "See also" bullets that link to the Sound Power chooser still state five. The shared root cause is one missed edit class.

  • site/src/content/docs/devices/emission/sound-power-intensity.mdx#L629-L631: change "choosing among the five determination routes" to six.
  • site/src/content/docs/devices/emission/sound-power-pressure.mdx#L848-L850: change "choosing among the five determination routes" to six.
  • site/src/content/docs/devices/emission/sound-power-reverberation.mdx#L477-L479: change "choosing among the five determination routes" to six.
  • site/src/content/docs/es/devices/emission/sound-power-intensity.mdx#L662-L664: change "las cinco vías de determinación" to "las seis vías de determinación".
  • site/src/content/docs/es/devices/emission/sound-power-pressure.mdx#L881-L883: change "las cinco vías de determinación" to "las seis vías de determinación".
  • site/src/content/docs/es/devices/emission/sound-power-reverberation.mdx#L500-L502: change "las cinco vías de determinación" to "las seis vías de determinación".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/devices/emission/sound-power-intensity.mdx` around
lines 629 - 631, Update the Sound Power chooser “See also” bullet to reflect six
determination routes in all affected files:
site/src/content/docs/devices/emission/sound-power-intensity.mdx (629-631),
sound-power-pressure.mdx (848-850), and sound-power-reverberation.mdx (477-479);
update the Spanish wording to “las seis vías de determinación” in
site/src/content/docs/es/devices/emission/sound-power-intensity.mdx (662-664),
sound-power-pressure.mdx (881-883), and sound-power-reverberation.mdx (500-502).
site/public/llms/llms-devices-noise-control.txt (1)

758-758: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Regenerate the generated LLMS shard for this change.

llms-devices-noise-control.txt still contains stale text that the source MDX documents no longer have and can omit content that the MDX documents now include:

  • ReactiveSilencerResult now reports in the shard; duct-path.mdx says Every ReactiveSilencerResult reports.
  • Missing ## 3. How a silencer is measured (ISO 7235) and the nearby hardware limitation paragraph from silencers.mdx.

Generate the artifact with make llms instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/public/llms/llms-devices-noise-control.txt` at line 758, Regenerate the
generated LLMS artifact using make llms so llms-devices-noise-control.txt
reflects the current duct-path.mdx and silencers.mdx content, including the
updated “Every ReactiveSilencerResult reports” wording and the missing ISO 7235
section with its hardware limitation paragraph.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/devices/noise-control/noise-control.md`:
- Line 248: In the installation guidance near “Cooling openings,” hyphenate the
compound modifier by changing “short lined ducts” to “short-lined ducts.”

In `@docs/devices/noise-control/silencers.md`:
- Around line 308-310: Update the sentence around the modal filter requirements
so both the 3 dB fundamental attenuation and the 5 dB above-cut-on attenuation
limits apply to the fundamental mode, rather than assigning the 5 dB limit to
higher-order modes; preserve the existing loudspeaker and substitution-duct
requirements.
- Around line 283-286: Update the expansion_chamber example around freqs and
res.report to ensure every reported frequency is below the chamber’s computed
plane_wave_limit. Either restrict the frequency grid accordingly or adjust the
chamber geometry so the limit exceeds 4000 Hz, then regenerate the fiche output.
- Around line 302-307: Reverse the insertion-loss equation in the “What that
fiche is not” section so it computes substitution-duct level minus test-object
level, using the existing series II and series I labels respectively: D_i =
L_pII - L_pI.

In `@llms-full.txt`:
- Around line 17569-17580: Update render_reactive_silencer_report() so mean
transmission loss, peak transmission loss, and the PASS/FAIL verdict use only
frequencies at or below result.plane_wave_limit, or explicitly mark out-of-range
bands and exclude them from these aggregates. Regenerate the reactive-silencer
fiche with the corrected plane-wave-filtered results while preserving the
existing in-range reporting.

In `@scripts/diagrams/environment.py`:
- Around line 786-799: Update the two vertical source-height dimensions in the
diagram around ay, by, and their s.dim calls to include the same “out of scale”
annotation already used by the gauge dimension, while preserving their existing
labels, geometry, and styling.
- Line 819: Remove the s.circle call at the diagram-generation site so generated
SVGs no longer include the unused 0.1 px marker, leaving surrounding rendering
logic unchanged.
- Around line 711-723: Update the equivalent point-source position in the
diagram from rx0 + 5.5 * seg to rx0 + 6 * seg, including the hx assignment used
by the x = 60 m dimension and witness line. Keep the existing dL = 20 m segment
geometry and junction position unchanged so the dimension spans three segments
consistently.

In `@scripts/diagrams/i18n.py`:
- Around line 96-97: The Spanish translation for the key “1 — the day, split
into evaluation periods (Annex I A.1)” uses the inconsistent reference “Anexo I
A.2”; update that value to reference “Anexo I A.1” while preserving the rest of
the translation.
- Around line 16-119: Add Spanish entries for all six diagram title strings to
the translation map used by render(), _ES, so _ES.get(title, title) returns
Spanish titles instead of the English fallback. Keep the existing translation
style and place each title with its corresponding diagram section.
- Around line 2461-2463: Update the translations for the ⟨v_j²⟩ label and the
following “normal velocity, same bands” label so they preserve the
surface-averaged squared normal-velocity meaning, including “normal velocity” in
the second label and retaining the squared quantity in the first.

In `@scripts/figures/environment.py`:
- Around line 974-976: Update the docstring of
generate_iso9613_screening_anatomy to remove Kmet from its summary, so it
describes only the plotted caps and spent ground effect.
- Around line 1577-1578: Update the fixed-band marker in the plotting code near
the `left.plot` call so its geometry matches the “9.5.3: fixed 20-120 Hz band”
label: either extend the segment endpoint to 120 Hz or change it to a single
marker at the 70 Hz centre frequency, preserving the existing styling and label.
- Around line 1456-1463: Update the plotting loop around railway_source_power to
compute and retain each speed’s result once, then build each row’s plotted
values by indexing the cached results rather than invoking railway_source_power
separately for row 0 and row 1.
- Around line 1175-1198: Extend the `gradients` range in the plotting code so it
includes `grad_log` (approximately 0.4615), while preserving the existing curve
generation and marker placement. Ensure the second marker and annotation fall
within the swept curves and the plotted x-axis range matches the documented Rc
coverage.

In `@site/src/content/docs/devices/broadcast/program-loudness.mdx`:
- Around line 424-428: Correct the mathematically incorrect worst-case
explanation in site/src/content/docs/devices/broadcast/program-loudness.mdx
lines 424-428 by replacing the maximisation claim with the fact that a tone at
fs/4 can be phased so every sample lands at 1/√2. Apply the same translated
correction in site/src/content/docs/es/devices/broadcast/program-loudness.mdx
lines 436-441; no other changes are needed.

In `@site/src/content/docs/devices/electroacoustics/electroacoustics.mdx`:
- Line 33: Update the note near the Bendat & Piersol ISBN to cite chapter 6
instead of section/chapter 5, and revise any reused Bendat & Piersol references
in the swept-sine guide to use chapter 6 consistently.
- Around line 123-127: Update the electroacoustics documentation to use the
default n_harmonics order count and consistently describe the same ordered
harmonic list. Correct the 48 kHz, 7 kHz example to account for the plot loop
stopping at the first harmonic exceeding Nyquist, while preserving the
explanation that only below-Nyquist harmonics contribute to THD.
- Around line 410-415: Correct the electroacoustic reference explanation so the
combined-reference ratio is stated as d′ₘ = dₘ/5 when the denominator is a_f₁ +
a_f₂ = 5a_f₂. Update the corresponding dB comparison to say the
combined-reference datasheet value is 14 dB lower than the f₂-referenced value
returned by the function, and remove the incorrect multiplication and “five
times” wording.

In `@site/src/content/docs/devices/electroacoustics/loudspeakers.mdx`:
- Around line 732-736: Replace the dangling “Those two special cases” reference
with a direct introduction naming Long’s two special cases and Eqs. (18.21) and
(18.22) in
site/src/content/docs/devices/electroacoustics/loudspeakers.mdx:732-736. Apply
the equivalent Spanish wording, «Long da dos casos particulares (ecs. (18.21) y
(18.22))», in
site/src/content/docs/es/devices/electroacoustics/loudspeakers.mdx:762-766.

In `@site/src/content/docs/devices/emission/sound-power-pressure.mdx`:
- Around line 315-320: Make every listed standalone figure block self-contained
by adding the requested imports:
site/src/content/docs/devices/emission/sound-power-pressure.mdx lines 315-320
add emission, lines 559-569 add emission and plot_microphone_positions;
intensity.mdx lines 625-653 add emission; sound-power-intensity.mdx lines
348-352 add emission; sound-power-reverberation.mdx lines 276-285 add numpy;
sound-power.mdx lines 264-274 add emission; vibration-sound-power.mdx lines
307-321 add numpy and vibration; and the corresponding Spanish blocks at
intensity.mdx lines 654-657, sound-power-intensity.mdx lines 366-370,
sound-power-pressure.mdx lines 325-330, sound-power-reverberation.mdx lines
286-296, and sound-power.mdx lines 278-282 add their specified imports. In the
Spanish sound-power-pressure.mdx block at lines 580-591, also pass language="es"
to both plot_microphone_positions calls; the Spanish vibration-sound-power.mdx
block at lines 318-328 requires numpy and vibration imports.

In `@site/src/content/docs/devices/emission/vibration-sound-power.mdx`:
- Around line 225-231: Update the extraneous-correction snippets in
site/src/content/docs/devices/emission/vibration-sound-power.mdx:225-231 and
site/src/content/docs/es/devices/emission/vibration-sound-power.mdx:231-237 so
their output comments match the shadowed six-band lv value, changing the English
comment to 78.2 dB after the correction and the Spanish comment to 78.2 dB tras
la corrección; no direct code change is required.

In `@site/src/content/docs/devices/noise-control/duct-path.mdx`:
- Around line 277-281: The claim about analysis bands applies only to models
returning HvacSpectrumResult; revise the English text to explicitly exclude the
scalar helpers split_loss, plenum_attenuation, and equivalent_diameter. Make the
same clarification in the Spanish sentence “Todos toman las bandas de análisis
como primer argumento” in
site/src/content/docs/es/devices/noise-control/duct-path.mdx at lines 288-292;
no other sections require changes.
- Around line 236-242: Correct the fan-efficiency caption so its 12 dB example
matches the figure’s 55% operating point: update
site/src/content/docs/devices/noise-control/duct-path.mdx lines 236-242 to
describe a fan running at 55% of peak static efficiency, and apply the
equivalent correction to
site/src/content/docs/es/devices/noise-control/duct-path.mdx lines 246-253. Do
not change the surrounding staircase or figure content.

In `@site/src/content/docs/devices/noise-control/noise-control.mdx`:
- Around line 226-231: The Wells outlet-angle value is incorrect in both
language editions. In
site/src/content/docs/devices/noise-control/noise-control.mdx lines 226-231,
replace 1.8 dB with the recomputed 1.59 dB (or explicitly state the baseline
angle that produces 1.8 dB); apply the same correction to “1,8 dB” in
site/src/content/docs/es/devices/noise-control/noise-control.mdx lines 236-239.
- Around line 339-341: The wording in both noise-control documents incorrectly
refers to “the figure”; explicitly identify the worked enclosure_insertion_loss
snippet as the source of the stated values. Update
site/src/content/docs/devices/noise-control/noise-control.mdx lines 339-341 and
site/src/content/docs/es/devices/noise-control/noise-control.mdx lines 354-356,
making the equivalent English and Spanish wording changes without altering the
calculations.

In `@site/src/content/docs/devices/noise-control/room-to-room.mdx`:
- Around line 286-290: Correct the warning in both editions: in
site/src/content/docs/devices/noise-control/room-to-room.mdx lines 286-290,
state that substituting A for R on the source side over-predicts both room
levels without changing NR, while substituting R for A2 on the receiving side
over-predicts noise reduction; apply the equivalent correction in
site/src/content/docs/es/devices/noise-control/room-to-room.mdx lines 294-297,
preserving the existing bilingual explanations.

In `@site/src/content/docs/devices/noise-control/silencers.mdx`:
- Around line 678-693: Update the selection-figure snippets in
site/src/content/docs/devices/noise-control/silencers.mdx:678-693 and
site/src/content/docs/es/devices/noise-control/silencers.mdx:710-725 to use a
wider frequency sweep, such as np.geomspace(40.0, 8000.0, 4000), and recompute
both the expansion chamber and Helmholtz branch results on that grid before
applying the plane-wave filter.
- Around line 129-135: The expansion-chamber area-ratio claim is incorrect in
both editions. In site/src/content/docs/devices/noise-control/silencers.mdx
lines 129-135, change the statement so doubling the chamber cross-section is
worth about 6 dB, or state that quadrupling is worth about 11 dB; apply the
equivalent correction to
site/src/content/docs/es/devices/noise-control/silencers.mdx lines 133-139,
preserving the surrounding explanation.

In `@site/src/content/docs/environment/assessment/environmental-levels.mdx`:
- Around line 286-289: Remove the redundant shorter ISO 1996-2:2007 Annex C.5
reference immediately after the explanatory provenance comment, preserving the
detailed comment and worked example unchanged.

In `@site/src/content/docs/environment/assessment/impulsive-sound.mdx`:
- Around line 227-236: Update the introductory sentence above the
keyword-argument table to account for all five documented arguments, and remove
or revise the claim that none is optional in practice so it does not apply to
situational options such as reference_pressure and onset_rate_method. Keep the
existing argument descriptions and defaults unchanged.

In `@site/src/content/docs/environment/assessment/spanish-noise-regulation.mdx`:
- Around line 199-219: Update the “Show the code for this figure” block so it no
longer claims to reproduce the two-panel bar comparison: rename the summary to
reflect that it only reports values, remove the unused matplotlib import and
plt.show() call, and preserve the existing printed comparison.
- Around line 188-197: Update the 250 Hz example in the paragraph to state that
the survey method raises no flag because the band does not exceed both
neighbours by 8 dB: it exceeds the 200 Hz neighbour by exactly 8 dB but the 315
Hz neighbour by only 7 dB. Preserve the surrounding comparison of the RD,
survey, and Annex C methods.

In `@site/src/content/docs/environment/propagation/atmospheric-refraction.mdx`:
- Around line 450-453: Both editions refer to two validation figures, but only
the homogeneous-limit figure is present. In
site/src/content/docs/environment/propagation/atmospheric-refraction.mdx:450-453,
narrow the sentence to identify only the homogeneous-limit validation, and apply
the equivalent wording change to
site/src/content/docs/es/environment/propagation/atmospheric-refraction.mdx:472-473;
do not add a ray-geometry figure.
- Around line 151-156: Correct the wind-component convention in both
atmospheric-refraction passages so the displayed formula and worked values
agree: update the English text at
site/src/content/docs/environment/propagation/atmospheric-refraction.mdx:151-156
and the translated text at
site/src/content/docs/es/environment/propagation/atmospheric-refraction.mdx:160-165
to explicitly define the angle/sign convention or measure the angle from the
propagation direction, preserving the resulting +0.43 m/s downwind and -0.43 m/s
upwind values.
- Around line 148-149: Update the log_linear_sound_speed_profile example call to
explicitly pass ground_speed=340.0 while preserving the assertion that it
returns 344.0 m/s at 10 m.

In `@site/src/content/docs/environment/propagation/ground-barriers.mdx`:
- Line 179: The alt text at
site/src/content/docs/environment/propagation/ground-barriers.mdx:179 must
describe only output from generate_ground_reflection_coefficient, removing the
phase-curve and secondary |F(w)| axis claims. At
site/src/content/docs/environment/propagation/ground-barriers.mdx:374, update
the alt text for _d_barrier_four_paths to remove the side-panel path-length and
path-length-difference claims, while retaining its route legend and
thick-barrier inset. At
site/src/content/docs/es/environment/sources/cnossos-rail-emission.mdx:95,
update the _d_cnossos_rail alt text to remove claims that the diagram dimensions
the 25 m receiver distance or shades the lower half-space.
- Around line 516-519: Update the opening sentence in the barrier-model caveat
to refer to all three models, matching the three models named in the section and
the later “Both models” wording.

In `@site/src/content/docs/environment/sources/wind-turbine-noise.mdx`:
- Around line 67-74: Align the microphone-mounting geometry across both language
versions: in site/src/content/docs/environment/sources/wind-turbine-noise.mdx
lines 67-74, update the “Microphone diaphragm” row to match the figure alt
text’s diaphragm-in-board-plane geometry and re-check the split-board
requirement; in
site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx lines 69-74,
apply the same correction to the alt text and “Diafragma del micrófono” row,
ensuring both split-board descriptions remain consistent.
- Around line 211-221: The audibility-criterion alt text reverses the frequency
dependence. Update the English alt text in
site/src/content/docs/environment/sources/wind-turbine-noise.mdx lines 211-221
and the Spanish alt text in
site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx lines
222-233 so they state that the 1 kHz tone requires more emergence than the 100
Hz tone, by about 0.8 dB, while preserving the rest of the descriptions.

In `@site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx`:
- Around line 364-373: Corrige la explicación en el párrafo sobre 997 Hz:
elimina la afirmación de que es inconmensurable o que el tono nunca se repite, y
explica que la secuencia muestreada se repite tras 48 000 muestras a 48 kHz o 44
100 muestras a 44,1 kHz. Conserva la comparación con 1000 Hz indicando que la
ventaja de 997 Hz es su periodo discreto mucho más largo, y que n = fs contiene
exactamente un periodo completo.
- Around line 565-568: Corrige el texto alrededor de “transfer_function” para no
afirmar que un retardo fijo sin compensar reduce $\gamma^2$ ni que alargar el
segmento de Welch lo soluciona. Indica que el retardo fijo solo inclina la fase
de $H_1$ en una medición LTI ideal; atribuye una caída de coherencia a
desincronización de relojes, retardos variables entre segmentos, transitorios,
no linealidad o promediado insuficiente.
- Around line 241-245: Reemplaza la comparación de razones THD en el flujo que
calcula residual por una comparación entre tensiones RMS: calcula el residuo del
generador usando idle - signal, conservando el fundamental o la inyección del
generador según corresponda, y calcula el RMS de la distorsión en la misma banda
a partir de thd_f. Acepta el método solo cuando el RMS residual sea menor que un
tercio del RMS de distorsión; si no, conserva la bajada a harmonic_distortion.

In `@site/src/content/docs/es/devices/emission/intensity.mdx`:
- Line 408: En el encabezado “Medir el índice residual, y comprobar la sonda”,
añade un span vacío con el id ASCII
“medir-el-indice-residual-y-comprobar-la-sonda” para garantizar que el enlace
profundo funcione independientemente del slug generado por Astro.

In `@site/src/content/docs/es/environment/assessment/impulsive-sound.mdx`:
- Around line 230-239: Corrige el encabezado introductorio de esta sección para
que coincida con los cinco argumentos enumerados en la tabla (`dt`,
`calibration_offset`, `laeq`, `reference_pressure` y `onset_rate_method`), o
separa explícitamente los tres argumentos determinantes de los otros dos sin
alterar la tabla.

In
`@site/src/content/docs/es/environment/assessment/spanish-noise-regulation.mdx`:
- Around line 191-201: Reformula el párrafo alrededor del ejemplo de 250 Hz para
indicar que el indicador no se activa porque la banda supera a la vecina de 315
Hz en solo 7 dB; no atribuyas el resultado a superar a cada vecina en menos de 8
dB. Mantén explícita la condición del criterio de cribado para la diferencia
exacta de 8 dB respecto a la vecina de 200 Hz, usando la comparación definida
por el método.

In `@site/src/content/docs/es/environment/propagation/ground-barriers.mdx`:
- Around line 532-536: Corrige el recuento en el párrafo que comienza con “Los
cuatro modelos” para indicar que son tres modelos, manteniendo sin cambios la
explicación sobre pantallas bidimensionales infinitas y los efectos no
representados.

In `@site/src/content/docs/es/environment/propagation/outdoor-propagation.mdx`:
- Around line 774-781: Update the output comment following the loop to use
periods as decimal separators, matching Python’s print output and the file’s
other documented examples; change only the four documented values.

In `@site/src/content/docs/reference/bibliography.md`:
- Around line 978-983: Merge the duplicate Attenborough and Van Renterghem
citation into the existing English entry at
site/src/content/docs/reference/bibliography.md lines 904-909, incorporating its
chapter coverage, ISBNs, and guide links, then remove the duplicate at lines
978-983. Apply the same merge to the existing Spanish entry at
site/src/content/docs/es/reference/bibliography.md lines 946-952, incorporating
the duplicate content and removing the duplicate at lines 1023-1030; retain one
entry per language.

---

Outside diff comments:
In `@site/public/llms/llms-devices-noise-control.txt`:
- Line 758: Regenerate the generated LLMS artifact using make llms so
llms-devices-noise-control.txt reflects the current duct-path.mdx and
silencers.mdx content, including the updated “Every ReactiveSilencerResult
reports” wording and the missing ISO 7235 section with its hardware limitation
paragraph.

In `@site/src/content/docs/devices/emission/sound-power-intensity.mdx`:
- Around line 629-631: Update the Sound Power chooser “See also” bullet to
reflect six determination routes in all affected files:
site/src/content/docs/devices/emission/sound-power-intensity.mdx (629-631),
sound-power-pressure.mdx (848-850), and sound-power-reverberation.mdx (477-479);
update the Spanish wording to “las seis vías de determinación” in
site/src/content/docs/es/devices/emission/sound-power-intensity.mdx (662-664),
sound-power-pressure.mdx (881-883), and sound-power-reverberation.mdx (500-502).
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0097e899-69dc-400d-9f30-97b85258a3b6

📥 Commits

Reviewing files that changed from the base of the PR and between fedf548 and 065701e.

⛔ Files ignored due to path filters (260)
  • .github/images/barrier_thickness_gain.svg is excluded by !**/*.svg
  • .github/images/barrier_thickness_gain_dark.svg is excluded by !**/*.svg
  • .github/images/barrier_thickness_gain_es.svg is excluded by !**/*.svg
  • .github/images/barrier_thickness_gain_es_dark.svg is excluded by !**/*.svg
  • .github/images/channel_weight_map.svg is excluded by !**/*.svg
  • .github/images/channel_weight_map_dark.svg is excluded by !**/*.svg
  • .github/images/channel_weight_map_es.svg is excluded by !**/*.svg
  • .github/images/channel_weight_map_es_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_components.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_components_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_components_es.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_components_es_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_directivity.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_directivity_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_directivity_es.svg is excluded by !**/*.svg
  • .github/images/cnossos_rail_directivity_es_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_corrections.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_corrections_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_corrections_es.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_corrections_es_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_gradient.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_gradient_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_gradient_es.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_gradient_es_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_surfaces.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_surfaces_dark.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_surfaces_es.svg is excluded by !**/*.svg
  • .github/images/cnossos_road_surfaces_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_barrier_four_paths.svg is excluded by !**/*.svg
  • .github/images/diagram_barrier_four_paths_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_barrier_four_paths_es.svg is excluded by !**/*.svg
  • .github/images/diagram_barrier_four_paths_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_box_array.svg is excluded by !**/*.svg
  • .github/images/diagram_box_array_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_box_array_es.svg is excluded by !**/*.svg
  • .github/images/diagram_box_array_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_rail.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_rail_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_rail_es.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_rail_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_road.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_road_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_road_es.svg is excluded by !**/*.svg
  • .github/images/diagram_cnossos_road_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_distortion_bench.svg is excluded by !**/*.svg
  • .github/images/diagram_distortion_bench_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_distortion_bench_es.svg is excluded by !**/*.svg
  • .github/images/diagram_distortion_bench_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_duct_path.svg is excluded by !**/*.svg
  • .github/images/diagram_duct_path_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_duct_path_es.svg is excluded by !**/*.svg
  • .github/images/diagram_duct_path_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_ground_regions.svg is excluded by !**/*.svg
  • .github/images/diagram_ground_regions_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_ground_regions_es.svg is excluded by !**/*.svg
  • .github/images/diagram_ground_regions_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_loudspeaker_polar.svg is excluded by !**/*.svg
  • .github/images/diagram_loudspeaker_polar_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_loudspeaker_polar_es.svg is excluded by !**/*.svg
  • .github/images/diagram_loudspeaker_polar_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_machine_enclosure.svg is excluded by !**/*.svg
  • .github/images/diagram_machine_enclosure_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_machine_enclosure_es.svg is excluded by !**/*.svg
  • .github/images/diagram_machine_enclosure_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_microphone_references.svg is excluded by !**/*.svg
  • .github/images/diagram_microphone_references_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_microphone_references_es.svg is excluded by !**/*.svg
  • .github/images/diagram_microphone_references_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_radiation_factor.svg is excluded by !**/*.svg
  • .github/images/diagram_radiation_factor_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_radiation_factor_es.svg is excluded by !**/*.svg
  • .github/images/diagram_radiation_factor_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_rd1367_chain.svg is excluded by !**/*.svg
  • .github/images/diagram_rd1367_chain_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_rd1367_chain_es.svg is excluded by !**/*.svg
  • .github/images/diagram_rd1367_chain_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_residual_intensity_check.svg is excluded by !**/*.svg
  • .github/images/diagram_residual_intensity_check_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_residual_intensity_check_es.svg is excluded by !**/*.svg
  • .github/images/diagram_residual_intensity_check_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_reverberation_power.svg is excluded by !**/*.svg
  • .github/images/diagram_reverberation_power_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_reverberation_power_es.svg is excluded by !**/*.svg
  • .github/images/diagram_reverberation_power_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_room_to_room.svg is excluded by !**/*.svg
  • .github/images/diagram_room_to_room_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_room_to_room_es.svg is excluded by !**/*.svg
  • .github/images/diagram_room_to_room_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_silencer_iso7235.svg is excluded by !**/*.svg
  • .github/images/diagram_silencer_iso7235_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_silencer_iso7235_es.svg is excluded by !**/*.svg
  • .github/images/diagram_silencer_iso7235_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_sweep_bench.svg is excluded by !**/*.svg
  • .github/images/diagram_sweep_bench_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_sweep_bench_es.svg is excluded by !**/*.svg
  • .github/images/diagram_sweep_bench_es_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_wind_turbine_board.svg is excluded by !**/*.svg
  • .github/images/diagram_wind_turbine_board_dark.svg is excluded by !**/*.svg
  • .github/images/diagram_wind_turbine_board_es.svg is excluded by !**/*.svg
  • .github/images/diagram_wind_turbine_board_es_dark.svg is excluded by !**/*.svg
  • .github/images/duct_attenuation_elements.svg is excluded by !**/*.svg
  • .github/images/duct_attenuation_elements_dark.svg is excluded by !**/*.svg
  • .github/images/duct_attenuation_elements_es.svg is excluded by !**/*.svg
  • .github/images/duct_attenuation_elements_es_dark.svg is excluded by !**/*.svg
  • .github/images/duct_regenerated_noise.svg is excluded by !**/*.svg
  • .github/images/duct_regenerated_noise_dark.svg is excluded by !**/*.svg
  • .github/images/duct_regenerated_noise_es.svg is excluded by !**/*.svg
  • .github/images/duct_regenerated_noise_es_dark.svg is excluded by !**/*.svg
  • .github/images/duct_sheet_verification.svg is excluded by !**/*.svg
  • .github/images/duct_sheet_verification_dark.svg is excluded by !**/*.svg
  • .github/images/duct_sheet_verification_es.svg is excluded by !**/*.svg
  • .github/images/duct_sheet_verification_es_dark.svg is excluded by !**/*.svg
  • .github/images/enclosure_required_tl.svg is excluded by !**/*.svg
  • .github/images/enclosure_required_tl_dark.svg is excluded by !**/*.svg
  • .github/images/enclosure_required_tl_es.svg is excluded by !**/*.svg
  • .github/images/enclosure_required_tl_es_dark.svg is excluded by !**/*.svg
  • .github/images/extended_tube_geometry.svg is excluded by !**/*.svg
  • .github/images/extended_tube_geometry_dark.svg is excluded by !**/*.svg
  • .github/images/extended_tube_geometry_es.svg is excluded by !**/*.svg
  • .github/images/extended_tube_geometry_es_dark.svg is excluded by !**/*.svg
  • .github/images/fan_sound_power.svg is excluded by !**/*.svg
  • .github/images/fan_sound_power_dark.svg is excluded by !**/*.svg
  • .github/images/fan_sound_power_es.svg is excluded by !**/*.svg
  • .github/images/fan_sound_power_es_dark.svg is excluded by !**/*.svg
  • .github/images/feedback_stability.svg is excluded by !**/*.svg
  • .github/images/feedback_stability_dark.svg is excluded by !**/*.svg
  • .github/images/feedback_stability_es.svg is excluded by !**/*.svg
  • .github/images/feedback_stability_es_dark.svg is excluded by !**/*.svg
  • .github/images/frequency_response.svg is excluded by !**/*.svg
  • .github/images/frequency_response_dark.svg is excluded by !**/*.svg
  • .github/images/frequency_response_es.svg is excluded by !**/*.svg
  • .github/images/frequency_response_es_dark.svg is excluded by !**/*.svg
  • .github/images/ground_reflection_coefficient.svg is excluded by !**/*.svg
  • .github/images/ground_reflection_coefficient_dark.svg is excluded by !**/*.svg
  • .github/images/ground_reflection_coefficient_es.svg is excluded by !**/*.svg
  • .github/images/ground_reflection_coefficient_es_dark.svg is excluded by !**/*.svg
  • .github/images/hvac_elbow_flow_noise.svg is excluded by !**/*.svg
  • .github/images/hvac_elbow_flow_noise_dark.svg is excluded by !**/*.svg
  • .github/images/hvac_elbow_flow_noise_es.svg is excluded by !**/*.svg
  • .github/images/hvac_elbow_flow_noise_es_dark.svg is excluded by !**/*.svg
  • .github/images/intermodulation_tests.svg is excluded by !**/*.svg
  • .github/images/intermodulation_tests_dark.svg is excluded by !**/*.svg
  • .github/images/intermodulation_tests_es.svg is excluded by !**/*.svg
  • .github/images/intermodulation_tests_es_dark.svg is excluded by !**/*.svg
  • .github/images/iso9613_screening_anatomy.svg is excluded by !**/*.svg
  • .github/images/iso9613_screening_anatomy_dark.svg is excluded by !**/*.svg
  • .github/images/iso9613_screening_anatomy_es.svg is excluded by !**/*.svg
  • .github/images/iso9613_screening_anatomy_es_dark.svg is excluded by !**/*.svg
  • .github/images/itu_r_468_weighting.svg is excluded by !**/*.svg
  • .github/images/itu_r_468_weighting_dark.svg is excluded by !**/*.svg
  • .github/images/itu_r_468_weighting_es.svg is excluded by !**/*.svg
  • .github/images/itu_r_468_weighting_es_dark.svg is excluded by !**/*.svg
  • .github/images/k1_k2_corrections.svg is excluded by !**/*.svg
  • .github/images/k1_k2_corrections_dark.svg is excluded by !**/*.svg
  • .github/images/k1_k2_corrections_es.svg is excluded by !**/*.svg
  • .github/images/k1_k2_corrections_es_dark.svg is excluded by !**/*.svg
  • .github/images/microphone_noise_weightings.svg is excluded by !**/*.svg
  • .github/images/microphone_noise_weightings_dark.svg is excluded by !**/*.svg
  • .github/images/microphone_noise_weightings_es.svg is excluded by !**/*.svg
  • .github/images/microphone_noise_weightings_es_dark.svg is excluded by !**/*.svg
  • .github/images/microphone_patterns.svg is excluded by !**/*.svg
  • .github/images/microphone_patterns_dark.svg is excluded by !**/*.svg
  • .github/images/microphone_patterns_es.svg is excluded by !**/*.svg
  • .github/images/microphone_patterns_es_dark.svg is excluded by !**/*.svg
  • .github/images/outdoor_level_cascade.svg is excluded by !**/*.svg
  • .github/images/outdoor_level_cascade_dark.svg is excluded by !**/*.svg
  • .github/images/outdoor_level_cascade_es.svg is excluded by !**/*.svg
  • .github/images/outdoor_level_cascade_es_dark.svg is excluded by !**/*.svg
  • .github/images/partial_power_map.svg is excluded by !**/*.svg
  • .github/images/partial_power_map_dark.svg is excluded by !**/*.svg
  • .github/images/partial_power_map_es.svg is excluded by !**/*.svg
  • .github/images/partial_power_map_es_dark.svg is excluded by !**/*.svg
  • .github/images/precision_positions_arrays.svg is excluded by !**/*.svg
  • .github/images/precision_positions_arrays_dark.svg is excluded by !**/*.svg
  • .github/images/precision_positions_arrays_es.svg is excluded by !**/*.svg
  • .github/images/precision_positions_arrays_es_dark.svg is excluded by !**/*.svg
  • .github/images/radiation_efficiency_sigma.svg is excluded by !**/*.svg
  • .github/images/radiation_efficiency_sigma_dark.svg is excluded by !**/*.svg
  • .github/images/radiation_efficiency_sigma_es.svg is excluded by !**/*.svg
  • .github/images/radiation_efficiency_sigma_es_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_kf_ki.svg is excluded by !**/*.svg
  • .github/images/rd1367_kf_ki_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_kf_ki_es.svg is excluded by !**/*.svg
  • .github/images/rd1367_kf_ki_es_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_tonal_correction.svg is excluded by !**/*.svg
  • .github/images/rd1367_tonal_correction_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_tonal_correction_es.svg is excluded by !**/*.svg
  • .github/images/rd1367_tonal_correction_es_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_vs_iso_tonal.svg is excluded by !**/*.svg
  • .github/images/rd1367_vs_iso_tonal_dark.svg is excluded by !**/*.svg
  • .github/images/rd1367_vs_iso_tonal_es.svg is excluded by !**/*.svg
  • .github/images/rd1367_vs_iso_tonal_es_dark.svg is excluded by !**/*.svg
  • .github/images/refraction_homogeneous_check.svg is excluded by !**/*.svg
  • .github/images/refraction_homogeneous_check_dark.svg is excluded by !**/*.svg
  • .github/images/refraction_homogeneous_check_es.svg is excluded by !**/*.svg
  • .github/images/refraction_homogeneous_check_es_dark.svg is excluded by !**/*.svg
  • .github/images/reverberation_correction_terms.svg is excluded by !**/*.svg
  • .github/images/reverberation_correction_terms_dark.svg is excluded by !**/*.svg
  • .github/images/reverberation_correction_terms_es.svg is excluded by !**/*.svg
  • .github/images/reverberation_correction_terms_es_dark.svg is excluded by !**/*.svg
  • .github/images/room_to_room_partitions.svg is excluded by !**/*.svg
  • .github/images/room_to_room_partitions_dark.svg is excluded by !**/*.svg
  • .github/images/room_to_room_partitions_es.svg is excluded by !**/*.svg
  • .github/images/room_to_room_partitions_es_dark.svg is excluded by !**/*.svg
  • .github/images/shadow_zone_map.svg is excluded by !**/*.svg
  • .github/images/shadow_zone_map_dark.svg is excluded by !**/*.svg
  • .github/images/shadow_zone_map_es.svg is excluded by !**/*.svg
  • .github/images/shadow_zone_map_es_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_extended_tube.svg is excluded by !**/*.svg
  • .github/images/silencer_extended_tube_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_extended_tube_es.svg is excluded by !**/*.svg
  • .github/images/silencer_extended_tube_es_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_insertion_loss.svg is excluded by !**/*.svg
  • .github/images/silencer_insertion_loss_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_insertion_loss_es.svg is excluded by !**/*.svg
  • .github/images/silencer_insertion_loss_es_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_selection.svg is excluded by !**/*.svg
  • .github/images/silencer_selection_dark.svg is excluded by !**/*.svg
  • .github/images/silencer_selection_es.svg is excluded by !**/*.svg
  • .github/images/silencer_selection_es_dark.svg is excluded by !**/*.svg
  • .github/images/sound_power_grades_declaration.svg is excluded by !**/*.svg
  • .github/images/sound_power_grades_declaration_dark.svg is excluded by !**/*.svg
  • .github/images/sound_power_grades_declaration_es.svg is excluded by !**/*.svg
  • .github/images/sound_power_grades_declaration_es_dark.svg is excluded by !**/*.svg
  • .github/images/sound_power_methods.svg is excluded by !**/*.svg
  • .github/images/sound_power_methods_dark.svg is excluded by !**/*.svg
  • .github/images/sound_power_methods_es.svg is excluded by !**/*.svg
  • .github/images/sound_power_methods_es_dark.svg is excluded by !**/*.svg
  • .github/images/spacer_bandwidth.svg is excluded by !**/*.svg
  • .github/images/spacer_bandwidth_dark.svg is excluded by !**/*.svg
  • .github/images/spacer_bandwidth_es.svg is excluded by !**/*.svg
  • .github/images/spacer_bandwidth_es_dark.svg is excluded by !**/*.svg
  • .github/images/swept_sine_harmonic_responses.svg is excluded by !**/*.svg
  • .github/images/swept_sine_harmonic_responses_dark.svg is excluded by !**/*.svg
  • .github/images/swept_sine_harmonic_responses_es.svg is excluded by !**/*.svg
  • .github/images/swept_sine_harmonic_responses_es_dark.svg is excluded by !**/*.svg
  • .github/images/swept_sine_methods.svg is excluded by !**/*.svg
  • .github/images/swept_sine_methods_dark.svg is excluded by !**/*.svg
  • .github/images/swept_sine_methods_es.svg is excluded by !**/*.svg
  • .github/images/swept_sine_methods_es_dark.svg is excluded by !**/*.svg
  • .github/images/true_peak_intersample.svg is excluded by !**/*.svg
  • .github/images/true_peak_intersample_dark.svg is excluded by !**/*.svg
  • .github/images/true_peak_intersample_es.svg is excluded by !**/*.svg
  • .github/images/true_peak_intersample_es_dark.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_apparent_power.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_apparent_power_dark.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_apparent_power_es.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_apparent_power_es_dark.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_audibility_criterion.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_audibility_criterion_dark.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_audibility_criterion_es.svg is excluded by !**/*.svg
  • .github/images/wind_turbine_audibility_criterion_es_dark.svg is excluded by !**/*.svg
  • acta.pdf is excluded by !**/*.pdf
  • barrier_insertion_loss.pdf is excluded by !**/*.pdf
  • enclosure.pdf is excluded by !**/*.pdf
  • hvac-duct-noise.pdf is excluded by !**/*.pdf
  • loudspeaker.pdf is excluded by !**/*.pdf
  • microphone.pdf is excluded by !**/*.pdf
  • outdoor_attenuation.pdf is excluded by !**/*.pdf
  • tonality_fiche.pdf is excluded by !**/*.pdf
📒 Files selected for processing (61)
  • docs/devices/noise-control/noise-control.md
  • docs/devices/noise-control/silencers.md
  • llms-full.txt
  • scripts/diagrams/devices.py
  • scripts/diagrams/environment.py
  • scripts/diagrams/i18n.py
  • scripts/diagrams/registry.py
  • scripts/figures/devices.py
  • scripts/figures/environment.py
  • scripts/figures/registry.py
  • site/public/llms/llms-devices-noise-control.txt
  • site/src/content/docs/devices/broadcast/program-loudness.mdx
  • site/src/content/docs/devices/electroacoustics/electroacoustics.mdx
  • site/src/content/docs/devices/electroacoustics/loudspeakers.mdx
  • site/src/content/docs/devices/electroacoustics/microphones.mdx
  • site/src/content/docs/devices/electroacoustics/swept-sine-distortion.mdx
  • site/src/content/docs/devices/emission/intensity.mdx
  • site/src/content/docs/devices/emission/sound-power-intensity.mdx
  • site/src/content/docs/devices/emission/sound-power-pressure.mdx
  • site/src/content/docs/devices/emission/sound-power-reverberation.mdx
  • site/src/content/docs/devices/emission/sound-power.mdx
  • site/src/content/docs/devices/emission/vibration-sound-power.mdx
  • site/src/content/docs/devices/noise-control/duct-path.mdx
  • site/src/content/docs/devices/noise-control/noise-control.mdx
  • site/src/content/docs/devices/noise-control/room-to-room.mdx
  • site/src/content/docs/devices/noise-control/silencers.mdx
  • site/src/content/docs/environment/assessment/environmental-levels.mdx
  • site/src/content/docs/environment/assessment/impulsive-sound.mdx
  • site/src/content/docs/environment/assessment/spanish-noise-regulation.mdx
  • site/src/content/docs/environment/propagation/atmospheric-refraction.mdx
  • site/src/content/docs/environment/propagation/ground-barriers.mdx
  • site/src/content/docs/environment/propagation/outdoor-propagation.mdx
  • site/src/content/docs/environment/sources/cnossos-rail-emission.mdx
  • site/src/content/docs/environment/sources/cnossos-road-emission.mdx
  • site/src/content/docs/environment/sources/wind-turbine-noise.mdx
  • site/src/content/docs/es/devices/broadcast/program-loudness.mdx
  • site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx
  • site/src/content/docs/es/devices/electroacoustics/loudspeakers.mdx
  • site/src/content/docs/es/devices/electroacoustics/microphones.mdx
  • site/src/content/docs/es/devices/electroacoustics/swept-sine-distortion.mdx
  • site/src/content/docs/es/devices/emission/intensity.mdx
  • site/src/content/docs/es/devices/emission/sound-power-intensity.mdx
  • site/src/content/docs/es/devices/emission/sound-power-pressure.mdx
  • site/src/content/docs/es/devices/emission/sound-power-reverberation.mdx
  • site/src/content/docs/es/devices/emission/sound-power.mdx
  • site/src/content/docs/es/devices/emission/vibration-sound-power.mdx
  • site/src/content/docs/es/devices/noise-control/duct-path.mdx
  • site/src/content/docs/es/devices/noise-control/noise-control.mdx
  • site/src/content/docs/es/devices/noise-control/room-to-room.mdx
  • site/src/content/docs/es/devices/noise-control/silencers.mdx
  • site/src/content/docs/es/environment/assessment/environmental-levels.mdx
  • site/src/content/docs/es/environment/assessment/impulsive-sound.mdx
  • site/src/content/docs/es/environment/assessment/spanish-noise-regulation.mdx
  • site/src/content/docs/es/environment/propagation/atmospheric-refraction.mdx
  • site/src/content/docs/es/environment/propagation/ground-barriers.mdx
  • site/src/content/docs/es/environment/propagation/outdoor-propagation.mdx
  • site/src/content/docs/es/environment/sources/cnossos-rail-emission.mdx
  • site/src/content/docs/es/environment/sources/cnossos-road-emission.mdx
  • site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx
  • site/src/content/docs/es/reference/bibliography.md
  • site/src/content/docs/reference/bibliography.md

the mean insertion loss from 28.9 dB to 21.4 dB, and adding a 0.24 m² gap at the
door foot takes it to 15.1 dB. `composite_transmission_loss(areas,
reduction_indices)` builds that composite and `enclosure_insertion_loss` takes
its result directly as the panel $R$. Cooling openings become short lined ducts

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Hyphenate the compound modifier.

Change short lined ducts to short-lined ducts so the installation guidance is parsed consistently.

🧰 Tools
🪛 LanguageTool

[grammar] ~248-~248: Use a hyphen to join words.
Context: ...panel $R$. Cooling openings become short lined ducts rather than holes, and the m...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/devices/noise-control/noise-control.md` at line 248, In the installation
guidance near “Cooling openings,” hyphenate the compound modifier by changing
“short lined ducts” to “short-lined ducts.”

Source: Linters/SAST tools

Comment on lines +283 to +286
# A 0.5 m chamber of area ratio m = 8, at the octave-band centres.
freqs = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
res = expansion_chamber(freqs, length=0.5, chamber_area=0.08, pipe_area=0.01)
res.report(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep the report frequencies below plane_wave_limit.

The preceding text states that frequencies above the first higher-order cut-on are invalid. This example analyzes the 0.08 m² chamber through 4000.0 Hz, so it likely reports above-cut-on peaks and troughs. The larger chamber area also lowers the cut-on frequency relative to the earlier 0.04 m² example. Use a frequency grid below the computed limit, or choose geometry with a limit above 4 kHz, then regenerate the fiche. (iteh.eu)

Suggested correction
- freqs = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
+ freqs = np.array([63.0, 125.0, 250.0, 500.0])  # verify against plane_wave_limit
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# A 0.5 m chamber of area ratio m = 8, at the octave-band centres.
freqs = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
res = expansion_chamber(freqs, length=0.5, chamber_area=0.08, pipe_area=0.01)
res.report(
# A 0.5 m chamber of area ratio m = 8, at the octave-band centres.
freqs = np.array([63.0, 125.0, 250.0, 500.0]) # verify against plane_wave_limit
res = expansion_chamber(freqs, length=0.5, chamber_area=0.08, pipe_area=0.01)
res.report(
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/devices/noise-control/silencers.md` around lines 283 - 286, Update the
expansion_chamber example around freqs and res.report to ensure every reported
frequency is below the chamber’s computed plane_wave_limit. Either restrict the
frequency grid accordingly or adjust the chamber geometry so the limit exceeds
4000 Hz, then regenerate the fiche output.

Source: MCP tools

Comment on lines +302 to +307
**What that fiche is not.** The number in the box is a plane-wave prediction
from the declared geometry. The figure a supplier publishes is an **insertion
loss measured by substitution** to ISO 7235:2003: two series with everything
else unchanged, one with the test object installed and one with a substitution
duct in its place, differenced third octave by third octave as
`D_i = L_pI - L_pII`. The rig carries its own requirements — a sealed, lined

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Reverse the insertion-loss subtraction.

The text defines series I as the test object and series II as the substitution duct. Insertion loss must therefore be the substitution level minus the test-object level. The current D_i = L_pI - L_pII produces a negative value for an attenuating silencer. (cdn.standards.iteh.ai)

Suggested correction
- D_i = L_pI - L_pII
+ D_i = L_pII - L_pI
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**What that fiche is not.** The number in the box is a plane-wave prediction
from the declared geometry. The figure a supplier publishes is an **insertion
loss measured by substitution** to ISO 7235:2003: two series with everything
else unchanged, one with the test object installed and one with a substitution
duct in its place, differenced third octave by third octave as
`D_i = L_pI - L_pII`. The rig carries its own requirements — a sealed, lined
**What that fiche is not.** The number in the box is a plane-wave prediction
from the declared geometry. The figure a supplier publishes is an **insertion
loss measured by substitution** to ISO 7235:2003: two series with everything
else unchanged, one with the test object installed and one with a substitution
duct in its place, differenced third octave by third octave as
`D_i = L_pII - L_pI`. The rig carries its own requirements — a sealed, lined
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/devices/noise-control/silencers.md` around lines 302 - 307, Reverse the
insertion-loss equation in the “What that fiche is not” section so it computes
substitution-duct level minus test-object level, using the existing series II
and series I labels respectively: D_i = L_pII - L_pI.

Source: MCP tools

Comment on lines +308 to +310
loudspeaker box driving at least 6 dB and preferably 10 dB above the background,
a modal filter attenuating the fundamental by at least 3 dB and higher-order
modes by at least 5 dB above cut-on, a substitution duct matched within 5 % in

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Apply the 3 dB and 5 dB limits to the fundamental mode.

The sentence currently assigns the 5 dB limit to higher-order modes. ISO 7235 describes small attenuation of the fundamental mode and substantial attenuation of higher-order modes. Its numeric longitudinal-attenuation limits apply to the fundamental mode: 3 dB at the low-frequency end and 5 dB above higher-order-mode cut-on. (iteh.eu)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/devices/noise-control/silencers.md` around lines 308 - 310, Update the
sentence around the modal filter requirements so both the 3 dB fundamental
attenuation and the 5 dB above-cut-on attenuation limits apply to the
fundamental mode, rather than assigning the 5 dB limit to higher-order modes;
preserve the existing loudspeaker and substitution-duct requirements.

Source: MCP tools

Comment thread llms-full.txt
Comment on lines +17569 to +17580
# A 0.5 m chamber of area ratio m = 8, at the octave-band centres.
freqs = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0])
res = expansion_chamber(freqs, length=0.5, chamber_area=0.08, pipe_area=0.01)
res.report(
"silencer_fiche.pdf",
metadata=ReportMetadata(
specimen="Simple expansion-chamber muffler (m = 8, design case)",
measurement_standard="Munjal Eq. (3.27) four-pole model",
laboratory="Phonometry Reference Laboratory",
requirement=6.0, # minimum acceptable mean transmission loss
),
) # mean and peak transmission loss (dB)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Files:"
git ls-files | sed -n '1,120p' | rg -n 'llms-full|\.py$' | sed -n '1,120p'

echo
echo "Search for expansion_chamber / ReactiveSilencerResult / plane_wave_limit:"
rg -n "def expansion_chamber|class ReactiveSilencerResult|def report\(|plane_wave_limit|expansion_chamber" -S .

Repository: jmrplens/phonometry

Length of output: 164


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Working directory:"
pwd
echo

echo "Tracked files (first 200):"
git ls-files | sed -n '1,200p'

echo
echo "All files named llms-full.txt:"
git ls-files | rg '(^|/)llms-full\.txt$' || true

echo
echo "Search symbols in tracked Python/text files:"
rg -n "def expansion_chamber|class ReactiveSilencerResult|def report\(|plane_wave_limit|ReactiveSilencer|expansion_chamber|silencer_fiche|Phonometry Reference Laboratory|Munjal Eq" -S --glob '*.py' --glob '*.txt' --glob '*.md' . || true

Repository: jmrplens/phonometry

Length of output: 50375


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Source outline for silencers.py and plot/noise_control.py:"
ast-grep outline src/phonometry/noise_control/silencers.py --view compact || true
ast-grep outline src/phonometry/_plot/noise_control.py --view compact || true

echo
echo "ReactiveSilencerResult class section:"
sed -n '378,480p' src/phonometry/noise_control/silencers.py

echo
echo "Report Metadata validation and report rendering sources:"
sed -n '390,460p' src/phonometry/noise_control/silencers.py
sed -n '324,405p' src/phonometry/_plot/noise_control.py

echo
echo "Test silencer report relevant cases:"
sed -n '1,260p' tests/noise_control/test_silencer_report.py

echo
echo "Plane wave limit docs from reference:"
sed -n '670,680p' docs/reference/api/index.md
sed -n '262,280p' docs/devices/noise-control/silencers.md

echo
echo "Compute plane_wave_limit for example dimensions:"
python3 - <<'PY'
import math
def plane_wave_limit_area(area, c=343.0):
    dia = (4*area/math.pi)**0.5
    return 0.586*c/dia
for area in (0.01, 0.02, 0.04, 0.08):
    print(area, plane_wave_limit_area(area))
print("example frequencies:", [63,125,250,500,1000,2000,4000])
PY

Repository: jmrplens/phonometry

Length of output: 24635


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Silencer report implementation:"
sed -n '420,512p' src/phonometry/noise_control/silencers.py

echo
echo "Expansion chamber constructor report/limit section:"
sed -n '550,595p' src/phonometry/noise_control/silencers.py

echo
echo "Behavioral probe: model reported validity for current implementation's visible slices:"
python3 - <<'PY'
import ast
from pathlib import Path

source = Path("src/phonometry/noise_control/silencers.py").read_text()
tree = ast.parse(source)

# Locate ReactiveSilencerResult.report method.
for node in ast.walk(tree):
    if isinstance(node, ast.FunctionDef) and node.name == "report" and any(
        isinstance(base, ast.Name) and base.id == "ReactiveSilencerResult"
        for base in ast.walk(node)
    ):
        method_src = ast.get_source_segment(source, node)
        print(f"ReactiveSilencerResult.report span: {node.lineno}-{node.end_lineno}")
        print("contains plane_wave_limit? ", "plane_wave_limit" in method_src)
        print("contains warn_above? ", "warn_above" in method_src or "PlaneWaveWarning" in method_src)
        print("contains filtering? ", any(s in method_src for s in ("<", ">", ">=b", "<=b", "idx", "mask", "where", "keep", "exclude")))
        print("contains verdict calculation? ", any(s in method_src for s in ("PASS", "FAIL", "requirement", "mean", "TL")))
        break

limit_node = None
for node in tree.body:
    if isinstance(node, ast.FunctionDef) and node.name == "expansion_chamber":
        limit_node = node
        break

print("\nexpansion_chamber uses warn_above_plane_wave_limit?", bool(limit_node and "warn_above_plane_wave_limit" in ast.get_source_segment(source, limit_node) if limit_node else False))
PY

Repository: jmrplens/phonometry

Length of output: 6182


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Find render_reactive_silencer_report source and relevant report functions:"
rg -n "def render_reactive_silencer_report|render_reactive_silencer_report|Mean transmission loss|Peak transmission|PASS|FAIL|requirement|invalid|plane_wave_limit" src/phonometry/tests/scripts -S

echo
echo "Silencer report renderer candidates:"
fd -i 'silencer|report' src/phonometry tests/scripts | sed -n '1,120p'

echo
echo "Read report renderer source sections:"
for f in $( rg -l "def render_reactive_silencer_report|render_reactive_silencer_report" src; do
  echo "--- $f"
  rg -n "def render_reactive_silencer_report|Mean transmission loss|Peak transmission|PASS|FAIL|requirement|plane_wave|invalid|warnings|not marked|mark|exclude" "$f" -C 8
done

Repository: jmrplens/phonometry

Length of output: 361


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Find render_reactive_silencer_report source:"
rg -n "def render_reactive_silencer_report|render_reactive_silencer_report" -S .

echo
echo "Read renderer source:"
f="$(rg -l "def render_reactive_silencer_report|render_reactive_silencer_report" -S . | head -n 1)"
echo "FILE=$f"
wc -l "$f"
sed -n '1,180p' "$f"

Repository: jmrplens/phonometry

Length of output: 7646


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Reactive silencer report renderer source:"
sed -n '1,260p' src/phonometry/_report/silencer.py

echo
echo "Static implementation facts:"
python3 - <<'PY'
from pathlib import Path
import ast

src = Path("src/phonometry/_report/silencer.py").read_text()
tree = ast.parse(src)
for node in tree.body:
    if isinstance(node, ast.FunctionDef) and node.name == "render_reactive_silencer_report":
        print(f"span {node.lineno}-{node.end_lineno}")
        code = ast.get_source_segment(src, node)
        for term in ["plane_wave_limit", "warnings", "PASS", "FAIL", "requirement", "transmission_loss", "mean", "peak", "invalid"]:
            print(f"{term}:", term in code)
PY

Repository: jmrplens/phonometry

Length of output: 9629


Keep the reactive-silencer fiche inside the plane-wave range.

This fiche is described as a plane-wave four-pole prediction, but render_reactive_silencer_report() builds mean/peak/verdict from all requested bands and does not exclude or mark frequencies above result.plane_wave_limit. Bands above that limit can change the displayed mean, peak, and PASS/FAIL verdict; exclude or mark them and regenerate the fiche.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@llms-full.txt` around lines 17569 - 17580, Update
render_reactive_silencer_report() so mean transmission loss, peak transmission
loss, and the PASS/FAIL verdict use only frequencies at or below
result.plane_wave_limit, or explicitly mark out-of-range bands and exclude them
from these aggregates. Regenerate the reactive-silencer fiche with the corrected
plane-wave-filtered results while preserving the existing in-range reporting.

Comment on lines +241 to +245
```python
# `electroacoustics` importado arriba. Captura `idle` con la misma longitud que
# `signal`, con el generador silenciado, y ejecuta sobre ella la misma llamada.
residual = electroacoustics.thd(idle, fs, 1000.0, kind="F")
print(residual < thd_f / 3.0) # False -> descartar, y bajar a harmonic_distortion

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
rg -n -C 6 \
  'electroacoustics\.thd\(idle|idle_channel_noise|thd_plus_noise|harmonic_analysis|distortion_residual|residual.*\/ *3' \
  . --glob '*.mdx' --glob '*.py'

Repository: jmrplens/phonometry

Length of output: 50377


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

echo "== target lines =="
sed -n '215,232p' site/src/content/docs/devices/electroacoustics/electroacoustics.mdx
sed -n '215,232p' site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx

echo
echo "== thd implementation key parts =="
sed -n '1,180p' src/phonometry/electroacoustics/distortion.py

echo
echo "== harmonic_distortion implementation outline/parts =="
sed -n '180,360p' src/phonometry/electroacoustics/distortion.py

echo
echo "== deterministic probe: thd on silence vs tone + harmonic residual =="
python3 - <<'PY'
import numpy as np
import inspect
from pathlib import Path
exec(Path("src/phonometry/electroacoustics/distortion.py").read_text(encoding="utf-8"))

fs = 48000
n = fs
t = np.arange(n) / fs

print("thd signature:", inspect.signature(thd))
print("thd source first 120 lines:")
for i, line in enumerate(inspect.getsource(thd).splitlines()[:120], 1):
    print(f"{i:03d}: {line}")

# Simulate exactly the documented example shape using the default AES17 band.
# Use an explicit fundamental to bypass auto-detection; silence has no fundamental.
try:
    silent = thd(np.zeros(n), fs, 1000.0, kind="F")
    print("silent_thd:", silent)
except Exception as e:
    print("silent_thd_error:", type(e).__name__, e)

tone = np.sin(2 * np.pi * 1000.0 * t)
tone += 0.5 * np.sin(2 * np.pi * 2000.0 * t)
distortion_only_thd = thd(tone, fs, 1000.0, kind="F")
print("distortion_only_thd:", distortion_only_thd)
print("distortion_only_thd < distortion_only_thd / 3.0 passes?", distortion_only_thd < distortion_only_thd / 3.0)

try:
    silence_with_fundamental = thd(np.zeros(n), fs, 1000.0, kind="F", n_harmonics=10, window="hann")
    print("zero_thd_at_1kHz:", silence_with_fundamental)
    print("zero_thd_at_1kHz < distortion_only_thd / 3.0 passes?", silence_with_fundamental < distortion_only_thd / 3.0)
except Exception as e:
    print("zero_thd_at_1kHz_error:", type(e).__name__, e)

# Check residual voltage for tone + explicit residual.
signal_residual = np.concatenate((tone * np.zeros(n//2), 0.01 * np.sin(2 * np.pi * 2000.0 * t[a...n])))
PY

Repository: jmrplens/phonometry

Length of output: 17043


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
import numpy as np
import importlib.util
spec = importlib.util.spec_from_file_location("distortion", "src/phonometry/electroacoustics/distortion.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
thd = module.thd

fs = 48000
n = fs
t = np.arange(n) / fs

print("silent_thd_error:", end=" ")
try:
    print(thd(np.zeros(n), fs, 1000.0, kind="F"))
except Exception as e:
    print(f"{type(e).__name__}: {e}")

tone = np.sin(2 * np.pi * 1000.0 * t)
distortion_only_thd = thd(tone, fs, 1000.0, kind="F")
print("distortion_only_thd:", distortion_only_thd)
print("distortion_only_thd < distortion_only_thd / 3.0 passes:", distortion_only_thd < distortion_only_thd / 3.0)

silent_explicit = thd(np.zeros(n), fs, 1000.0, kind="F")
print("silent_explicit_fundamental:", silent_explicit)
print("silent_explicit_fundamental < distortion_only_thd / 3.0 passes:", silent_explicit < distortion_only_thd / 3.0)

idle_residual = 0.5 * np.sin(2 * np.pi * 2000.0 * t)
signal_residual = np.concatenate((tone[:n//2], 0.5 * np.sin(2 * np.pi * 2000.0 * t[n//2:])))
print("distortion_only_thd_with_0.5_second_harmonic:", thd(signal_residual, fs, 1000.0, kind="F"))
print("idle_residual<distortion_thd, idle only:", thd(idle_residual, fs, 1000.0, kind="F"))
PY

echo
echo "== matching API functions for residual/voltage checks =="
rg -n -C 3 'def _aes17_rms_pair|def thd_plus_noise|def dynamic_range|def harmonic_distortion|def weighted_thd|def harmonic_analysis' src/phonometry/electroacoustics/distortion.py src/phonometry/electroacoustics/noise_measurements.py

echo
sed -n '360,390p' site/src/content/docs/devices/electroacoustics/electroacoustics.mdx
sed -n '360,390p' site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx

Repository: jmrplens/phonometry

Length of output: 275


🌐 Web query:

jmrplens phonometry thd implementation kind F harmonic rms fundamental ratio

💡 Result:

The phonometry library, developed by José Manuel Requena Plens, provides a standards-conformant Python toolkit for acoustic measurements [1][2]. Regarding the specific implementation of Total Harmonic Distortion (THD) and related metrics, the library prioritizes compliance with standards such as IEC 60268-3 [1]. THD Implementation and Terminology In the context of electrical and acoustic signal analysis, THD is generally calculated as the ratio of the RMS sum of harmonic components to a reference value [3][4]. The two primary conventions are: 1. THD-F (Fundamental): The ratio of the RMS sum of all harmonic components to the RMS value of the fundamental frequency [5][3][6]. THD-F = (sqrt(V2^2 + V3^2 +... + Vn^2)) / V1 [3][6] 2. THD-R (RMS): The ratio of the RMS sum of all harmonic components to the total RMS value of the signal [5][3]. THD-R = (sqrt(V2^2 + V3^2 +... + Vn^2)) / sqrt(V1^2 + V2^2 +... + Vn^2) [3] "Kind F" likely refers to the THD-F convention, which uses the fundamental frequency as the reference denominator, common in power systems and various electroacoustic standards [5][3]. The phonometry library implements these calculations with strict adherence to governing standards, ensuring that intermediate terms remain visible and that results are validated against tolerance tables [2]. For example, the library includes support for AES17-compliant measurements of THD+N and SINAD, which utilize specific notch filter bandwidths and frequency-domain processing [7]. Users should ensure consistency between THD-F and THD-R definitions when comparing results across different measurement systems [6].

Citations:


Compara tensiones RMS del residuo del generador, no razones de THD.

thd_f y electroacoustics.thd(idle, fs, 1000.0, kind="F") son razones armónicas normalizadas por el fundamental; el requisito es que la tensión residual con generador atenuado sea menor que un tercio de la tensión de distorsión. Usa una medida del residuo de generación, por ejemplo a partir de la diferencia idle - signal con el fundamental retenido o con el generador inyectado, y compárala con el RMS de la distorsión en la misma banda.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx`
around lines 241 - 245, Reemplaza la comparación de razones THD en el flujo que
calcula residual por una comparación entre tensiones RMS: calcula el residuo del
generador usando idle - signal, conservando el fundamental o la inyección del
generador según corresponda, y calcula el RMS de la distorsión en la misma banda
a partir de thd_f. Acepta el método solo cuando el RMS residual sea menor que un
tercio del RMS de distorsión; si no, conserva la bajada a harmonic_distortion.

Comment on lines +364 to +373
Ninguna de las constantes del ensayo es arbitraria. 997 Hz es un número primo,
así que es inconmensurable tanto con 44,1 kHz como con 48 kHz: el tono no se
repite nunca dentro de un registro corto y recorre todo el espacio de códigos
del conversor, mientras que un tono de 1000 Hz a 48 kHz volvería eternamente
sobre las mismas 48 muestras y escondería los errores de no linealidad
diferencial de los códigos que nunca toca. El nivel de -60 dBFS mantiene el
conversor bien lejos de su propia región de sobrecarga, donde dominaría su
distorsión en vez de su ruido, y a la vez sigue dando a la muesca un fundamental
que eliminar, que es la razón de que el resultado se refiera a plena escala y no
al tono de ensayo.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Corrige la explicación del periodo de 997 Hz.

997 Hz no es inconmensurable con 44,1 kHz ni con 48 kHz en una señal muestreada. Con fs = 48000, la secuencia se repite después de 48 000 muestras; con fs = 44100, después de 44 100 muestras. La ventaja frente a 1000 Hz a 48 kHz es el periodo largo de 997 Hz, no que la señal no se repita. De hecho, el ejemplo n = fs captura exactamente un periodo discreto completo. (engineering.purdue.edu)

Propuesta de corrección
-997 Hz es un número primo, así que es inconmensurable tanto con 44,1 kHz como con 48 kHz.
+997 Hz tiene un periodo discreto de 44 100 muestras a 44,1 kHz y de 48 000 muestras a 48 kHz.
+Su periodo es mucho más largo que el de 1000 Hz a 48 kHz, que dura 48 muestras.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Ninguna de las constantes del ensayo es arbitraria. 997 Hz es un número primo,
así que es inconmensurable tanto con 44,1 kHz como con 48 kHz: el tono no se
repite nunca dentro de un registro corto y recorre todo el espacio de códigos
del conversor, mientras que un tono de 1000 Hz a 48 kHz volvería eternamente
sobre las mismas 48 muestras y escondería los errores de no linealidad
diferencial de los códigos que nunca toca. El nivel de -60 dBFS mantiene el
conversor bien lejos de su propia región de sobrecarga, donde dominaría su
distorsión en vez de su ruido, y a la vez sigue dando a la muesca un fundamental
que eliminar, que es la razón de que el resultado se refiera a plena escala y no
al tono de ensayo.
Ninguna de las constantes del ensayo es arbitraria. 997 Hz tiene un periodo discreto
de 44 100 muestras a 44,1 kHz y de 48 000 muestras a 48 kHz.
Su periodo es mucho más largo que el de 1000 Hz a 48 kHz, que dura 48 muestras.
El tono no se repite nunca dentro de un registro corto y recorre todo el espacio de códigos
del conversor, mientras que un tono de 1000 Hz a 48 kHz volvería eternamente
sobre las mismas 48 muestras y escondería los errores de no linealidad
diferencial de los códigos que nunca toca. El nivel de -60 dBFS mantiene el
conversor bien lejos de su propia región de sobrecarga, donde dominaría su
distorsión en vez de su ruido, y a la vez sigue dando a la muesca un fundamental
que eliminar, que es la razón de que el resultado se refiera a plena escala y no
al tono de ensayo.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx`
around lines 364 - 373, Corrige la explicación en el párrafo sobre 997 Hz:
elimina la afirmación de que es inconmensurable o que el tono nunca se repite, y
explica que la secuencia muestreada se repite tras 48 000 muestras a 48 kHz o 44
100 muestras a 44,1 kHz. Conserva la comparación con 1000 Hz indicando que la
ventaja de 997 Hz es su periodo discreto mucho más largo, y que n = fs contiene
exactamente un periodo completo.

Comment on lines +565 to +568
dispositivo en el punto de funcionamiento de la sección 0. Elimina el retardo
entre los dos canales — o haz el segmento de Welch varias veces más largo que
él —, porque un retardo sin compensar inclina la fase de $H_1$ y hunde
$\gamma^2$ banda a banda. `transfer_function` elige `nperseg` para una

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
rg -n -C 8 \
  'transfer_function|coherence|nperseg|retardo|delay|Welch|relojes' \
  . --glob '*.mdx' --glob '*.py'

Repository: jmrplens/phonometry

Length of output: 50376


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

# Inspect the exact MDX passage and the relevant source/API docs.
sed -n '550,580p' site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx
printf '\n--- spectra helpers ---\n'
sed -n '1,260p' src/phonometry/signals/spectra.py
printf '\n--- transfer_function/coherence doc strings and tests around delay/delay-like ---\n'
rg -n -C 6 'delay|retardo|coherence|gamma|phase|nperseg|Welch' src/phonometry/electroacoustics/frequency_response.py src/phonometry/signals/spectra.py tests || true

Repository: jmrplens/phonometry

Length of output: 50376


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- exact MDX passage ---'
sed -n '550,580p' site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx

printf '%s\n' '--- spectra.py header/defaults/core ---'
sed -n '1,260p' src/phonometry/signals/spectra.py

printf '%s\n' '--- transfer_function/coherence tests around delay/welch/phase ---'
rg -n -C 8 'transfer_function|coherence|delay|delayed|roll|phase|nperseg|Welch|gamma' \
  tests/reference_data tests/electroacoustics tests/signals tests/room \
  --glob '*.py' | head -n 240

Repository: jmrplens/phonometry

Length of output: 31533


🌐 Web query:

Bendat Piersol ordinary coherence fixed time delay H1 estimator gamma squared

💡 Result:

In the context of the work of Julius S. Bendat and Allan G. Piersol, particularly in their seminal text "Random Data: Analysis and Measurement Procedures," the terms you mentioned are fundamental concepts in linear system analysis and spectral estimation [1][2][3]. Ordinary Coherence and Gamma Squared: The "ordinary coherence function," often denoted as gamma squared, is defined as [4][5]: gamma^2(f) = |G_xy(f)|^2 / (G_xx(f) * G_yy(f)) where G_xy(f) is the cross-spectral density between input x(t) and output y(t), and G_xx(f) and G_yy(f) are the autospectral densities of the input and output, respectively [4]. This function, which ranges from 0 to 1, serves as a measure of the linearity of the system at frequency f [4][2][6]. A value of 1 indicates an ideal linear relationship with no extraneous noise, while values less than 1 suggest nonlinearities, extraneous noise at either the input or output, or multiple input sources [1][7]. H1 Estimator: The H1 frequency response function (FRF) estimator is defined as [2][8]: H1(f) = G_xy(f) / G_xx(f) This estimator is specifically designed to be robust against uncorrelated noise at the system output [6][8]. Bendat and Piersol demonstrate that coherence provides a direct measure of the confidence or statistical quality of this H1 estimate [2]. Specifically, coherence can be interpreted as a measure of the distance between the H1 and H2 estimators, where H2(f) = G_yy(f) / G_yx(f) [2]. Fixed Time Delay: When a constant time delay (tau) exists between an input and output (i.e., y(t) = x(t - tau)), the cross-spectral density G_xy(f) picks up a phase shift proportional to the delay (phase = -2pif*tau) [9]. If this delay is not accounted for, or if there is misalignment in data segments, the coherence estimate can be biased downward, particularly if the phase is a rapidly varying function of frequency [9]. Proper synchronization of input and output records is required to obtain accurate coherence and FRF estimates in the presence of such delays [9]. Top Results: [1], [4], [2], [9], [6]

Citations:


🌐 Web query:

"ordinary coherence" "time delay" "Bendat Piersol" "gamma squared"

💡 Result:

In the technical framework established by Julius S. Bendat and Allan G. Piersol in their authoritative works on random data analysis, the ordinary coherence function—often denoted as gamma squared (γ²)—is a real-valued function that measures the linear relationship between two signals in the frequency domain [1][2]. It is defined as the square of the magnitude of the cross-spectral density function divided by the product of the individual autospectral density functions [1][2]: γ²xy(f) = |Gxy(f)|² / (Gxx(f) * Gyy(f)) This function yields values between 0 and 1, where 1 indicates a perfect linear relationship [1][2]. Regarding time delay, Bendat and Piersol demonstrate that the presence of a time delay between two signals can cause the estimated coherence to appear less than unity if the analysis does not account for it [3][4]. Specifically, if one signal is a delayed version of the other (e.g., y(t) = x(t - D)), the phase of the cross-spectral density function contains information about the time delay D [5][6]. The phase angle (θ) is related to the delay and frequency (f) by the linear relationship: θ(f) = -2πfD While the ordinary coherence function (γ²) itself is magnitude-based and thus invariant to pure time delays (a pure delay does not inherently reduce coherence in an ideal, noise-free, linear system), in practical measurements with finite data or extraneous noise, time delays can complicate estimation [3][6][4]. Analysts often use the phase information of the cross-spectrum to estimate the delay D [5][7]. Furthermore, techniques such as artificially shifting (realigning) the time series by a lag τ can be used to maximize the observed coherence, effectively identifying the delay D when the coherence reaches a maximum [4]. In summary, for Bendat and Piersol, gamma squared (ordinary coherence) serves as a diagnostic tool to assess the validity of a linear model, while the cross-spectrum's phase is the primary vehicle for extracting time delay information [3][1][7].

Citations:


🌐 Web query:

"cross spectrum" "pure time delay" "magnitude" "coherence" "unity"

💡 Result:

In signal processing, a pure time delay between two signals results in a cross-spectrum characterized by a linear phase shift proportional to the delay, while the magnitude of the coherence remains equal to unity [1][2]. The coherence function, often referred to as magnitude-squared coherence (MSC), is defined as the normalized magnitude of the cross-spectral density [3][4]. For two signals where one is a pure, noise-free, time-delayed version of the other—expressed as y(t) = x(t - τ)—the relationship is entirely linear [2]. In the frequency domain, this shift manifests as a complex exponential term, e^(-j2πfτ), which has a magnitude of 1 [1][2]. Because the coherence normalization process divides the cross-spectrum magnitude by the product of the auto-spectra magnitudes, the pure time-delay component preserves a perfect linear relationship, resulting in a coherence magnitude of 1 across all frequencies [2][3]. In practical, real-world applications, observed coherence is frequently less than unity due to factors such as additive noise, non-linearities, or multi-path propagation (reverberation), which introduce components that cannot be explained by a single linear time delay [3][4]. Additionally, signal misalignment or windowing artifacts during estimation can lead to a measured coherence lower than 1, even if the underlying system is theoretically ideal [5]. Summary of Key Points: - Pure Time Delay: The cross-spectrum phase is linear with frequency, and the coherence magnitude is exactly 1 [1][2]. - Coherence Definition: It measures the degree of linear dependency between two signals, bounded between 0 and 1 [3][4]. - Real-world Departures: Any reduction in coherence below unity indicates the presence of uncorrelated noise, non-linear system behavior, or measurement limitations [3][4].

Citations:


No atribuyas una caída de coherencia a un retardo fijo.

Un retardo fijo es un camino LTI: cambia la fase de $H_1$, pero no reduce $\gamma^2$ en una medición lineal sin ruido. Corrige el texto; si $\gamma^2$ cae, apunta a causas reales: falta de sincronización entre relojes, retardo variable entre segmentos, transitorios, no linealidad o promediado insuficiente, no simplemente a hacer el segmento de Welch más largo.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/devices/electroacoustics/electroacoustics.mdx`
around lines 565 - 568, Corrige el texto alrededor de “transfer_function” para
no afirmar que un retardo fijo sin compensar reduce $\gamma^2$ ni que alargar el
segmento de Welch lo soluciona. Indica que el retardo fijo solo inclina la fase
de $H_1$ en una medición LTI ideal; atribuye una caída de coherencia a
desincronización de relojes, retardos variables entre segmentos, transitorios,
no linealidad o promediado insuficiente.

@@ -364,6 +405,61 @@ error de fase, de cualquier signo. Por eso el índice presión-intensidad, y
no la calidad de los micrófonos, es el que acota la exactitud alcanzable de
toda medida de intensidad.

### Medir el índice residual, y comprobar la sonda

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check Spanish heading anchors and the deep links that target them.
rg -n 'medir-el-.ndice-residual|span id=' site/src/content/docs/es/devices/emission/
rg -n '^### ' site/src/content/docs/es/devices/emission/intensity.mdx

Repository: jmrplens/phonometry

Length of output: 721


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Find anchor/tag conventions and dependency versions"
rg -n '`@mdxjs/mdx`|mdx-md|github-slugger|slugify|remark-shiki|rehype|mdx2' -S . --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' | head -120

echo
echo "Inspect package files for MDX/config"
git ls-files | rg '(^|/)(package.json|astro.config|vite.config|docusaurus.config|contentlayer|remix.config|gatsby-config|content\.|components\.|plugins\.|.*mdx.*\.js$|.*config.*\.js$|.*config.*\.ts$)' | head -80

echo
echo "Show relevant link context"
sed -n '300,316p' site/src/content/docs/es/devices/emission/sound-power-intensity.mdx

Repository: jmrplens/phonometry

Length of output: 6427


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "node_modules status"
if [ -d site/node_modules ]; then
  echo "site/node_modules exists"
  node - <<'JS'
try {
  const slugger = require('site/node_modules/github-slugger').default || require('site/node_modules/github-slugger');
  console.log('github-slugger module loaded');
  console.log(slugger.slug('Medir el índice residual, y comprobar la sonda'));
} catch (e) {
  console.log('github-slugger load failed:', e.message);
}
JS
else
  echo "site/node_modules does not exist"
fi

echo
echo "Relevant scripts/anchor utilities"
sed -n '480,530p' scripts/generate_api_docs.py
sed -n '300,360p' tests/test_api_docs_generator.py
rg -n 'slug|anchor|id=|heading|fragment' site scripts tests -S --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' | head -200

Repository: jmrplens/phonometry

Length of output: 23146


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Find published github-slugger source in git or lock metadata"
git ls-files | rg '(^|/)github-slugger(@[^/]+)?/|github-slugger.*/' | head -50 || true
rg -n 'github-slugger' site -S --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' | head -80

echo
echo "Find github-slugger binaries/libraries in package manager cache if present"
for d in "$HOME"/npm-cache "$HOME"/.npm "$HOME"/.cache/pnpm "$HOME"/.npm/_cacache ~/.npm; do
  if [ -d "$d" ]; then
    echo "$d"
    find "$d" -path '*github-slugger*' \( -type f -o -type d \) 2>/dev/null | head -80
  fi
done

Repository: jmrplens/phonometry

Length of output: 660


🌐 Web query:

github-slugger 2.0.0 source keep Unicode codepoints slug non ASCII

💡 Result:

In github-slugger version 2.0.0, the library does not strip all non-ASCII Unicode characters [1][2]. Instead, it uses a generated regular expression to filter characters, which effectively preserves most Unicode letters (\p{L}), decimal digits (\p{Nd}), and letter-numbers (\p{Nl}) while stripping most other symbols, including emojis and non-alphanumeric punctuation [3]. Key behaviors of version 2.0.0 include: - Unicode Support: It supports non-ASCII characters, such as Cyrillic (Привет) and CJK characters (你好), which are retained in the output slug [1][2]. - Stripping Behavior: Emojis and other non-letter, non-digit symbols (like certain punctuation) are generally stripped from the slug [2][3]. - Emulation: The primary goal of the package is to emulate GitHub's own markdown heading anchor generation as closely as possible [2]. Because GitHub's internal implementation evolves, github-slugger uses a comprehensive regex to match this behavior [4][3]. If your goal is to keep specific Unicode codepoints that the library currently strips (such as emojis), you would need to use a different approach or a custom filter, as the core functionality of github-slugger 2.0.0 is intentionally designed to match GitHub's specific stripping patterns [2][3].

Citations:


🌐 Web query:

npm github-slugger 2.0.0 src source

💡 Result:

The source code for github-slugger version 2.0.0 is hosted in the project's GitHub repository at https://github.com/Flet/github-slugger [1][2]. In this repository, the primary source code is not located in a dedicated src folder; instead, the main logic is contained within the index.js file at the root of the repository [3]. Key details regarding version 2.0.0: - It was published on October 27, 2022 [4][5]. - The package was refactored to use native ESM (ECMAScript Modules), meaning it must be imported using import statements [3]. - The code was updated to use an ES6 class, requiring the use of the new keyword to instantiate the slugger (e.g., const slugger = new GithubSlugger) [3]. - The default export is the class, while the stateless slug function is exposed as a named export [3].

Citations:


🌐 Web query:

github Flet github-slugger 2.0.0 index.js Slugger pattern

💡 Result:

The github-slugger package (version 2.0.0 and later) is a JavaScript library designed to generate unique slugs for markdown headings, emulating GitHub's behavior [1][2]. Key implementation and usage details for version 2.0.0 include: - ESM Transition: As of version 2.0.0, the package was updated to be a pure ECMAScript Module (ESM) [3]. It must be imported using the import statement [3]. - Class-based API: The package uses an ES6 class, requiring the use of the new keyword to create an instance [3]. import GithubSlugger from 'github-slugger' const slugger = new GithubSlugger slugger.slug('example string') - Named Export: In addition to the default export (the class), the package provides a named export slug, which is a static function that does not maintain state across calls (it does not track previously slugged strings) [2][3][4]. import GithubSlugger, {slug} from 'github-slugger' slug('example string') - Slugger Pattern: The primary class implementation maintains an internal state to ensure uniqueness [1][2]. When the same string is passed to the slug method multiple times, the slugger automatically appends an incrementing counter (e.g., 'foo', 'foo-1', 'foo-2') to ensure each resulting slug is unique [1][2]. The reset method can be used to clear this state and start over [1][4]. The library does not function as a markdown or HTML parser; it expects to receive plain text input [5][4]. The source code is organized with the primary logic contained in index.js, and version 2.0.0 introduced these breaking changes (ESM and required new keyword) to align with modern JavaScript standards [6][3].

Citations:


🌐 Web query:

raw.githubusercontent.com Flet github-slugger v2.0.0 index.js slug

💡 Result:

The github-slugger package, version 2.0.0, is a JavaScript library designed to generate slugs that emulate GitHub's markdown heading anchor formatting, including support for unique slug generation [1][2]. In version 2.0.0, the package transitioned to ESM (ECMAScript modules), requiring the use of import statements [3]. The package exports a class, GithubSlugger, as the default export, and a static slug function as a named export [1][3]. Usage Examples: To generate slugs while maintaining a history of previously slugged strings (to ensure uniqueness, just as GitHub does), use the GithubSlugger class: import GithubSlugger from 'github-slugger' const slugger = new GithubSlugger slugger.slug('foo') // returns 'foo' slugger.slug('foo') // returns 'foo-1' slugger.slug('foo') // returns 'foo-2' To use the stateless underlying implementation (which does not track previous strings and is generally not recommended for anchor generation), use the named export slug: import {slug} from 'github-slugger' slug('foo bar baz') // returns 'foo-bar-baz' slug('foo bar baz') // returns 'foo-bar-baz' When using the GithubSlugger class, you must use the new keyword to create an instance, a change introduced in version 2.0.0 [3]. The library is not a markdown or HTML parser; it expects the plain text value of a heading as input [1][2].

Citations:


🌐 Web query:

github Flet github-slugger 2.0.0 regular expression _slug regex

💡 Result:

The github-slugger package (version 2.0.0 and later) generates slugs by emulating GitHub's markdown heading anchor generation [1][2]. It does not rely on a single static regular expression defined in its main entry point [1][3]. Instead, it uses a generated regular expression file, regex.js, to filter characters [3][4]. The package maintains a custom regex filter that is built to include Unicode character blocks that GitHub filters out when creating slugs [5]. This approach replaced an earlier dependency on emoji-regex to better cover the specific Unicode characters that GitHub ignores [5]. The internal slug generation logic generally works by taking the input string, removing characters that do not fit the allowed Unicode criteria (using the generated regex), and normalizing the output [6][5]. Because this package aims to track GitHub's behavior, which is not fully documented or open-source in its internal implementation, the developers use a combination of Unicode blocks and iterative testing to update this regex to match GitHub's observed behavior [6][5]. The library exposes a primary class, GithubSlugger, and a static slug function for generating these slugs [1][7][8].

Citations:


Sé que el enlace profundo debe apuntar al bloque ASCII equivalente.

El texto puede generar un ancla con caracteres no ASCII (medir-el-índice-residual-y-comprobar-la-sonda), pero Astro suele publicar los anchor id como ASCII URL-escaped. Como el mismo enlace usa la forma española con í, añade un <span id="medir-el-indice-residual-y-comprobar-la-sonda"></span> para que el deep link no dependa de la generación de slug del encabezado.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/devices/emission/intensity.mdx` at line 408, En el
encabezado “Medir el índice residual, y comprobar la sonda”, añade un span vacío
con el id ASCII “medir-el-indice-residual-y-comprobar-la-sonda” para garantizar
que el enlace profundo funcione independientemente del slug generado por Astro.

Comment on lines 978 to +983
- Attenborough, K., & Van Renterghem, T. (2021). *Predicting outdoor sound*
(2nd ed.). CRC Press.
[doi:10.1201/9780429470141](https://doi.org/10.1201/9780429470141). Chapter
11 (refraction by wind and temperature gradients, ray models and shadow
zones). ISBN 978-1-138-30655-2. Cited by
[doi:10.1201/9780429470806](https://doi.org/10.1201/9780429470806). Chapters
2 and 9 (spherical-wave ground reflection; outdoor barriers) and Chapter 11
(refraction by wind and temperature gradients, ray models and shadow
zones). ISBN 978-1-4987-4007-4 (hbk), 978-0-429-47080-6 (ebk). Cited by

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Merge the duplicate Attenborough and Van Renterghem entries.

Each changed entry duplicates an earlier citation with the same 2021 second edition and DOI. Merge the chapter coverage, ISBNs, and guide links into the existing entry. Keep one entry per language.

  • site/src/content/docs/reference/bibliography.md#L978-L983: merge this content into the entry at Lines 904-909, then remove this duplicate.
  • site/src/content/docs/es/reference/bibliography.md#L1023-L1030: merge this content into the entry at Lines 946-952, then remove this duplicate.
📍 Affects 2 files
  • site/src/content/docs/reference/bibliography.md#L978-L983 (this comment)
  • site/src/content/docs/es/reference/bibliography.md#L1023-L1030
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/reference/bibliography.md` around lines 978 - 983,
Merge the duplicate Attenborough and Van Renterghem citation into the existing
English entry at site/src/content/docs/reference/bibliography.md lines 904-909,
incorporating its chapter coverage, ISBNs, and guide links, then remove the
duplicate at lines 978-983. Apply the same merge to the existing Spanish entry
at site/src/content/docs/es/reference/bibliography.md lines 946-952,
incorporating the duplicate content and removing the duplicate at lines
1023-1030; retain one entry per language.

@sonarqubecloud

sonarqubecloud Bot commented Aug 8, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Numerical conformance report

533/533 conformance checks pass across 57 domains and 362 standards - filters class 1 - weightings within IEC 61672-1 class 1.

Each row pins a standard clause to its expected normative value and the value the library computes. Every section below is collapsible and stays collapsed while all of its rows pass; a section with any failing row opens automatically.

Numerical validation - filters & weightings: class showcase (IEC 61260-1 · IEC 61672-1 · ISO 7196)

IEC 61260-1:2014 class per filter architecture (order 6, one-third-octave, 100 Hz-10 kHz, fs = 48 kHz). For each architecture the table shows, at its binding band, the measured relative attenuation and the class-1 limit it must clear, so the number and the range it must sit in are both visible. A positive margin means the acceptance limits are met with that much room.

Architecture Class verdict Binding band Measured rel. atten. Class-1 limit Margin cl.1 Margin cl.2
butter Class 1 (default) 100 Hz +0.00 dB ≥ -0.40 dB +0.400 dB +0.600 dB
cheby1 By design (passband ripple) 6310 Hz +0.19 dB ≥ +1.44 dB -1.246 dB -0.837 dB
cheby2 Class 1 100 Hz +0.00 dB ≥ -0.40 dB +0.400 dB +0.600 dB
ellip By design (passband ripple) 10000 Hz +0.10 dB ≥ +1.32 dB -1.218 dB -0.813 dB
bessel By design (soft rolloff) 100 Hz +12.46 dB ≥ +16.60 dB -4.133 dB -3.133 dB

Only Butterworth (the library default) and Chebyshev-II are class-compliant architectures. Chebyshev-I and elliptic trade the mask for passband ripple, and Bessel for a maximally-flat group delay (soft rolloff); they cannot satisfy the IEC 61260-1 Class 1/2 attenuation mask by construction, so they are labelled By design - this is expected, not a failure or regression.

Frequency-weighting conformance (A/C: IEC 61672-1 Table 3; G: ISO 7196 A.3). The max deviation from nominal is informational (it falls at a frequency extreme where the tolerance is widest and asymmetric); compliance is judged at the binding frequency - the one with the least headroom - where the deviation, the applicable tolerance band and the headroom are shown together.

Curve fs Max dev. from nominal (info) Binding freq Deviation there Tolerance band Headroom
A 48 kHz -0.867 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
A 96 kHz -0.482 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
C 48 kHz -0.900 dB @ 19953 Hz 1000 Hz +0.000 dB [-0.70, +0.70] dB +0.700 dB
G 48 kHz +0.047 dB @ 1 Hz 1 Hz +0.047 dB [-1.00, +1.00] dB +0.953 dB
Filters & weightings: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61260-1:2014 Table 1 Octave-band filter class (butterworth, fs=48 kHz) class 1 class 1 (margin +0.400 dB) +0.400 dB
IEC 61260-1:2014 Table 1 One-third-octave filter class (butterworth, fs=48 kHz) class 1 class 1 (margin +0.400 dB) +0.400 dB
IEC 61260:1995 / ANSI S1.11-2004 Table 1 Class 0 (strictest) octave-band filter (butterworth, fs=48 kHz) class 0 class 0 (margin +0.150 dB) +0.150 dB
IEC 61260-1:2014 Table F.1 Formula (9) breakpoint mapping, b=3, Omega at G**(1/2) 1.12202 (+/-0.00001) 1.12202 0
IEC 61672-1:2013 Table 3 A-weighting deviation vs class-1 limits (fs=48 kHz) deviation within limits @ 1000 Hz +0.000 dB in [-0.70, +0.70] dB headroom +0.700 dB
IEC 61672-1:2013 Table 3 C-weighting deviation vs class-1 limits (fs=48 kHz) deviation within limits @ 1000 Hz +0.000 dB in [-0.70, +0.70] dB headroom +0.700 dB
ISO 7196:1995 Table 2 / A.3 G-weighting deviation vs +/-1 dB tolerance (fs=48 kHz) deviation within limits @ 1 Hz +0.047 dB in [-1.00, +1.00] dB headroom +0.953 dB
ANSI S1.4-1983 Tables IV/V B-weighting (historical) deviation vs Type 0 limits (fs=48 kHz) deviation within limits @ 200 Hz -0.049 dB in [-0.70, +0.70] dB headroom +0.651 dB
IEC 61012:1990 Table 1 / 2.2 AU-weighting deviation vs separate-unit tolerances (fs=96 kHz) deviation within limits @ 10000 Hz -0.072 dB in [-1.00, +1.00] dB headroom +0.928 dB
IEC 537:1976 (withdrawn) via NASA CR-3406 Table SLD-I D-weighting response vs the published tabulated curve (fs=48 kHz) abs(response - table) <= 0.2 dB (0.45 dB at 1600/2500 Hz) -0.131 dB @ 8000 Hz (bound 0.20 dB) headroom +0.069 dB
Levels & dosimetry: 100% (9/9)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61672-1:2013 (Leq) Leq of a 1 Pa 1 kHz sine 90.97 dB (+/-0.05 dB) 90.969 dB -0.001 dB
IEC 61252:1993 (LEX,8h) 8 h exposure to 90 dB(A) noise 90 dB (+/-0.05 dB) 90.008 dB 0.008 dB
ISO 1996-1:2016 3.6.4 Lden, constant 60 dB in day/evening/night 66.3952 dB (+/-0 dB) 66.3952 dB 0 dB
ISO 1996-2:2007 Annex C.5 Example 1 Tonal audibility ΔLta (Formula C.3), 4 kHz tone 13.7 dB (+/-0.05 dB) 13.66 dB -0.044 dB
ISO 1996-2:2007 Annex C.5 Example 1 Tonal adjustment Kt (Formulae C.4-C.6) 6 dB (+/-0 dB) 6 dB 0 dB
ISO 1996-2:2017 Annex G.2 Combined measurement uncertainty u = √(Σ(cj·uj)²) 2.18 dB (+/-0.01 dB) 2.18 dB -0.002 dB
RD 1367/2007 Annex IV A.3.4.2 b Corrected period level LKeq,d (Manual Ejemplo 3.1: 3 noise phases, 12 h) 57 dB (+/-0 dB) 57 dB 0 dB
RD 1367/2007 Annex I A.2 d Long-term level LK,d (Manual Ejemplo 3.2: 303 operating days of 365) 56 dB (+/-0 dB) 56 dB 0 dB
RD 1367/2007 Annex III Table B1, Article 25 Activity verdict (Manual Ejemplo 3.3: area type a, LK,d 56 dB over 55 dB) phase and daily pass, annual fails, activity not compliant phase and daily pass, annual fails, activity not compliant -
Room & building acoustics: 100% (72/72)
Standard Quantity Expected (norm) Computed Δ Status
CTE DB-HR Annex A, Formula (A.5) Global index R'A for pink noise (Manual Ejemplo 7.2) 51.4 dBA (+/-0.05 dBA) 51.4 dBA 0 dBA
CTE DB-HR Annex A, Formula (A.6) Global index D2m,nT,Atr for road traffic (Manual Ejercicio 7.1) 32.8 dBA (+/-0.05 dBA) 32.8 dBA 0 dBA
Manual de acustica ambiental y arquitectonica, Ejemplo 7.1 Reported R'A of the field-test wall (printed 51 dBA = R'w 52 + C -1) 51 dBA (+/-0 dBA) 51 dBA 0 dBA
Manual de acustica ambiental y arquitectonica, Ejemplo 7.1 Reported R'A,tr of the same wall (printed 47 dBA = R'w 52 + Ctr -5) 47 dBA (+/-0 dBA) 47 dBA 0 dBA
CTE Catalogo de Elementos Constructivos Window size correction of RA (Manual Ejemplo 7.4: 4 m2 window, -2 dB) 24 dBA (+/-0 dBA) 24 dBA 0 dBA
ISO 3382-2:2008 5.3.3 T30 from a synthetic exponential decay (T=1.0 s) 1 s (+/-1%) 1 s 0 s
ISO 18233:2006 (swept-sine method) Sweep deconvolution recovers a known IIR response 0 dB in-band error (+/-0.1 dB) 0.0006 dB 0.001 dB
ISO 717-1 Annex C, Table C.1 Weighted sound reduction index Rw (C;Ctr) Rw 30 (C -2; Ctr -3) Rw 30 (C -2; Ctr -3) sum 31.8 dB
ISO 717-1:2020 Annex C, Table C.2 Enlarged range 50-5000 Hz: Rw (C; Ctr; C50-5000; Ctr,50-5000) Rw 30 (C -2; Ctr -3; C50-5000 -2; Ctr,50-5000 -4) Rw 30 (C -2; Ctr -3; C50-5000 -2; Ctr,50-5000 -4) exact
ISO 717-2 Annex C, Table C.1 Weighted impact sound pressure level Ln,w (CI) Ln,w 79 (CI -11; sum 28.0 dB) Ln,w 79 (CI -11; sum 28.0 dB) +0 dB
ISO 717-2 Annex C, Table C.1 (covered) Weighted impact level of the floor WITH covering Ln,w (CI) Ln,w 64 (CI -3; sum 30.0 dB) Ln,w 64 (CI -3; sum 30.0 dB) +0 dB
ISO 717-2 Annex C, Table C.2 Floor-covering improvement ΔLw and CI,Δ (Formulae (2)/(A.4); CI,Δ from the normative Table 4 floor, not the 2020 print's misprinted C.2 chain) ΔLw 15 dB; CI,Δ -9 dB (Table 4 reference floor) ΔLw 15 dB; CI,Δ -9 dB +0 dB
ISO 354:2003 Eq. 5/8 Sabine inversion recovers absorption area 9.212828 m^2 (+/-0 m^2) 9.212828 m^2 0 m^2
ISO 3382-3:2012 Clause 6.2 Open-plan spatial decay rate D2,S (-6 dB/doubling) 6 dB (+/-0 dB) 6 dB 0 dB
ISO 16283-3:2016 Clause 3.12 Facade R'45 isolates the -1.5 dB incidence correction (S=A) 38.5 dB (+/-0 dB) 38.5 dB 0 dB
ISO 10140-2:2010 Formula (2) Lab airborne R on the ISO 717-1 reference shape -> Rw = 54 Rw 54 dB Rw 54 dB +0 dB
ISO 10140-5:2010+A1 Annex B, Table B.1 Reference elements end-to-end: printed Rw (C; Ctr) of all three Rw(C;Ctr) = 53(-1;-5) / 52(-1;-5) / 33(-1;-2) 53(-1;-5) / 52(-1;-5) / 33(-1;-2) exact
ISO 10140-5:2010+A1 Annex C, Table C.1 Reference floors end-to-end: printed Ln,t,r,0,w (CI) of both Ln,t,r,0,w(CI) = 72(0) / 75(-3) 72(0) / 75(-3) exact
ISO 15186-1:2000 Formula (7) Intensity RI on the ISO 717-1 reference shape -> RI,w = 30 RI,w 30 dB (scalar anchor RI = 34 dB) RI,w 30 dB (RI = 34 dB) +0 dB
ISO 15186-1:2000 Annex B, Table B.1 Adaptation term Kc: all 21 printed rows; (B.1) reduces to (B.2) max abs(Kc - Table B.1) <= 0,05 dB (1 dp print) 0.047 dB (B.1 vs B.2: 4.33e-04 dB) 0.047 dB
ISO 10052:2021 Clause 3.6 Survey R' applies the V/7,5 minimum-area rule 26.197888 dB (+/-0 dB) 26.197888 dB 0 dB
ISO 10052:2021 Clause 3.16 Service-equipment LXY is the 3-position energy average 32.823329 dB (+/-0 dB) 32.823329 dB 0 dB
ISO 10052:2021 Table 4 Reverberation-index estimate (35 <= V < 60, type g) k = [4.5, 5.0, 5.5, 5.5, 5.5] dB k = [4.5, 5.0, 5.5, 5.5, 5.5] dB exact
ISO 717-2:2020 Table 4 / Clause 5.2 Reference-floor weighted level Ln,r,0,w and CI (ISO 16251-1 ΔLw anchor) Ln,r,0,w = 78 dB, CI = -11 dB Ln,r,0,w = 78 dB, CI = -11 dB exact
ISO 16251-1:2014 / ISO 717-2 Formula (2) Floor-covering ΔLw: zero improvement gives ΔLw = 0 ΔLw = 0 dB (ΔL = 0 -> Ln,r = Ln,r,0) ΔLw = 0 dB exact
ISO 16251-1 / ISO 717-2 (Foret et al. 2011, carpet) Measured textile-carpet improvement rates to ΔLw = 29 dB ΔLw = 29 dB (paper, ISO 16251-1) ΔLw = 29 dB +0 dB
ISO 10848-1:2006 Formula (14) Flanking Kij (simplified) matches closed form Kij = 1.9897 dB Kij = 1.9897 dB exact
ISO 10848-1:2006 Formula (12) Flanking equivalent absorption length aj at f_ref aj = 1.2661 m aj = 1.2661 m exact
ISO 10848-1:2006 Clause 7.3.1 Flanking total loss factor η = 2,2/(f·Ts) η = 0.0044 η = 0.0044 exact
ISO 12354-1:2017 Formula (20) vs Hopkins Eq. 2.201 (6 mm glass) Flanking critical frequency (c0²/1,8·cL·h) vs plate coincidence (c0²/2π · sqrt(m''/B')) 2107.4 Hz (+/-1%) 2123.5 Hz 16.156 Hz
EN 29052-1:1992 Formula 4 Apparent dynamic stiffness s't = 4π²·m't·fr² (m't=200 kg/m², fr=25 Hz) 4.934802 MN/m³ (+/-0.000001 MN/m³) 4.934802 MN/m³ 0 MN/m³
EN 29052-1:1992 clause 8.2 NOTE Enclosed-gas stiffness s'a·d = 111 MN·mm/m³ (p₀=0,1 MPa, ε=0,9) 5.55556 MN/m³ (+/-0.0001 MN/m³) 5.55556 MN/m³ 0 MN/m³
EN 29052-1:1992 Formula 2 Floating-floor natural frequency f0 = (1/2π)√(s'/m') (s'=10 MN/m³, m'=100 kg/m²) 50.32921 Hz (+/-0 Hz) 50.32921 Hz 0 Hz
ISO 7626-1:2011 Table 1 / 3.1.2 Closed-form SDOF driving-point mobility peak mag(Y(f0)) = 1/c (c=5 N·s/m) 0.2 m/(N·s) (+/-0.000001 m/(N·s)) 0.2 m/(N·s) 0 m/(N·s)
ISO 7626-1:2011 Table 1 / 3.1.2 Closed-form SDOF static receptance H(0) = 1/k (k=8000 N/m) 0.000125 m/N (+/-0.0001%) 0.000125 m/N 0 m/N
ISO 7626-1:2011 Table 1 FRF reciprocity: impedance × mobility = 1 (at 37 Hz) 1 (= Z·Y) 1 0
ISO 717-2:2020 Table D.4 A-weighted maximum impact level LiA,Fmax of the Annex D worked example 55,350 66... dB (rated 55 dB) 55.350668 dB 0 dB
ISO 16283-2:2020 Table A.1 / JIS A 1418-2:2019 Table A.2 Rubber-ball impact force exposure level LFE, five octave bands 39,0 / 31,0 / 23,0 / 17,0 / 12,5 dB re 1 N at 31,5 to 500 Hz 39 / 31 / 23 / 17 / 12,5 dB re 1 N max |dev| 0.000 dB
ISO 16283-2:2020 Formulae (4), (5), (6) Standardized maximum impact level reduces to 10 lg(V/V0) at T = T0 73,0103 dB (= 70 + 10 lg(100/50)) 73.0103 dB 0 dB
ASTM E413-22 clause 5 (ASTM E1414 CAC) Ceiling attenuation class of two accredited E1414 test reports CAC 34 (ALA 16-091-4); CAC 25, sum 24 dB (Intertek J7488.04) CAC 34; CAC 25, sum 24.0 dB exact
ISO 140-9:1985 clause 3.3 Normalized ceiling attenuation Dn,c = D - 10 lg(A/A0), A0 = 10 m2 43.0103 dB (+/-0 dB) 43.0103 dB 0 dB
Vigran (2008) Eqs. (9.18)-(9.20) Plenum model: Eq. (9.18) converges to Eq. (9.20) as the damping vanishes Eq. (9.20) value, reproduced by Eq. (9.18) 139.5682 dB 0 dB
Hopkins (2007) Eq. 4.89 / Fig. 4.35 Mass-spring-mass resonance of a masonry cavity wall without and with ties 26 Hz (no ties) / 50 Hz (2,5 ties/m2, k = 2 MN/m) 26.15 Hz / 49.93 Hz +0.15 / -0.07 Hz
Hopkins (2007) Table A4 Dynamic stiffness of four wall ties (butterfly, double-triangle, twist) 1,7 / 16,1 / 94,0 MN/m at 50 mm; 43,4 MN/m at 100 mm 1.7 / 16.1 / 94 / 43.4 MN/m exact
ISO 10846-2:2008 3.17 Transfer-stiffness level Lk = 20 lg(|k|/k0), k0 = 1 N/m (|k| = 1 MN/m) 120 dB (+/-0 dB) 120 dB 0 dB
ISO 10846-3:2002 Formula (1) Indirect method k2,1 = -(2πf)²·m2·T (f=500 Hz, m2=10 kg, T=0,01) -986960.4 N/m (+/-0.1%) -986960.4 N/m 0 N/m
ISO 10846-1:2008 Table A.2 FRF relation k = jω·Z at 250 Hz (|k| recovered from impedance) 1001249.2 N/m (+/-0.0001%) 1001249.2 N/m 0 N/m
ISO 7626-2:2015 7.5.2 Rigid-mass calibration: accelerance mag(A) = 1/m (m=10 kg) 0.1 1/kg (+/-0 1/kg) 0.1 1/kg 0 1/kg
ISO 7626-2:2015 7.5.2 Rigid-mass calibration: mobility mag(Y) = 1/(2πf·m) at 100 Hz (m=10 kg) 0.0001592 m/(N·s) (+/-0.001%) 0.0001592 m/(N·s) 0 m/(N·s)
ISO 7626-2:2015 Annex A Normalized random error ε = √((1−γ²)/(2nγ²)): γ²=0,8, n=75 → 4,08 % (< 5 %) 4.08 % (+/-0.01 %) 4.08 % 0.002 %
ISO 7626-1:2011 Table 1 Rigid 1 kg mass at ω = 1000 rad/s: mobility 1e-3, compliance 1e-6 (decades) 0.001 m/(N·s) (+/-1e-07%) 0.001 m/(N·s) 0 m/(N·s)
ISO 10846-3:2002 6.1 Inequality (2) Indirect-method validity limit mag(T) = 0,1 ↔ ΔL1,2 = 20 dB 20 dB (+/-0 dB) 20 dB 0 dB
ISO 10846-3:2002 6.1 Model bias at the validity limit: k_ind/k = 1,1 (0,83 dB ≤ 1 dB, 10 % ≤ 12 %) 1.1 (+/-1e-07%) 1.1 0
ISO 10846-1:2008 Equation (6) Delivered/blocking force F2/F2,b = 1/1,1 at mag(k2,2/kt) = 0,1 (within 10 %) 0.9091 (+/-0) 0.9091 0
ISO 10846-2:2008 / -3:2002 7.6 Linearity: ΔLk ≤ 1,5 dB for input spectra 10 dB apart (linear element: 0) ΔLk ≤ 1,5 dB (7.6 c) 0 dB 0 dB
ISO/TS 7849-1:2009 Formula (8) Calibration L_v from â = 9,81 m/s² at 100 Hz (standard's EXAMPLE) 106.9 dB (+/-0.1 dB) 106.9 dB -0.02 dB
ISO/TS 7849-2:2009 Formula (15) L_W from L_v via measured radiation factor = 10 lg(P/P0) (round-trip) 84.771 dB (+/-0 dB) 84.771 dB 0 dB
ISO/TS 7849-1:2009 Formula (12) Impedance term: L_W − L_v = 10 lg(411/400) at ε = 1, S = S0 0.1178 dB (+/-0 dB) 0.1178 dB 0 dB
EN 15657:2018 Formula (14) Reception-plate L_Ws = resonant-plate power P = ωη(mS)⟨v²⟩ (round-trip) 55.545 dB (+/-0 dB) 55.545 dB 0 dB
EN 15657:2018 Formula (13) Plate loss factor η = 2,2/(f·Ts) at 1 kHz, Ts = 0,3 s 0.0073 (+/-0) 0.0073 0
EN 15657:2018 Formulae (15)/(17) + EN 12354-5 Annex I.3 Source conversion chain reproduces Table I.8 (wall, installed) max abs(L_Ws,inst - Table I.8) <= 0,15 dB 0.055 dB 0.055 dB
ISO 9611:1996 eq. (9) Mean free velocity level (energy mean, v0 = 5e-8 m/s) 72.3017 dB (+/-0 dB) 72.3017 dB 0 dB
ISO 12354-1:2017 Annex L, Tables L.2 to L.4 In-situ element chain: 10 lg sigma, 10 lg sigma_f, eta_tot, Rsitu, a_situ (21 bands x 5 elements) 0 dB (+/-0.1 dB) 0.057 dB 0.057 dB
ISO 12354-1:2017 Annex L, Table L.1 Detailed airborne model: 13 paths + R' per band, R'w = 57 dB max path/total dev <= 0,1 dB; R'w = 57 dB 0.055 dB; 57 dB 0.055 dB
ISO 12354-2:2017 Annex G, Tables G.3, G.4 and G.1 Detailed impact model: Ln,situ, Ln,Dd, Ln,Df, L'n per band, L'n,w = 41 dB max path/total dev <= 0,1 dB; L'n,w (CI) = 41 (2) dB 0.077 dB; 41 (2) dB 0.077 dB
Hopkins (2007) 3.6.3.1 / 4.4.3.1, printed pp. 276-282 and 513-514 Tapping machine: vo, cut-off frequencies fco of a bare slab and two soft coverings (7 000 / 2 300 / 100 Hz) 0 (+/-0.02) 0.0077 0.008
Hopkins (2007) Figs. 3.30/3.31 and 4.73, printed pp. 281 and 524 Over/under-critical case of four walking surfaces; double floating-floor resonances 74 Hz and 195 Hz 4/4 critical cases; fmsms = 74 / 195 Hz (+/-2%) 4/4; 74.1 / 194.0 Hz 0.53%
ISO 12354-2:2017 Annex C / Annex G Table G.4 Floating floor: fo = 160 sqrt(s'/m') = 52,8 Hz, DeltaL = 30 lg(f/fo) over 21 bands, DeltaLw = 32,2 dB 0 dB (+/-0.05 dB) 0.048 dB 0.048 dB
ISO 12354-1:2017 Annex D / Hopkins (2007) Fig. 4.48, printed p. 486 Lining resonance (Formula D.1) 542 Hz and the Table D.1 improvement branches fo = 542 Hz (+/-1%); 8/8 Table D.1 rows 541.9 Hz; 8/8 0.02%
EN 12354-5:2009 Formula (19b/19c) Coupling term → force-source limit 10 lg(mag(Ys)/Re{Yi}) as mag(Ys) ≫ mag(Yi) 40 dB (+/-0.01 dB) 40.001 dB 0.001 dB
EN 12354-5:2009 Annex I.3, Table I.9 Flushing cistern: four paths + Formula (17) total -> 29 dB(A) max path/total dev <= 0.15 dB; total 29 dB(A) 0.055 dB; 29.3 dB(A) 0.055 dB
EN 12354-5:2009 Annex I.2, Table I.6a Whirlpool floor component: mobility correction + path 11 max abs(dev vs Table I.6a) <= 0,15 dB 0.1 dB 0.1 dB
Room acoustics: 100% (16/16)
Standard Quantity Expected (norm) Computed Δ Status
Sabine (W. C. Sabine, 1922) Reverberation time T = k·V/A (V=120 m³, S=158 m², α=0.2) 0.611825 s (+/-0.000001 s) 0.611825 s 0 s
Long, Architectural Acoustics 2e, Table 8.1 Room modes of a 7 x 5 x 3 m room: the six printed frequencies, Hz 42.4 Hz (+/-0.13 Hz) 42.27 Hz -0.126 Hz
Long, Architectural Acoustics 2e, Eq. (8.46) Modal density of a 7 x 5 x 3 m room at 1 kHz = 34 modes/Hz 34 modes/Hz (+/-0.5 modes/Hz) 34.32 modes/Hz 0.32 modes/Hz
Long, Architectural Acoustics 2e, Eq. (17.51) Restaurant self-noise, 20 talkers over 20 metric sabins = 76 dB 76 dB (+/-0.05 dB) 76.021 dB 0.021 dB
Long, Architectural Acoustics 2e, Eq. (17.54) Privacy bound A_tab < 3.16 rt^2 (Q = 2, L_SN = -9 dB) 3.16 m^2 (+/-0.005 m^2) 3.164 m^2 0.004 m^2
Everest, Master Handbook of Acoustics 4th ed, Fig. 7-22 Sabine RT, worked Example 1 @ 1 kHz (untreated 23.3×16×10 ft room, SI) 3.39 s (+/-0.02 s) 3.402 s 0.012 s
Eyring (Norris-Eyring, 1930) Reverberation time T = k·V/(-S·ln(1-ᾱ)) (α=0.2) 0.548369 s (+/-0.000001 s) 0.548369 s 0 s
Arau-Puchades (Acustica 65, 1988, Formula 18) T (α=0.5/0.1/0.1 per wall pair, dims 8×5×3 m) 0.812147 s (+/-0.000001 s) 0.812147 s 0 s
Model identity (uniform absorption) Arau-Puchades ≡ Eyring when ᾱ is uniform 0.548369 s (= Eyring) 0.548369 s 0 s
Vorlander Auralization 2e, Eq. (11.38)-(11.39) Image-source direct-sound amplitude 1/(4πr) and delay r/c (r = 4 m) 0.0198944 (+/-0) 0.0198944 0
Kuttruff Room Acoustics 6e, Eq. (9.23) Audible shoebox image count up to order 10 (= 1560) 156 (+/-0) 156 0
Kuttruff Room Acoustics 6e, Eq. (4.6) Temporal reflection density dN/dt = 4πc³t²/V (t = 0.1 s, V = 120 m³) 42258.2 1/s (+/-0 1/s) 42258.2 1/s 0 1/s
Bies Engineering Noise Control 5e, Eq. (6.44) Room constant R = Sᾱ/(1-ᾱ) (S = 100 m², ᾱ = 0.2 → 25 m²) 25 m² (+/-0 m²) 25 m² 0 m²
Bies Engineering Noise Control 5e, Eq. (6.43) Critical distance rc: direct field = reverberant field (R = 25, Q = 1) 0.160000 (= reverberant term) 0.16 0
Kuttruff Room Acoustics 6e, Eq. (3.44) Schroeder frequency f_s = 2000√(T/V) (V = 200 m³, T = 1 s) 141.421 Hz (+/-0 Hz) 141.421 Hz 0 Hz
Bies Engineering Noise Control 5e, Eq. (6.43) Steady-state SPL Lp = Lw + 10lg(Q/4πr² + 4/R) (Lw=90, r=1, R=25, Q=1) 83.7945 dB (+/-0 dB) 83.7945 dB 0 dB
Psychoacoustics: 100% (14/14)
Standard Quantity Expected (norm) Computed Δ Status
Moore, Psychology of Hearing 6e, p. 77 (Glasberg & Moore 1990) ERB_N number of 1000 Hz = 15.59 Cam 15.59 Cam (+/-0.005 Cam) 15.5932 Cam 0.003 Cam
Moore, Psychology of Hearing 6e, p. 76 (Glasberg & Moore 1990) ERB_N at 1 kHz vs the printed 24.7(4.37F + 1), Hz 132.639 Hz (+/-0.3%) 132.445 Hz -0.194 Hz
ISO 532-1:2017 Annex B.2 Zwicker loudness N, stationary test signal 1 83.2957 sone (+/-0.1%) 83.2957 sone 0 sone
ISO 532-1:2017 Annex B.5 Time-varying loudness Nmax, technical signal 14 (aircraft, free field) 22.6399 sone (+/-0.1%) 22.6399 sone 0 sone
ISO 532-1:2017 Annex B.5 Time-varying loudness Nmax, technical signal 15 (vehicle interior, diffuse field) 9.6059 sone (+/-0.1%) 9.6059 sone 0 sone
DIN 45692:2009 Clause 6 Sharpness of the standard 1 kHz reference signal 1 acum (+/-0 acum) 1 acum 0 acum
DIN 45692:2009 Table A.2 Sharpness of critical-band noise at 2.5 kHz (2320-2700 Hz, 4 sone) 1.78 acum (+/-0.089 acum) 1.747 acum -0.033 acum
ISO 226:2023 Table B.1 Equal-loudness contour, 60 phon @ 100 Hz 78.5 dB SPL (+/-0.05 dB SPL) 78.504 dB SPL 0.004 dB SPL
ECMA-418-2:2025 Clause 5.1.8 HMS loudness of a 1 kHz / 40 dB tone (c_N=0.0211964) 1 sone_HMS (+/-0.03 sone_HMS) 0.9843 sone_HMS -0.016 sone_HMS
ECMA-418-2:2025 Clause 6.2.8 HMS tonality of a 1 kHz / 40 dB tone (c_T=2.8758615) 1 tu_HMS (+/-0.03 tu_HMS) 0.9998 tu_HMS 0 tu_HMS
ECMA-418-2:2025 Clause 7 HMS roughness of a 1 kHz / 70 Hz / m=1 / overall 60 dB tone (c_R=0.0180685) 1 asper (+/-0.01 asper) 0.9999 asper 0 asper
ISO 532-2:2017 Clause 3.17 / Annex B.1 Moore-Glasberg loudness of a 1 kHz / 40 dB tone (C=0.0617) 1 sone (+/-0.01 sone) 1.0001 sone 0 sone
ISO 532-3:2023 Annex C.1 Moore-Glasberg-Schlittenlacher peak LTL, steady 1 kHz / 40 dB 1 sone (+/-0.02 sone) 0.9996 sone 0 sone
ECMA-418-2:2025 Clause 9 HMS fluctuation strength of a 1 kHz / 4 Hz / m=1 / overall 60 dB tone (c_F=0.003840572) 1 vacil_HMS (+/-0.01 vacil_HMS) 0.9931 vacil_HMS -0.007 vacil_HMS
Speech transmission (IEC 60268-16): 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 60268-16:2020 A.2.2 STI weighting-factor pair (500 Hz + 1 kHz bands) 0.398 (+/-0.001) 0.398 0
IEC 60268-16:2020 A.3.1.2 Uniform MTF m=0.5 maps to STI=0.5 0.5 (+/-0.01) 0.5 0
IEC 60268-16 Annex M Full-STI worked example: printed MTF + speech/noise spectra -> STI STI 0.76 (MTI row of step 4c) STI 0.758 (max MTI dev 0.00) -0.002
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.2 0.3 (+/-0.01) 0.2992 -0.001
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.5 0.5 (+/-0.01) 0.4998 0
IEC 60268-16:2020 C.3.2 STIPA direct method, Formula (C.1) signal at m=0.8 0.7 (+/-0.01) 0.7002 0
IEC 60268-16:2020 C.3.3 Indirect method: exponential decay RT60=1 s vs Schroeder MTF 0.5885 (+/-0.005) 0.5885 0
IEC 60268-16:2020 C.4.2 Filter-bank slope: +41 dB unmodulated tone one octave below 125 Hz m >= 0.5 (C.4.2 pass criterion) 0.9812 0.481
IEC 60268-16:2020 A.2.2 (audio path) Weighting factors: modulated 500 Hz + 1 kHz pair through stipa() 0.398 (+/-0.005) 0.398 0
IEC 60268-16:2020 A.3.1.2 (audio path) Filter-bank phase: half-octave edge carriers at TI=0.9 0.9 (+/-0.01) 0.8975 -0.003
System measurement (Golay / Kirkeby / Mueller-Massarani): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
Havelock 2008 Part I Ch. 6 (Xiang), Eq. (2) Golay pair: sum of periodic autocorrelations = 2L*delta (L = 4096) 0 (algebraic identity, +/-1e-10) 0 0
Havelock 2008 Part I Ch. 6 (Xiang), Eq. (4) Golay chain recovers a delay+gain system IR (noiseless, exact) 0 (machine precision, +/-1e-13) 0 0
Kirkeby & Nelson 1999 Eq. (17) / Mueller-Massarani 2001 Sec. 3.1 In-band equalization residue equals eps/(|H|^2 + eps) bin by bin 0 (closed form, +/-1e-12) 0 0
Kirkeby & Nelson 1999 (max of x/(x^2+eps) = 1/(2*sqrt(eps))) Out-of-band inverse-filter gain within the regularization cap <= -6.021 dB (analytic cap) -6.034 dB headroom +0.013 dB
Mueller-Massarani 2001 Secs. 4.2-4.3 (group-delay synthesis) Shaped sweep's Welch spectrum follows the pink target, in-band 0 dB in-band deviation (+/-0.5 dB) 0.0652 dB 0.065 dB
Intensity & sound power: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61043:1993 Clause 5 Plane-wave intensity I = p^2 / (rho c) 0.00238 W/m^2 (+/-1.5%) 0.00239 W/m^2 0 W/m^2
ISO 3744:2010 Eq. 18 Monopole hemisphere recovers LW (r=4 m) 95 dB (+/-0 dB) 95 dB 0 dB
ISO 9614-2:1996 Eq. 12 Intensity scan recovers LW of an enclosed source 90 dB (+/-0.000001 dB) 90 dB 0 dB
IEC 61043:1993 Table 2 Minimum delta_pI0 per band, probe/processor/instrument, class 1/2 132 tabulated minima reproduced max absolute deviation 0.000 dB 0 dB
IEC 61043:1993 Table 2 Note 1 Separation rule +10 lg(x/25) on all six columns of 25 mm minima (x = 50 mm) 3.0103 dB (+/-0 dB) 3.0103 dB 0 dB
Fahy, Sound Intensity 2e, 6.8 delta_pI0 = 20 dB is a phase mismatch of 0.26 deg (1 kHz, 25 mm) 0.26 deg (+/-0.005 deg) 0.2624 deg 0.002 deg
ISO 9614-1:1993 Eqs (A.1)/(A.2) Temporal variability F1 is the coefficient of variation of M samples 0.185164 (+/-0) 0.185164 0
ISO 4871:1996 clause 3.15 / Annex B Declared L_WAd = L_WA + K_WA (Annex B, L_WA=88, K_WA=2) 90 dB (+/-0 dB) 90 dB 0 dB
ISO 4871:1996 clause 6.2 Single-machine verification boundary L_1 <= L_WAd L_1=90 verified, L_1=91 rejected (L_WAd=90) 90->True, 91->False boundary L_1 = L_WAd
ISO 3741:2010 Eq. 20 Reverberation-room method inverts to a known LW 0 dB error 0 dB 0 dB
Building prediction & uncertainty: 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
EN 12354-1:2000 Annex H.3 Airborne prediction R'w (direct + 12 flanking paths) R'w 52 dB (13 paths) R'w 52 dB (13 paths, 52.17) +0.17 dB
EN 12354-1:2000 Annex H.3 (paths) All 12 printed flanking-path values Rij,w max abs(Rij,w - printed) <= 0,05 dB 0.042 dB 0.042 dB
EN 12354-1:2000 Formula (5b) / Annex H.3 DnT,w closure from R'w (both H.3 examples -> 54 dB) DnT,w 54 dB (printed 53,8/54,3) DnT,w 53.63 / 54.13 dB -0.17 dB vs printed
EN 12354-2:2000 Annex E.3 Impact prediction L'n,w = Ln,w,eq - dLw + K 45 dB (+/-0 dB) 45 dB 0 dB
EN 12354-2:2000 Formula (3) / Annex E.3 Standardized impact level L'nT,w (exact 0,032 V form -> 43 dB) L'nT,w 43 dB (exact 42,96; E.3 prints 42,8) L'nT,w 42.96 dB -0.001 dB
EN 12354-3:2000 Annex F Facade airborne prediction (R'tr,s,w / D2m,nT,w single numbers) R'tr,s,w 31 (Ctr -3); D2m,nT,w 33 dB R'tr,s,w 31 (Ctr -3); D2m,nT,w 33 dB 0
EN 12354-4:2000 Annex G / Formula (2) Radiated LW of a wall+door segment (side 1, low bands) LW 63/125 Hz [59.8, 61.2] dB (+/-0.1) LW [59.8, 61.2] dB 0.038 dB
EN 12354-4:2000 Annex E / Table G.9 Exterior level of all four Table G.9 reception cells Lp 36,6 / 28,5 / 44,6 / 37,3 dB (+/-0,05) Lp 36.6 / 28.5 / 44.6 / 37.3 dB 0.046 dB
ISO 12999-1:2020 Table 2 Airborne band uncertainty, situation A @ 1 kHz 1.8 dB (+/-0 dB) 1.8 dB 0 dB
ISO 12999-1:2020 Annex B, Table B.2 One-decimal single numbers Rw / Rw+C50-5000 / Rw+Ctr,50-5000 57.4 / 56.4 / 51.1 dB 57.4 / 56.4 / 51.1 dB +0.00 dB
ISO 12999-1:2020 Annex B, Formulae (B.2)/(B.6) Single-number uncertainties (uncorrelated 0,6/0,8; correlated u(Rw) 1,9) u_uncorr 0.6 / 0.8 dB; u_corr(Rw) 1.9 dB 0.60 / 0.79 dB; 1.90 dB -0.00 dB
ISO 12999-1:2020 Clause 8 / Table 8 Expanded uncertainty U = 1.96 u (95 % two-sided, Rw sit. A) 2.352 dB (+/-0 dB) 2.352 dB 0 dB
ISO 12999-2:2020 Table 4 / Formula (1) Absorption coefficient +/-U (k=2), reproducibility, 20 x 1/3-oct bands U(k=2) = [0.33, 0.26, 0.22, 0.17, 0.13, 0.11, 0.09, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.09, 0.09, 0.09, 0.1, 0.11, 0.13, 0.16] U(k=2) = [0.33, 0.26, 0.22, 0.17, 0.13, 0.11, 0.09, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.09, 0.09, 0.09, 0.1, 0.11, 0.13, 0.16] exact
ISO 12999-2:2020 Table 5 / Formula (4) Practical coefficient +/-U (k=2), reproducibility, 5 octave bands U(k=2) = [0.09, 0.08, 0.08, 0.08, 0.1] U(k=2) = [0.09, 0.08, 0.08, 0.08, 0.1] exact
ISO 12999-2:2020 Clause 7, Examples 1/2 Single-number U (k=2): alpha_w and DLalpha,NRD alpha_w +/-0.07, DLalpha +/-1.6 dB alpha_w +/-0.07, DLalpha +/-1.6 dB exact
Outdoor propagation & occupational exposure: 100% (10/10)
Standard Quantity Expected (norm) Computed Δ Status
ISO 9613-1:1993 Table 1 Air attenuation @ 10 degC, 70 %, 1 kHz 3.66 dB/km (+/-0.01 dB/km) 3.658 dB/km -0.002 dB/km
ISO 9613-1:1993 Table 1 Air attenuation @ 0 degC, 20 %, 2 kHz 34.6 dB/km (+/-0.1 dB/km) 34.64 dB/km 0.04 dB/km
ISO 9613-2:1996 Table 2 Atmospheric attenuation grid, 6 conditions x 8 octave bands, dB/km all 48 cells within half a printed digit worst residual 0.939 x tolerance 0.939 x
ISO 9613-2:1996 Eq. (7) Geometrical divergence Adiv = 20 lg(d/d0) + 11 at 100 m 51 dB (+/-0 dB) 51 dB 0 dB
ISO 9613-2:1996 Table 3 Ground b'(0) porous limit -> Agr(250 Hz) = 2(-1.5 + 10.1) 17.2 dB (+/-0 dB) 17.2 dB 0 dB
ISO 9613-2:1996 clause 7.4 Single-edge diffraction saturates at the 20 dB cap 20 dB (+/-0 dB) 20 dB 0 dB
ISO 9613-2:1996 clause 7.4 Double-edge diffraction saturates at the 25 dB cap 25 dB (+/-0 dB) 25 dB 0 dB
ISO 9612:2009 Annex D Task-based LEX,8h + U (welder day, case a) LEX,8h 84.3; U 2.7 dB LEX,8h 84.3; U 2.7 dB -0.01; +0.02 dB
ISO 9612:2009 Annex E Job-based LEX,8h + U (production line, 18 workers) LEX,8h 88.1; U 3.8 dB LEX,8h 88.2; U 3.8 dB +0.06; -0.03 dB
ISO 9612:2009 Annex F Full-day LEX,8h + U (forklift drivers) LEX,8h 90.1; U 3.4 dB LEX,8h 90.1; U 3.4 dB +0.02; +0.03 dB
Materials: absorption, airflow & impedance: 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 11654:1997 Annex A.1 Weighted absorption alpha_w (no indicator) 0.60 (class C, no indic.) 0.60 (class C, '') 0
ISO 11654:1997 Annex A.2 Weighted absorption alpha_w with M indicator 0.60(M) 0.60(M) 0
ISO 9053-2:2020 Annex A.3 Thermal boundary-layer thickness b 0.00183 m (+/-0.00001 m) 0.00183 m 0 m
ISO 9053-2:2020 Annex A.3 Effective ratio of specific heats kappa' 1.37 (+/-0.001) 1.37 0
ISO 10534-1:1996 Eqs (9)/(13)/(14) Absorption from standing-wave ratio s=3 alpha 0.75 (+/-0), |r| 0.5 alpha 0.75, |r| 0.5000 0
ISO 10534-2 Eq. (17) / Annex D Two-microphone round trip recovers a known reflection factor abs(r - (0.3-0.4j)) = 0 (identity, +/-1e-9) 0 0
Scattering & diffusion (ISO 17497): 100% (14/14)
Standard Quantity Expected (norm) Computed Δ Status
ISO 17497-1:2004 Eq (2) Reference speed of sound at 20 C 343.2 m/s (+/-0 m/s) 343.2 m/s 0 m/s
ISO 17497-1:2004 Eqs (1)/(4)/(5) Scattering coefficient (synthetic chain) 0.0931 (+/-0) 0.0931 0
ISO 17497-1:2004 Annex A.5 Expanded uncertainty of scattering coefficient 0.02971 (+/-0) 0.02971 0
ISO 17497-2:2012 Formula (5) Directional diffusion coefficient (QRD, model arc) 0.1099 (+/-0) 0.1099 0
ISO 17497-2:2012 Formula (5) Directional diffusion coefficient (flat reference) 0.0049 (+/-0) 0.0049 0
ISO 17497-2:2012 Formula (7) Normalised diffusion coefficient (QRD, model arc) 0.1055 (+/-0) 0.1055 0
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 200 Hz band (low-band anchor) 0 (+/-0.015) 0 0
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 250 Hz band (low-band anchor) 0.01 (+/-0.015) 0.001 -0.009
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 315 Hz band (low-band anchor) 0.01 (+/-0.015) 0.002 -0.008
Cox & D'Antonio 3e App. B (2D BEM) Normalised diffusion d_n, N=7 QRD x 6 periods, 400 Hz band (low-band anchor) 0.01 (+/-0.015) 0.008 -0.002
ISO 17497-2:2012 Formula (8) Zenith area factor (radians convention) 1.57105 (+/-0) 1.57105 0
Cox & D'Antonio Eq (10.3) QRD deepest well depth (N=7, f0=500 Hz) 0.196 m (+/-0 m) 0.196 m 0 m
Cox & D'Antonio Eq (5.8) + ISO 17497-2 Formula (7) Flat-panel predicted normalised diffusion (self-reference zero) 0 (+/-0) 0 0
Cox & D'Antonio Eq (5.8) + ISO 17497-2 Formula (7) QRD predicted normalised diffusion at 2 kHz (above flat panel) 0.208 (+/-0) 0.208 0
In-situ road absorption (ISO 13472): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ISO 13472-1:2002 Clause 4.2 Geometrical-spreading factor Kr 0.6667 (+/-0) 0.6667 0
ISO 13472-1:2002 Annex A Maximum-sampled-area radius 1.3425 m (+/-0 m) 1.3425 m 0 m
ISO 13472-2:2010 Clause 5.4.1 Spot-tube upper usable frequency f_u 1989.4 Hz (+/-0.1 Hz) 1989.4 Hz 0 Hz
Precision sound power (ISO 3745 / 9614-3): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
ISO 3745:2012 Clause 10.5 EXAMPLE Expanded uncertainty U (k=2) 4.123 dB (+/-0.001 dB) 4.123 dB 0 dB
ISO 3745:2012 Eq (11) K1 background floor (6 dB edge band) 1.2563 dB (+/-0.0001 dB) 1.2563 dB 0 dB
ISO 3745:2012 Eq (16) Meteorological C1 at 23 C reference -0.1282 dB (+/-0.0001 dB) -0.1282 dB 0 dB
ISO 9614-3:2002 Eqs (5)/(8)/(9) Uniform-intensity LW recovery 80 dB (+/-0 dB) 80 dB 0 dB
Human vibration (ISO 8041 / 2631 / 5349): 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
ISO 8041-1:2017 Table B.8 Wk design-goal factor at 6,31 Hz 1.054 (+/-0.1%) 1.0544 0
ISO 8041-1:2017 Table B.9 Wm design-goal factor at 1,585 Hz 0.9342 (+/-0.1%) 0.9342 0
ISO 8041-1:2017 Table 1 Wh factor at the 500 rad/s reference 0.202 (+/-0.15%) 0.202 0
ISO 8041-1:2017 Table B.1 Wb design-goal factor at 6,31 Hz 1.054 (+/-0.1%) 1.0545 0
ISO 8041-1:2017 Table B.1 Wb design-goal factors at 1 / 100 Hz max rel dev ≤ 0,1 % 0.000267 0
ISO 8041-1:2017 Table 1 Wc factor at the 100 rad/s reference 0.5145 (+/-0.1%) 0.5145 0
ISO 8041-1:2017 Table 1 + Table B.3 Wd factors at the 100 rad/s reference and 1 Hz max rel dev ≤ 0,1 % 0.000162 0
ISO 8041-1:2017 Table B.4 We design-goal factor at 8 Hz 0.1263 (+/-0.1%) 0.1263 0
ISO 8041-1:2017 Table B.5 Wf design-goal factors at 0,1585 / 0,1 Hz max rel dev ≤ 0,1 % 0.000098 0
ISO 8041-1:2017 Table B.7 Wj design-goal factors at 6,31 / 8 Hz max rel dev ≤ 0,1 % 0.00001 0
ISO 8041-1:2017 Table 5 + Annex B All nine weightings inside the tolerance envelope (318 printed bands) 0 bands outside the Table 5 tolerances 0 0
ISO 5349-2:2001 Example E.2.1 Single-tool daily exposure A(8) 4.1 m/s^2 (+/-0.05 m/s^2) 4.14 m/s^2 0.037 m/s^2
ISO 5349-2:2001 Example E.3 Forestry three-task A(8) 3.6 m/s^2 (+/-0.05 m/s^2) 3.61 m/s^2 0.01 m/s^2
ISO 5349-1:2001 Eq. (C.1) VWF 10 % lifetime Dy at A(8)=7 4 yr (+/-0.1 yr) 4.04 yr 0.042 yr
Directive 2002/44/EC Art. 3 HAV/WBV action & limit values HAV 2.5/5.0, WBV 0.5/1.15 m/s^2 HAV 2.5/5.0, WBV 0.5/1.15 m/s^2 0
Speech intelligibility (ANSI S3.5-1997): 100% (24/24)
Standard Quantity Expected (norm) Computed Δ Status
ANSI S3.5-1997 Table 3 Band-importance function normalisation 1 (+/-0) 1 0
ASA WG S3-79 SII.C (clause 5.4) Equivalent masking spectrum level at 200 Hz -1.665 (+/-0.001) -1.665 0
ANSI S3.5-1997 clause 5.6 Equivalent disturbance in quiet at 5000 Hz -23.6 dB (+/-0.01 dB) -23.6 dB 0 dB
ASA WG S3-79 SII.C (clause 6) SII, noise 30 dB plus hearing loss 40 dB 0.218454 (+/-0.000001) 0.218454 0
ANSI S3.5-1997 Annex C.2 Worked example (SII.C / R CRAN, errata applied) 0.851375 (+/-0.000001) 0.851375 0
ANSI S3.5-1997 Table C.2 (errata) Masking Zi at 200 Hz, corrected worksheet 34.66 dB (+/-0.01 dB) 34.66 dB -0.002 dB
ASA WG S3-79 SII.C (clause 6) SII, standard speech in quiet, normal hearing 0.99582517 (+/-0.000001) 0.99582517 0
ASA WG S3-79 TO.TST Official one-third-octave test case 0.445 (+/-0.001) 0.445 0
ASA WG S3-79 TO_1.TST Official test case, alternative importance 0.438 (+/-0.001) 0.438 0
ASA WG S3-79 CB.TST Official critical-band test case 0.273 (+/-0.001) 0.273 0
ASA WG S3-79 CB_1.TST Critical band, alternative importance 0.41 (+/-0.001) 0.41 0
ASA WG S3-79 ECB.TST Official equally-contributing test case 0.278 (+/-0.001) 0.278 0
ASA WG S3-79 ECB_1.TST Equally contributing, alternative importance 0.41 (+/-0.001) 0.41 0
ASA WG S3-79 OCTAVE.TST Official octave-band test case 0.491 (+/-0.001) 0.491 0
ASA WG S3-79 OCTAVE_1.TST Octave band, alternative importance 0.323 (+/-0.001) 0.323 0
ANSI S3.5-1997 Annex C.1 Octave-band worked example (SII.C) 0.504 (+/-0.001) 0.504 0
ANSI S3.5-1997 Table C.1 (errata) Level distortion Li, row i = 5 1 (+/-0.01) 1 -0.004
ANSI S3.5-1997 Table 1 Critical-band importance normalisation 1 (+/-0) 1 0
ANSI S3.5-1997 Table 2 Equally-contributing importance, 17 x 0.0588 0.9996 (+/-0) 0.9996 0
ANSI S3.5-1997 Table 4 Octave-band importance normalisation 1 (+/-0) 1 0
ANSI S3.5-1997 Table 4 Octave-band Ui and Xi equal Table 3's 0 dB (+/-0 dB) 0 dB 0 dB
ANSI S3.5-1997 Table 1 Critical-band table, all 21 rows 0 (+/-0) 0 0
ASA WG S3-79 SII.C (clause 6) Flat-input cases, all four procedures 0 (+/-0.000000001) 0.0000000001 0
ANSI S3.5-1997 Table 3 Loud-effort speech spectrum level at 1 kHz 42.16 dB (+/-0 dB) 42.16 dB 0 dB
Objective intelligibility (STOI / ESTOI): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Taal et al. 2011 (Eq. 6, degenerate) STOI of a signal against itself = 1 (perfect correlation) 1 (+/-0.000001) 1 0
Jensen & Taal 2016 (Eq. 8, degenerate) ESTOI of a signal against itself = 1 (perfect spectral correlation) 1 (+/-0.000001) 1 0
Taal et al. 2011 (monotonicity with SNR) STOI rises from -15 dB to +25 dB SNR speech-shaped noise STOI(+25 dB) - STOI(-15 dB) > 0.2 0.462 (0.389 -> 0.851) 0
Impulsive-sound prominence (NT ACOU 112): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
NT ACOU 112:2002 Formula 1 Predicted prominence, OR=1000 dB/s, LD=30 dB 11.9542 (+/-0.0001) 11.9542 0
NT ACOU 112:2002 Formula 2 Adjustment KI to LAeq at prominence P=10 9 dB (+/-0 dB) 9 dB 0 dB
Impulsive-sound prominence (ISO/PAS 1996-3): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
ISO/PAS 1996-3:2022 3.5 Onset rate of a 30 dB ramp over 0.30 s 100 dB/s (+/-0 dB/s) 100 dB/s 0 dB/s
ISO/PAS 1996-3:2022 Formula 3 Adjustment KI of the ramp onset 7.1176 dB (+/-0 dB) 7.1176 dB 0 dB
Room noise (ANSI S12.2-2019): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ANSI S12.2-2019 Table 1 NC-40 curve, tangency self-consistency 40 (+/-0) 40 0
ANSI S12.2-2019 Table D.1 RC-31 Mark II curve, 63 Hz level 51 (+/-0) 51 0
ANSI S12.2-2019 clause D.4 RC-35 curve, mid-frequency average LMF 35 (+/-0) 35 0
Hearing threshold (ISO 7029 / ISO 389-7): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
ISO 7029:2017 Table 1 Median threshold, male age 60 at 4 kHz 20.209 dB (+/-0.001 dB) 20.208 dB 0 dB
ISO 7029:2017 Table 2 Upper spread su, male age 60 at 1 kHz 10.153 dB (+/-0.001 dB) 10.153 dB 0 dB
ISO 389-7:2005 Table 1 Free-field reference threshold at 1 kHz 2.4 dB (+/-0 dB) 2.4 dB 0 dB
Measurement uncertainty (GUM / Supplement 1): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
ISO/IEC Guide 98-3-1 clause 9.2 Combined uncertainty, additive model 2 (+/-0) 2 0
ISO/IEC Guide 98-3 Table G.2 Coverage factor, p=0.99, v=16 2.92 (+/-0.005) 2.921 0.001
ISO/IEC Guide 98-3 Annex G.4 Welch-Satterthwaite effective dof 40 (+/-0) 40 0
ISO/IEC Guide 98-3 Annex H.1 End-gauge combined uncertainty uc, nm 31.71 nm (+/-0.01 nm) 31.71 nm 0.001 nm
ISO/IEC Guide 98-3 Annex H.1 End-gauge expanded uncertainty U99, nm 92.1 nm (+/-0.1 nm) 92.1 nm 0.04 nm
ISO/IEC Guide 98-3 Annex H.2 (Table H.3) Correlated V/I/phi budget: uc(R), ohm 0.071 ohm (+/-0.001 ohm) 0.071 ohm 0 ohm
ISO/IEC Guide 98-3-1 Table 3 (clause 9.2.3) Seeded Monte Carlo, rectangular sum: 95 % interval endpoint +/-3.88 (u = 2.0) +/-3.886 (u = 2.002) 0.006
Noise-induced hearing loss (ISO 1999): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 1999:2013 Table D.2 Median NIPTS, 4 kHz, 90 dB, 20 yr 13 dB (+/-0.5 dB) 12.9 dB -0.057 dB
ISO 1999:2013 Table D.2 Worst-10 % NIPTS, 4 kHz, 90 dB, 20 yr 18 dB (+/-0.5 dB) 17.8 dB -0.239 dB
ISO 1999:2013 Table D.4 Worst-10 % NIPTS, 3 kHz, 100 dB, 40 yr 60 dB (+/-0.5 dB) 59.8 dB -0.172 dB
ISO 1999:2013 Annex C, Formulae (C.6) to (C.8) NIPTS at 1/2/4 kHz, 90 dB, 30 yr, Q = 10 % (annex inputs) 0, 9, 19 dB 0, 9, 19 dB 0 dB
ISO 1999:2013 Annex C, Formula (C.5) Compressed 4 kHz shift, Formula (1) with the annex's H = 36 dB 13.3 dB (+/-0.1 dB) 13.3 dB 0 dB
ISO 1999:2013 Annex C, Formula (C.11) Hearing threshold level with age and noise, 1/2/4 kHz mean, Q = 10 % 31.1 dB (+/-0.1 dB) 31.1 dB 0 dB
Multiple-shock whole-body vibration (ISO 2631-5): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 2631-5:2018 Formula 3 Daily acceleration dose, 5 x 40 m/s2 peaks 55.97 m/s2 (+/-0.01 m/s2) 55.97 m/s2 -0.002 m/s2
ISO 2631-5:2018 Formula C.3 Stress variable R, Annex C male example 1.22 (+/-0.01) 1.22 0
ISO 2631-5:2018 Formula C.5 Injury probability, Annex C male example 0.37 (+/-0.01) 0.37 -0.003
ISO 2631-5:2018 Annex C NOTE 5 Compressive stress Sd, female example 1.4 MPa (+/-0.01 MPa) 1.4 MPa -0.001 MPa
ISO 2631-5:2018 Annex C NOTE 5 Stress variable R, female example 0.97 (+/-0.01) 0.96 -0.008
ISO 2631-5:2018 Formula 1 vs Annex D Table D.1 Seat-to-spine transfer vs the 256 Hz digital filter (0,5-80 Hz) max abs(Formula 1 - filter) ≤ 0,04 0.001 0.001
Sound absorption in enclosed spaces (EN 12354-6): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
EN 12354-6:2003 Formula 1 Equivalent absorption area, Annex E bare room 2.26 m2 (+/-0.01 m2) 2.26 m2 0.003 m2
EN 12354-6:2003 Formula 5 Reverberation time, Annex E bare room 2.1 s (+/-0.1 s) 2.1 s 0.003 s
Prominent discrete tones (ECMA-418-1): 100% (2/2)
Standard Quantity Expected (norm) Computed Δ Status
ECMA-418-1:2024 Clause 10 Formula (2) Critical band at 1 kHz (f1,c / f2,c / dfc) dfc 162.2 Hz (+/-0.05 Hz); edges 922.2-1084.4 Hz dfc 162.22 Hz; edges 922.2-1084.4 Hz 0.017 Hz
ECMA-418-1:2024 Clause 11.6 Formula (14) Proximity spacing dfprox at 150 / 850 Hz 23 Hz @ 150 Hz; 63.8 Hz @ 850 Hz (+/-0.5 Hz) 23.0 Hz; 63.8 Hz +0.004; +0.044 Hz
Tonal audibility (ISO/PAS 20065): 100% (11/11)
Standard Quantity Expected (norm) Computed Δ Status
ISO/PAS 20065:2016 Formulae (12)-(14) Audibility at 137.3 Hz, Annex E spectrum 1 4.99 dB (+/-0.05 dB) 5.01 dB 0.022 dB
ISO/PAS 20065:2016 Formula (13) Masking index av at 137.3 / 592.2 Hz -2.02 dB @ 137.3 Hz; -2.4 dB @ 592.2 Hz (+/-0.005 dB) -2.017 dB; -2.400 dB +0.003; +0.000 dB
ISO/PAS 20065:2016 Formula (20) Mean audibility of the five spectra, Annex E 6.96 dB (+/-0.05 dB) 6.98 dB 0.018 dB
ISO/PAS 20065:2016 Formula (6) Mean narrow-band level LS from spectrum, Table E.1 49.22 dB (+/-0.02 dB) 49.22 dB -0.001 dB
ISO/PAS 20065:2016 Clause 6 Extended uncertainty U of the 137.3 Hz tone, Table E.2 2.79 dB (+/-0.02 dB) 2.8 dB 0.006 dB
ISO/PAS 20065:2016 Formulae (28)-(29) Extended uncertainty of the mean audibility, Annex E Step 4 1.38 dB (+/-0.01 dB) 1.38 dB -0.003 dB
ISO/PAS 20065:2016 Formula (8) Tone level LT from spectrum, Table E.1 67.96 dB (+/-0.02 dB) 67.96 dB -0.005 dB
ISO/PAS 20065:2016 Clause 5.3.8 Tone detection over the spectrum, Table E.1 tones at [118.4, 137.3, 158.8] Hz tones at [118.4, 137.3, 158.8] Hz exact
ISO/PAS 20065:2016 Clause 5.3.8 Step 3 Same-band FG combination inside analyze_spectrum, Table E.2 row 2 FG 72.15 dB (+/-0.02 dB) 72.15 dB -0.002 dB
ISO/PAS 20065:2016 Formula (17) Multi-tone FG combination, Table E.1 72.15 dB (+/-0.02 dB) 72.15 dB -0.002 dB
ISO/PAS 20065:2016 Formulae (18)/(19) Two-tone separation fD (DIN 45681 Annex J), 137.3 / 212 Hz fD(137.3)=24.09, fD(212)=21.0 Hz; Annex E pair combined fD(137.3)=24.09, fD(212)=21.00 Hz; Annex E pair combined exact
Psychoacoustic annoyance & fluctuation strength (Fastl & Zwicker): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Fastl & Zwicker Eqs (16.2)-(16.4) Psychoacoustic annoyance, worked (N5,S,F,R) tuple 37.0478 (+/-0.001) 37.0477 0
Fastl & Zwicker Eq (10.2) Fluctuation strength of AM broadband noise (60 dB, m=1, 4 Hz) 3.6943 vacil (+/-0.001 vacil) 3.6943 vacil 0 vacil
Fastl & Zwicker Ch. 10 / Osses et al. 2016 Fluctuation-strength calibration: 1 kHz / 60 dB / m=1 / 4 Hz AM tone 1 vacil (+/-0.05 vacil) 1 vacil 0 vacil
Electroacoustics: distortion & frequency response: 100% (20/20)
Standard Quantity Expected (norm) Computed Δ Status
IEC 60268-3:2013 (14.12.3.2) THD (rel. total RMS, the R convention the clause defines) 0.112853 (+/-0.0001) 0.112853 0
Closed-form harmonic synthesis (THD_F convention) THD (rel. fundamental, the widespread datasheet convention) 0.113578 (+/-0.0001) 0.113578 0
IEC 60268-5:2003 (20.3/20.4) Characteristic sensitivity level, 1 W into 8 ohm at 1 m (flat 90 dB) 90 dB (+/-0.000001 dB) 90 dB 0 dB
IEC 60268-5:2003 (21.2) Effective frequency range = -10 dB crossings (50 Hz / 18 kHz) 50 Hz / 18000 Hz (ref -10 dB crossings) 50.000 Hz / 18000.0 Hz -0.000 / -0.000 Hz
IEC 60268-3:2013 (14.12.5) 2nd-order harmonic distortion d2 (rel. total) 0.099361 (+/-0.0001) 0.099361 0
IEC 60268-4:2014 (11.1/11.3) Microphone sensitivity level, 12.5 mV/Pa -> 20 lg 0.0125 dB re 1 V/Pa -38.0618 dB (+/-0.00001 dB) -38.0618 dB 0 dB
IEC 60268-4:2014 (12.2) Effective frequency range = +/-3 dB tolerance crossings (40 Hz / 18 kHz) 40 Hz / 18000 Hz (+/-3 dB tolerance crossings) 40.000 Hz / 18000.0 Hz 0.000 / -0.000 Hz
IEC 60268-4:2014 (13.2.2) Directivity index of the ideal cardioid, 10 lg 3 dB (11.2.2 a integral) 4.771213 dB (+/-0.005 dB) 4.771214 dB 0 dB
IEC 60268-4:2014 (17.2) Equivalent noise level, 2.5 uV over 12.5 mV/Pa -> 200 uPa = 20 dB SPL 20 dB SPL (+/-0 dB SPL) 20 dB SPL 0 dB SPL
IEC 60268-3:2013 (14.12.7.2 g) Modulation distortion d_m,2 (arithmetic sideband sum over U_2,f2) 0.16 (+/-0.0001) 0.16 0
IEC 60268-3:2013 (14.12.7.2 h) Modulation distortion d_m,3 (arithmetic sideband sum over U_2,f2) 0.08 (+/-0.0001) 0.08 0
IEC 60268-3:2013 (14.12.8.1 a) Difference-frequency distortion d_d,2 (over U_2,ref = 2 U_2,f2) 0.03 (+/-0.0001) 0.03 0
IEC 60268-3:2013 (14.12.8.1 b) Difference-frequency distortion d_d,3 (arithmetic product sum) 0.04 (+/-0.0001) 0.04 0
IEC 60268-3:2013 (14.12.10) Total difference-frequency distortion (8 kHz / 11.95 kHz tones) 0.03605551 (+/-0.0001) 0.03605551 0
ITU-R BS.468-4 Table 1 Weighting network response at the 6.3 kHz peak (14.12.11 network) 12.2 dB (+/-0 dB) 12.2 dB 0 dB
IEC 60268-3:2013 (14.12.9) DIM of the 15 kHz / 3.15 kHz signal (Table 2, 9 products) 0.168819 (+/-0.0001) 0.168819 0
Bendat & Piersol, Random Data 4e H1 recovers a known first-order IIR gain at 1 kHz 0.8954 (+/-2%) 0.8954 0
Bendat & Piersol, Random Data 4e Ordinary coherence = 1 for a noiseless LTI path 1 (+/-0.001) 1 0
AES17-2015 (6.4.2 / 5.2.7) Idle channel noise, 1 kHz -20 dBFS tone (CCIR-RMS -5.63 dB offset) -25.63 dB (+/-0.01 dB) -25.63 dB 0 dB
AES17-2015 (6.4.1) Dynamic range, full-scale reference over a -40 dBFS residual at 2 kHz 40 dB (+/-0.6 dB) 40.41 dB 0.414 dB
Calibrated spectral analysis (Bendat & Piersol): 100% (12/12)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (5.67) White-noise autospectral density = sigma^2/(fs/2) 0.000977 (+/-3%) 0.000982 0
Bendat & Piersol, Random Data 4e Eq. (8.158) PSD random error = 1/sqrt(nd) (Monte Carlo, 100 seeded records) 0.1768 (+/-6%) 0.1764 0
Bendat & Piersol, Random Data 4e Eq. (8.163) 95% chi-square confidence interval coverage (Monte Carlo) 0.95 (+/-0.025) 0.94 -0.01
Bendat & Piersol, Random Data 4e Eqs. (9.55)/(6.39) Coherent output spectrum of a known-SNR path: gamma^2 = SNR/(1+SNR) 0.7191 (+/-0.03) 0.7255 0.006
Closed-form power-law slope (10*lg(2) dB/octave per unit exponent) Pink-noise PSD slope over 20 Hz - 20 kHz, dB/octave -3.0103 dB/oct (+/-0.05 dB/oct) -3.0116 dB/oct -0.001 dB/oct
IEC 60268-1:1985 Clause A2.1 / Table AII 5 ms burst of 5 kHz tone at 48 kHz: gate RMS = A/sqrt(2) (integral periods) 0.707107 (+/-0) 0.707107 0
Harris 1978 closed form (DFT-even Hann) Hann window ENBW = n*sum(w^2)/sum(w)^2 = 3/2 exactly 1.5 (+/-0) 1.5 0
Constant-power 1/n-octave kernel (closed form) 1/3-octave smoothed line level = Pdf/(f0(2^(1/6)-2^(-1/6))) 0.021592 (+/-1e-07%) 0.021592 0
Percival & Walden 1993, Table 382 Slepian taper concentration lambda_14(31, 8/31), quadruple-precision table 0.92943822082 (+/-0.000000000001) 0.92943822082 0
Percival & Walden 1993, Section 7.2 / Eq. (333) Multitaper white-noise density = sigma^2/(fs/2), NW=4, K=7 tapers 0.000977 (+/-3%) 0.000963 0
Percival & Walden 1993, Eq. (369a) tone calibration Multitaper 'spectrum' scaling reads a sinusoid peak at A^2/2 4.5 (+/-0.01%) 4.500003 0
Percival & Walden 1993, Eq. (370b) Adaptive multitaper dof -> 2K on white noise (weights -> uniform) 14 (+/-2%) 13.9847 -0.015
Multiple-input coherence (Bendat & Piersol): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Problem 7.2 / Eqs. (7.86)/(7.94) Conditioned coherent output of the 2nd input abs(G2y.1)^2/G22.1 = 4/3 exactly 1.333333333 (+/-0) 1.333333333 0
Bendat & Piersol, Random Data 4e Problem 7.2 / Eqs. (7.87)/(7.116) Partial coherence gamma^2_2y.1 = 2/15 and multiple coherence = 0.7 0.7 (+/-0) 0.7 0
Bendat & Piersol, Random Data 4e Eq. (7.35) with Eqs. (6.40)/(6.41) Multiple coherence of a known-SNR system: gamma^2_{y:x} = SNR/(1+SNR) 0.8889 (+/-0.03) 0.8913 0.002
Bendat & Piersol, Random Data 4e Eq. (7.117) Uncorrelated inputs: multiple coherence = sum of ordinary coherences 0 (+/-0.02) -0.0098 -0.01
Bendat & Piersol, Random Data 4e Eqs. (7.88)/(7.121) Output-power decomposition Gyy = sum of Gvi + Gnn (exact) 0 (+/-0.000000000001) 0 0
Time-frequency analysis (Bendat & Piersol): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (12.173) Spectrogram of an on-bin tone reads its mean square A^2/2 in every column 2 (+/-1e-07%) 2 0
Parseval + COLA identity (Hann taper, 75% overlap) Time-integrated STFT power = time-domain energy of an interior burst 0.236151 (+/-1e-10%) 0.236151 0
Bendat & Piersol, Random Data 4e Eqs. (11.128)-(11.130) Zoom FFT tone amplitude = demodulate-decimate-DFT chain, machine precision 0.7 (+/-1e-10%) 0.7 0
Correlation, time delay and envelope (B&P / Knapp & Carter): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Eq. (5.21) Cross-correlation peak of a 16-sample pure delay, samples 16 (+/-0.001) 16 0
Knapp & Carter 1976, Table I (PHAT) + sub-sample interpolation GCC-PHAT estimate of an exact 12.25-sample fractional delay, samples 12.25 (+/-0.005) 12.2483 -0.002
Bendat & Piersol, Random Data 4e Eq. (5.101) Cross-spectrum phase-slope estimate of the same fractional delay 12.25 (+/-0.001) 12.2498 0
Bendat & Piersol, Random Data 4e Eq. (8.120) BLWN autocorrelation coefficient at 3 samples vs sin(2piBt)/(2piBt) -0.1559 (+/-0.02) -0.1666 -0.011
Bendat & Piersol, Random Data 4e Example 8.5 Random error of the correlation peak: B=100 Hz, T=5 s, M/S=N/S=10 0.35 (+/-0.001) 0.3493 -0.001
Bendat & Piersol, Random Data 4e Table 13.1 Hilbert transform of cos recovers sin: max interior error 0 (+/-0) 0 0
Bendat & Piersol, Random Data 4e Eq. (13.27) Envelope of an AM waveform recovers 1 + mcos(2pifm*t) exactly 0 (+/-0) 0 0
Cepstrum, liftering and envelope spectrum (Havelock / B&P): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Havelock 2008 Ch. 27 Fig. 21 + Mercator series of ln(1+ae^{-jtheta}) Power-cepstrum height at the echo delay = reflection coefficient a 0.4 (+/-0) 0.4 0
Havelock 2008 Ch. 87 Eq. (14): complex cepstrum, series term n = 2 Second rahmonic of a reflection a = 0.4 equals -a^2/2 -0.08 (+/-0) -0.08 0
Bendat & Piersol, Random Data 4e Sec. 13.3 (Fig. 13.11) Envelope-spectrum line of an AM tone (A0 = 2, m = 0.35) at fm 0.7 (+/-0.002) 0.7 0
Time synchronous averaging (McFadden 1987): 100% (5/5)
Standard Quantity Expected (norm) Computed Δ Status
McFadden 1987 Eq. 8 / Eq. 9: comb filter |C(f)| at a harmonic k/T Comb-filter tooth height at a harmonic equals unity (any N) 1 (+/-0) 1 0
McFadden 1987 Eq. 8: comb filter one quarter-order from a tooth, N = 2 Comb-filter magnitude = 1/sqrt(2) at order 0.25 0.70710678 (+/-0) 0.70710678 0
McFadden 1987 Sec. 4 (Fig. 5): node selection, tone at 32.05 orders N = 20 places a comb node on 32.05 orders (|C| = 0), not the power-of-2 N = 32 0 (+/-0.0000000001) 0 0
McFadden 1987 Eq. 5: exact recovery, integer samples per period Noiseless periodic waveform (M = 256) recovered to machine precision 0 (+/-0.0000000001) 0 0
McFadden 1987 Sec. 1: asynchronous-noise variance reduced by 1/N Residual noise std of the average falls as sigma/sqrt(N), N = 64 0.125 (+/-15%) 0.12414 -0.001
Data qualification and Rice statistics (Bendat & Piersol): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
Bendat & Piersol, Random Data 4e Example 4.4 Reverse arrangements of the 20-observation sequence 86 (+/-0) 86 0
Bendat & Piersol, Random Data 4e Table A.6 Lower percentage point A(20; 0.975) at alpha = 0.05 64 (+/-0) 64 0
Bendat & Piersol, Random Data 4e Table A.6 Upper percentage point A(20; 0.025) at alpha = 0.05 125 (+/-0) 125 0
Wald & Wolfowitz 1940 exact run distribution Runs acceptance region for n1 = n2 = 10, alpha = 0.05: lower point 6 (+/-0) 6 0
Wald & Wolfowitz 1940 exact run distribution Runs acceptance region for n1 = n2 = 10, alpha = 0.05: upper point 15 (+/-0) 15 0
Bendat & Piersol, Random Data 4e Example 5.13 / Eq. (5.195) Zero-crossing rate of bandlimited noise (fc = 1 kHz, B = 400 Hz) 2013 (+/-1%) 2013 -0.551
Bendat & Piersol, Random Data 4e Example 5.12 Apparent frequency of low-pass noise (B = 2 kHz) = 0.577 B 1155 (+/-1%) 1159 3.911
Bendat & Piersol, Random Data 4e Example 5.14 / Eq. (5.206) Prob[positive peak > 4 sigma] of a narrow bandwidth record 0.000335 (+/-0.00001) 0.000334 0
Underwater acoustics (ISO 18405/17208/18406): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
ISO 18405:2017 / ISO 18406 Formula 7 Sound pressure level of a synthetic tone, dB re 1 µPa 123.0103 (+/-0.0001) 123.0103 0
ISO 18405:2017 / ISO 18406 Formulae 3-4 Sound exposure level of a 2 s tone, dB re 1 µPa²·s 120 (+/-0.001) 120 0
ISO 18406:2017 (6.4.2.1.3) Peak sound pressure level of a known waveform, dB re 1 µPa 129.5424 (+/-0.0001) 129.5424 0
ISO 17208-1:2016 Radiated noise level from RMS pressure and distance, dB re 1 µPa·m 46.0206 (+/-0.0001) 46.0206 0
ISO 17208-2:2019 (Formula 3) Lloyd's-mirror surface correction ΔL at a known k·d_s -3.5211 (+/-0.0001) -3.5211 0
ISO 18406:2017 (Formulae 8-9) Cumulative SEL of N identical strikes = SEL_ss + 10·lg(N) 196.9897 (+/-0) 196.9897 0
Underwater sound propagation (transmission loss): 100% (16/16)
Standard Quantity Expected (norm) Computed Δ Status
Mackenzie (1981) nine-term equation Speed of sound at 25 °C, 35 ‰, 1000 m (canonical check value), m/s 1550.744 m/s (+/-0.01 m/s) 1550.744 m/s 0 m/s
UNESCO/Chen-Millero vs Mackenzie Sound-speed agreement at 10 °C, 35 ‰, 1000 m (cross-model), m/s 1506.264 m/s (+/-1 m/s) 1506.524 m/s 0.261 m/s
Del Grosso (1974) vs Mackenzie Sound-speed agreement at 10 °C, 35 ‰, 1000 m (cross-model), m/s 1506.264 m/s (+/-1 m/s) 1506.313 m/s 0.049 m/s
Spherical spreading 20·lg(R) Geometrical spreading loss at R = 1000 m, dB 60 dB (+/-0 dB) 60 dB 0 dB
Thorp (1967) absorption Volume absorption α at 10 kHz (cold deep water), dB/km 1.1498 dB/km (+/-0 dB/km) 1.1498 dB/km 0 dB/km
Ainslie-McColm (1998) vs Francois-Garrison (1982) Absorption agreement at 10 kHz, 10 °C, 35 ‰, 0 m, pH 8, dB/km 0.9626 dB/km (+/-0.0963 dB/km) 0.9866 dB/km 0.024 dB/km
Francois-Garrison (1982) Part II Table IV Absorption α at 100 kHz, 10 °C, 35 ‰, 0 m, pH 8 (printed value), dB/km 33.6 dB/km (+/-0.05 dB/km) 33.63 dB/km 0.03 dB/km
Del Grosso refit (Wong-Zhu 1995 Table IV) c(t90 = 20 °C, S = 35, P = 500 bar) vs the printed check table, m/s 1603.679 m/s (+/-0.001 m/s) 1603.679 m/s 0 m/s
Wales-Heitmeyer (2002) ensemble spectrum Merchant-ship source PSD at 100 Hz (printed equation), dB re 1 µPa²/Hz 158.45 dB (+/-0.001 dB) 158.45 dB 0 dB
Passive sonar equation (Urick/Etter) Figure of merit SL − (NL − DI) − DT, dB 85 dB (+/-0 dB) 85 dB 0 dB
Seabed reflection (Rayleigh, normal incidence) Bottom loss at 90° grazing, sand ρ=1900 c=1650 over water, dB 9.0506 dB (+/-0 dB) 9.0506 dB 0 dB
Wenz wind noise (rule of fives) Wind spectrum level at 1 kHz, 5 kn (canonical anchor), dB re 1 µPa²/Hz 51.0206 dB (+/-0.0001 dB) 51.0206 dB 0 dB
Mellen thermal noise Thermal spectrum level at 50 kHz, 16.85 °C (physical), dB re 1 µPa²/Hz 19.3426 dB (+/-0 dB) 19.3426 dB 0 dB
JOMOPANS-ECHO ship source level Bulker V=13.5 kn L=211 m band level at 1 kHz (File S1 oracle), dB re 1 µPa m 161.394 dB (+/-0.01 dB) 161.394 dB 0 dB
UNESCO sound speed (EOS-80 canonical value) SVEL(S = 40, T68 = 40 °C, P = 1000 bar) vs Fofonoff & Millard 1983, m/s 1731.995 m/s (+/-0.02 m/s) 1732.004 m/s 0.009 m/s
Medwin (1975) sound speed (Ainslie Eqs. 1.2-1.4) ∂c/∂T at 10 °C, neglecting the bracketed terms, m/s per °C 3.5 m/s per °C (+/-0.001 m/s per °C) 3.5 m/s per °C 0 m/s per °C
Underwater propagation regimes (Weston flux theory): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Ainslie (2010) Table 9.1, medium sand Reflection loss gradient η from Equation (9.51), Np/rad 0.28 Np/rad (+/-0.005 Np/rad) 0.278 Np/rad -0.002 Np/rad
Ainslie (2010) Table 9.1, mud Reflection loss gradient η from Equation (9.53) at 1 Hz, Np/rad 0.021 Np/rad (+/-0.0005 Np/rad) 0.02073 Np/rad 0 Np/rad
Weston cylindrical spreading vs normal modes Range-averaged TL in an ideal 100 m waveguide at 100 Hz, 20-30 km, dB 58.949 dB (+/-1 dB) 58.399 dB -0.55 dB
Marine-mammal auditory weighting (NMFS / Southall): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
NMFS (2018) Appendix D worked example Weighting factor adjustment W(1 kHz) for high-frequency cetaceans, dB -37.55 dB (+/-0.01 dB) -37.545 dB 0.005 dB
NMFS (2024) v3.0 Table 5, otariid C C recomputed as the peak of W(f) for the OW row (printed 1.37, corrected 1.36), dB 1.3643 dB (+/-0.0005 dB) 1.3643 dB 0 dB
Ainslie (2010) Equation (11.159), orca audiogram Hearing threshold at 50 kHz (third branch), dB re 1 µPa 51.2 dB (+/-0.05 dB) 51.199 dB -0.001 dB
Ainslie (2010) §11.4.6, orca versus salmon Noise-limited figure of merit (SL + TS − NL + AG − DT)/2, dB re m² 51 dB (+/-0 dB) 51 dB 0 dB
Underwater numerical propagation (modes / rays / PE): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
Normal modes vs ideal waveguide Fundamental horizontal wavenumber kr1 at 20 Hz, 100 m (analytic), rad/m 0.077662 rad/m (+/-0.0001 rad/m) 0.077662 rad/m 0 rad/m
Normal modes vs image-source oracle Absolute TL at 1 km in the ideal waveguide (converged image sum), dB 48.238 dB (+/-0.02 dB) 48.239 dB 0.001 dB
Ray tracing vs linear gradient Turning depth of a 10° ray, c = 1500 + 0.05z (circular arc), m 462.8 m (+/-1 m) 462.8 m 0 m
Parabolic equation vs free field PE transmission loss at 2 km, homogeneous medium (spherical spreading), dB 66.021 dB (+/-0.1 dB) 66.021 dB 0 dB
Aircraft noise (ICAO Annex 16 / IEC 61265): 100% (15/15)
Standard Quantity Expected (norm) Computed Δ Status
ECAC Doc 29 noise fraction (half path) Finite-segment correction ΔF for a perpendicular foot at the segment start, dB -3.0103 dB (+/-0.001 dB) -3.0103 dB 0 dB
ECAC Doc 29 single-event chain SEL of a long level flyover vs the infinite-path limit LE∞ + ΔI − Λ, dB 83.444 dB (+/-0.01 dB) 83.444 dB 0 dB
ECAC Doc 29 impedance adjustment (standard atmosphere) Acoustic-impedance adjustment of NPD data at 15 °C / 101.325 kPa (Eq. 4-6/4-7), dB 0.074 dB (+/-0.0005 dB) 0.0741 dB 0 dB
ECAC Doc 29 reference workbook (segment Λ) Lateral attenuation of a climbing segment vs the ECAC Vol 3 Part 1 workbook, dB 6.3769 dB (+/-0.01 dB) 6.3769 dB 0 dB
ECAC Doc 29 start-of-roll directivity (jet) ΔSOR behind a takeoff ground-roll segment vs the Vol 3 Part 1 workbook, dB 0.3196 dB (+/-0.01 dB) 0.3196 dB 0 dB
ECAC Doc 29 start-of-roll directivity (turboprop) ΔSOR behind a takeoff ground-roll segment (turboprop, Eq. 4-24b), dB 1.0943 dB (+/-0.01 dB) 1.0944 dB 0 dB
ECAC Doc 29 workbook event assembly (JETFDS/R03, behind SOR) Energy sum of the reference per-segment SELs vs the B-1 event total, dB 74.73 dB (+/-0.01 dB) 74.733 dB 0.003 dB
SAE ARP 5534 band-attenuation continuity SAE-Method δ_B at the 150 dB branch split (Eq. 7 vs Eq. 8), dB 123.95 dB (+/-0.01 dB) 123.953 dB 0.003 dB
EASA ANP database round-trip Interpolated NPD level at a tabulated node vs the published ANP value, dB 98.8 dB (+/-0 dB) 98.8 dB 0 dB
ECAC Doc 29 NPD interpolation Log-linear NPD level at the log-midpoint distance (Eq. 4-4), dB 97 dB (+/-0 dB) 97 dB 0 dB
SAE ARP 5534 pure-tone coefficient (ISO 9613-1) Mid-band α at 1 kHz, 25 °C, 70 % RH, 101.325 kPa, dB/m 0.006186 dB/m (+/-0 dB/m) 0.006186 dB/m 0 dB/m
ICAO Annex 16 Vol. I App. 2 Table A2-3 Perceived noisiness at SPL(b), 1 kHz band, in noys 1 (+/-0) 1 0
ICAO Doc 9501 ETM Vol. I Table 3-7 Tone correction of the turbofan example, dB 2 (+/-0) 2 0
ICAO Doc 9501 ETM Vol. I Table 4-4 Integrated-method reference EPNL, EPNdB 92.619 EPNdB (+/-0.01 EPNdB) 92.619 EPNdB 0 EPNdB
IEC 61265:1995 Table 1 Directional-response tolerance at 4 kHz / 90°, dB 2 dB (+/-0 dB) 2 dB 0 dB
Rotorcraft noise (ECAC Doc 32 / NORAH2): 100% (12/12)
Standard Quantity Expected (norm) Computed Δ Status
ECAC Doc 32 atmospheric attenuation (Table 4) ΔLa over a 1 km excess path at 1 kHz vs the NORAH2 guidance Table 4, dB 6.3 dB (+/-0.2 dB) 6.186 dB -0.114 dB
ECAC Doc 32 spherical spreading ΔLs at ten times the 60 m hemisphere reference distance (Eq. 24), dB -20 dB (+/-0 dB) -20 dB 0 dB
ECAC Doc 32 ground effect (rigid limit) ΔLg over a rigid surface at grazing incidence tends to +6 dB (Eq. 29), dB 6 dB (+/-1 dB) 6 dB 0.002 dB
ECAC Doc 32 propagation chain (NORAH2 prototype) LA of a single-hemisphere emission vs the NORAH2 prototype single-event history (R22 approach, 223.66 m slant), dB(A) 55.87 dB(A) (+/-0.1 dB(A)) 55.886 dB(A) 0.016 dB(A)
ECAC Doc 32 flight-condition interpolation (NORAH2 Eq. 8) Distance-scaled triangle blend of three uniform hemispheres, hand-checked, dB 97.0367 dB (+/-0.001 dB) 97.0364 dB 0 dB
ECAC Doc 32 flight-path kinematics (Eq. 17) Airspeed of a straight climbing track, 40 m/s ground speed at a 5° path angle, m/s 40.15279 m/s (+/-0.0001 m/s) 40.15279 m/s 0 m/s
ECAC Doc 32 retarded time (Eq. 22) Recorded-time delay at 100 m slant distance, r/c with c = 346.1 m/s, s 0.288934 s (+/-0.00001 s) 0.288934 s 0 s
ECAC Doc 32 single event (Eq. 27) SEL − LASmax of a constant-speed level flyover, 10·lg(π·d/V) closed form, dB 7.982 dB (+/-0.1 dB) 7.942 dB -0.04 dB
NORAH2 guidance mean ground plane (Eq. 36-40) Intercept of the plane fitted to a symmetric 20 m roofline, hand-checked, m 10 m (+/-0 m) 10 m 0 m
NORAH2 guidance mean flow resistivity (Eq. 41) Log-average of equal 1e4 and 1e6 Pa·s/m2 halves, hand-checked, Pa·s/m2 100000 Pa·s/m² (+/-0 Pa·s/m²) 100000 Pa·s/m² 0 Pa·s/m²
NORAH2 guidance diffraction at grazing (Eq. 42) Pure diffraction with the edge on the line of sight, 10·lg 3, dB 4.7712 dB (+/-0.0001 dB) 4.7712 dB 0 dB
NORAH2 guidance screening path difference (§A.4.5) Rubber-band delta over a 40 m hill, hand-checked geometry, m 4.2848 m (+/-0 m) 4.2848 m 0 m
CNOSSOS-EU road source (Directive 2002/49/EC Annex II): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
CIRCABC CNOSSOS-EU road emission test set Line power of the 60 committed cases of the 4 875-case published test set, 8 octave bands each, dB re 1 pW/m <= 0.01 dB on 480 published band levels (60 cases) 0.005 dB 0.005 dB
Directive (EU) 2021/1226 Annex pt (19)(a), Table F-1 Rolling and propulsion coefficients, 5 categories x 4 rows x 8 bands 160 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2021/1226 Annex pt (19)(b), Table F-4 Road-surface coefficients, 15 surfaces x 5 categories x (8 alpha + beta) 675 stored coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2015/996 Appendix F, Tables F-2 and F-3 Studded-tyre and junction coefficients, unchanged since 2015 36 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2015/996 Annex II 2.2.4 / 2.2.11 Sound power at v_ref = 70 km/h under reference conditions, dB re 1 pW exactly A_R,i,m and A_P,i,m 0 dB 0 dB
Directive (EU) 2021/1226 Annex pt (8)(b) Octave-band A-weighting AWC_f,i prescribed by 2.5.5, dB 8 values identical 0 mismatches 0 mismatches
Wind-turbine noise (IEC 61400-11): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
IEC 61400-11:2012 Formula 30 Critical bandwidth about a 500 Hz tone, Hz 117.255 Hz (+/-0 Hz) 117.255 Hz 0 Hz
IEC 61400-11:2012 Formula 26 Apparent sound power level of a single band, dB re 1 pW 148.5139 dB (+/-0.0001 dB) 148.5139 dB 0 dB
IEC 61400-11:2012 Formulae 31-34 Tonal audibility of a synthetic clean tone, dB 16.38 dB (+/-0.06 dB) 16.38 dB -0.001 dB
Porous & multilayer absorbers (Mechel / Bies / Cox & D'Antonio): 100% (20/20)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e App. D Table D.1 / Mechel 2e G.11 (2) Delany-Bazley normalised Zc at X = 0.1, real part 1.3241 (+/-0) 1.3241 0
Bies 5e App. D Table D.1 / Mechel 2e G.11 (2) Delany-Bazley normalised Zc at X = 0.1, imaginary part -0.4694 (+/-0) -0.4694 0
Miki 1990 Eqs. (30)-(34) Miki normalised wavenumber at f/sigma = 0.1, real part 1.4523 (+/-0) 1.4523 0
Johnson et al. 1987 / Cox & D'Antonio 3e Eq. (6.19) JCA static viscous limit j w rho_e -> sigma, Pa s/m2 20000 Pa s/m2 (+/-0.01%) 20000 Pa s/m2 0 Pa s/m2
Mechel 2e Sect. D.3 Eq. (1) Hard-backed layer: TMM vs -j Zc cot(kd), max rel deviation 0 (+/-0) 0 0
Lossless-layer limit (Mechel 2e Sect. D.3-D.4) Air cavity over a rigid wall at lambda/4: alpha 0 (+/-0) 0 0
Mechel 2e Sect. D.5 Maximum statistical absorption of a locally reacting plane 0.951 (+/-0.001) 0.951 0
Cox & D'Antonio 3e Eq. (7.9) Membrane resonance 60/sqrt(m d), m = 5 kg/m2, d = 5 cm, Hz 120 Hz (+/-2%) 119.85 Hz -0.15 Hz
Maa 1998 Fig. 5 / Cox & D'Antonio 3e Fig. 7.28 Microperforated panel (d=t=0.2 mm, b=2.5 mm, D=6 cm): peak alpha 0.95 (+/-0.05) 0.956 0.006
Maa 1998 Eqs. (5a)/(10) MPP peak absorption vs 4r/(1+r)^2 with Maa's printed resistance 4r/(1+r)^2 = 0.949 0.956 0.007
Allard & Atalla 2e Sect. 11.3.4 (Eq. 6.90), Table 6.1 glass wool Zwikker-Kosten decoupling frequency Fd, Hz 43.27 Hz (+/-0.005 Hz) 43.271 Hz 0.001 Hz
Allard & Atalla 2e Eq. (11.55), printed p. 253 (prose limit) Limp effective density at DC = apparent total density rho_t, kg/m3 31.1809 kg/m3 (+/-0.01%) 31.1809 kg/m3 0 kg/m3
Allard & Atalla 2e Eq. (11.55), printed p. 253 (prose limit) Heavy frame recovers the rigid-frame Zc (relative deviation) 0 (+/-0.00001) 0 0
Allard & Atalla 2e printed p. 254 (Doutres et al. 2007) Limp-frame bulk-modulus limit for air, kPa 20 kPa (+/-0.3 kPa) 20.27 kPa 0.265 kPa
Allard & Atalla 2e Eq. (6.110), Table 6.1 glass wool Frame lambda/4 resonance of a 10 cm layer, Hz 459.9 Hz (+/-0.05 Hz) 459.93 Hz 0.033 Hz
Allard & Atalla 2e Sect. 6.5.4 (Biot model output), pp. 124-125 Airborne compressional branch changes root at 495 Hz 495 Hz (+/-1%) 495.9 Hz 0.9 Hz
Allard & Atalla 2e Sect. 6.5.4 (Biot model output), pp. 124-125 Frame-borne velocity ratio Re(mu_b) at 1500 Hz (see ERRATA) 0.82 (+/-2%) 0.811 -0.009
Allard & Atalla 2e Sect. 6.6.3 (Biot model output), p. 129 Surface-impedance peak of a 5,6 cm layer, Hz 860 Hz (+/-2%) 863.5 Hz 3.5 Hz
Allard & Atalla 2e Sect. 11.3.4 (rigid-frame limit) Stiff, heavy frame recovers the JCA layer (max rel deviation) 0 (+/-0.0000001) 0.0000000034 0
Allard & Atalla 2e Eq. (6.107) vs Sect. 11.5 assembly Two independent derivations of Zs (max rel deviation) 0 (+/-0.0000000001) 0 0
Slow-sound perfect absorbers (Jimenez et al. Appl. Sci. 2017): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Jimenez et al. Appl. Sci. 2017 Eq. (9) Critical coupling: alpha at the design frequency (300 Hz, normal) 1 (+/-0.001) 1 0
Poiseuille limit (Stinson 1991) Slit: j w rho_s -> 12 eta / h^2 as w -> 0 (h = 1.2 mm) 153.3 Pa s/m2 (+/-0.1%) 153.3 Pa s/m2 0 Pa s/m2
Poiseuille limit (Stinson 1991) Square duct: j w rho -> 28.454 eta / w^2 as w -> 0 (w = 3 mm) 58.2 Pa s/m2 (+/-0.2%) 58.2 Pa s/m2 0 Pa s/m2
Program loudness (ITU-R BS.1770 / EBU R 128): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
ITU-R BS.1770-5 Annex 1 997 Hz sine at 0 dB FS on the left channel, LKFS -3.01 LKFS (+/-0.01 LKFS) -3.01 LKFS 0 LKFS
EBU Tech 3341:2023 Table 1 case 1 Integrated loudness of the -23 dBFS stereo sine, LUFS -23 LUFS (+/-0.1 LUFS) -22.99 LUFS 0.007 LUFS
EBU Tech 3341:2023 Table 1 case 5 Gated integrated loudness of the -26/-20/-26 dBFS steps, LUFS -23 LUFS (+/-0.1 LUFS) -22.98 LUFS 0.021 LUFS
EBU Tech 3341:2023 Table 1 case 6 Integrated loudness of the 5.0-channel sine (Table 3 weights), LUFS -23 LUFS (+/-0.1 LUFS) -23.02 LUFS -0.016 LUFS
EBU Tech 3341:2023 Table 1 case 15 True-peak level of the fs/4 sine at 0.5 FFS, dBTP -6 dBTP (+0.2/-0.4 dB) -6.02 dBTP -0.015 dBTP
EBU Tech 3341:2023 Table 1 case 19 True-peak level of the fs/4 sine at 1.41 FFS, dBTP 3 dBTP (+0.2/-0.4 dB) 3 dBTP 0.001 dBTP
EBU Tech 3342:2023 Table 1 case 1 Loudness range of the -20/-30 dBFS tone steps, LU 10 LU (+/-1 LU) 10 LU 0 LU
EBU Tech 3342:2023 Table 1 case 3 Loudness range of the -40/-20 dBFS tone steps, LU 20 LU (+/-1 LU) 20 LU 0 LU
2D FDTD wave simulation (Attenborough & Van Renterghem 2021, Ch. 4): 100% (4/4)
Standard Quantity Expected (norm) Computed Δ Status
Rigid rectangular box eigenfrequency Mode (1,1) of a 1.0 x 0.7 m rigid box, f = (c/2)*sqrt(1/lx^2 + 1/ly^2), Hz 299.06 Hz (+/-1.5 Hz) 298.91 Hz -0.153 Hz
Free-field pulse arrival delay Probe-to-probe delay of a pulse over 0.6 m of air, (r2 - r1)/c, ms 1.749 ms (+/-0.05 ms) 1.756 ms 0.007 ms
2D Kirchhoff-Helmholtz NTFF: monopole directivity Far-field pattern ripple of an enclosed line source, dB 0 dB (+/-0.2 dB) 0.044 dB 0.044 dB
2D Kirchhoff-Helmholtz NTFF: monopole level NTFF far-field level vs the 2D Green function A sqrt(2/(pi k)), dB 0 dB (+/-0.3 dB) 0.106 dB 0.106 dB
Swept-sine distortion & phase utilities (Farina / Novak): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Farina 2000 / Novak et al. 2015 (Chebyshev identity) 3rd-harmonic response H3 magnitude of a cubic polynomial, re a3/4 0.05 (+/-0.0005) 0.05001 0
Novak et al. 2015, JAES 63(10), Eqs. 18/49 Synchronized-sweep phase of H3 (Chebyshev: -sin(3wt)), rad 3.1416 rad (+/-0.005 rad) 3.1411 rad 0 rad
Farina 2000, AES 108th Conv. (THD from one sweep) THD(1 kHz) of the polynomial vs sqrt((a2/2)^2+(a3/4)^2)/(1+3a3/4) 0.06149 (+/-0.001) 0.06159 0
Farina 2000 (distortion rejected from the linear IR) THD floor of a purely linear path (gain 0.5), max over 100-2000 Hz 0 (+/-0.001) 0.00033 0
Bendat & Piersol, Random Data 4e Sec. 13.1.4 (Hilbert relation) Min-phase reconstruction of a strictly min-phase biquad, max err, rad 0 rad (+/-0 rad) 0 rad 0 rad
First-order allpass closed form (1-a^2)/(1+2a cos w+a^2) Group delay of the a = 0.5 allpass at w = pi/2, samples 0.6 (+/-0.00001) 0.6 0
All-pass decomposition of a pure latency (B&P Sec. 13.1.4) Excess group delay of a biquad delayed 7.25 samples, samples 7.25 (+/-0) 7.25 0
Spherical ground & barriers (Attenborough / Salomons / Bies): 100% (7/7)
Standard Quantity Expected (norm) Computed Δ Status
Attenborough 2e Eq. (2.40c) (spherical Q, hard-ground limit) abs(Q) as Z grows large (Rp -> 1 so (1 - Rp) -> 0 and Q -> 1) 1 (+/-0.000001) 1 0
Salomons 2001 Sec. 3.4 (two-ray field over a rigid ground) dL enhancement at small path difference (constructive, +6 dB) 6.0206 dB (+/-0.1 dB) 6.0205 dB 0 dB
Salomons 2001 Eq. (D.59) (plane-wave Rp, grazing incidence) Re(Rp) at grazing (hs, hr -> 0, cos(theta) -> 0 so Rp -> -1) -1 (+/-0.001) -1 0
Salomons 2001 Fig. D.3 (grassland ground dip, sigma = 200 kPa s/m2) Minimum dL for hs = hr = 2 m, r = 100 m (dip near 395 Hz), dB -12.7 dB (+/-0.3 dB) -12.72 dB -0.022 dB
Bies 5e Eq. (5.138) (Kurze-Anderson, N -> 0) Barrier attenuation at the shadow boundary N = 0 5 dB (+/-0 dB) 5 dB 0 dB
Bies 5e Eq. (5.138) (Kurze-Anderson, large-N slope) Delta(N=10) - Delta(N=1) vs the 10 lg(10) = 10 dB decade growth 10 dB (+/-0.5 dB) 9.8845 dB -0.116 dB
Attenborough 2e Eqs. (9.19)-(9.20) (rigid half-plane, shadow boundary) Exact thin-screen insertion loss at grazing (field halved, 6 dB) 6.0206 dB (+/-0.6 dB) 5.7932 dB -0.227 dB
Panel & aperture sound insulation (Bies / Hopkins / Cremer): 100% (17/17)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e Eq. 7.40 (mass law) 6 dB per octave (500 -> 1000 Hz) 6.0206 dB (+/-0.01 dB) 6.02 dB -0.001 dB
Bies 5e Eq. 7.40 (mass law) 6 dB per doubling of mass 6.0206 dB (+/-0.01 dB) 6.02 dB -0.001 dB
Bies 5e Eq. 7.42 (field incidence) One-third-octave correction 5.5 dB 5.5 dB (+/-0.001 dB) 5.5 dB 0 dB
Hopkins Eq. 2.201 / Bies Eq. 7.3 Coincidence frequency, 6 mm glass 2079 Hz (+/-3%) 2107.3639 Hz 28.364 Hz
Cremer Table 5.1 Thin-plate point impedance Z = 8 sqrt(B' m'') 2529.8221 N.s/m (+/-0 N.s/m) 2529.8221 N.s/m 0 N.s/m
Cremer Table 5.1 Infinite-beam mobility phase -45 deg -45 deg (+/-0 deg) -45 deg 0 deg
Hopkins Eq. 2.229 (Leppington/Maidanik) Radiation efficiency at f = 2 fc 1.4142 (+/-0) 1.4142 0
Bies Eq. 7.62 / Hopkins Eq. 4.73 Mass-air-mass resonance f0, empty cavity 76.9484 Hz (+/-0.5%) 76.8521 Hz -0.096 Hz
Bies Eq. 7.64 (double wall) Below f0 = mass law of the combined mass 11.6144 dB (+/-0 dB) 11.6144 dB 0 dB
Hopkins Eq. 4.92 (composite) 1 % open area caps R at 10 lg(S/Sa) 20 dB (+/-0.05 dB) 19.9996 dB 0 dB
Vigran Building Acoustics Eq. (3.109), printed p. 96 Flat 1 mm steel plate 1 m x 1 m, f(1,1) 4.9 Hz (+/-0.05 Hz) 4.93 Hz 0.033 Hz
Vigran Eqs. (3.113)/(3.115), printed p. 96 Corrugated 1 mm steel plate (H = 10 mm, L = 100 mm), f(2,2) 102 Hz (+/-0.1 Hz) 102.09 Hz 0.092 Hz
Bies 5e Eq. (7.59) / Vigran Eq. (6.112) Heckl coincidence-branch constant, dB (rho c = 414) -13.2 dB (+/-0.02 dB) -13.217 dB -0.017 dB
Bies 5e Eq. (7.60) / Vigran Eq. (6.112) Heckl recovery-branch constant, dB (rho c = 414) -23 dB (+/-0.2 dB) -23.16 dB -0.16 dB
Vigran Eq. (6.111) / Bies Eq. (7.38) Orthotropic diffuse integral below fc1 vs its exact mass-law form 6.287723 dB (+/-0.000001 dB) 6.287723 dB 0 dB
Hopkins Table A2, printed p. 608 h.fc products of 25 building-material rows, worst deviation 0 m.Hz (+/-0.06 m.Hz) 0.0476 m.Hz 0.048 m.Hz
Hopkins Eq. 4.99/4.101 (Gomperts slit) Transmission maximum at first resonance 1544.9615 Hz (+/-15 Hz) 1542.9615 Hz -2 Hz
Bending-wave plate-junction transmission (Cremer / Craik / Hopkins): 100% (6/6)
Standard Quantity Expected (norm) Computed Δ Status
Hopkins Eq. 5.12 (identical plates) X-junction corner tau12(0 deg) = 1/8 0.125 (+/-0) 0.125 0
Hopkins Eqs 5.12 + 5.6 (identical plates) X-junction corner angular average = 1/12 0.0833 (+/-0) 0.0833 0
Hopkins Eqs 5.12 + 5.6 (identical plates) L-junction corner angular average = 1/3 0.3333 (+/-0) 0.3333 0
Hopkins Eq. 5.14 (identical plates) In-line junction tau12(0 deg) = 1 1 (+/-0) 1 0
Hopkins Eq. 5.7 (SEA consistency) X-junction reciprocity tau_bar_12 / tau_bar_21 = chi 1.5 (+/-0) 1.5 0
Hopkins Eq. 5.116 (identical plates, fc_j = f_ref) X-junction vibration reduction index = 10 lg(12) 10.7918 dB (+/-0 dB) 10.7918 dB 0 dB
Atmospheric refraction (Salomons rays / GFPE): 100% (3/3)
Standard Quantity Expected (norm) Computed Δ Status
Salomons Sec. 4.4 (ray turning height, linear profile) Turning height of a 10 deg ray vs Rc(1 - cos theta0) (circular arc), m 26.457 m (+/-0.1 m) 26.457 m 0 m
Salomons Eq. (3.4) (GFPE vs spherical-wave ground effect, homogeneous) PE relative level at 500 m over grassland vs Weyl-Van der Pol, dB -16.368 dB (+/-0.5 dB) -16.402 dB -0.035 dB
Salomons Eq. (3.4) (GFPE hard ground vs two-ray, homogeneous) PE relative level at 500 m over a rigid ground vs the coherent two-ray, dB 5.997 dB (+/-0.6 dB) 5.593 dB -0.405 dB
Electroacoustics: 100% (9/9)
Standard Quantity Expected (norm) Computed Δ Status
Beranek & Mellow 2e Eq. (13.117) Piston resistance R1(x) = 1 - 2 J1(x)/x at x = 2ka = 2 0.423275 (+/-0.00001) 0.423275 0
Beranek & Mellow 2e Eq. (13.118) Piston reactance X1(x) = 2 H1(x)/x at x = 2ka = 2 0.646764 (+/-0.00001) 0.646764 0
Beranek & Mellow 2e Eq. (13.117) (low-frequency limit) R1 -> (ka)^2/2 as ka -> 0 (x = 0.02, ka = 0.01) 0.00005 (+/-0.01%) 0.00005 0
Beranek & Mellow 2e Eq. (4.151) Radiation mass M = 8 rho a^3 / 3 (a = 0.1 m, rho = 1.206) 0.003216 kg (+/-0 kg) 0.003216 kg 0 kg
Beranek & Mellow 2e Eq. (13.102), Table 14.1 First directivity null at ka sin(theta) = 3.8317 (first zero of J1) 0 (+/-0.000001) 0 0
Beranek & Mellow 2e §4.19 (half-space baffle) Directivity index DI -> 10 lg 2 = 3.01 dB as ka -> 0 3.0103 dB (+/-0.001 dB) 3.0103 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.21) Omnidirectional mic at Zs = -6 dB: L(H-M) <= L(H-L) - 4 dB 76 dB (+/-0 dB) 76 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.22) Cardioid mic (DM = -2 dB) at Zs = -6 dB: L(H-M) <= L(H-L) - 2 dB 78 dB (+/-0 dB) 78 dB 0 dB
Long, Architectural Acoustics 2e, Eq. (18.23) Number-of-open-microphones correction 10 lg Nm at Nm = 4 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
Industrial noise control: 100% (22/22)
Standard Quantity Expected (norm) Computed Δ Status
Bies 5e Eq. (8.111) Expansion-chamber peak TL = 10 lg[1 + (1/4)(m - 1/m)^2], m = 4 at kL = pi/2 6.5472 dB (+/-0 dB) 6.5472 dB 0 dB
Bies 5e Eq. (8.111) Expansion-chamber trough TL = 0 at kL = pi (chamber transparent) 0 dB (+/-0 dB) 0 dB 0 dB
Bies 5e Eq. (8.44) / Example 8.1 Quarter-wave tube tuning f = c/(4 l_e), l_e = 1.516 m -> 56.6 Hz 56.6 Hz (+/-0.1 Hz) 56.6 Hz 0.003 Hz
Bies 5e Eq. (8.46) Helmholtz resonance f0 = (c/2pi) sqrt(S/(l_e V)) (S=1e-4, l_e=0.02, V=1e-3) 122.067 Hz (+/-0 Hz) 122.067 Hz 0 Hz
Bies 5e Eq. (8.73) Side-branch TL = 20 lg abs(1 + rho c/(2 Sd Zb)) (QWT branch, closed form) 0.1638 dB (+/-0 dB) 0.1638 dB 0 dB
Bies 5e Eqs. (8.141)/(8.148) (four-pole insertion loss) Insertion loss = transmission loss for the anechoic reference Zs=Zr=rho c/S 6.2498 dB (= TL) 6.2498 dB 0 dB
Bies 5e Eq. (8.275) (Wells' plenum method) Plenum TL = -10 lg[S_out(cos0/pi r^2 + (1-a)/(Sw a))] (S_out=.1,r=1,Sw=20,a=.2) 12.8541 dB (+/-0 dB) 12.8541 dB 0 dB
Bies 5e Table 8.14 (ASHRAE end reflection, flush) Duct end reflection D = 200 mm at 125 Hz = 10 dB (table node) 10 dB (+/-0 dB) 10 dB 0 dB
Long 2e Eq. 13.1 with Table 13.5 (ASHRAE 1987 fan model) Forward-curved fan at Q_REF, P_REF, peak efficiency -> K_F + C_BFI at 500 Hz 38 dB (+/-0 dB) 38 dB 0 dB
Long 2e Eq. 14.12 with Table 14.2 (Reynolds lined rectangular duct) 18 x 12 in duct, 6 ft, 1 in lining at 1 kHz -> 1.77 (10/3)^0.695 6 dB 24.5203 dB (+/-0 dB) 24.5203 dB 0 dB
Long 2e Table 14.4 (ASHRAE 1995 lined flexible duct) 8 in diameter, 9 ft long -> 6/8/16/25/28/28/18 dB (table node) 0 dB (max |diff| over the 7 bands) 0 dB 0 dB
Long 2e Eq. 14.17 (branch power division) 25 per cent split with area-matched branches -> -10 lg 0.25 = 6.02 dB 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
Long 2e Table 14.9 (worked duct-borne sheet, supply path) Fan to room, 8 octave bands -> 52/42/30/18/9/-2/-2/-1 dB at the receiver 0 dB +/-1 (max |diff| over the 8 bands) 1 dB 1 dB
Long 2e Eqs. 13.27-13.33 (Reynolds diffuser self-noise) 24 x 24 in rectangular diffuser, 312 cfm, 0.05 in pd -> the 33/32/29/23/15 dB row of Table 14.9 0 dB +/-1 (max |diff| over the five bands) 0.8853 dB 0.885 dB
ASHRAE 2019 Applications Ch. 49 Table 9 Max neck velocity of a supply outlet for design RC(30) -> 2.2 m/s 2.2 m/s (+/-0 m/s) 2.2 m/s 0 m/s
Norton & Karczub 2e Eqs. 7.6/7.8/7.9 (problem 7.1 answer) 254 mm duct, steam, 200 m/s: (1,0) cut-on 812 Hz and k_x = -8.23 1/m 0 +/-1 (Hz, and 1/m x100) 0.591 0.591
Norton & Karczub 2e Eq. 7.10 (problem 7.2 answer) 0.65 x 0.4 m duct, 15 m/s: first three cut-on 264 / 428 / 503 Hz 0 Hz (max |diff| over the 3 modes) 0 Hz 0 Hz
Bies 5e Eqs. (7.103), (7.111) (enclosure, fully absorbing limit) Enclosure correction C -> 10 lg 0.3 = -5.23 dB as alpha_i -> 1 -5.2288 dB (+/-0.001 dB) -5.2288 dB 0 dB
Norton & Karczub 2e Eq. (4.101) (problem 4.21 answer) Double brick wall into an 8 x 9 x 3 m room -> NR 37.5/40.8/49.0/62.8/65.3/65.9 dB 0 dB +/-0.05 (max |diff| over the 6 bands) 0.0308 dB 0.031 dB
Norton & Karczub 2e 4.6/4.9 (problem 4.18 answer) Blower in a plant room to the operator room -> 72.3/60.4/41.4/41.0/33.8/30.7 dB 0 dB +/-0.1 (max |diff| over the 6 bands) 0.0682 dB 0.068 dB
Norton & Karczub 2e Eq. (4.115) (problem 4.16 answer) Lined compressor enclosure against NC-45 -> required TL 14.4/25.2/28.9/34.4/35.2/34.7/34.7/31.6 dB 0 dB +/-0.15 (max |diff| over the 8 bands) 0.1099 dB 0.11 dB
Norton & Karczub 2e Table 4.5 (constant-volume source power) Source in the intersection of two flat surfaces (Q = 4) -> +10 lg 4 = 6.02 dB 6.0206 dB (+/-0 dB) 6.0206 dB 0 dB
CNOSSOS-EU railway source (Directive 2002/49/EC Annex II): 100% (8/8)
Standard Quantity Expected (norm) Computed Δ Status
CIRCABC CNOSSOS-EU railway emission test set Line power of the 123 committed cases of the published test set, both source heights, 8 octave bands each, dB re 1 pW/m <= 0.01 dB on 984 published band levels (123 cases) 0.0055 dB 0.005 dB
Appendix G Tables G-1a and G-1b (roughness) Wheel roughness by brake type (3 x 32) and rail roughness by class (2 x 35), dB 166 coefficients identical 0 mismatches 0 mismatches
Directive (EU) 2021/1226 Annex pt (20)(b), Table G-2 Contact filter A3 for 5 wheel load and diameter combinations x 35 wavelengths, dB 175 coefficients identical 0 mismatches 0 mismatches
Appendix G Table G-3 (transfer functions) Track transfer (8 x 24), wheel transfer (4 x 24) and superstructure transfer (24), dB per axle 312 coefficients identical 0 mismatches 0 mismatches
Appendix G Tables G-4 to G-7 Impact roughness (35), traction (5 x 2 x 24), aerodynamic (2 x 24) and bridge (2 x 24), dB 371 coefficients identical 0 mismatches 0 mismatches
Annex II 2.3.2, formula (2.3.15) Horizontal dipole directivity along the track: 10 lg(0,01) at phi = 0 -20 dB (+/-0 dB) -20 dB 0 dB
Annex II 2.3.2, formulae (2.3.13) and (2.3.14) Aerodynamic speed law at v0 = 300 km/h reduces to Table G-6 verbatim 50 lg 2 = 15.051 dB on every band 0 dB 0 dB
Annex II 2.3.2, formula (2.3.12) Impact roughness at the tabulated joint density n_l = 0,01 per m Table G-4 verbatim 0 dB 0 dB

Tests & coverage — 48204 tests, 0 failures (✅ all green)
Python Version Tests Failures Coverage Status
macos-latest-3.13 8034 0 97.0% ✅ Passed
macos-latest-3.14 8034 0 97.0% ✅ Passed
ubuntu-latest-3.13 8034 0 97.0% ✅ Passed
ubuntu-latest-3.14 8034 0 97.0% ✅ Passed
windows-latest-3.13 8034 0 97.0% ✅ Passed
windows-latest-3.14 8034 0 97.0% ✅ Passed

Conformance harness: scripts/conformance_report.py · full CI artifacts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +1175 to +1198
gradients = np.geomspace(0.02, 0.4, 160)
_fig, ax = plt.subplots(figsize=(11, 6.2))
pairs = ((0.5, 1.5, COLOR_PRIMARY), (2.0, 2.0, COLOR_TERTIARY),
(2.0, 10.0, COLOR_SECONDARY))
for hs, hr, color in pairs:
ax.loglog(gradients,
[shadow_zone_distance(-float(g), hs, hr, ground_speed=340.0)
for g in gradients], color=color, linewidth=2.0,
label=f"hs / hr = {hs:g} / {hr:g} m", zorder=4)
ax.axvline(0.1, color=COLOR_MUTED, linestyle="--", linewidth=1.3, zorder=2)
ax.plot([0.1], [shadow_zone_distance(-0.1, 2.0, 2.0, ground_speed=340.0)],
"o", color=COLOR_FG, markersize=8, zorder=5)
ax.annotate("representative −0.1 s⁻¹: 233 m",
xy=(0.1, 233.2), xytext=(0.022, 90.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})
grad_log = 1.0 * np.log(101.0) / 10.0
ax.plot([grad_log],
[shadow_zone_distance(-grad_log, 2.0, 2.0, ground_speed=340.0)],
"s", color=COLOR_SECONDARY, markersize=8, zorder=5)
ax.annotate("the page's b = −1 m/s case: 109 m",
xy=(grad_log, 108.6), xytext=(0.12, 480.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

The second marker falls outside the swept gradient range.

gradients spans 0.02 to 0.4, but grad_log = ln(101)/10 ≈ 0.4615. The marker and its annotation at lines 1192-1198 therefore sit beyond the right-hand end of all three curves, and the autoscale stretches the x axis past the 0.4 limit the alt text in site/src/content/docs/environment/propagation/atmospheric-refraction.mdx describes (Rc from 17 km down to 850 m). Extend the sweep so the marker lands on the middle curve.

📈 Proposed fix
-    gradients = np.geomspace(0.02, 0.4, 160)
+    gradients = np.geomspace(0.02, 0.5, 160)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
gradients = np.geomspace(0.02, 0.4, 160)
_fig, ax = plt.subplots(figsize=(11, 6.2))
pairs = ((0.5, 1.5, COLOR_PRIMARY), (2.0, 2.0, COLOR_TERTIARY),
(2.0, 10.0, COLOR_SECONDARY))
for hs, hr, color in pairs:
ax.loglog(gradients,
[shadow_zone_distance(-float(g), hs, hr, ground_speed=340.0)
for g in gradients], color=color, linewidth=2.0,
label=f"hs / hr = {hs:g} / {hr:g} m", zorder=4)
ax.axvline(0.1, color=COLOR_MUTED, linestyle="--", linewidth=1.3, zorder=2)
ax.plot([0.1], [shadow_zone_distance(-0.1, 2.0, 2.0, ground_speed=340.0)],
"o", color=COLOR_FG, markersize=8, zorder=5)
ax.annotate("representative −0.1 s⁻¹: 233 m",
xy=(0.1, 233.2), xytext=(0.022, 90.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})
grad_log = 1.0 * np.log(101.0) / 10.0
ax.plot([grad_log],
[shadow_zone_distance(-grad_log, 2.0, 2.0, ground_speed=340.0)],
"s", color=COLOR_SECONDARY, markersize=8, zorder=5)
ax.annotate("the page's b = −1 m/s case: 109 m",
xy=(grad_log, 108.6), xytext=(0.12, 480.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})
gradients = np.geomspace(0.02, 0.5, 160)
_fig, ax = plt.subplots(figsize=(11, 6.2))
pairs = ((0.5, 1.5, COLOR_PRIMARY), (2.0, 2.0, COLOR_TERTIARY),
(2.0, 10.0, COLOR_SECONDARY))
for hs, hr, color in pairs:
ax.loglog(gradients,
[shadow_zone_distance(-float(g), hs, hr, ground_speed=340.0)
for g in gradients], color=color, linewidth=2.0,
label=f"hs / hr = {hs:g} / {hr:g} m", zorder=4)
ax.axvline(0.1, color=COLOR_MUTED, linestyle="--", linewidth=1.3, zorder=2)
ax.plot([0.1], [shadow_zone_distance(-0.1, 2.0, 2.0, ground_speed=340.0)],
"o", color=COLOR_FG, markersize=8, zorder=5)
ax.annotate("representative −0.1 s⁻¹: 233 m",
xy=(0.1, 233.2), xytext=(0.022, 90.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})
grad_log = 1.0 * np.log(101.0) / 10.0
ax.plot([grad_log],
[shadow_zone_distance(-grad_log, 2.0, 2.0, ground_speed=340.0)],
"s", color=COLOR_SECONDARY, markersize=8, zorder=5)
ax.annotate("the page's b = −1 m/s case: 109 m",
xy=(grad_log, 108.6), xytext=(0.12, 480.0), fontsize=10,
color=COLOR_FG,
arrowprops={"arrowstyle": "->", "color": COLOR_MUTED})
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/figures/environment.py` around lines 1175 - 1198, Extend the
`gradients` range in the plotting code so it includes `grad_log` (approximately
0.4615), while preserving the existing curve generation and marker placement.
Ensure the second marker and annotation fall within the swept curves and the
plotted x-axis range matches the documented Rc coverage.

Comment on lines +1456 to +1463
speeds = np.linspace(60.0, 350.0, 40)
for row, label, color in ((0, "Source A (0,5 m)", COLOR_PRIMARY),
(1, "Source B (4,0 m)", COLOR_SECONDARY)):
right.plot(speeds, [
total(railway_source_power(
RailwayVehicle(stock, flow_rate=96.0, speed=float(v)), track,
phi=90.0, psi=10.0).line_power[row]) for v in speeds],
color=color, linewidth=2.0, label=label, zorder=4)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

railway_source_power runs twice per speed.

The row loop wraps the list comprehension, so each of the 40 speeds evaluates railway_source_power once for row 0 and again for row 1. Compute the results once and index both rows.

♻️ Proposed refactor
     speeds = np.linspace(60.0, 350.0, 40)
+    powers = [railway_source_power(
+        RailwayVehicle(stock, flow_rate=96.0, speed=float(v)), track,
+        phi=90.0, psi=10.0).line_power for v in speeds]
     for row, label, color in ((0, "Source A (0,5 m)", COLOR_PRIMARY),
                               (1, "Source B (4,0 m)", COLOR_SECONDARY)):
-        right.plot(speeds, [
-            total(railway_source_power(
-                RailwayVehicle(stock, flow_rate=96.0, speed=float(v)), track,
-                phi=90.0, psi=10.0).line_power[row]) for v in speeds],
-            color=color, linewidth=2.0, label=label, zorder=4)
+        right.plot(speeds, [total(p[row]) for p in powers],
+                   color=color, linewidth=2.0, label=label, zorder=4)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
speeds = np.linspace(60.0, 350.0, 40)
for row, label, color in ((0, "Source A (0,5 m)", COLOR_PRIMARY),
(1, "Source B (4,0 m)", COLOR_SECONDARY)):
right.plot(speeds, [
total(railway_source_power(
RailwayVehicle(stock, flow_rate=96.0, speed=float(v)), track,
phi=90.0, psi=10.0).line_power[row]) for v in speeds],
color=color, linewidth=2.0, label=label, zorder=4)
speeds = np.linspace(60.0, 350.0, 40)
powers = [railway_source_power(
RailwayVehicle(stock, flow_rate=96.0, speed=float(v)), track,
phi=90.0, psi=10.0).line_power for v in speeds]
for row, label, color in ((0, "Source A (0,5 m)", COLOR_PRIMARY),
(1, "Source B (4,0 m)", COLOR_SECONDARY)):
right.plot(speeds, [total(p[row]) for p in powers],
color=color, linewidth=2.0, label=label, zorder=4)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/figures/environment.py` around lines 1456 - 1463, Update the plotting
loop around railway_source_power to compute and retain each speed’s result once,
then build each row’s plotted values by indexing the cached results rather than
invoking railway_source_power separately for row 0 and row 1.

Comment on lines +148 to +149
gives $b = 4 / \ln(101) = 0.87$ m/s — close to the "+1 m/s typical" above, and
`log_linear_sound_speed_profile(0.867)` duly returns 344.0 m/s at 10 m.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Read the declared default of ground_speed.
ast-grep run --pattern 'def log_linear_sound_speed_profile($$$)' --lang python src/phonometry/environment/propagation/refraction.py
rg -n -A6 'def log_linear_sound_speed_profile' src/phonometry/environment/propagation/refraction.py

Repository: jmrplens/phonometry

Length of output: 5600


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Candidate markdown lines =="
nl -ba site/src/content/docs/environment/propagation/atmospheric-refraction.mdx | sed -n '130,160p'

echo
echo "== All log_linear_sound_speed_profile calls in target doc =="
rg -n -C2 'log_linear_sound_speed_profile|344\.0|340\.0|ground_speed' site/src/content/docs/environment/propagation/atmospheric-refraction.mdx

echo
echo "== Nearby implementation behavior probe source =="
nl -ba src/phonometry/environment/propagation/refraction.py | sed -n '140,160p'
nl -ba src/phonometry/environment/propagation/refraction.py | sed -n '170,196p'

Repository: jmrplens/phonometry

Length of output: 228


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Candidate markdown lines =="
awk '{printf "%5d  %s\n", NR, $0}' site/src/content/docs/environment/propagation/atmospheric-refraction.mdx | sed -n '130,160p'

echo
echo "== All log_linear_sound_speed_profile calls in target doc =="
rg -n -C2 'log_linear_sound_speed_profile|344\.0|340\.0|ground_speed' site/src/content/docs/environment/propagation/atmospheric-refraction.mdx || true

echo
echo "== Nearby implementation behavior probe source =="
awk '{printf "%5d  %s\n", NR, $0}' src/phonometry/environment/propagation/refraction.py | sed -n '140,160p'
awk '{printf "%5d  %s\n", NR, $0}' src/phonometry/environment/propagation/refraction.py | sed -n '170,196p'

Repository: jmrplens/phonometry

Length of output: 9562


Specify ground_speed in the call that asserts 344.0 m/s.

log_linear_sound_speed_profile(0.867) only returns 344.0 m/s at 10 m with ground_speed=340.0. Add ground_speed=340.0 or state the default explicitly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/environment/propagation/atmospheric-refraction.mdx`
around lines 148 - 149, Update the log_linear_sound_speed_profile example call
to explicitly pass ground_speed=340.0 while preserving the assertion that it
returns 344.0 m/s at 10 m.

Comment on lines +67 to +74
<ThemeImage src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/diagram_wind_turbine_board.svg" alt="Two panels of the IEC 61400-11 ground-board microphone mounting. Plan: the circular board with its minimum diameter of 1.0 m dimensioned, the microphone at the centre with its axis pointing at the turbine, and the optional split line drawn off the centre line and parallel to that axis with its maximum 1 mm gap called out. Section: the board edge with a soil fillet levelling the gap underneath, the board thickness annotated as at least 12.0 mm for plywood or hard chip-board and at least 2.5 mm for metal, the capsule with its diaphragm in the plane of the board and a diameter of at most 13 mm, the primary windscreen drawn as a half sphere of open-cell foam about 90 mm across centred on the diaphragm, and a ghosted secondary windscreen tagged as usable only in high wind and only if its insertion loss is documented and corrected band by band" width="92%" />

| Requirement | Value | Clause |
| :--- | :--- | :--- |
| Measurement chain | IEC 61672 class 1; filters IEC 61260 class 1; 1/3 octaves from 20 Hz to 10 kHz determined simultaneously; narrowband over 20 Hz to 11 200 Hz | 6.1.2, 6.1.3, 6.1.4 |
| Microphone diaphragm | ≤ 13 mm, in a plane **normal to the board**, axis pointing at the turbine | 6.1.2, 6.1.5 |
| Board | Circular, diameter ≥ 1,0 m, acoustically hard: plywood or hard chip-board ≥ 12,0 mm, or metal ≥ 2,5 mm | 6.1.5 |
| A split board | Pieces level in one plane, gap < 1 mm, split off the centre line and **parallel** to the microphone axis | 6.1.5 |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Contradictory microphone-mounting geometry in both editions. The requirements table and the figure alt text describe two incompatible mountings for the same IEC 61400-11 6.1.5 board microphone: the alt text places the diaphragm in the plane of the board, the table places it in a plane normal to the board with the axis pointing at the turbine. The split-board row depends on which geometry is correct.

  • site/src/content/docs/environment/sources/wind-turbine-noise.mdx#L67-L74: align the "Microphone diaphragm" row at Line 72 with the alt-text geometry at Line 67, and re-check the split-board row at Line 74.
  • site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx#L69-L74: apply the same correction to the "Diafragma del micrófono" row at Line 74 and to the alt text at Line 69.
📍 Affects 2 files
  • site/src/content/docs/environment/sources/wind-turbine-noise.mdx#L67-L74 (this comment)
  • site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx#L69-L74
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/environment/sources/wind-turbine-noise.mdx` around
lines 67 - 74, Align the microphone-mounting geometry across both language
versions: in site/src/content/docs/environment/sources/wind-turbine-noise.mdx
lines 67-74, update the “Microphone diaphragm” row to match the figure alt
text’s diaphragm-in-board-plane geometry and re-check the split-board
requirement; in
site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx lines 69-74,
apply the same correction to the alt text and “Diafragma del micrófono” row,
ensuring both split-board descriptions remain consistent.

Comment on lines +211 to +221
<ThemeImage src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/wind_turbine_audibility_criterion.svg" alt="Two panels against tone frequency on a logarithmic axis from 20 Hz to 10 kHz. Left: the IEC 61400-11 critical bandwidth, flat near 100 Hz through the low and mid bands and opening steeply above 500 Hz to 2 kHz wide at 10 kHz, with the fixed 20 to 120 Hz low-frequency band of subclause 9.5.3 drawn as a separate flat segment over the 20 to 70 Hz candidate range and the ISO 1996-2 Table C.1 bandwidth drawn as a stepped dashed line for contrast. Right: the audibility criterion La, which falls from minus 2 dB at low frequency to minus 4.5 dB at 5 kHz, redrawn as the tonality a tone must reach to be audible and to be reportable, so a 100 Hz tone needs about half a decibel more emergence than a 1 kHz one" width="88%" />

*Left: two different critical bandwidths live on this page. The IEC 61400-11
Zwicker band is what `WindTurbineTonalityResult.critical_bandwidth` reports
(117.3 Hz for the 500 Hz tone of the fiche below), while
`environment.critical_bandwidth` is the **ISO 1996-2 Table C.1** band — 100 Hz
up to 500 Hz and 20 % of $f_c$ above it — used by the ISO tonal-audibility
route on the environmental-levels page. They are not interchangeable. Right: the
criterion is nearly flat below 500 Hz and then tightens, so a low-frequency tone
is judged on almost the same emergence as a mid-frequency one; the reportable
line sits 3 dB below the audible one everywhere.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

The audibility-criterion alt text reverses the frequency dependence in both editions. The plotted quantity is -la, which equals 2.01 dB at 100 Hz and 2.82 dB at 1 kHz, so the plot requires more tonality at 1 kHz. Both alt texts state the opposite, while both body captions agree with the plot.

  • site/src/content/docs/environment/sources/wind-turbine-noise.mdx#L211-L221: correct the alt text at Line 211 so the 1 kHz tone, not the 100 Hz tone, needs the larger emergence, and state the difference as about 0.8 dB.
  • site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx#L222-L233: apply the same correction to the alt text at Line 222.
📍 Affects 2 files
  • site/src/content/docs/environment/sources/wind-turbine-noise.mdx#L211-L221 (this comment)
  • site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx#L222-L233
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/environment/sources/wind-turbine-noise.mdx` around
lines 211 - 221, The audibility-criterion alt text reverses the frequency
dependence. Update the English alt text in
site/src/content/docs/environment/sources/wind-turbine-noise.mdx lines 211-221
and the Spanish alt text in
site/src/content/docs/es/environment/sources/wind-turbine-noise.mdx lines
222-233 so they state that the 1 kHz tone requires more emergence than the 100
Hz tone, by about 0.8 dB, while preserving the rest of the descriptions.

Comment on lines +230 to +239
Tres argumentos con nombre de esa llamada deciden si el número es defendible, y
ninguno es opcional en la práctica:

| Argumento | Por defecto | Qué hace |
| :--- | :--- | :--- |
| `dt` | `0.02` s | El intervalo de registro del historial de nivel. El método necesita de 10 ms a 25 ms; una rejilla más gruesa aplana la tasa de crecimiento ajustada y subestima $P$, que es la advertencia de dos párrafos más abajo hecha configurable |
| `calibration_offset` | `0.0` dB | Se suma al historial de nivel para tender un puente entre una escala digital y una calibrada: la diferencia entre el nivel conocido del calibrador y el nivel que este mismo procesado declara para la grabación de calibración. Mueve el $L_{Aeq}$ y el $L_{Aeq}$ ajustado, y deja $K_I$ en paz |
| `laeq` | `None` | Pasa el $L_{Aeq}$ medido sobre el periodo de evaluación en vez de dejar que se calcule a partir del extracto, que es lo que hace un informe real |
| `reference_pressure` | `2e-05` Pa | Solo se cambia para un medio distinto del aire |
| `onset_rate_method` | `'least_squares'` | El ajuste sobre la subida detectada |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Corrige el recuento de argumentos.

La línea 230 anuncia "Tres argumentos con nombre". La tabla de las líneas 233-239 enumera cinco: dt, calibration_offset, laeq, reference_pressure y onset_rate_method.

Ajusta el número al contenido de la tabla, o separa los tres argumentos determinantes de los dos restantes.

✏️ Corrección propuesta
-Tres argumentos con nombre de esa llamada deciden si el número es defendible, y
-ninguno es opcional en la práctica:
+Cinco argumentos con nombre de esa llamada deciden si el número es defendible, y
+los tres primeros no son opcionales en la práctica:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Tres argumentos con nombre de esa llamada deciden si el número es defendible, y
ninguno es opcional en la práctica:
| Argumento | Por defecto | Qué hace |
| :--- | :--- | :--- |
| `dt` | `0.02` s | El intervalo de registro del historial de nivel. El método necesita de 10 ms a 25 ms; una rejilla más gruesa aplana la tasa de crecimiento ajustada y subestima $P$, que es la advertencia de dos párrafos más abajo hecha configurable |
| `calibration_offset` | `0.0` dB | Se suma al historial de nivel para tender un puente entre una escala digital y una calibrada: la diferencia entre el nivel conocido del calibrador y el nivel que este mismo procesado declara para la grabación de calibración. Mueve el $L_{Aeq}$ y el $L_{Aeq}$ ajustado, y deja $K_I$ en paz |
| `laeq` | `None` | Pasa el $L_{Aeq}$ medido sobre el periodo de evaluación en vez de dejar que se calcule a partir del extracto, que es lo que hace un informe real |
| `reference_pressure` | `2e-05` Pa | Solo se cambia para un medio distinto del aire |
| `onset_rate_method` | `'least_squares'` | El ajuste sobre la subida detectada |
Cinco argumentos con nombre de esa llamada deciden si el número es defendible, y
los tres primeros no son opcionales en la práctica:
| Argumento | Por defecto | Qué hace |
| :--- | :--- | :--- |
| `dt` | `0.02` s | El intervalo de registro del historial de nivel. El método necesita de 10 ms a 25 ms; una rejilla más gruesa aplana la tasa de crecimiento ajustada y subestima $P$, que es la advertencia de dos párrafos más abajo hecha configurable |
| `calibration_offset` | `0.0` dB | Se suma al historial de nivel para tender un puente entre una escala digital y una calibrada: la diferencia entre el nivel conocido del calibrador y el nivel que este mismo procesado declara para la grabación de calibración. Mueve el $L_{Aeq}$ y el $L_{Aeq}$ ajustado, y deja $K_I$ en paz |
| `laeq` | `None` | Pasa el $L_{Aeq}$ medido sobre el periodo de evaluación en vez de dejar que se calcule a partir del extracto, que es lo que hace un informe real |
| `reference_pressure` | `2e-05` Pa | Solo se cambia para un medio distinto del aire |
| `onset_rate_method` | `'least_squares'` | El ajuste sobre la subida detectada |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/environment/assessment/impulsive-sound.mdx` around
lines 230 - 239, Corrige el encabezado introductorio de esta sección para que
coincida con los cinco argumentos enumerados en la tabla (`dt`,
`calibration_offset`, `laeq`, `reference_pressure` y `onset_rate_method`), o
separa explícitamente los tres argumentos determinantes de los otros dos sin
alterar la tabla.

Comment on lines +191 to +201
*Los dos procedimientos están lo bastante cerca como para confundirse y lo
bastante lejos como para discrepar sobre un espectro real. Una banda de 250 Hz
que sobresale 7,5 dB de la media aritmética de sus vecinas queda graduada con
$K_t = 3$ dB por el reglamento y **no levanta ningún indicador** en el método de
cribado de ISO, porque supera a cada vecina en menos de los 8 dB que ese método
exige. Esa es exactamente la situación que un informe de inspección tiene que
saber defender: el RD compara contra la **media** aritmética de las vecinas con
umbrales 8/5/3 dB y gradúa el resultado en 0/3/6; el método de cribado exige que
la banda supere a **ambas** vecinas en 15/8/5 dB y devuelve un indicador; el
método de ingeniería del anexo C trabaja dentro de una banda crítica y devuelve
un valor continuo.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

La razón que se da para el veredicto del cribado ISO no coincide con los números del ejemplo.

En el ejemplo del bloque de código, shallow[4] = 69,0 dB con vecinas de 61,0 dB (200 Hz) y 62,0 dB (315 Hz). La banda supera a la vecina de 200 Hz en exactamente 8,0 dB, no en menos de 8 dB. Lo que impide el indicador es la vecina de 315 Hz, superada solo en 7,0 dB.

Reformula la frase para nombrar la vecina que falla. Con 8,0 dB exactos en la otra vecina, el veredicto también depende de si el criterio es > o .

✏️ Corrección propuesta
-$K_t = 3$ dB por el reglamento y **no levanta ningún indicador** en el método de
-cribado de ISO, porque supera a cada vecina en menos de los 8 dB que ese método
-exige.
+$K_t = 3$ dB por el reglamento y **no levanta ningún indicador** en el método de
+cribado de ISO, porque solo supera a la vecina de 315 Hz en 7,0 dB, por debajo de
+los 8 dB que ese método exige a **ambas** vecinas.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
*Los dos procedimientos están lo bastante cerca como para confundirse y lo
bastante lejos como para discrepar sobre un espectro real. Una banda de 250 Hz
que sobresale 7,5 dB de la media aritmética de sus vecinas queda graduada con
$K_t = 3$ dB por el reglamento y **no levanta ningún indicador** en el método de
cribado de ISO, porque supera a cada vecina en menos de los 8 dB que ese método
exige. Esa es exactamente la situación que un informe de inspección tiene que
saber defender: el RD compara contra la **media** aritmética de las vecinas con
umbrales 8/5/3 dB y gradúa el resultado en 0/3/6; el método de cribado exige que
la banda supere a **ambas** vecinas en 15/8/5 dB y devuelve un indicador; el
método de ingeniería del anexo C trabaja dentro de una banda crítica y devuelve
un valor continuo.*
*Los dos procedimientos están lo bastante cerca como para confundirse y lo
bastante lejos como para discrepar sobre un espectro real. Una banda de 250 Hz
que sobresale 7,5 dB de la media aritmética de sus vecinas queda graduada con
$K_t = 3$ dB por el reglamento y **no levanta ningún indicador** en el método de
cribado de ISO, porque solo supera a la vecina de 315 Hz en 7,0 dB, por debajo de
los 8 dB que ese método exige a **ambas** vecinas. Esa es exactamente la situación que un informe de inspección tiene que
saber defender: el RD compara contra la **media** aritmética de las vecinas con
umbrales 8/5/3 dB y gradúa el resultado en 0/3/6; el método de cribado exige que
la banda supere a **ambas** vecinas en 15/8/5 dB y devuelve un indicador; el
método de ingeniería del anexo C trabaja dentro de una banda crítica y devuelve
un valor continuo.*
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/environment/assessment/spanish-noise-regulation.mdx`
around lines 191 - 201, Reformula el párrafo alrededor del ejemplo de 250 Hz
para indicar que el indicador no se activa porque la banda supera a la vecina de
315 Hz en solo 7 dB; no atribuyas el resultado a superar a cada vecina en menos
de 8 dB. Mantén explícita la condición del criterio de cribado para la
diferencia exacta de 8 dB respecto a la vecina de 200 Hz, usando la comparación
definida por el método.

Comment on lines +532 to +536
**Los cuatro modelos son pantallas bidimensionales infinitas.** Una barrera real
de longitud finita deja que el sonido la flanquee por los extremos, y dos
barreras paralelas a ambos lados de una vía se reflejan entre sí y pierden varios
decibelios de su prestación nominal. Ninguno de los dos efectos existe en ningún
modelo de esta página.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

El recuento de modelos contradice al resto de la página.

La línea 532 dice "Los cuatro modelos son pantallas bidimensionales infinitas". La página describe tres modelos de apantallamiento: Kurze-Anderson, semiplano rígido exacto y el coherente de cuatro caminos. Así lo enuncian la línea 261 ("tres niveles de apantallamiento"), la línea 394 ("Los tres modelos lado a lado") y el apartado "Cuál usar" de las líneas 514-521.

El "cuatro" parece arrastrado de "cuatro caminos".

✏️ Corrección propuesta
-**Los cuatro modelos son pantallas bidimensionales infinitas.** Una barrera real
+**Los tres modelos son pantallas bidimensionales infinitas.** Una barrera real
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**Los cuatro modelos son pantallas bidimensionales infinitas.** Una barrera real
de longitud finita deja que el sonido la flanquee por los extremos, y dos
barreras paralelas a ambos lados de una vía se reflejan entre sí y pierden varios
decibelios de su prestación nominal. Ninguno de los dos efectos existe en ningún
modelo de esta página.
**Los tres modelos son pantallas bidimensionales infinitas.** Una barrera real
de longitud finita deja que el sonido la flanquee por los extremos, y dos
barreras paralelas a ambos lados de una vía se reflejan entre sí y pierden varios
decibelios de su prestación nominal. Ninguno de los dos efectos existe en ningún
modelo de esta página.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/environment/propagation/ground-barriers.mdx` around
lines 532 - 536, Corrige el recuento en el párrafo que comienza con “Los cuatro
modelos” para indicar que son tres modelos, manteniendo sin cambios la
explicación sobre pantallas bidimensionales infinitas y los efectos no
representados.

Comment on lines +774 to +781
```python
for extra in (0.0, 0.001, 0.010, 0.050): # diferencia de recorrido sobre el borde [m]
libre = environment.Barrier(source_to_edge=100.0 + extra / 2,
edge_to_receiver=100.0 + extra / 2,
line_of_sight_clear=True)
print(round(float(environment.barrier_attenuation(libre, 200.0, [500.0])[0]), 3))
# 4,771, 4,728, 4,323, 1,845 dB a 500 Hz
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

El comentario de salida usa coma decimal, al contrario que el resto del archivo.

La línea 780 documenta la salida de print(round(...)) como 4,771, 4,728, 4,323, 1,845. Python imprime punto decimal. Los demás comentarios de salida de este archivo mantienen el punto: líneas 440-443, 457, 461 y 548.

Usa punto decimal en este comentario para que un lector pueda comparar con lo que imprime el fragmento.

✏️ Corrección propuesta
-# 4,771, 4,728, 4,323, 1,845 dB a 500 Hz
+# 4.771, 4.728, 4.323, 1.845 dB a 500 Hz
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```python
for extra in (0.0, 0.001, 0.010, 0.050): # diferencia de recorrido sobre el borde [m]
libre = environment.Barrier(source_to_edge=100.0 + extra / 2,
edge_to_receiver=100.0 + extra / 2,
line_of_sight_clear=True)
print(round(float(environment.barrier_attenuation(libre, 200.0, [500.0])[0]), 3))
# 4,771, 4,728, 4,323, 1,845 dB a 500 Hz
```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/src/content/docs/es/environment/propagation/outdoor-propagation.mdx`
around lines 774 - 781, Update the output comment following the loop to use
periods as decimal separators, matching Python’s print output and the file’s
other documented examples; change only the four documented values.

@jmrplens
jmrplens merged commit 4db9073 into main Aug 9, 2026
37 checks passed
@jmrplens
jmrplens deleted the docs/devices-and-environment-practice branch August 9, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: emission Sound power and source emission area: environmental area: noise control Silencers, barriers and noise control treatments documentation Improvements or additions to documentation figures Generated plots, diagrams and animations i18n English and Spanish translations site Documentation website

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant